Normalizes the values from the \ElggManifestParser object. This requires an \ElggPluginManifestParser class implementation as $this->parser. To add new parser versions, name them \ElggPluginManifestParserXX where XX is the version specified in the top-level tag's XML namespace.
Since: 1.8
 /**
  * @return string
  */
 private function getLicense()
 {
     /*
     			Apache-2.0
     			BSD-2-Clause
     			BSD-3-Clause
     			BSD-4-Clause
     			GPL-2.0
     			GPL-2.0+
     			GPL-3.0
     			GPL-3.0+
     			LGPL-2.1
     			LGPL-2.1+
     			LGPL-3.0
     			LGPL-3.0+
     			MIT
     */
     $replacements = array('GNU Public License version 2' => 'GPL-2.0', 'GNU General Public License version 2' => 'GPL-2.0', 'MIT (X11)' => 'MIT');
     $license = $this->manifest->getLicense();
     if (isset($replacements[$license])) {
         return $replacements[$license];
     }
     return $license;
 }
/**
 * Load and parse a plugin manifest from a plugin XML file.
 *
 * @example plugins/manifest.xml Example 1.8-style manifest file.
 *
 * @deprecated 1.8 Use ElggPlugin->getManifest()
 *
 * @param string $plugin Plugin name.
 * @return array of values
 */
function load_plugin_manifest($plugin)
{
    elgg_deprecated_notice('load_plugin_manifest() is deprecated by ElggPlugin->getManifest()', 1.8);
    $xml_file = elgg_get_plugins_path() . "{$plugin}/manifest.xml";
    try {
        $manifest = new ElggPluginManifest($xml_file, $plugin);
    } catch (Exception $e) {
        return false;
    }
    return $manifest->getManifest();
}
}
if ($action) {
    $url = elgg_http_add_url_query_elements($actions_base . $action, array('plugin_guids[]' => $plugin->guid));
    $options['href'] = $url;
}
$action_button = elgg_view('output/url', $options);
// Display categories and make category classes
$categories = $plugin->getManifest()->getCategories();
$categories_html = '';
if ($categories) {
    $base_url = elgg_get_site_url() . "admin/plugins?category=";
    foreach ($categories as $category) {
        $css_class = preg_replace('/[^a-z0-9-]/i', '-', $category);
        $classes[] = "elgg-plugin-category-{$css_class}";
        $url = $base_url . urlencode($category);
        $friendly_category = htmlspecialchars(ElggPluginManifest::getFriendlyCategory($category));
        $categories_html .= "<li class=\"elgg-plugin-category prm\"><a href=\"{$url}\">{$friendly_category}</a></li>";
    }
}
$screenshots_html = '';
$screenshots = $plugin->getManifest()->getScreenshots();
if ($screenshots) {
    $base_url = elgg_get_plugins_path() . $plugin->getID() . '/';
    foreach ($screenshots as $screenshot) {
        $desc = elgg_echo($screenshot['description']);
        $alt = htmlentities($desc, ENT_QUOTES, 'UTF-8');
        $screenshot_img = elgg_view('output/img', array('src' => "admin_plugin_screenshot/{$plugin->getID()}/thumbnail/{$screenshot['path']}", 'alt' => $alt));
        $screenshot_link = elgg_view('output/url', array('href' => "admin_plugin_screenshot/{$plugin->getID()}/full/{$screenshot['path']}", 'text' => $screenshot_img, 'class' => 'elgg-lightbox'));
        $screenshots_html .= "<li class=\"elgg-plugin-screenshot prm ptm\">{$screenshot_link}</li>";
    }
}
Exemple #4
0
// @todo this could be cached somewhere after have the manifest loaded
$categories = array();
foreach ($installed_plugins as $id => $plugin) {
    if (!$plugin->isValid()) {
        if ($plugin->isActive()) {
            // force disable and warn
            elgg_add_admin_notice('invalid_and_deactivated_' . $plugin->getID(), elgg_echo('ElggPlugin:InvalidAndDeactivated', array($plugin->getId())));
            $plugin->deactivate();
        }
        continue;
    }
    $plugin_categories = $plugin->getManifest()->getCategories();
    if (isset($plugin_categories)) {
        foreach ($plugin_categories as $category) {
            if (!array_key_exists($category, $categories)) {
                $categories[$category] = ElggPluginManifest::getFriendlyCategory($category);
            }
        }
    }
}
asort($categories);
// we want bundled/nonbundled pulled to be at the top of the list
unset($categories['bundled']);
unset($categories['nonbundled']);
$common_categories = ['all' => elgg_echo('admin:plugins:category:all'), 'active' => elgg_echo('admin:plugins:category:active'), 'inactive' => elgg_echo('admin:plugins:category:inactive'), 'bundled' => elgg_echo('admin:plugins:category:bundled'), 'nonbundled' => elgg_echo('admin:plugins:category:nonbundled')];
$categories = array_merge($common_categories, $categories);
$category_form = elgg_view("admin/plugins/filter", ['category' => "all", 'category_options' => $categories]);
$activate_all = elgg_view('output/url', ['href' => 'action/admin/plugins/activate_all', 'text' => elgg_echo('admin:plugins:activate_all'), 'class' => 'elgg-button elgg-button-submit', 'confirm' => true]);
$deactivate_all = elgg_view('output/url', ['href' => 'action/admin/plugins/deactivate_all', 'text' => elgg_echo('admin:plugins:deactivate_all'), 'class' => 'elgg-button elgg-button-submit', 'confirm' => true]);
$buttons = elgg_format_element('div', ['class' => 'float-alt'], $activate_all . $deactivate_all);
echo elgg_format_element('div', ['class' => 'mbm'], $buttons . $category_form);
Exemple #5
0
 /**
  * Sets the hash that is used to uniquely identify this plugin
  */
 public function setHash()
 {
     $archiveName = $this->getFilenameOnFilestore();
     $zip = new ZipArchive();
     $result = $zip->open($archiveName);
     if ($result !== true) {
         return false;
     }
     for ($i = 0; $i < $zip->numFiles; $i++) {
         $filename = $zip->getNameIndex($i);
         if (stripos($filename, 'manifest.xml') !== false) {
             $manifest = $zip->getFromIndex($i);
             $id = substr($filename, 0, strpos($filename, '/'));
             break;
         }
     }
     $zip->close();
     if (!isset($manifest)) {
         return false;
     }
     try {
         $manifest = new ElggPluginManifest($manifest);
         $author = $manifest->getAuthor();
         $version = $manifest->getVersion();
         $this->hash = md5($id . $version . $author);
     } catch (Exception $e) {
         // skip invalid manifests
     }
 }
