Ejemplo n.º 1
0
 public function doAction()
 {
     global $I18N, $REX;
     // $REX is needed for update.inc.php
     $path = rex_path::addon($this->addonkey);
     $temppath = rex_path::addon('.new.' . $this->addonkey);
     if (($msg = $this->extractArchiveTo($temppath)) !== true) {
         return $msg;
     }
     // ---- include update.php
     if (file_exists($temppath . 'update.inc.php')) {
         try {
             require $temppath . 'update.inc.php';
         } catch (rex_install_functional_exception $e) {
             return $e->getMessage();
         }
         if (($msg = OOAddon::getProperty($this->addonkey, 'updatemsg', '')) != '') {
             return $msg;
         }
         if (!OOAddon::getProperty($this->addonkey, 'update', true)) {
             return $I18N->msg('package_no_reason');
         }
     }
     // ---- backup
     $assets = rex_path::addonAssets($this->addonkey);
     if (OOAddon::getProperty('install', 'backups')) {
         $archivePath = rex_path::addonData('install', $this->addonkey . '/');
         rex_dir::create($archivePath);
         $archive = $archivePath . strtolower(preg_replace('/[^a-z0-9-_.]/i', '_', OOAddon::getVersion($this->addonkey))) . '.zip';
         rex_install_archive::copyDirToArchive($path, $archive);
         if (is_dir($assets)) {
             rex_install_archive::copyDirToArchive($assets, $archive, 'assets');
         }
     }
     // ---- copy plugins to new addon dir
     foreach (OOPlugin::getRegisteredPlugins($this->addonkey) as $plugin) {
         $pluginPath = $temppath . '/plugins/' . $plugin;
         if (!is_dir($pluginPath)) {
             rex_dir::copy(rex_path::plugin($this->addonkey, $plugin), $pluginPath);
         } elseif (OOPlugin::isInstalled($this->addonkey, $plugin) && is_dir($pluginPath . '/files')) {
             rex_dir::copy($pluginPath . '/files', rex_path::pluginAssets($this->addonkey, $plugin));
         }
     }
     // ---- update main addon dir
     rex_dir::delete($path);
     rename($temppath, $path);
     // ---- update assets
     $origAssets = rex_path::addon($this->addonkey, 'assets');
     if (is_dir($origAssets)) {
         rex_dir::copy($origAssets, $assets);
     }
     OOAddon::setProperty($this->addonkey, 'version', $this->file['version']);
     rex_install_packages::updatedPackage($this->addonkey, $this->fileId);
 }
 function setProperty($plugin, $property, $value)
 {
     global $REX;
     // Plugin in Liste aufnehmen
     $plugins = OOPlugin::getRegisteredPlugins();
     if (!in_array($plugin, $plugins)) {
         $plugins[$plugin] = $plugin;
         OOAddon::setProperty('community', 'pluginlist', $plugins);
     }
     if (!isset($REX['ADDON']['plugins']['community'][$plugin])) {
         $REX['ADDON']['plugins']['community'][$plugin] = array();
     }
     // Property fuer das Plugin setzen
     $REX['ADDON']['plugins']['community'][$plugin][$property] = $value;
 }
Ejemplo n.º 3
0
        exit;
    }
}
// ----------------- OUT
if ($subpage == '') {
    // Vergleiche Addons aus dem Verzeichnis addons/ mit den Eintraegen in include/addons.inc.php
    // Wenn ein Addon in der Datei fehlt oder nicht mehr vorhanden ist, aendere den Dateiinhalt.
    if (count(array_diff($ADDONS, OOAddon::getRegisteredAddons())) > 0 || count(array_diff(OOAddon::getRegisteredAddons(), $ADDONS)) > 0) {
        if (($state = rex_generateAddons($ADDONS)) !== true) {
            $warning .= $state;
        }
    }
    // Vergleiche plugins aus dem Verzeichnis plugins/ mit den Eintraegen in include/plugins.inc.php
    // Wenn ein plugin in der Datei fehlt oder nicht mehr vorhanden ist, aendere den Dateiinhalt.
    foreach ($ADDONS as $addon) {
        if (count(array_diff($PLUGINS[$addon], OOPlugin::getRegisteredPlugins($addon))) > 0 || count(array_diff(OOPlugin::getRegisteredPlugins($addon), $PLUGINS[$addon])) > 0) {
            if (($state = rex_generateplugins($PLUGINS)) !== true) {
                $warning .= $state;
                break;
            }
        }
    }
    if ($info != '') {
        echo rex_info($info);
    }
    if ($warning != '' && $warning !== true) {
        echo rex_warning($warning);
    }
    if (!isset($user_id)) {
        $user_id = '';
    }
            $info = $I18N_COM->msg("plugin_activated", $pluginname);
        }
    } elseif ($activate == 0) {
        if (($warning = rex_deactivate_plugin($plugins, $pluginname)) === true) {
            $info = $I18N_COM->msg("plugin_deactivated", $pluginname);
        }
    } elseif ($uninstall == 1) {
        if (($warning = rex_uninstall_plugin($plugins, $pluginname)) === true) {
            $info = $I18N_COM->msg("plugin_uninstalled", $pluginname);
        }
    }
}
// ----------------- OUT
// Vergleiche plugins aus dem Verzeichnis plugins/ mit den Eintraegen in include/plugins.inc.php
// Wenn ein plugin in der Datei fehlt oder nicht mehr vorhanden ist, aendere den Dateiinhalt.
if (count(array_diff($plugins, OOPlugin::getRegisteredPlugins())) > 0 || count(array_diff(OOPlugin::getRegisteredPlugins(), $plugins)) > 0) {
    if (($state = rex_generateplugins($plugins)) !== true) {
        $warning = $state;
    }
}
if ($info != '') {
    echo rex_info($info);
}
if ($warning != '' && $warning !== true) {
    echo rex_warning($warning);
}
// ----------------- HELPPAGE
if ($function == 'help' && $pluginname != '') {
    $helpfile = rex_plugins_dir($pluginname) . 'help.inc.php';
    echo '<p class="rex-hdl">' . $I18N_COM->msg("plugin_help") . ' ' . $pluginname . '</p>
      <div class="rex-adn-hlp">';
 function getInstalledPlugins($addon)
 {
     $avail = array();
     foreach (OOPlugin::getRegisteredPlugins($addon) as $plugin) {
         if (OOPlugin::isInstalled($addon, $plugin)) {
             $avail[] = $plugin;
         }
     }
     return $avail;
 }
function rex_generatePlugins($plugins)
{
    global $REX;
    natsort($plugins);
    $content = "";
    foreach ($plugins as $cur) {
        if (!OOPlugin::isInstalled($cur)) {
            OOPlugin::setProperty($cur, 'install', 0);
        }
        if (!OOPlugin::isActivated($cur)) {
            OOPlugin::setProperty($cur, 'status', 0);
        }
        $content .= sprintf("%s = %d;\n%s = %d;\n\n", OOPlugin::getAsPropertyString($cur, 'install'), OOPlugin::getProperty($cur, 'install'), OOPlugin::getAsPropertyString($cur, 'status'), OOPlugin::getProperty($cur, 'status'));
    }
    $content .= sprintf("\$REX['ADDON']['pluginlist']['community'] = \"%s\";", implode(',', OOPlugin::getRegisteredPlugins()));
    // Da dieser Funktion öfter pro request aufgerufen werden kann,
    // hier die caches löschen
    clearstatcache();
    $file = rex_plugins_file();
    if (!rex_replace_dynamic_contents($file, $content)) {
        return 'Datei "' . $file . '" hat keine Schreibrechte';
    }
    return true;
}