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; }