Exemple #6
0
$info[elgg_echo('admin:plugins:label:author')] = elgg_view('output/text', array('value' => $plugin->getManifest()->getAuthor()));
$url = $plugin->getManifest()->getWebsite();
if ($url) {
    $info[elgg_echo('admin:plugins:label:website')] = elgg_view('output/url', array('href' => $plugin->getManifest()->getWebsite(), 'text' => $plugin->getManifest()->getWebsite(), 'is_trusted' => true));
}
$info[elgg_echo('admin:plugins:label:copyright')] = elgg_view('output/text', array('value' => $plugin->getManifest()->getCopyright()));
$info[elgg_echo('admin:plugins:label:licence')] = elgg_view('output/text', array('value' => $plugin->getManifest()->getLicense()));
$site_path = elgg_get_root_path();
$path = $plugin->getPath();
if (0 === strpos($path, $site_path)) {
    $path = substr($path, strlen($site_path));
}
$info[elgg_echo('admin:plugins:label:location')] = htmlspecialchars($path);
$categories = (array) $plugin->getManifest()->getCategories();
array_walk($categories, function (&$value) {
    $value = htmlspecialchars(ElggPluginManifest::getFriendlyCategory($value));
});
$info[elgg_echo('admin:plugins:label:categories')] = implode(', ', $categories);
// assemble table
$rows = '';
foreach ($info as $name => $value) {
    if (trim($value) === '') {
        continue;
    }
    $rows .= "<tr><th>{$name}</th><td>{$value}</td></tr>";
}
$info_html = elgg_format_element('table', ['class' => 'elgg-table'], $rows);
$extra_info = elgg_echo("admin:plugins:info:" . $plugin->getID());
if ($extra_info !== "admin:plugins:info:" . $plugin->getID()) {
    $info_html .= "<div class='mtm'>" . $extra_info . "</div>";
}
function guessName($release, &$type)
{
    $filestorePath = $release->getFilenameOnFilestore();
    $filename = $release->originalfilename;
    //	var_dump($filename, $filestorePath);
    $extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
    if ($extension == 'gz') {
        if (strtolower(pathinfo(substr($filename, 0, strlen($filename) - 3), PATHINFO_EXTENSION)) == 'tar') {
            $extension = 'tar.gz';
        }
    }
    if (!in_array($extension, array('zip', 'tar.gz'))) {
        //		var_dump('BAD ext: ' . $extension);
        return false;
    }
    $resultId = false;
    $resultDir = false;
    /*
     * guess package name
     */
    if ($extension == 'zip') {
        $type = 'zip';
        $zip = new ZipArchive();
        if ($errorCode = $zip->open($filestorePath)) {
            $manifestsCnt = 0;
            $dirname = null;
            for ($i = 0; $i < $zip->numFiles; $i++) {
                $stat = $zip->statIndex($i);
                if (basename($stat['name']) == 'manifest.xml') {
                    $dirname = trim(pathinfo($stat['name'], PATHINFO_DIRNAME), '/\\');
                    if (!empty($dirname) && $dirname !== '.' && strpos($dirname, '/') === false && strpos($dirname, '\\') === false) {
                        $resultDir = $dirname;
                        if (preg_match('#^([^\\-]+)\\-(.+)\\-([0-9a-fA-F]{7}|master)$#', $resultDir, $matches)) {
                            $resultDir = $matches[2];
                        } elseif (strpos($resultDir, '-' . $release->version) === strlen($resultDir) - strlen('-' . $release->version)) {
                            // cut away version appended by git
                            $resultDir = substr($resultDir, 0, strlen($resultDir) - strlen('-' . $release->version));
                        }
                        $manifestsCnt++;
                        $stream = $zip->getStream($stat['name']);
                        if (is_resource($stream)) {
                            $content = stream_get_contents($stream);
                            try {
                                $manifest = new ElggPluginManifest($content);
                                $manifestArr = $manifest->getManifest();
                                if (isset($manifestArr['id'])) {
                                    $resultId = $manifestArr['id'];
                                }
                            } catch (Exception $e) {
                            }
                        }
                    }
                }
            }
            if ($manifestsCnt == 1) {
                if ($resultId) {
                    return $resultId;
                } else {
                    return $resultDir;
                }
            } else {
                return false;
                //no manifests or too many manifests in proper nesting
            }
        } else {
            var_dump('ERROR:', $errorCode);
            return false;
            // cant open archive
        }
    } else {
        // tar.gz
        $type = 'tar';
        try {
            $tar = new PharData($filestorePath);
        } catch (UnexpectedValueException $e) {
            return false;
        }
        $tarIterator = new RecursiveIteratorIterator($tar);
        $prefix = 'phar://' . $filestorePath . '/';
        $manifestsCnt = 0;
        $dirname = null;
        $tarIterator->rewind();
        /**
         * @var $file PharFileInfo
         */
        //		foreach ($tarIterator as $key => $file) {
        while ($tarIterator->valid()) {
            try {
                $file = $tarIterator->current();
            } catch (RuntimeException $e) {
                $tarIterator->next();
                continue;
            }
            $path = substr($file->getPathname(), strlen($prefix));
            if ($file->getFilename() == 'manifest.xml') {
                $dirname = trim(pathinfo($path, PATHINFO_DIRNAME), '/\\');
                if (!empty($dirname) && $dirname !== '.' && strpos($dirname, '/') === false && strpos($dirname, '\\') === false) {
                    $resultDir = $dirname;
                    if (preg_match('#^([^\\-]+)\\-(.+)\\-([0-9a-fA-F]{7}|master)$#', $resultDir, $matches)) {
                        $resultDir = $matches[2];
                    } elseif (strpos($resultDir, '-' . $release->version) === strlen($resultDir) - strlen('-' . $release->version)) {
                        // cut away version appended by git
                        $resultDir = substr($resultDir, 0, strlen($resultDir) - strlen('-' . $release->version));
                    }
                    $manifestsCnt++;
                    $content = $file->getContent();
                    try {
                        $manifest = new ElggPluginManifest($content);
                        $manifestArr = $manifest->getManifest();
                        if (isset($manifestArr['id'])) {
                            $resultId = $manifestArr['id'];
                        }
                    } catch (Exception $e) {
                    }
                }
            }
            $tarIterator->next();
        }
        if ($manifestsCnt == 1) {
            if ($resultId) {
                return $resultId;
            } else {
                return $resultDir;
            }
        } else {
            return false;
            //no manifests or too many manifests in proper nesting
        }
        return false;
    }
}