save() 공개 메소드

Save the plugin object. Make sure required values exist.
또한 보기: ElggObject::save()
public save ( ) : boolean
리턴 boolean
예제 #1
0
     if (array_key_exists($plugin_id, $id_map)) {
         $index = $id_map[$plugin_id];
         $plugin = $known_plugins[$index];
         // was this plugin deleted and its entity disabled?
         if ($plugin->enabled != 'yes') {
             $plugin->enable();
             $plugin->deactivate();
             $plugin->setPriority('last');
         }
         // remove from the list of plugins to disable
         unset($known_plugins[$index]);
     } else {
         // add new plugins
         // priority is force to last in save() if not set.
         $plugin = new ElggPlugin($plugin_id);
         $plugin->save();
     }
 }
 // everything remaining in $known_plugins needs to be disabled
 // because they are entities, but their dirs were removed.
 // don't delete the entities because they hold settings.
 foreach ($known_plugins as $plugin) {
     if ($plugin->isActive()) {
         $plugin->deactivate();
     }
     // remove the priority.
     $name = elgg_namespace_plugin_private_setting('internal', 'priority');
     remove_private_setting($plugin->guid, $name);
     $plugin->disable();
 }
 // get old enabled plugins
예제 #2
0
/**
 * Discovers plugins in the plugins_path setting and creates ElggPlugin
 * entities for them if they don't exist.  If there are plugins with entities
 * but not actual files, will disable the ElggPlugin entities and mark as inactive.
 * The ElggPlugin object holds config data, so don't delete.
 *
 * @todo Crappy name?
 * @return bool
 * @since 1.8.0
 * @access private
 */
function elgg_generate_plugin_entities()
{
    // @todo $site unused, can remove?
    $site = get_config('site');
    $dir = elgg_get_plugins_path();
    $db_prefix = elgg_get_config('dbprefix');
    $options = array('type' => 'object', 'subtype' => 'plugin', 'selects' => array('plugin_oe.*'), 'joins' => array("JOIN {$db_prefix}objects_entity plugin_oe on plugin_oe.guid = e.guid"), 'limit' => ELGG_ENTITIES_NO_VALUE);
    $old_ia = elgg_set_ignore_access(true);
    $old_access = access_get_show_hidden_status();
    access_show_hidden_entities(true);
    $known_plugins = elgg_get_entities_from_relationship($options);
    /* @var ElggPlugin[] $known_plugins */
    if (!$known_plugins) {
        $known_plugins = array();
    }
    // map paths to indexes
    $id_map = array();
    foreach ($known_plugins as $i => $plugin) {
        // if the ID is wrong, delete the plugin because we can never load it.
        $id = $plugin->getID();
        if (!$id) {
            $plugin->delete();
            unset($known_plugins[$i]);
            continue;
        }
        $id_map[$plugin->getID()] = $i;
    }
    $physical_plugins = elgg_get_plugin_ids_in_dir($dir);
    if (!$physical_plugins) {
        return false;
    }
    // check real plugins against known ones
    foreach ($physical_plugins as $plugin_id) {
        // is this already in the db?
        if (array_key_exists($plugin_id, $id_map)) {
            $index = $id_map[$plugin_id];
            $plugin = $known_plugins[$index];
            // was this plugin deleted and its entity disabled?
            if (!$plugin->isEnabled()) {
                $plugin->enable();
                $plugin->deactivate();
                $plugin->setPriority('last');
            }
            // remove from the list of plugins to disable
            unset($known_plugins[$index]);
        } else {
            // add new plugins
            // priority is force to last in save() if not set.
            $plugin = new ElggPlugin($plugin_id);
            $plugin->save();
        }
    }
    // everything remaining in $known_plugins needs to be disabled
    // because they are entities, but their dirs were removed.
    // don't delete the entities because they hold settings.
    foreach ($known_plugins as $plugin) {
        if ($plugin->isActive()) {
            $plugin->deactivate();
        }
        // remove the priority.
        $name = elgg_namespace_plugin_private_setting('internal', 'priority');
        remove_private_setting($plugin->guid, $name);
        $plugin->disable();
    }
    access_show_hidden_entities($old_access);
    elgg_set_ignore_access($old_ia);
    elgg_reindex_plugin_priorities();
    return true;
}
예제 #3
0
파일: plugins.php 프로젝트: eokyere/elgg
/**
 * Set a setting for a plugin.
 *
 * @param string $name The name - note, can't be "title".
 * @param mixed $value The value.
 * @param string $plugin_name Optional plugin name, if not specified then it is detected from where you are calling from.
 */
function set_plugin_setting($name, $value, $plugin_name = "")
{
    if (!$plugin_name) {
        $plugin_name = get_plugin_name();
    }
    $plugin = find_plugin_settings($plugin_name);
    if (!$plugin) {
        $plugin = new ElggPlugin();
    }
    if ($name != 'title') {
        // Hook to validate setting
        $value = trigger_plugin_hook('plugin:setting', 'plugin', array('plugin' => $plugin_name, 'name' => $name, 'value' => $value), $value);
        $plugin->title = $plugin_name;
        $plugin->access_id = ACCESS_PUBLIC;
        $plugin->save();
        $plugin->{$name} = $value;
        return $plugin->getGUID();
    }
    return false;
}