示例#1
0
function run()
{
    global $user;
    global $layout;
    global $DB;
    global $website;
    $out = '';
    $item = new extension();
    switch ($_REQUEST['act']) {
        case 'extension_info':
            echo '<iframe src="' . NAVIGATE_URL . '/plugins/' . $_REQUEST['extension'] . '/' . $_REQUEST['extension'] . '.info.html' . '" scrolling="auto" frameborder="0"  width="100%" height="100%"></iframe>';
            core_terminate();
            break;
        case 'disable':
            $extension = new extension();
            $extension->load($_REQUEST['extension']);
            $extension->enabled = 0;
            $ok = $extension->save();
            echo json_encode($ok);
            core_terminate();
            break;
        case 'enable':
            $extension = new extension();
            $extension->load($_REQUEST['extension']);
            $extension->enabled = 1;
            $ok = $extension->save();
            echo json_encode($ok);
            core_terminate();
            break;
            // TODO: rework favorite extensions as user's favorite (not global)
            /*
            case 'favorite':
                $extension = new extension();
                $extension->load($_REQUEST['extension']);
                $extension->favorite = intval($_REQUEST['value']);
                $ok = $extension->save();
                echo json_encode($ok);
                core_terminate();
                break;
            */
        // TODO: rework favorite extensions as user's favorite (not global)
        /*
        case 'favorite':
            $extension = new extension();
            $extension->load($_REQUEST['extension']);
            $extension->favorite = intval($_REQUEST['value']);
            $ok = $extension->save();
            echo json_encode($ok);
            core_terminate();
            break;
        */
        case 'remove':
            try {
                $extension = new extension();
                $extension->load($_REQUEST['extension']);
                $status = $extension->delete();
                echo json_encode($status);
            } catch (Exception $e) {
                echo $e->getMessage();
            }
            core_terminate();
            break;
        case 'options':
            $extension = new extension();
            $extension->load($_REQUEST['extension']);
            $status = null;
            if (isset($_REQUEST['form-sent'])) {
                $extension->load_from_post();
                $status = $extension->save();
            }
            $out = extensions_options($extension, $status);
            echo $out;
            core_terminate();
            break;
        case 'dialog':
            $extension = new extension();
            $extension->load($_REQUEST['extension']);
            $out = extensions_dialog($extension, $_REQUEST['function'], $_REQUEST);
            echo $out;
            core_terminate();
            break;
        case 'process':
            $extension = trim($_REQUEST['extension']);
            call_user_func("nvweb_" . $extension . "_plugin", $_REQUEST);
            core_terminate();
            break;
        case 'run':
            $extension = trim($_REQUEST['extension']);
            $extensions_allowed = $user->permission("extensions.allowed");
            if (!empty($extensions_allowed) && !in_array($extension, $extensions_allowed)) {
                $out = t(610, "Sorry, you are not allowed to execute this function.");
            } else {
                if (file_exists(NAVIGATE_PATH . '/plugins/' . $extension . '/run.php')) {
                    include_once NAVIGATE_PATH . '/plugins/' . $extension . '/run.php';
                    if (function_exists($extension . '_run')) {
                        eval('$out = ' . $extension . '_run();');
                    }
                }
            }
            break;
        case 'install_from_hash':
            $url = base64_decode($_GET['hash']);
            if (!empty($url) && $user->permission("extensions.install") == "true") {
                $error = false;
                parse_str(parse_url($url, PHP_URL_QUERY), $query);
                $tmp_file = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $query['code'] . '.zip';
                @core_file_curl($url, $tmp_file);
                if (@filesize($tmp_file) == 0) {
                    @unlink($tmp_file);
                    // core file curl failed, try using file_get_contents...
                    $tmp = @file_get_contents($url);
                    if (!empty($tmp)) {
                        @file_put_contents($tmp_file, $tmp);
                    }
                    unset($tmp);
                }
                if (@filesize($tmp_file) > 0) {
                    // uncompress ZIP and copy it to the extensions dir
                    @mkdir(NAVIGATE_PATH . '/plugins/' . $query['code']);
                    $zip = new ZipArchive();
                    $zip_open_status = $zip->open($tmp_file);
                    if ($zip_open_status === TRUE) {
                        $zip->extractTo(NAVIGATE_PATH . '/plugins/' . $query['code']);
                        $zip->close();
                        $layout->navigate_notification(t(374, "Item installed successfully."), false);
                    } else {
                        $layout->navigate_notification('ERROR ' . $zip_open_status, true, true);
                        $error = true;
                    }
                } else {
                    $layout->navigate_notification(t(56, 'Unexpected error'), true, true);
                    $error = true;
                }
                if ($error) {
                    $layout->add_content('
                        <div id="navigate_marketplace_install_from_hash_error">
                            <p>' . t(529, "It has not been possible to download from the marketplace.") . '</p>
                            <p>' . t(530, "You have to visit your Marketplace Dashboard and download the file, then use the <strong>Install from file</strong> button you'll find in the actions bar on the right.") . '</p>
                            <p>' . t(531, "Sorry for the inconvenience.") . '</p>
                            <a class="uibutton" href="http://www.navigatecms.com/en/marketplace/dashboard" target="_blank"><span class="ui-icon ui-icon-extlink" style="float: left;"></span> ' . t(532, "Navigate CMS Marketplace") . '</a>
                        </div>
                    ');
                    $layout->add_script('
                        $("#navigate_marketplace_install_from_hash_error").dialog({
                            modal: true,
                            title: "' . t(56, "Unexpected error") . '"
                        });
                    ');
                }
            }
            // don't break, we want to show the themes grid right now (theme_upload by browser upload won't trigger)
        // don't break, we want to show the themes grid right now (theme_upload by browser upload won't trigger)
        case 'extension_upload':
            if (isset($_FILES['extension-upload']) && $_FILES['extension-upload']['error'] == 0 && $user->permission("extensions.install") == "true") {
                // uncompress ZIP and copy it to the extensions dir
                $tmp = trim(substr($_FILES['extension-upload']['name'], 0, strpos($_FILES['extension-upload']['name'], '.')));
                $extension_name = filter_var($tmp, FILTER_SANITIZE_EMAIL);
                if ($tmp != $extension_name) {
                    $layout->navigate_notification(t(344, 'Security error'), true, true);
                } else {
                    @mkdir(NAVIGATE_PATH . '/plugins/' . $extension_name);
                    $zip = new ZipArchive();
                    if ($zip->open($_FILES['extension-upload']['tmp_name']) === TRUE) {
                        $zip->extractTo(NAVIGATE_PATH . '/plugins/' . $extension_name);
                        $zip->close();
                        $layout->navigate_notification(t(374, "Item installed successfully."), false);
                    } else {
                        $layout->navigate_notification(t(262, 'Error uploading file'), true, true);
                    }
                }
            }
        default:
            $list = extension::list_installed(null, false);
            $out = extensions_grid($list);
            break;
    }
    return $out;
}