addItem( __('Maintenance'), $core->adminurl->get('admin.plugin.maintenance'), dcPage::getPF('maintenance/icon.png'), preg_match('/' . preg_quote($core->adminurl->get('admin.plugin.maintenance')) . '(&.*)?$/', $_SERVER['REQUEST_URI']), $core->auth->check('admin', $core->blog->id) ); // Admin behaviors $core->addBehavior('dcMaintenanceInit', array('dcMaintenanceAdmin', 'dcMaintenanceInit')); $core->addBehavior('adminDashboardFavorites', array('dcMaintenanceAdmin', 'adminDashboardFavorites')); $core->addBehavior('adminDashboardContents', array('dcMaintenanceAdmin', 'adminDashboardItems')); $core->addBehavior('adminDashboardOptionsForm', array('dcMaintenanceAdmin', 'adminDashboardOptionsForm')); $core->addBehavior('adminAfterDashboardOptionsUpdate', array('dcMaintenanceAdmin', 'adminAfterDashboardOptionsUpdate')); $core->addBehavior('adminPageHelpBlock', array('dcMaintenanceAdmin', 'adminPageHelpBlock')); $core->addBehavior('pluginsToolsHeaders', array('dcMaintenanceAdmin', 'pluginsToolsHeaders')); /** @ingroup PLUGIN_MAINTENANCE @nosubgrouping @brief Maintenance plugin admin class. Group of methods used on behaviors. */ class dcMaintenanceAdmin { /** * Register default tasks. * * @param $maintenance dcMaintenance dcMaintenance instance */ public static function dcMaintenanceInit($maintenance) { $maintenance ->addTab('maintenance', __('Servicing'), array('summary' => __('Tools to maintain the performance of your blogs.'))) ->addTab('backup', __('Backup'), array('summary' => __('Tools to back up your content.'))) ->addTab('dev', __('Development'), array('summary' => __('Tools to assist in development of plugins, themes and core.'))) ->addGroup('optimize', __('Optimize')) ->addGroup('index', __('Count and index')) ->addGroup('purge', __('Purge')) ->addGroup('other', __('Other')) ->addGroup('zipblog', __('Current blog')) ->addGroup('zipfull', __('All blogs')) ->addGroup('l10n', __('Translations'), array('summary' => __('Maintain translations'))) ->addTask('dcMaintenanceCache') ->addTask('dcMaintenanceCSP') ->addTask('dcMaintenanceIndexposts') ->addTask('dcMaintenanceIndexcomments') ->addTask('dcMaintenanceCountcomments') ->addTask('dcMaintenanceSynchpostsmeta') ->addTask('dcMaintenanceLogs') ->addTask('dcMaintenanceVacuum') ->addTask('dcMaintenanceZipmedia') ->addTask('dcMaintenanceZiptheme') ; } /** * Favorites. * * @param $core dcCore dcCore instance * @param $favs arrayObject Array of favs */ public static function adminDashboardFavorites($core, $favs) { $favs->register('maintenance', array( 'title' => __('Maintenance'), 'url' => $core->adminurl->get('admin.plugin.maintenance'), 'small-icon' => dcPage::getPF('maintenance/icon.png'), 'large-icon' => dcPage::getPF('maintenance/icon-big.png'), 'permissions' => 'admin', 'active_cb' => array('dcMaintenanceAdmin', 'adminDashboardFavoritesActive'), 'dashboard_cb' => array('dcMaintenanceAdmin', 'adminDashboardFavoritesCallback') )); } /** * Favorites selection. * * @param $request string Requested page * @param $params array Requested parameters */ public static function adminDashboardFavoritesActive($request, $params) { return $request == 'plugin.php' && isset($params['p']) && $params['p'] == 'maintenance'; } /** * Favorites hack. * * This updates maintenance fav icon text * if there are tasks required maintenance. * * @param $core dcCore dcCore instance * @param $fav arrayObject fav attributes */ public static function adminDashboardFavoritesCallback($core, $fav) { // Check user option $core->auth->user_prefs->addWorkspace('maintenance'); if (!$core->auth->user_prefs->maintenance->dashboard_icon) { return; } // Check expired tasks $maintenance = new dcMaintenance($core); $count = 0; foreach ($maintenance->getTasks() as $t) { if ($t->expired() !== false) { $count++; } } if (!$count) { return; } $fav['title'] .= '
' . sprintf(__('One task to execute', '%s tasks to execute', $count), $count); $fav['large-icon'] = dcPage::getPF('maintenance/icon-big-update.png'); } /** * Dashboard items stack. * * @param $core dcCore dcCore instance * @param $items arrayObject Dashboard items */ public static function adminDashboardItems($core, $items) { $core->auth->user_prefs->addWorkspace('maintenance'); if (!$core->auth->user_prefs->maintenance->dashboard_item) { return; } $maintenance = new dcMaintenance($core); $lines = array(); foreach ($maintenance->getTasks() as $t) { $ts = $t->expired(); if ($ts === false) { continue; } $lines[] = '
  • ' . $t->task() . '
  • '; } if (empty($lines)) { return; } $items[] = new ArrayObject(array( '
    ' . '

    ' . __('Maintenance') . '

    ' . '

    ' . sprintf(__('There is a task to execute.', 'There are %s tasks to execute.', count($lines)), count($lines)) . '

    ' . '' . '

    ' . __('Manage tasks') . '

    ' . '
    ' )); } /** * User preferences form. * * This add options for superadmin user * to show or not expired taks. * * @param $args object dcCore instance or record */ public static function adminDashboardOptionsForm($core) { $core->auth->user_prefs->addWorkspace('maintenance'); echo '
    ' . '

    ' . __('Maintenance') . '

    ' . '

    ' . '

    ' . '
    '; } /** * User preferences update. * * @param $user_id string User ID */ public static function adminAfterDashboardOptionsUpdate($user_id = null) { global $core; if (is_null($user_id)) { return; } $core->auth->user_prefs->addWorkspace('maintenance'); $core->auth->user_prefs->maintenance->put('dashboard_icon', !empty($_POST['maintenance_dashboard_icon']), 'boolean'); $core->auth->user_prefs->maintenance->put('dashboard_item', !empty($_POST['maintenance_dashboard_item']), 'boolean'); } /** * Build a well sorted help for tasks. * * This method is not so good if used with lot of tranlsations * as it grows memory usage and translations files size, * it is better to use help ressource files * but keep it for exemple of how to use behavior adminPageHelpBlock. * Cheers, JC * * @param $block arrayObject Called helpblocks */ public static function adminPageHelpBlock($blocks) { $found = false; foreach ($blocks as $block) { if ($block == 'maintenancetasks') { $found = true; break; } } if (!$found) { return; } $maintenance = new dcMaintenance($GLOBALS['core']); $res_tab = ''; foreach ($maintenance->getTabs() as $tab_obj) { $res_group = ''; foreach ($maintenance->getGroups() as $group_obj) { $res_task = ''; foreach ($maintenance->getTasks() as $t) { if ($t->group() != $group_obj->id() || $t->tab() != $tab_obj->id()) { continue; } if (($desc = $t->description()) != '') { $res_task .= '
    ' . $t->task() . '
    ' . '
    ' . $desc . '
    '; } } if (!empty($res_task)) { $desc = $group_obj->description ?: $group_obj->summary; $res_group .= '
    ' . $group_obj->name() . '
    ' . ($desc ? '

    ' . $desc . '

    ' : '') . '
    ' . $res_task . '
    '; } } if (!empty($res_group)) { $desc = $tab_obj->description ?: $tab_obj->summary; $res_tab .= '

    ' . $tab_obj->name() . '

    ' . ($desc ? '

    ' . $desc . '

    ' : '') . $res_group; } } if (!empty($res_tab)) { $res = new ArrayObject(); $res->content = $res_tab; $blocks[] = $res; } } /** * Add javascript for plugin configuration. * * @param $core dcCore dcCore instance * @param $module mixed Module ID or false if none * @return string Header code for js inclusion */ public static function pluginsToolsHeaders($core, $module) { if ($module == 'maintenance') { return dcPage::jsLoad(dcPage::getPF('maintenance/js/settings.js')); } } }