addLocaleData(); if ($this->getEnabled() && Validation::isSiteAdmin()) { HookRegistry::register('Templates::Admin::Index::AdminFunctions',array(&$this, 'addLink')); HookRegistry::register ('LoadHandler', array(&$this, 'handleRequest')); } return true; } return false; } /** * Designate this plugin as a site plugin */ function isSitePlugin() { return true; } /** * Hook callback function for TemplateManager::display * @param $hookName string * @param $args array * @return boolean */ function addLink($hookName, $args) { $params =& $args[0]; $smarty =& $args[1]; $output =& $args[2]; $request = Application::getRequest(); $output .= '
  • ' . __('plugins.generic.backup.link') . '
  • '; return false; } function handleRequest($hookName, $args) { $page =& $args[0]; $op =& $args[1]; $sourceFile =& $args[2]; $request = Application::getRequest(); if ($page !== 'backup') return false; // We've already verified that this is a site admin through // conditional hook registration. AppLocale::requireComponents(LOCALE_COMPONENT_PKP_ADMIN, LOCALE_COMPONENT_APPLICATION_COMMON); $returnValue = 0; switch ($op) { case 'index': $templateMgr = TemplateManager::getManager($request); $templateMgr->assign('isDumpConfigured', Config::getVar('cli', 'dump')!=''); $templateMgr->assign('isTarConfigured', Config::getVar('cli', 'tar')!=''); $templateMgr->display($this->getTemplatePath() . 'index.tpl'); exit(); case 'db': $dumpTool = Config::getVar('cli', 'dump'); header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename=db-' . strftime('%Y-%m-%d') . '.sql'); header('Content-Type: text/plain'); header('Content-Transfer-Encoding: binary'); passthru(sprintf( $dumpTool, escapeshellarg(Config::getVar('database', 'host')), escapeshellarg(Config::getVar('database', 'username')), escapeshellarg(Config::getVar('database', 'password')), escapeshellarg(Config::getVar('database', 'name')) ), $returnValue); if ($returnValue !== 0) $request->redirect(null, null, 'failure'); exit(); case 'files': $tarTool = Config::getVar('cli', 'tar'); header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename=files-' . strftime('%Y-%m-%d') . '.tar.gz'); header('Content-Type: text/plain'); header('Content-Transfer-Encoding: binary'); passthru($tarTool . ' -c -z ' . escapeshellarg(Config::getVar('files', 'files_dir')), $returnValue); if ($returnValue !== 0) $request->redirect(null, null, 'failure'); exit(); case 'code': $tarTool = Config::getVar('cli', 'tar'); header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename=code-' . strftime('%Y-%m-%d') . '.tar.gz'); header('Content-Type: text/plain'); header('Content-Transfer-Encoding: binary'); passthru($tarTool . ' -c -z ' . escapeshellarg(dirname(dirname(dirname(dirname(__FILE__))))), $returnValue); if ($returnValue !== 0) $request->redirect(null, null, 'failure'); exit(); case 'failure': $templateMgr = TemplateManager::getManager($request); $templateMgr->assign('message', 'plugins.generic.backup.failure'); $templateMgr->assign('backLink', $request->url(null, null, 'backup')); $templateMgr->assign('backLinkLabel', 'plugins.generic.backup.link'); $templateMgr->display('common/message.tpl'); exit(); } return false; } /** * Get the symbolic name of this plugin * @return string */ function getName() { return 'BackupPlugin'; } /** * Get the display name of this plugin * @return string */ function getDisplayName() { return __('plugins.generic.backup.name'); } /** * Get the description of this plugin * @return string */ function getDescription() { return __('plugins.generic.backup.description'); } /** * Check whether or not this plugin is enabled * @return boolean */ function getEnabled() { return $this->getSetting(0, 'enabled'); } /** * Get a list of available management verbs for this plugin * @return array */ function getManagementVerbs() { return array(array( ($this->getEnabled()?'disable':'enable'), __($this->getEnabled()?'manager.plugins.disable':'manager.plugins.enable') )); } /** * @see PKPPlugin::manage() */ function manage($verb, $args, &$message, &$messageParams) { switch ($verb) { case 'enable': $this->updateSetting(0, 'enabled', true); $message = NOTIFICATION_TYPE_PLUGIN_ENABLED; $messageParams = array('pluginName' => $this->getDisplayName()); break; case 'disable': $this->updateSetting(0, 'enabled', false); $message = NOTIFICATION_TYPE_PLUGIN_DISABLED; $messageParams = array('pluginName' => $this->getDisplayName()); break; } return false; } } ?>