17 use Elgg\Traits\Loggable;
 
   44         'friends_collections',
 
   62         'uservalidationbyemail',
 
   99         $this->context = 
$request->getContextStack();
 
  108         return $this->config->plugins_path;
 
  119     public function setBootPlugins(?array $plugins = 
null, 
bool $order_plugins = 
true): void {
 
  120         $this->cache->clear();
 
  121         if (!is_array($plugins)) {
 
  122             unset($this->boot_plugins);
 
  127         $this->boot_plugins = [];
 
  129         if ($order_plugins) {
 
  130             $plugins = $this->orderPluginsByPriority($plugins);
 
  133         foreach ($plugins as 
$plugin) {
 
  165             $dir = $this->getPath();
 
  172         $handle = opendir($dir);
 
  173         if ($handle === 
false) {
 
  178         while (($plugin_dir = readdir($handle)) !== 
false) {
 
  180             if (!str_starts_with($plugin_dir, 
'.') && is_dir($dir . $plugin_dir)) {
 
  181                 $plugin_dirs[] = $plugin_dir;
 
  202             $mod_dir = $this->getPath();
 
  204             $known_plugins = $this->find(
'all');
 
  211             $latest_priority = 0;
 
  212             foreach ($known_plugins as $i => 
$plugin) {
 
  217                     unset($known_plugins[$i]);
 
  221                 $id_map[
$plugin->getID()] = $i;
 
  228                 $current_priority = 
$plugin->getPriority();
 
  229                 if (($current_priority - $latest_priority) > 1) {
 
  233                 $latest_priority = $current_priority;
 
  236             $physical_plugins = $this->getDirsInDir($mod_dir);
 
  237             if (empty($physical_plugins)) {
 
  260                     unset($known_plugins[
$index]);
 
  271             foreach ($known_plugins as 
$plugin) {
 
  293                 $this->reindexPriorities();
 
  319             'subtype' => 
'plugin',
 
  320             'metadata_name_value_pairs' => [
 
  328         if (empty($plugins)) {
 
  346         $qb->select(
'MAX(CAST(md.value AS unsigned)) as max')
 
  347             ->join(
$qb->getTableAlias(), MetadataTable::TABLE_NAME, 
'md', 
"{$qb->getTableAlias()}.guid = md.entity_guid")
 
  357         return max(1, (
int) 
$data->max);
 
  368         if (isset($this->boot_plugins) && is_array($this->boot_plugins)) {
 
  369             return array_key_exists(
$plugin_id, $this->boot_plugins);
 
  377         return $plugin->hasRelationship(1, 
'active_plugin');
 
  390         $plugins_path = $this->getPath();
 
  393         if (file_exists(
"{$plugins_path}/disabled")) {
 
  394             if ($this->session_manager->isAdminLoggedIn() && $this->context->contains(
'admin')) {
 
  395                 $this->system_messages->addSuccessMessage($this->translator->translate(
'plugins:disabled'));
 
  401         $this->events->registerHandler(
'plugins_load', 
'system', [$this, 
'register']);
 
  402         $this->events->registerHandler(
'plugins_boot:before', 
'system', [$this, 
'boot']);
 
  403         $this->events->registerHandler(
'init', 
'system', [$this, 
'init']);
 
  404         $this->events->registerHandler(
'ready', 
'system', [$this, 
'ready']);
 
  405         $this->events->registerHandler(
'upgrade', 
'system', [$this, 
'upgrade']);
 
  406         $this->events->registerHandler(
'shutdown', 
'system', [$this, 
'shutdown']);
 
  417     public function register(): 
void {
 
  418         $plugins = $this->find(
'active');
 
  419         if (empty($plugins)) {
 
  425         foreach ($plugins as 
$plugin) {
 
  428             } 
catch (\Exception $ex) {
 
  442         $plugins = $this->find(
'active');
 
  443         if (empty($plugins)) {
 
  449         foreach ($plugins as 
$plugin) {
 
  452             } 
catch (\Exception $ex) {
 
  466         $plugins = $this->find(
'active');
 
  467         if (empty($plugins)) {
 
  473         foreach ($plugins as 
$plugin) {
 
  476             } 
catch (\Exception $ex) {
 
  490         $plugins = $this->find(
'active');
 
  491         if (empty($plugins)) {
 
  497         foreach ($plugins as 
$plugin) {
 
  499                 $plugin->getBootstrap()->ready();
 
  500             } 
catch (\Exception $ex) {
 
  514         $plugins = $this->find(
'active');
 
  515         if (empty($plugins)) {
 
  521         foreach ($plugins as 
$plugin) {
 
  523                 $plugin->getBootstrap()->upgrade();
 
  524             } 
catch (\Exception $ex) {
 
  538         $plugins = $this->find(
'active');
 
  539         if (empty($plugins)) {
 
  545         foreach ($plugins as 
$plugin) {
 
  547                 $plugin->getBootstrap()->shutdown();
 
  548             } 
catch (\Exception $ex) {
 
  565         $this->getLogger()->log(LogLevel::ERROR, $previous, [
 
  571         if (!$this->config->auto_disable_plugins) {
 
  579             $msg = $this->translator->translate(
 
  580                 'PluginException:CannotStart',
 
  585         } 
catch (PluginException $ex) {
 
  586             $this->getLogger()->log(LogLevel::ERROR, $ex, [
 
  601     public function find(
string $status = 
'active'): array {
 
  602         if (!$this->db || !$this->config->installed) {
 
  606         if ($status === 
'active' && isset($this->boot_plugins)) {
 
  608             return array_values($this->boot_plugins);
 
  611         $volatile_data_name = 
null;
 
  617             'subtype' => 
'plugin',
 
  624                 $options[
'relationship'] = 
'active_plugin';
 
  625                 $options[
'relationship_guid'] = $site_guid;
 
  626                 $options[
'inverse_relationship'] = 
true;
 
  629                 $volatile_data_name = 
'select:value';
 
  630                 $options[
'select'] = [MetadataTable::DEFAULT_JOIN_ALIAS . 
'.value'];
 
  638                     $subquery = 
$qb->subquery(
'entity_relationships', 
'active_er');
 
  639                     $subquery->select(
'active_er.guid_one')
 
  643                     return $qb->compare(
"{$main_alias}.guid", 
'NOT IN', $subquery->getSQL());
 
  656         $result = $this->orderPluginsByPriority($plugins, $volatile_data_name);
 
  658         if ($status === 
'active' && !isset($this->boot_plugins)) {
 
  660             $this->setBootPlugins(
$result, 
false);
 
  663         foreach ($plugins as 
$plugin) {
 
  681         $sorted_plugins = [];
 
  683         foreach ($plugins as 
$plugin) {
 
  685             if (!empty($volatile_data_name)) {
 
  699         return array_values(array_replace($priorities, $sorted_plugins));
 
  717         $plugins = $this->find(
'all');
 
  718         if (empty($plugins)) {
 
  724         $order = array_values($order);
 
  727         $missing_plugins = [];
 
  730         foreach ($plugins as 
$plugin) {
 
  733                 if (
$plugin->getPriority() !== 
null) {
 
  756         if (empty($missing_plugins)) {
 
  760         foreach ($missing_plugins as 
$plugin) {
 
  776         return $this->setPriorities([]);
 
  788         $old_priority = 
$plugin->getPriority() ?: 1;
 
  800         $qb = Update::table(MetadataTable::TABLE_NAME);
 
  805             $qb->set(
'value', 
'CAST(value AS UNSIGNED) - 1');
 
  808             $qb->set(
'value', 
'CAST(value AS UNSIGNED) + 1');
 
  812         if (!$this->db->updateData(
$qb)) {
 
if(! $user||! $user->canDelete()) $name
$id
Generic annotation delete action.
$plugin_id
Remove all user and plugin settings from the give plugin ID.
return[ 'admin/delete_admin_notices'=>['access'=> 'admin'], 'admin/menu/save'=>['access'=> 'admin'], 'admin/plugins/activate'=>['access'=> 'admin'], 'admin/plugins/activate_all'=>['access'=> 'admin'], 'admin/plugins/deactivate'=>['access'=> 'admin'], 'admin/plugins/deactivate_all'=>['access'=> 'admin'], 'admin/plugins/set_priority'=>['access'=> 'admin'], 'admin/security/security_txt'=>['access'=> 'admin'], 'admin/security/settings'=>['access'=> 'admin'], 'admin/security/regenerate_site_secret'=>['access'=> 'admin'], 'admin/site/cache/invalidate'=>['access'=> 'admin'], 'admin/site/flush_cache'=>['access'=> 'admin'], 'admin/site/icons'=>['access'=> 'admin'], 'admin/site/set_maintenance_mode'=>['access'=> 'admin'], 'admin/site/set_robots'=>['access'=> 'admin'], 'admin/site/theme'=>['access'=> 'admin'], 'admin/site/unlock_upgrade'=>['access'=> 'admin'], 'admin/site/settings'=>['access'=> 'admin'], 'admin/upgrade'=>['access'=> 'admin'], 'admin/upgrade/reset'=>['access'=> 'admin'], 'admin/user/ban'=>['access'=> 'admin'], 'admin/user/bulk/ban'=>['access'=> 'admin'], 'admin/user/bulk/delete'=>['access'=> 'admin'], 'admin/user/bulk/unban'=>['access'=> 'admin'], 'admin/user/bulk/validate'=>['access'=> 'admin'], 'admin/user/change_email'=>['access'=> 'admin'], 'admin/user/delete'=>['access'=> 'admin'], 'admin/user/login_as'=>['access'=> 'admin'], 'admin/user/logout_as'=>[], 'admin/user/makeadmin'=>['access'=> 'admin'], 'admin/user/resetpassword'=>['access'=> 'admin'], 'admin/user/removeadmin'=>['access'=> 'admin'], 'admin/user/unban'=>['access'=> 'admin'], 'admin/user/validate'=>['access'=> 'admin'], 'annotation/delete'=>[], 'avatar/upload'=>[], 'comment/save'=>[], 'diagnostics/download'=>['access'=> 'admin'], 'entity/chooserestoredestination'=>[], 'entity/delete'=>[], 'entity/mute'=>[], 'entity/restore'=>[], 'entity/subscribe'=>[], 'entity/trash'=>[], 'entity/unmute'=>[], 'entity/unsubscribe'=>[], 'login'=>['access'=> 'logged_out'], 'logout'=>[], 'notifications/mute'=>['access'=> 'public'], 'plugins/settings/remove'=>['access'=> 'admin'], 'plugins/settings/save'=>['access'=> 'admin'], 'plugins/usersettings/save'=>[], 'register'=>['access'=> 'logged_out', 'middleware'=>[\Elgg\Router\Middleware\RegistrationAllowedGatekeeper::class,],], 'river/delete'=>[], 'settings/notifications'=>[], 'settings/notifications/subscriptions'=>[], 'user/changepassword'=>['access'=> 'public'], 'user/requestnewpassword'=>['access'=> 'public'], 'useradd'=>['access'=> 'admin'], 'usersettings/save'=>[], 'widgets/add'=>[], 'widgets/delete'=>[], 'widgets/move'=>[], 'widgets/save'=>[],]
if(! $entity instanceof \ElggUser) $data
Plugin class containing helper functions for plugin activation/deactivation, dependency checking capa...
const PRIORITY_SETTING_NAME
static fromId(string $plugin_id, ?string $path=null)
Load a plugin object from its ID Create a new plugin entity if it doesn't exist.
Manages a global stack of strings for sharing information about the current execution context.
Entity table database service.
Persistent, installation-wide key-value storage.
disable(\ElggPlugin $plugin, \Exception $previous)
Disable a plugin upon exception.
find(string $status='active')
Returns an ordered list of plugins.
reindexPriorities()
Reindexes all plugin priorities starting at 1.
shutdown()
Run plugin shutdown handlers.
ready()
Run plugin ready handlers.
setPriorities(array $order)
Reorder plugins to an order specified by the array.
getMaxPriority()
Returns the highest priority of the plugins.
build()
Registers lifecycle events for all active plugins sorted by their priority.
getDirsInDir(?string $dir=null)
Returns a list of plugin directory names from a base directory.
setPriority(\ElggPlugin $plugin, int $priority)
Set plugin priority and adjust the priorities of other plugins.
init()
Initialize plugins.
__construct(protected PluginsCache $cache, protected Database $db, protected SessionManagerService $session_manager, protected EventsService $events, protected Translator $translator, protected ViewsService $views, protected Config $config, protected SystemMessagesService $system_messages, protected Invoker $invoker, Request $request)
Constructor.
generateEntities()
Discovers plugins in the plugins_path setting and creates \ElggPlugin entities for them if they don't...
orderPluginsByPriority(array $plugins=[], ?string $volatile_data_name=null)
Sorts plugins by priority.
isActive(string $plugin_id)
Returns if a plugin is active for a current site.
setBootPlugins(?array $plugins=null, bool $order_plugins=true)
Set the list of active plugins according to the boot data cache.
getPath()
Get the plugin path for this installation, ending with slash.
upgrade()
Run plugin upgrade handlers.
Database abstraction query builder.
Query builder for fetching data from the database.
const ELGG_IGNORE_ACCESS
elgg_call() flags
const ELGG_SHOW_DISABLED_ENTITIES
const ELGG_VALUE_INTEGER
Value types.
if($who_can_change_language==='nobody') elseif($who_can_change_language==='admin_only' &&!elgg_is_admin_logged_in()) $options
$config
Advanced site settings, debugging section.
foreach($recommendedExtensions as $extension) if(empty(ini_get('session.gc_probability'))||empty(ini_get('session.gc_divisor'))) $db
elgg_add_admin_notice(string $id, string $message)
Write a persistent message to the admin view.
elgg_get_entities(array $options=[])
Fetches/counts entities or performs a calculation on their properties.
endTimer(array $keys)
Ends the timer (when enabled)
trait Profilable
Make an object accept a timer.
beginTimer(array $keys)
Start the timer (when enabled)
if(parse_url(elgg_get_site_url(), PHP_URL_PATH) !=='/') if(file_exists(elgg_get_root_path() . 'robots.txt'))
Set robots.txt.