コード例 #1
0
ファイル: api_package.php プロジェクト: alsahh/redaxo
 /**
  * {@inheritdoc}
  */
 public function execute()
 {
     $function = rex_request('function', 'string');
     if (!in_array($function, ['install', 'uninstall', 'activate', 'deactivate', 'delete'])) {
         throw new rex_api_exception('Unknown package function "' . $function . '"!');
     }
     $packageId = rex_request('package', 'string');
     $package = rex_package::get($packageId);
     if ($function == 'uninstall' && !$package->isInstalled() || $function == 'activate' && $package->isAvailable() || $function == 'deactivate' && !$package->isAvailable() || $function == 'delete' && !rex_package::exists($packageId)) {
         throw new rex_api_exception('Illegal operation "' . $function . '" for package "' . $packageId . '"');
     }
     if ($package instanceof rex_null_package) {
         throw new rex_api_exception('Package "' . $packageId . '" doesn\'t exists!');
     }
     $reinstall = 'install' === $function && $package->isInstalled();
     $manager = rex_package_manager::factory($package);
     $success = $manager->{$function}();
     $message = $manager->getMessage();
     $result = new rex_api_result($success, $message);
     if ($success && !$reinstall) {
         $result->setRequiresReboot(true);
     }
     return $result;
 }
コード例 #2
0
ファイル: import.php プロジェクト: alsahh/redaxo
 private static function installAddons($uninstallBefore = false, $installDump = true)
 {
     $addonErr = '';
     rex_package_manager::synchronizeWithFileSystem();
     if ($uninstallBefore) {
         foreach (array_reverse(rex_package::getSystemPackages()) as $package) {
             $manager = rex_package_manager::factory($package);
             $state = $manager->uninstall($installDump);
             if ($state !== true) {
                 $addonErr .= '<li>' . $package->getPackageId() . '<ul><li>' . $manager->getMessage() . '</li></ul></li>';
             }
         }
     }
     foreach (rex::getProperty('system_addons') as $packageRepresentation) {
         $state = true;
         $package = rex_package::get($packageRepresentation);
         $manager = rex_package_manager::factory($package);
         if ($state === true && !$package->isInstalled()) {
             $state = $manager->install($installDump);
         }
         if ($state !== true) {
             $addonErr .= '<li>' . $package->getPackageId() . '<ul><li>' . $manager->getMessage() . '</li></ul></li>';
         }
         if ($state === true && !$package->isAvailable()) {
             $state = $manager->activate();
             if ($state !== true) {
                 $addonErr .= '<li>' . $package->getPackageId() . '<ul><li>' . $manager->getMessage() . '</li></ul></li>';
             }
         }
     }
     if ($addonErr != '') {
         $addonErr = '<ul class="rex-ul1">
         <li>
         <h3 class="rex-hl3">' . rex_i18n::msg('setup_513', '<span class="rex-error">', '</span>') . '</h3>
         <ul>' . $addonErr . '</ul>
         </li>
         </ul>';
     }
     return $addonErr;
 }
コード例 #3
0
ファイル: manager.php プロジェクト: DECAF/redaxo
 /**
  * Generates the package order.
  */
 public static function generatePackageOrder()
 {
     $early = [];
     $normal = [];
     $late = [];
     $requires = [];
     $add = function ($id) use(&$add, &$normal, &$requires) {
         $normal[] = $id;
         unset($requires[$id]);
         foreach ($requires as $rp => &$ps) {
             unset($ps[$id]);
             if (empty($ps)) {
                 $add($rp);
             }
         }
     };
     foreach (rex_package::getAvailablePackages() as $package) {
         $id = $package->getPackageId();
         $load = $package->getProperty('load');
         if ($package instanceof rex_plugin && !in_array($load, ['early', 'normal', 'late']) && in_array($addonLoad = $package->getAddon()->getProperty('load'), ['early', 'late'])) {
             $load = $addonLoad;
         }
         if ($load === 'early') {
             $early[] = $id;
         } elseif ($load === 'late') {
             $late[] = $id;
         } else {
             $req = $package->getProperty('requires');
             if ($package instanceof rex_plugin) {
                 $req['packages'][$package->getAddon()->getPackageId()] = true;
             }
             if (isset($req['packages']) && is_array($req['packages'])) {
                 foreach ($req['packages'] as $packageId => $reqP) {
                     $package = rex_package::get($packageId);
                     if (!in_array($package, $normal) && !in_array($package->getProperty('load'), ['early', 'late'])) {
                         $requires[$id][$packageId] = true;
                     }
                 }
             }
             if (!isset($requires[$id])) {
                 $add($id);
             }
         }
     }
     rex::setConfig('package-order', array_merge($early, $normal, array_keys($requires), $late));
 }
コード例 #4
0
ファイル: packages.php プロジェクト: staabm/redaxo
    // add package path for fragment loading
    if (is_readable($folder . 'fragments')) {
        rex_fragment::addDirectory($folder . 'fragments' . DIRECTORY_SEPARATOR);
    }
    // add addon path for class-loading
    if (is_readable($folder . 'lib')) {
        rex_autoload::addDirectory($folder . 'lib');
    }
    if (is_readable($folder . 'vendor')) {
        rex_autoload::addDirectory($folder . 'vendor');
    }
    $autoload = $package->getProperty('autoload');
    if (is_array($autoload) && isset($autoload['classes']) && is_array($autoload['classes'])) {
        foreach ($autoload['classes'] as $dir) {
            $dir = $package->getPath($dir);
            if (is_readable($dir)) {
                rex_autoload::addDirectory($dir);
            }
        }
    }
}
// now we actually include the addons logic
foreach ($packageOrder as $packageId) {
    $package = rex_package::get($packageId);
    // include the addon itself
    if (is_readable($package->getPath(rex_package::FILE_BOOT))) {
        $package->includeFile(rex_package::FILE_BOOT);
    }
}
// ----- all addons configs included
rex_extension::registerPoint(new rex_extension_point('PACKAGES_INCLUDED'));
コード例 #5
0
ファイル: packages.php プロジェクト: eaCe/redaxo
<?php

/**
 * @package redaxo5
 */
echo rex_view::title(rex_i18n::msg('addons'), '');
$content = '';
// -------------- RequestVars
$subpage = rex_request('subpage', 'string');
// ----------------- HELPPAGE
if ($subpage == 'help') {
    $package = rex_package::get(rex_request('package', 'string'));
    $name = $package->getPackageId();
    $version = $package->getVersion();
    $author = $package->getAuthor();
    $supportPage = $package->getSupportPage();
    if (!is_file($package->getPath('help.php'))) {
        $content .= rex_view::info(rex_i18n::msg('package_no_help_file'));
    } else {
        ob_start();
        $package->includeFile('help.php');
        $content .= ob_get_clean();
    }
    $fragment = new rex_fragment();
    $fragment->setVar('title', rex_i18n::msg('package_help') . ' ' . $name, false);
    $fragment->setVar('body', $content, false);
    echo $fragment->parse('core/page/section.php');
    $credits = '';
    $credits .= '<dl class="dl-horizontal">';
    $credits .= '<dt>' . rex_i18n::msg('credits_name') . '</dt><dd>' . htmlspecialchars($name) . '</dd>';
    if ($version) {