private function theme_exist()
 {
     if ($this->theme_id == null) {
         return false;
     }
     return ThemesManager::get_theme_existed($this->theme_id);
 }
Example #2
0
 /**
  * @desc Load Application Classes
  * @param $checks
  */
 private function load_apps($checks = CHECK_ALL_UPDATES)
 {
     if (ServerConfiguration::get_phpversion() > self::PHP_MIN_VERSION_UPDATES) {
         $user_locale = AppContext::get_current_user()->get_locale();
         if ($checks & CHECK_KERNEL) {
             // Add the kernel to the check list
             $this->apps[] = new Application('kernel', $user_locale, Application::KERNEL_TYPE, Environment::get_phpboost_version(), Updates::PHPBOOST_OFFICIAL_REPOSITORY);
         }
         if ($checks & CHECK_MODULES) {
             $activated_modules = ModulesManager::get_activated_modules_map_sorted_by_localized_name();
             foreach ($activated_modules as $module) {
                 $this->apps[] = new Application($module->get_id(), $user_locale, Application::MODULE_TYPE, $module->get_configuration()->get_version(), $module->get_configuration()->get_repository());
             }
         }
         if ($checks & CHECK_THEMES) {
             // Add Themes
             $activated_themes = ThemesManager::get_activated_themes_map();
             foreach ($activated_themes as $id => $value) {
                 $repository = $value->get_configuration()->get_repository();
                 if (!empty($repository)) {
                     $this->apps[] = new Application($id, $user_locale, Application::TEMPLATE_TYPE, $value->get_configuration()->get_version(), $repository);
                 }
             }
         }
     }
 }
 private function build_form()
 {
     $picture_yes = '<i class="fa fa-success fa-2x" title="' . LangLoader::get_message('yes', 'common') . '"></i>';
     $picture_no = '<i class="fa fa-error fa-2x" title="' . LangLoader::get_message('no', 'common') . '"></i>';
     $picture_unknown = '<i class="fa fa-question fa-2x" title="' . LangLoader::get_message('unknown', 'main') . '"></i>';
     $default_lang_config = LangsManager::get_lang(LangsManager::get_default_lang())->get_configuration();
     $default_theme_config = ThemesManager::get_theme(ThemesManager::get_default_theme())->get_configuration();
     $editors = AppContext::get_content_formatting_service()->get_available_editors();
     $default_editor = $editors[ContentFormattingConfig::load()->get_default_editor()];
     $server_configuration = new ServerConfiguration();
     $general_config = GeneralConfig::load();
     $server_environment_config = ServerEnvironmentConfig::load();
     $sessions_config = SessionsConfig::load();
     $maintenance_config = MaintenanceConfig::load();
     $url_rewriting_available = false;
     $url_rewriting_known = true;
     try {
         $url_rewriting_available = $server_configuration->has_url_rewriting();
     } catch (UnsupportedOperationException $ex) {
         $url_rewriting_known = false;
     }
     $summerization = "---------------------------------System report---------------------------------\n-----------------------------generated by PHPBoost-----------------------------\nSERVER CONFIGURATION-----------------------------------------------------------\nphp version\t\t\t: " . ServerConfiguration::get_phpversion() . "\ndbms version\t\t\t: " . PersistenceContext::get_dbms_utils()->get_dbms_version() . "\ngd library\t\t\t: " . (int) $server_configuration->has_gd_library() . "\nurl rewriting\t\t\t: " . ($url_rewriting_known ? (int) $url_rewriting_available : 'N/A') . "\napcu cache\t\t\t: " . (int) DataStoreFactory::is_apc_available() . "\nPHPBOOST CONFIGURATION---------------------------------------------------------\nphpboost version\t\t: " . Environment::get_phpboost_version() . "\nserver url\t\t\t: " . $general_config->get_site_url() . "\nsite path\t\t\t: " . $general_config->get_site_path() . "\ndefault theme\t\t\t: " . $default_theme_config->get_name() . " (" . LangLoader::get_message('version', 'admin') . " " . $default_theme_config->get_version() . ")\ndefault language\t\t: " . $default_lang_config->get_name() . "\ndefault editor\t\t\t: " . $default_editor . "\nhome page\t\t\t: " . Environment::get_home_page() . "\nurl rewriting\t\t\t: " . (int) $server_environment_config->is_url_rewriting_enabled() . "\napcu cache\t\t\t: " . (int) DataStoreFactory::is_apc_enabled() . "\noutput gzip\t\t\t: " . (int) $server_environment_config->is_output_gziping_enabled() . "\nsession cookie name\t\t: " . $sessions_config->get_cookie_name() . "\nsession duration\t\t: " . $sessions_config->get_session_duration() . "\nactive session duration\t\t: " . $sessions_config->get_active_session_duration() . "\nDIRECTORIES AUTHORIZATIONS-----------------------------------------------------\n";
     $form = new HTMLForm('system-report', '', false);
     $this->get_advises($form);
     $fieldset = new FormFieldsetHTML('report', $this->admin_lang['server']);
     $form->add_fieldset($fieldset);
     $fieldset->add_field(new FormFieldFree('php_version', $this->admin_lang['php_version'], ServerConfiguration::get_phpversion()));
     $fieldset->add_field(new FormFieldFree('dbms_version', $this->admin_lang['dbms_version'], PersistenceContext::get_dbms_utils()->get_dbms_version()));
     $fieldset->add_field(new FormFieldFree('gd_library', $this->admin_lang['gd_library'], $server_configuration->has_gd_library() ? $picture_yes : $picture_no));
     $fieldset->add_field(new FormFieldFree('url_rewriting', $this->admin_lang['url_rewriting'], $url_rewriting_known ? $url_rewriting_available ? $picture_yes : $picture_no : $picture_unknown));
     $fieldset->add_field(new FormFieldFree('apcu_cache', LangLoader::get_message('apcu_cache', 'admin-cache-common'), DataStoreFactory::is_apc_available() ? $picture_yes : $picture_no));
     $fieldset = new FormFieldsetHTML('report', $this->admin_lang['phpboost_config']);
     $form->add_fieldset($fieldset);
     $fieldset->add_field(new FormFieldFree('kernel_version', $this->admin_lang['kernel_version'], Environment::get_phpboost_version()));
     $fieldset->add_field(new FormFieldFree('site_url', LangLoader::get_message('advanced-config.site_url', 'admin-config-common'), $general_config->get_site_url()));
     $fieldset->add_field(new FormFieldFree('site_path', LangLoader::get_message('advanced-config.site_path', 'admin-config-common'), $general_config->get_site_path()));
     $fieldset->add_field(new FormFieldFree('default_theme', LangLoader::get_message('general-config.default_theme', 'admin-config-common'), $default_theme_config->get_name() . " (" . LangLoader::get_message('version', 'admin') . " " . $default_theme_config->get_version() . ")"));
     $fieldset->add_field(new FormFieldFree('default_language', LangLoader::get_message('general-config.default_language', 'admin-config-common'), $default_lang_config->get_name()));
     $fieldset->add_field(new FormFieldFree('default_editor', LangLoader::get_message('content.config.default-formatting-language', 'admin-contents-common'), $default_editor));
     $fieldset->add_field(new FormFieldFree('start_page', LangLoader::get_message('general-config.start_page', 'admin-config-common'), Environment::get_home_page()));
     $fieldset->add_field(new FormFieldFree('phpboost_url_rewriting', $this->admin_lang['url_rewriting'], $server_environment_config->is_url_rewriting_enabled() ? $picture_yes : $picture_no));
     $fieldset->add_field(new FormFieldFree('phpboost_apcu_cache', LangLoader::get_message('apcu_cache', 'admin-cache-common'), DataStoreFactory::is_apc_enabled() ? $picture_yes : $picture_no));
     $fieldset->add_field(new FormFieldFree('output_gz', $this->admin_lang['output_gz'], $server_environment_config->is_output_gziping_enabled() ? $picture_yes : $picture_no));
     $fieldset->add_field(new FormFieldFree('cookie_name', LangLoader::get_message('advanced-config.cookie-name', 'admin-config-common'), $sessions_config->get_cookie_name()));
     $fieldset->add_field(new FormFieldFree('session_length', LangLoader::get_message('advanced-config.cookie-duration', 'admin-config-common'), $sessions_config->get_session_duration()));
     $fieldset->add_field(new FormFieldFree('session_guest_length', LangLoader::get_message('advanced-config.active-session-duration', 'admin-config-common'), $sessions_config->get_active_session_duration()));
     $fieldset = new FormFieldsetHTML('directories_auth', $this->admin_lang['directories_auth']);
     $form->add_fieldset($fieldset);
     $directories_summerization = '';
     foreach (PHPBoostFoldersPermissions::get_permissions() as $key => $folder) {
         $fieldset->add_field(new FormFieldFree(str_replace('/', '_', $key), $key, $folder->is_writable() ? $picture_yes : $picture_no));
         $directories_summerization .= $key . str_repeat('	', 5 - strlen($key) / 8) . ": " . (int) $folder->is_writable() . "\n";
     }
     $fieldset = new FormFieldsetHTML('summerization', $this->admin_lang['system_report_summerization']);
     $form->add_fieldset($fieldset);
     $fieldset->add_field(new FormFieldLabel($this->admin_lang['system_report_summerization_explain']));
     $fieldset->add_field(new FormFieldMultiLineTextEditor('summerization', '', $summerization . $directories_summerization, array('rows' => 20, 'cols' => 15, 'class' => 'system-report')));
     $this->form = $form;
 }
 protected function create_view()
 {
     $columns_disabled = ThemesManager::get_theme(AppContext::get_current_user()->get_theme())->get_columns_disabled();
     $columns_disabled->set_disable_right_columns(true);
     $columns_disabled->set_disable_left_columns(true);
     $columns_disabled->set_disable_top_central(true);
     $columns_disabled->set_disable_bottom_central(true);
     $this->view = new FileTemplate('user/UserError403Controller.tpl');
 }
 private function generate_options()
 {
     $options = array();
     foreach (ThemesManager::get_activated_themes_map() as $theme) {
         if ($this->check_authorizations) {
             if ($theme->check_auth()) {
                 $options[] = new FormFieldSelectChoiceOption($theme->get_configuration()->get_name(), $theme->get_id());
             }
         } else {
             $options[] = new FormFieldSelectChoiceOption($theme->get_configuration()->get_name(), $theme->get_id());
         }
     }
     return $options;
 }
 public function display($content)
 {
     $template = new FileTemplate('admin/body.tpl');
     $template->add_lang(self::$lang);
     $theme = ThemesManager::get_theme(AppContext::get_current_user()->get_theme());
     $customize_interface = $theme->get_customize_interface();
     $header_logo_path = $customize_interface->get_header_logo_path();
     $template->put_all(array('SITE_NAME' => GeneralConfig::load()->get_site_name(), 'SITE_SLOGAN' => GeneralConfig::load()->get_site_slogan(), 'C_HEADER_LOGO' => !empty($header_logo_path), 'HEADER_LOGO' => Url::to_rel($header_logo_path), 'PHPBOOST_VERSION' => GeneralConfig::load()->get_phpboost_major_version(), 'CONTENT' => $content, 'L_INDEX_SUPPORT' => self::$lang['index.support'], 'L_INDEX_FAQ' => self::$lang['index.faq'], 'L_INDEX_DOCUMENTATION' => self::$lang['index.documentation'], 'L_POWERED_BY' => self::$lang['powered_by'], 'L_PHPBOOST_RIGHT' => self::$lang['phpboost_right'], 'L_ADMINISTRATION' => self::$lang['index.administration'], 'L_INDEX_SITE' => self::$lang['index.site'], 'L_EXTEND_MENU' => self::$lang['index.extend_menu'], 'L_DISCONNECT' => self::$lang['index.disconnect'], 'L_ADMIN_MAIN_MENU' => self::$lang['admin.main_menu'], 'L_NEED_HELP' => self::$lang['admin.need_help']));
     if (GraphicalEnvironmentConfig::load()->is_page_bench_enabled()) {
         $template->put_all(array('C_DISPLAY_BENCH' => true, 'BENCH' => AppContext::get_bench()->to_string(), 'REQ' => PersistenceContext::get_querier()->get_executed_requests_count(), 'MEMORY_USED' => AppContext::get_bench()->get_memory_php_used(), 'L_REQ' => self::$lang['sql_req'], 'L_ACHIEVED' => self::$lang['achieved'], 'L_UNIT_SECOND' => LangLoader::get_message('unit.seconds', 'date-common')));
     }
     if (GraphicalEnvironmentConfig::load()->get_display_theme_author()) {
         $theme_configuration = ThemesManager::get_theme(AppContext::get_current_user()->get_theme())->get_configuration();
         $template->put_all(array('C_DISPLAY_AUTHOR_THEME' => true, 'L_THEME' => self::$lang['theme'], 'L_THEME_NAME' => $theme_configuration->get_name(), 'L_BY' => strtolower(self::$lang['by']), 'L_THEME_AUTHOR' => $theme_configuration->get_author_name(), 'U_THEME_AUTHOR_LINK' => $theme_configuration->get_author_link()));
     }
     $template->put('subheader_menu', self::get_subheader_tpl());
     $this->display_page($template);
 }
 public function save(HTTPRequestCustom $request)
 {
     $installed_themes = ThemesManager::get_installed_themes_map();
     foreach ($installed_themes as $theme) {
         if ($request->get_string('delete-' . $theme->get_id(), '')) {
             AppContext::get_response()->redirect(AdminThemeUrlBuilder::delete_theme($theme->get_id()));
         }
     }
     if ($request->get_bool('update', false)) {
         foreach ($installed_themes as $theme) {
             if ($theme->get_id() !== ThemesManager::get_default_theme()) {
                 $id_theme = $theme->get_id();
                 $activated = $request->get_bool('activated-' . $id_theme, false);
                 $authorizations = Authorizations::auth_array_simple(Theme::ACCES_THEME, $id_theme);
                 ThemesManager::change_informations($id_theme, $activated, $authorizations);
             }
         }
         AppContext::get_response()->redirect(AdminThemeUrlBuilder::list_installed_theme());
     }
 }
 public function get_content()
 {
     $user = AppContext::get_current_user();
     $theme_id = AppContext::get_request()->get_string('switchtheme', '');
     if (!empty($theme_id)) {
         $theme = ThemesManager::get_theme($theme_id);
         if ($theme !== null) {
             if ($theme->is_activated() && $theme->check_auth()) {
                 $user->update_theme($theme->get_id());
             }
         }
         $query_string = preg_replace('`switchtheme=[^&]+`', '', QUERY_STRING);
         AppContext::get_response()->redirect(trim(HOST . SCRIPT . (!empty($query_string) ? '?' . $query_string : '')));
     }
     $tpl = new FileTemplate('ThemesSwitcher/themeswitcher.tpl');
     $tpl->add_lang(LangLoader::get('themeswitcher_common', 'ThemesSwitcher'));
     foreach (ThemesManager::get_activated_and_authorized_themes_map() as $id => $theme) {
         $selected = $user->get_theme() == $id ? ' selected="selected"' : '';
         $tpl->assign_block_vars('themes', array('NAME' => $theme->get_configuration()->get_name(), 'IDNAME' => $id, 'SELECTED' => $selected));
     }
     $tpl->put('DEFAULT_THEME', UserAccountsConfig::load()->get_default_theme());
     return $tpl;
 }
Example #9
0
 if ($erase) {
     $file = new File('../stats/cache/robots.txt');
     try {
         $file->delete();
     } catch (IOException $exception) {
         echo $exception->getMessage();
     }
 }
 $tpl->put_all(array('L_SITE' => $LANG['site'], 'L_STATS' => $LANG['stats'], 'L_USERS' => $LANG['member_s'], 'L_VISITS' => $LANG['guest_s'], 'L_PAGES' => $LANG['page_s'], 'L_BROWSERS' => $LANG['browser_s'], 'L_OS' => $LANG['os'], 'L_LANG' => $LANG['stat_lang'], 'L_KEYWORD' => $LANG['keyword_s'], 'L_REFERER' => $LANG['referer_s'], 'L_ROBOTS' => $LANG['robots'], 'L_UPDATE' => $LANG['update'], 'L_RESET' => $LANG['reset'], 'L_AUTHORIZATIONS' => $LANG['admin.authorizations'], 'L_READ_AUTHORIZATION' => $LANG['admin.authorizations.read'], 'READ_AUTHORIZATION' => Authorizations::generate_select(StatsAuthorizationsService::READ_AUTHORIZATIONS, StatsConfig::load()->get_authorizations())));
 $date_lang = LangLoader::get('date-common');
 if (!empty($members)) {
     $stats_cache = StatsCache::load();
     $last_user_group_color = User::get_group_color($stats_cache->get_stats_properties('last_member_groups'), $stats_cache->get_stats_properties('last_member_level'));
     $tpl->put_all(array('C_STATS_USERS' => true, 'C_LAST_USER_GROUP_COLOR' => !empty($last_user_group_color), 'LAST_USER' => $stats_cache->get_stats_properties('last_member_login'), 'LAST_USER_LEVEL_CLASS' => UserService::get_level_class($stats_cache->get_stats_properties('last_member_level')), 'LAST_USER_GROUP_COLOR' => $last_user_group_color, 'U_LAST_USER_PROFILE' => UserUrlBuilder::profile($stats_cache->get_stats_properties('last_member_id'))->rel(), 'USERS' => $stats_cache->get_stats_properties('nbr_members'), 'GRAPH_RESULT_THEME' => !file_exists('../cache/theme.png') ? '<img src="display_stats.php?theme=1" alt="' . $LANG['theme_s'] . '" />' : '<img src="../cache/theme.png" alt="' . $LANG['theme_s'] . '" />', 'GRAPH_RESULT_SEX' => !file_exists('../cache/sex.png') ? '<img src="display_stats.php?sex=1" alt="' . $LANG['sex'] . '" />' : '<img src="../cache/sex.png" alt="' . $LANG['sex'] . '" />', 'L_LAST_USER' => $LANG['last_member'], 'L_TEMPLATES' => $LANG['theme_s'], 'L_PSEUDO' => LangLoader::get_message('display_name', 'user-common'), 'L_MSG' => $LANG['message_s'], 'L_TOP_TEN_POSTERS' => $LANG['top_10_posters'], 'L_COLORS' => $LANG['colors'], 'L_USERS' => $LANG['member_s'], 'L_SEX' => $LANG['sex']));
     $stats_array = array();
     foreach (ThemesManager::get_activated_themes_map() as $theme) {
         $stats_array[$theme->get_id()] = $db_querier->count(DB_TABLE_MEMBER, "WHERE theme = '" . $theme->get_id() . "'");
     }
     $Stats = new ImagesStats();
     $Stats->load_data($stats_array, 'ellipse');
     foreach ($Stats->data_stats as $name => $angle_value) {
         $array_color = $Stats->array_allocated_color[$Stats->image_color_allocate_dark(false, NO_ALLOCATE_COLOR)];
         $tpl->assign_block_vars('templates', array('NBR_THEME' => NumberHelper::round($angle_value * $Stats->nbr_entry / 360, 0), 'COLOR' => 'RGB(' . $array_color[0] . ', ' . $array_color[1] . ', ' . $array_color[2] . ')', 'THEME' => $name == 'Other' ? $LANG['other'] : $name, 'PERCENT' => NumberHelper::round($angle_value / 3.6, 1)));
     }
     $stats_array = array();
     $result = $db_querier->select("SELECT member.user_id, count(ext_field.user_sex) as compt, ext_field.user_sex\n\t\tFROM " . PREFIX . "member member\n\t\tLEFT JOIN " . DB_TABLE_MEMBER_EXTENDED_FIELDS . " ext_field ON ext_field.user_id = member.user_id\n\t\tGROUP BY ext_field.user_sex\n\t\tORDER BY compt");
     while ($row = $result->fetch()) {
         switch ($row['user_sex']) {
             case 0:
                 $name = $LANG['unknown'];
                 break;
 private function upload_theme()
 {
     $folder_phpboost_themes = PATH_TO_ROOT . '/templates/';
     if (!is_writable($folder_phpboost_themes)) {
         $is_writable = @chmod($folder_phpboost_themes, 0777);
     } else {
         $is_writable = true;
     }
     if ($is_writable) {
         $uploaded_file = $this->form->get_value('file');
         if ($uploaded_file !== null) {
             $upload = new Upload($folder_phpboost_themes);
             if ($upload->file('upload_theme_file', '`([A-Za-z0-9-_]+)\\.(gz|zip)+$`i')) {
                 $archive = $folder_phpboost_themes . $upload->get_filename();
                 if ($upload->get_extension() == 'gz') {
                     include_once PATH_TO_ROOT . '/kernel/lib/php/pcl/pcltar.lib.php';
                     $archive_content = PclTarList($upload->get_filename());
                 } else {
                     include_once PATH_TO_ROOT . '/kernel/lib/php/pcl/pclzip.lib.php';
                     $zip = new PclZip($archive);
                     $archive_content = $zip->listContent();
                 }
                 $archive_root_content = array();
                 $required_files = array('/config.ini', '/body.tpl', '/frame.tpl', '/theme/content.css', '/theme/design.css', '/theme/global.css');
                 foreach ($archive_content as $element) {
                     if (substr($element['filename'], -1) == '/') {
                         $element['filename'] = substr($element['filename'], 0, -1);
                     }
                     if (substr_count($element['filename'], '/') == 0) {
                         $archive_root_content[] = array('filename' => $element['filename'], 'folder' => isset($element['folder']) && $element['folder'] == 1 || isset($element['typeflag']) && $element['typeflag'] == 5);
                     }
                     if (isset($archive_root_content[0])) {
                         $name_in_archive = str_replace($archive_root_content[0]['filename'] . '/', '/', $element['filename']);
                         if (in_array($name_in_archive, $required_files)) {
                             unset($required_files[array_search($name_in_archive, $required_files)]);
                         }
                     }
                 }
                 if (count($archive_root_content) == 1 && $archive_root_content[0]['folder'] && empty($required_files)) {
                     $theme_id = $archive_root_content[0]['filename'];
                     if (!ThemesManager::get_theme_existed($theme_id)) {
                         if ($upload->get_extension() == 'gz') {
                             PclTarExtract($upload->get_filename(), $folder_phpboost_themes);
                         } else {
                             $zip->extract(PCLZIP_OPT_PATH, $folder_phpboost_themes, PCLZIP_OPT_SET_CHMOD, 0755);
                         }
                         $this->install_theme($theme_id, array('r-1' => 1, 'r0' => 1, 'r1' => 1));
                     } else {
                         $this->view->put('MSG', MessageHelper::display(LangLoader::get_message('element.already_exists', 'status-messages-common'), MessageHelper::NOTICE));
                     }
                 } else {
                     $this->view->put('MSG', MessageHelper::display(LangLoader::get_message('error.invalid_archive_content', 'status-messages-common'), MessageHelper::NOTICE));
                 }
                 $uploaded_file = new File($archive);
                 $uploaded_file->delete();
             } else {
                 $this->view->put('MSG', MessageHelper::display($this->lang['themes.upload_invalid_format'], MessageHelper::NOTICE));
             }
         } else {
             $this->view->put('MSG', MessageHelper::display(LangLoader::get_message('process.error', 'status-messages-common'), MessageHelper::NOTICE));
         }
     }
 }
 private function list_themes()
 {
     $choices_list = array();
     $choices_list[] = new FormFieldSelectChoiceOption('--', '');
     foreach (ThemesManager::get_activated_themes_map() as $id => $value) {
         $choices_list[] = new FormFieldSelectChoiceOption($value->get_configuration()->get_name(), $id);
     }
     return $choices_list;
 }
 private function get_picture_theme()
 {
     $theme_id = $this->user_accounts_config->get_default_theme();
     $picture = ThemesManager::get_theme($theme_id)->get_configuration()->get_first_picture();
     return TPL_PATH_TO_ROOT . '/templates/' . $theme_id . '/' . $picture;
 }
Example #13
0
 /**
  * @desc Get the number of the installed version
  * @return string version
  */
 private function get_installed_version()
 {
     switch ($this->type) {
         case self::KERNEL_TYPE:
             return GeneralConfig::load()->get_phpboost_major_version();
         case self::MODULE_TYPE:
             if (ModulesManager::is_module_installed($this->id)) {
                 return ModulesManager::get_module($this->id)->get_configuration()->get_version();
             }
             return '0';
         case self::TEMPLATE_TYPE:
             if (ThemesManager::get_theme_existed($this->id)) {
                 return ThemesManager::get_theme($this->id)->get_configuration()->get_version();
             }
             return '0';
         default:
             return '0';
     }
 }
 public static function install($theme_id, $authorizations = array(), $enable_theme = true)
 {
     if (!file_exists(PATH_TO_ROOT . '/templates/' . $theme_id . '/config.ini')) {
         self::$error = LangLoader::get_message('misfit.phpboost', 'status-messages-common');
         $folder = new Folder(PATH_TO_ROOT . '/templates/' . $theme_id);
         $folder->delete();
     } else {
         if (!empty($theme_id) && !self::get_theme_existed($theme_id)) {
             $theme = new Theme($theme_id, $authorizations, $enable_theme);
             $configuration = $theme->get_configuration();
             $theme->set_columns_disabled($configuration->get_columns_disabled());
             $phpboost_version = GeneralConfig::load()->get_phpboost_major_version();
             if (version_compare($phpboost_version, $configuration->get_compatibility(), '>')) {
                 self::$error = LangLoader::get_message('misfit.phpboost', 'status-messages-common');
             } else {
                 ThemesConfig::load()->add_theme($theme);
                 ThemesConfig::save();
             }
         } else {
             self::$error = LangLoader::get_message('element.already_exists', 'status-messages-common');
         }
     }
 }
Example #15
0
 public static function init_session()
 {
     Session::gc();
     $session_data = Session::start();
     AppContext::set_session($session_data);
     AppContext::init_current_user();
     $current_user = AppContext::get_current_user();
     $user_accounts_config = UserAccountsConfig::load();
     $user_theme = ThemesManager::get_theme($current_user->get_theme());
     $default_theme = $user_accounts_config->get_default_theme();
     if ($user_theme === null || (!$user_theme->check_auth() || !$user_theme->is_activated()) && $user_theme->get_id() !== $default_theme) {
         AppContext::get_current_user()->update_theme($default_theme);
     }
     $user_lang = LangsManager::get_lang($current_user->get_locale());
     $default_lang = $user_accounts_config->get_default_lang();
     if ($user_lang === null || (!$user_lang->check_auth() || !$user_lang->is_activated()) && $user_lang->get_id() !== $default_lang) {
         AppContext::get_current_user()->update_lang($default_lang);
     }
 }
 private function get_picture_theme($user_theme)
 {
     $picture = ThemesManager::get_theme($user_theme)->get_configuration()->get_first_picture();
     return TPL_PATH_TO_ROOT . '/templates/' . $user_theme . '/' . $picture;
 }
 protected function display_menus(Template $template)
 {
     $menus = MenusCache::load()->get_menus();
     $columns_disabled = ThemesManager::get_theme(AppContext::get_current_user()->get_theme())->get_columns_disabled();
     foreach ($menus as $cached_menu) {
         $menu = $cached_menu->get_menu();
         if ($menu->check_auth() && !$columns_disabled->menus_column_is_disabled($menu->get_block())) {
             $display = false;
             $filters = $menu->get_filters();
             $nbr_filters = count($filters);
             foreach ($filters as $filter) {
                 if ($nbr_filters > 1 && $filter->get_pattern() != '/' || $filter->match() && !$display) {
                     $display = true;
                 }
             }
             if ($display) {
                 $menu_content = $cached_menu->has_cached_string() ? $cached_menu->get_cached_string() : $menu->display();
                 $block = $menu->get_block();
                 switch ($block) {
                     case Menu::BLOCK_POSITION__HEADER:
                         $template->put('C_MENUS_HEADER_CONTENT', true);
                         $template->assign_block_vars('menus_header', array('MENU' => $menu_content));
                         break;
                     case Menu::BLOCK_POSITION__SUB_HEADER:
                         $template->put('C_MENUS_SUB_HEADER_CONTENT', true);
                         $template->assign_block_vars('menus_sub_header', array('MENU' => $menu_content));
                         break;
                     case Menu::BLOCK_POSITION__LEFT:
                         $template->put('C_MENUS_LEFT_CONTENT', true);
                         $template->assign_block_vars('menus_left', array('MENU' => $menu_content));
                         break;
                     case Menu::BLOCK_POSITION__RIGHT:
                         $template->put('C_MENUS_RIGHT_CONTENT', true);
                         $template->assign_block_vars('menus_right', array('MENU' => $menu_content));
                         break;
                     case Menu::BLOCK_POSITION__TOP_CENTRAL:
                         $template->put('C_MENUS_TOPCENTRAL_CONTENT', true);
                         $template->assign_block_vars('menus_top_central', array('MENU' => $menu_content));
                         break;
                     case Menu::BLOCK_POSITION__BOTTOM_CENTRAL:
                         $template->put('C_MENUS_BOTTOM_CENTRAL_CONTENT', true);
                         $template->assign_block_vars('menus_bottom_central', array('MENU' => $menu_content));
                         break;
                     case Menu::BLOCK_POSITION__TOP_FOOTER:
                         $template->put('C_MENUS_TOP_FOOTER_CONTENT', true);
                         $template->assign_block_vars('menus_top_footer', array('MENU' => $menu_content));
                         break;
                     case Menu::BLOCK_POSITION__FOOTER:
                         $template->put('C_MENUS_FOOTER_CONTENT', true);
                         $template->assign_block_vars('menus_footer', array('MENU' => $menu_content));
                 }
             }
         }
     }
 }
 public function update_themes()
 {
     $active_themes_number = 0;
     foreach (ThemesManager::get_installed_themes_map() as $id => $theme) {
         if ($theme->get_configuration()->get_compatibility() == self::NEW_KERNEL_VERSION) {
             $active_themes_number++;
         } else {
             ThemesManager::uninstall($id);
             $this->add_information_to_file('theme ' . $id, 'has been uninstalled because : incompatible with new version');
         }
     }
     if (empty($active_themes_number)) {
         ThemesManager::install('base');
         $user_accounts_config = UserAccountsConfig::load();
         $user_accounts_config->set_default_theme('base');
         UserAccountsConfig::save();
     }
 }
 private function get_view()
 {
     $this->check_authorizations();
     global $LANG, $auth_write, $Bread_crumb, $members, $pages, $pages_year, $referer, $keyword, $visit, $visit_year, $os, $browser, $user_lang, $stats_array_browsers, $stats_array_os, $stats_array_lang;
     require_once PATH_TO_ROOT . '/stats/stats_begin.php';
     $tpl = new FileTemplate('stats/stats.tpl');
     $date_lang = LangLoader::get('date-common');
     $_NBR_ELEMENTS_PER_PAGE = 15;
     $tpl->put_all(array('U_STATS_SITE' => url('.php?site=1', '-site.php'), 'U_STATS_USERS' => url('.php?members=1', '-members.php'), 'U_STATS_VISIT' => url('.php?visit=1', '-visit.php'), 'U_STATS_PAGES' => url('.php?pages=1', '-pages.php'), 'U_STATS_REFERER' => url('.php?referer=1', '-referer.php'), 'U_STATS_KEYWORD' => url('.php?keyword=1', '-keyword.php'), 'U_STATS_BROWSER' => url('.php?browser=1', '-browser.php'), 'U_STATS_OS' => url('.php?os=1', '-os.php'), 'U_STATS_LANG' => url('.php?lang=1', '-lang.php'), 'L_SITE' => $LANG['site'], 'L_STATS' => $LANG['stats'], 'L_USERS' => $LANG['member_s'], 'L_VISITS' => $LANG['guest_s'], 'L_PAGES' => $LANG['page_s'], 'L_REFERER' => $LANG['referer_s'], 'L_KEYWORD' => $LANG['keyword_s'], 'L_BROWSERS' => $LANG['browser_s'], 'L_OS' => $LANG['os'], 'L_LANG' => $LANG['stat_lang']));
     if ($members) {
         $stats_cache = StatsCache::load();
         $last_user_group_color = User::get_group_color($stats_cache->get_stats_properties('last_member_groups'), $stats_cache->get_stats_properties('last_member_level'));
         $tpl->put_all(array('C_STATS_USERS' => true, 'C_LAST_USER_GROUP_COLOR' => !empty($last_user_group_color), 'LAST_USER' => $stats_cache->get_stats_properties('last_member_login'), 'LAST_USER_LEVEL_CLASS' => UserService::get_level_class($stats_cache->get_stats_properties('last_member_level')), 'LAST_USER_GROUP_COLOR' => $last_user_group_color, 'U_LAST_USER_PROFILE' => UserUrlBuilder::profile($stats_cache->get_stats_properties('last_member_id'))->rel(), 'USERS' => $stats_cache->get_stats_properties('nbr_members'), 'GRAPH_RESULT_THEME' => !file_exists('../cache/theme.png') ? '<img src="display_stats.php?theme=1" alt="' . $LANG['theme_s'] . '" />' : '<img src="../cache/theme.png" alt="' . $LANG['theme_s'] . '" />', 'GRAPH_RESULT_SEX' => !file_exists('../cache/sex.png') ? '<img src="display_stats.php?sex=1" alt="' . $LANG['sex'] . '" />' : '<img src="../cache/sex.png" alt="' . $LANG['sex'] . '" />', 'L_LAST_USER' => $LANG['last_member'], 'L_TEMPLATES' => $LANG['theme_s'], 'L_PSEUDO' => LangLoader::get_message('display_name', 'user-common'), 'L_MSG' => $LANG['message_s'], 'L_TOP_TEN_POSTERS' => $LANG['top_10_posters'], 'L_COLORS' => $LANG['colors'], 'L_USERS' => $LANG['member_s'], 'L_SEX' => $LANG['sex']));
         $stats_array = array();
         foreach (ThemesManager::get_activated_themes_map() as $theme) {
             $stats_array[$theme->get_id()] = PersistenceContext::get_querier()->count(DB_TABLE_MEMBER, "WHERE theme = '" . $theme->get_id() . "'");
         }
         $Stats = new ImagesStats();
         $Stats->load_data($stats_array, 'ellipse');
         foreach ($Stats->data_stats as $name => $angle_value) {
             $array_color = $Stats->array_allocated_color[$Stats->image_color_allocate_dark(false, NO_ALLOCATE_COLOR)];
             $tpl->assign_block_vars('templates', array('NBR_THEME' => NumberHelper::round($angle_value * $Stats->nbr_entry / 360, 0), 'COLOR' => 'RGB(' . $array_color[0] . ', ' . $array_color[1] . ', ' . $array_color[2] . ')', 'THEME' => $name == 'Other' ? $LANG['other'] : $name, 'PERCENT' => NumberHelper::round($angle_value / 3.6, 1)));
         }
         $stats_array = array();
         $result = $this->db_querier->select("SELECT count(ext_field.user_sex) as compt, ext_field.user_sex\r\n\t\t\tFROM " . PREFIX . "member member\r\n\t\t\tLEFT JOIN " . DB_TABLE_MEMBER_EXTENDED_FIELDS . " ext_field ON ext_field.user_id = member.user_id\r\n\t\t\tGROUP BY ext_field.user_sex\r\n\t\t\tORDER BY compt");
         while ($row = $result->fetch()) {
             switch ($row['user_sex']) {
                 case 0:
                     $name = $LANG['unknown'];
                     break;
                 case 1:
                     $name = $LANG['male'];
                     break;
                 case 2:
                     $name = $LANG['female'];
                     break;
             }
             $stats_array[$name] = $row['compt'];
         }
         $result->dispose();
         $Stats->color_index = 0;
         $Stats->load_data($stats_array, 'ellipse');
         foreach ($Stats->data_stats as $name => $angle_value) {
             $array_color = $Stats->array_allocated_color[$Stats->image_color_allocate_dark(false, NO_ALLOCATE_COLOR)];
             $tpl->assign_block_vars('sex', array('NBR_MBR' => NumberHelper::round($angle_value * $Stats->nbr_entry / 360, 0), 'COLOR' => 'RGB(' . $array_color[0] . ', ' . $array_color[1] . ', ' . $array_color[2] . ')', 'SEX' => $name == 'Other' ? $LANG['other'] : $name, 'PERCENT' => NumberHelper::round($angle_value / 3.6, 1)));
         }
         $i = 1;
         $result = $this->db_querier->select("SELECT user_id, display_name, level, groups, posted_msg\r\n\t\t\tFROM " . DB_TABLE_MEMBER . "\r\n\t\t\tORDER BY posted_msg DESC\r\n\t\t\tLIMIT 10 OFFSET 0");
         while ($row = $result->fetch()) {
             $user_group_color = User::get_group_color($row['groups'], $row['level']);
             $tpl->assign_block_vars('top_poster', array('C_USER_GROUP_COLOR' => !empty($user_group_color), 'ID' => $i, 'LOGIN' => $row['display_name'], 'USER_LEVEL_CLASS' => UserService::get_level_class($row['level']), 'USER_GROUP_COLOR' => $user_group_color, 'USER_POST' => $row['posted_msg'], 'U_USER_PROFILE' => UserUrlBuilder::profile($row['user_id'])->rel()));
             $i++;
         }
         $result->dispose();
     } elseif ($visit || $visit_year) {
         //On affiche les visiteurs totaux et du jour
         $compteur = array('nbr_ip' => 0, 'total' => 0);
         try {
             $compteur = $this->db_querier->select_single_row(DB_TABLE_VISIT_COUNTER, array('ip AS nbr_ip', 'total'), 'WHERE id = :id', array('id' => 1));
         } catch (RowNotFoundException $e) {
         }
         $compteur_total = !empty($compteur['nbr_ip']) ? $compteur['nbr_ip'] : '1';
         $compteur_day = !empty($compteur['total']) ? $compteur['total'] : '1';
         $tpl->put_all(array('L_TODAY' => $date_lang['today'], 'L_TOTAL' => $LANG['total'], 'L_AVERAGE' => $LANG['average'], 'L_VISITORS' => $LANG['guest_s'] . ':', 'L_VISITS_DAY' => $LANG['guest_s'], 'L_DAY' => $date_lang['date'], 'L_MONTH' => $date_lang['month'], 'L_SUBMIT' => $LANG['submit']));
         $time = Date::to_format(Date::DATE_NOW, 'Ym');
         $current_year = substr($time, 0, 4);
         $current_month = substr($time, 4, 2);
         $month = retrieve(GET, 'm', (int) $current_month);
         $year = retrieve(GET, 'y', (int) $current_year);
         if ($visit_year) {
             $year = $visit_year;
         }
         //Gestion des mois pour s'adapter au array défini dans lang/main.php
         $array_l_months = array($date_lang['january'], $date_lang['february'], $date_lang['march'], $date_lang['april'], $date_lang['may'], $date_lang['june'], $date_lang['july'], $date_lang['august'], $date_lang['september'], $date_lang['october'], $date_lang['november'], $date_lang['december']);
         if (!empty($visit_year)) {
             //Années précédente et suivante
             $next_year = $visit_year + 1;
             $previous_year = $visit_year - 1;
             //On va chercher le nombre de jours présents dans la table, ainsi que le record mensuel
             $info = array('max_month' => 0, 'sum_month' => 0, 'nbr_month' => 0);
             try {
                 $info = $this->db_querier->select_single_row(StatsSetup::$stats_table, array('MAX(nbr) as max_month', 'SUM(nbr) as sum_month', 'COUNT(DISTINCT(stats_month)) as nbr_month'), 'WHERE stats_year=:year GROUP BY stats_year', array('year' => $visit_year));
             } catch (RowNotFoundException $e) {
             }
             $tpl->put_all(array('C_STATS_VISIT' => true, 'TYPE' => 'visit', 'VISIT_TOTAL' => $compteur_total, 'VISIT_DAY' => $compteur_day, 'YEAR' => $visit_year, 'COLSPAN' => 14, 'SUM_NBR' => $info['sum_month'], 'MAX_NBR' => $info['max_month'], 'MOY_NBR' => !empty($info['nbr_month']) ? NumberHelper::round($info['sum_month'] / $info['nbr_month'], 1) : 1, 'U_NEXT_LINK' => url('.php?year=' . $next_year), 'U_PREVIOUS_LINK' => url('.php?year=' . $previous_year)));
             //Année maximale
             $info_year = array('max_year' => 0, 'min_year' => 0);
             try {
                 $info_year = $this->db_querier->select_single_row(StatsSetup::$stats_table, array('MAX(stats_year) as max_year', 'MIN(stats_year) as min_year'), '');
             } catch (RowNotFoundException $e) {
             }
             $years = '';
             for ($i = $info_year['min_year']; $i <= $info_year['max_year']; $i++) {
                 $selected = $i == $year ? ' selected="selected"' : '';
                 $years .= '<option value="' . $i . '"' . $selected . '>' . $i . '</option>';
             }
             $tpl->put_all(array('C_STATS_YEAR' => true, 'STATS_YEAR' => $years));
             if (@extension_loaded('gd')) {
                 $tpl->put_all(array('GRAPH_RESULT' => '<img src="display_stats.php?visit_year=1&amp;year=' . $visit_year . '" alt="' . $LANG['total_visit'] . '" />'));
                 //On fait la liste des visites journalières
                 $result = $this->db_querier->select("SELECT stats_month, SUM(nbr) AS total\r\n\t\t\t\t\t\tFROM " . StatsSetup::$stats_table . "\r\n\t\t\t\t\t\tWHERE stats_year = :stats_year\r\n\t\t\t\t\t\tGROUP BY stats_month", array('stats_year' => $visit_year));
                 while ($row = $result->fetch()) {
                     //On affiche les stats numériquement dans un tableau en dessous
                     $tpl->assign_block_vars('value', array('U_DETAILS' => '<a href="stats' . url('.php?m=' . $row['stats_month'] . '&amp;y=' . $visit_year . '&amp;visit=1') . '#stats">' . $array_l_months[$row['stats_month'] - 1] . '</a>', 'NBR' => $row['total']));
                 }
                 $result->dispose();
             } else {
                 $max_month = 1;
                 $result = $this->db_querier->select("SELECT SUM(nbr) AS total\r\n\t\t\t\t\t\tFROM " . StatsSetup::$stats_table . "\r\n\t\t\t\t\t\tWHERE stats_year = :stats_year\r\n\t\t\t\t\t\tGROUP BY stats_month", array('stats_year' => $visit_year));
                 while ($row = $result->fetch()) {
                     $max_month = $row['total'] <= $max_month ? $max_month : $row['total'];
                 }
                 $result->dispose();
                 $tpl->put_all(array('C_STATS_NO_GD' => true));
                 $i = 1;
                 $last_month = 1;
                 $months_not_empty = array();
                 $result = $this->db_querier->select("SELECT stats_month, SUM(nbr) AS total\r\n\t\t\t\t\tFROM " . StatsSetup::$stats_table . "\r\n\t\t\t\t\t\tWHERE stats_year = :stats_year\r\n\t\t\t\t\t\tGROUP BY stats_month", array('stats_year' => $visit_year));
                 while ($row = $result->fetch()) {
                     $diff = 0;
                     if ($row['stats_month'] != $i) {
                         $diff = $row['stats_month'] - $i;
                         for ($j = 0; $j < $diff; $j++) {
                             $tpl->assign_block_vars('values', array('HEIGHT' => 0));
                         }
                     }
                     $i += $diff;
                     //On a des stats pour ce mois-ci, on l'enregistre
                     array_push($months_not_empty, $row['stats_month']);
                     //On calcule la proportion (le maximum du mois tiendra toute la hauteur)
                     $height = $row['total'] / $max_month * 200;
                     $tpl->assign_block_vars('values', array('HEIGHT' => ceil($height)));
                     $tpl->assign_block_vars('values.head', array());
                     //On affiche les stats numériquement dans un tableau en dessous
                     $tpl->assign_block_vars('value', array('U_DETAILS' => '<a href="stats' . url('.php?m=' . $row['stats_month'] . '&amp;y=' . $visit_year . '&amp;visit=1') . '#stats">' . $array_l_months[$row['stats_month'] - 1] . '</a>', 'NBR' => $row['total']));
                     $last_month = $row['stats_month'];
                     $i++;
                 }
                 $result->dispose();
                 //Génération des td manquants.
                 $date_day = isset($date_day) ? $date_day : 1;
                 for ($i = $last_month; $i < 12; $i++) {
                     $tpl->assign_block_vars('end_td', array('END_TD' => '<td style="width:13px;">&nbsp;</td>'));
                 }
                 //On liste les jours en dessous du graphique
                 $i = 1;
                 foreach ($array_l_months as $value) {
                     $tpl->assign_block_vars('legend', array('LEGEND' => in_array($i, $months_not_empty) ? '<a href="stats' . url('.php?m=' . $i . '&amp;y=' . $visit_year . '&amp;visit=1') . '#stats">' . substr($value, 0, 3) . '</a>' : substr($value, 0, 3)));
                     $i++;
                 }
             }
         } else {
             //Nombre de jours pour chaque mois (gestion des années bissextiles)
             $bissextile = date("L", mktime(0, 0, 0, 1, 1, $year)) == 1 ? 29 : 28;
             $array_month = array(31, $bissextile, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
             //Mois précédent et suivant
             $next_month = $month < 12 ? $month + 1 : 1;
             $next_year = $month < 12 ? $year : $year + 1;
             $previous_month = $month > 1 ? $month - 1 : 12;
             $previous_year = $month > 1 ? $year : $year - 1;
             //On va chercher le nombre de jours présents dans la table, ainsi que le record mensuel
             $info = array('max_nbr' => 0, 'min_day' => 0, 'sum_nbr' => 0, 'avg_nbr' => 0);
             try {
                 $info = $this->db_querier->select_single_row(StatsSetup::$stats_table, array('MAX(nbr) as max_nbr', 'MIN(stats_day) as min_day', 'SUM(nbr) as sum_nbr', 'AVG(nbr) as avg_nbr'), 'WHERE stats_year=:year AND stats_month=:month GROUP BY stats_month', array('year' => $year, 'month' => $month));
             } catch (RowNotFoundException $e) {
             }
             $tpl->put_all(array('C_STATS_VISIT' => true, 'TYPE' => 'visit', 'VISIT_TOTAL' => $compteur_total, 'VISIT_DAY' => $compteur_day, 'COLSPAN' => $array_month[$month - 1] + 2, 'SUM_NBR' => !empty($info['sum_nbr']) ? $info['sum_nbr'] : 0, 'MONTH' => $array_l_months[$month - 1], 'MAX_NBR' => $info['max_nbr'], 'MOY_NBR' => NumberHelper::round($info['avg_nbr'], 1), 'U_NEXT_LINK' => url('.php?m=' . $next_month . '&amp;y=' . $next_year . '&amp;visit=1', '-visit.php?m=' . $next_month . '&amp;y=' . $next_year), 'U_PREVIOUS_LINK' => url('.php?m=' . $previous_month . '&amp;y=' . $previous_year . '&amp;visit=1', '-visit.php?m=' . $previous_month . '&amp;y=' . $previous_year), 'U_YEAR' => '<a href="stats' . url('.php?year=' . $year) . '#stats">' . $year . '</a>', 'U_VISITS_MORE' => '<a href="stats' . url('.php?year=' . $year) . '#stats">' . $LANG['visits_year'] . ' ' . $year . '</a>'));
             $months = '';
             for ($i = 1; $i <= 12; $i++) {
                 $selected = $i == $month ? ' selected="selected"' : '';
                 $months .= '<option value="' . $i . '"' . $selected . '>' . $array_l_months[$i - 1] . '</option>';
             }
             //Année maximale
             $info_year = array('max_year' => 0, 'min_year' => 0);
             try {
                 $info_year = $this->db_querier->select_single_row(StatsSetup::$stats_table, array('MAX(stats_year) as max_year', 'MIN(stats_year) as min_year'), '');
             } catch (RowNotFoundException $e) {
             }
             $years = '';
             for ($i = $info_year['min_year']; $i <= $info_year['max_year']; $i++) {
                 $selected = $i == $year ? ' selected="selected"' : '';
                 $years .= '<option value="' . $i . '"' . $selected . '>' . $i . '</option>';
             }
             $tpl->put_all(array('C_STATS_YEAR' => true, 'C_STATS_MONTH' => true, 'STATS_YEAR' => $years, 'STATS_MONTH' => $months));
             if (@extension_loaded('gd')) {
                 $tpl->put_all(array('GRAPH_RESULT' => '<img src="display_stats.php?visit_month=1&amp;year=' . $year . '&amp;month=' . $month . '" alt="' . $LANG['total_visit'] . '" />'));
                 //On fait la liste des visites journalières
                 $result = $this->db_querier->select("SELECT nbr, stats_day AS day\r\n\t\t\t\t\t\tFROM " . StatsSetup::$stats_table . "\r\n\t\t\t\t\t\tWHERE stats_year = :year AND stats_month = :month\r\n\t\t\t\t\t\tGROUP BY stats_day", array('year' => $year, 'month' => $month));
                 while ($row = $result->fetch()) {
                     $date_day = $row['day'] < 10 ? 0 . $row['day'] : $row['day'];
                     //On affiche les stats numériquement dans un tableau en dessous
                     $tpl->assign_block_vars('value', array('U_DETAILS' => $date_day . '/' . sprintf('%02d', $month) . '/' . $year, 'NBR' => $row['nbr']));
                 }
                 $result->dispose();
             } else {
                 //Mois selectionné.
                 if (!empty($month) && !empty($year)) {
                     $tpl->put_all(array('C_STATS_NO_GD' => true));
                     //On rajoute un 0 devant tous les mois plus petits que 10
                     $month = $month < 10 ? '0' . $month : $month;
                     unset($i);
                     //On fait la liste des visites journalières
                     $j = 0;
                     $result = $this->db_querier->select("SELECT nbr, stats_day AS day\r\n\t\t\t\t\t\t\tFROM " . StatsSetup::$stats_table . "\r\n\t\t\t\t\t\t\tWHERE stats_year = :year AND stats_month = :month\r\n\t\t\t\t\t\t\tORDER BY stats_day", array('year' => $year, 'month' => $month));
                     while ($row = $result->fetch()) {
                         //Complétion des jours précédent le premier enregistrement du mois.
                         if ($j == 0) {
                             for ($z = 1; $z < $row['day']; $z++) {
                                 $tpl->assign_block_vars('values', array('HEIGHT' => 0));
                             }
                             $j++;
                         }
                         //Remplissage des trous possibles entre les enregistrements.
                         $i = !isset($i) ? $row['day'] : $i;
                         $diff = 0;
                         if ($row['day'] != $i) {
                             $diff = $row['day'] - $i;
                             for ($j = 0; $j < $diff; $j++) {
                                 $tpl->assign_block_vars('values', array('HEIGHT' => 0));
                             }
                         }
                         $i += $diff;
                         //On calcule la proportion (le maximum du mois tiendra toute la hauteur)
                         $height = $row['nbr'] / $info['max_nbr'] * 200;
                         $tpl->assign_block_vars('values', array('HEIGHT' => ceil($height)));
                         $tpl->assign_block_vars('values.head', array());
                         $date_day = $row['day'] < 10 ? 0 . $row['day'] : $row['day'];
                         //On affiche les stats numériquement dans un tableau en dessous
                         $tpl->assign_block_vars('value', array('U_DETAILS' => $date_day . '/' . sprintf('%02d', $month) . '/' . $year, 'NBR' => $row['nbr']));
                         $i++;
                     }
                     $result->dispose();
                     //Génération des td manquants.
                     $date_day = isset($date_day) ? $date_day : 1;
                     for ($i = $date_day; $i < $array_month[$month - 1] - 1; $i++) {
                         $tpl->assign_block_vars('end_td', array('END_TD' => '<td style="width:13px;">&nbsp;</td>'));
                     }
                     //On liste les jours en dessous du graphique
                     for ($i = 1; $i <= $array_month[$month - 1]; $i++) {
                         $tpl->assign_block_vars('legend', array('LEGEND' => $i));
                     }
                 }
             }
         }
     } elseif ($pages || $pages_year) {
         $time = Date::to_format(Date::DATE_NOW, 'Ymj');
         $current_year = substr($time, 0, 4);
         $current_month = substr($time, 4, 2);
         $current_day = substr($time, 6, 2);
         $day = retrieve(GET, 'd', (int) $current_day);
         $month = retrieve(GET, 'm', (int) $current_month);
         if ($pages_year) {
             $condition = 'WHERE stats_year=:year AND pages_detail <> \'\' GROUP BY stats_month';
             $year = $pages_year;
         } elseif (retrieve(GET, 'd', false)) {
             $condition = 'WHERE stats_year=:year AND stats_month=:month AND stats_day=:day AND pages_detail <> \'\' GROUP BY stats_month';
             $year = retrieve(GET, 'y', (int) $current_year);
         } else {
             $condition = 'WHERE stats_year=:year AND stats_month=:month AND pages_detail <> \'\' GROUP BY stats_month';
             $year = retrieve(GET, 'y', (int) $current_year);
         }
         if (empty($pages_year)) {
             //On va chercher le nombre de jours présents dans la table, ainsi que le record mensuel
             $info = array('max_nbr' => 0, 'min_day' => 0, 'sum_nbr' => 0, 'avg_nbr' => 0);
             try {
                 $info = $this->db_querier->select_single_row(StatsSetup::$stats_table, array('MAX(pages) as max_nbr', 'MIN(stats_day) as min_day', 'SUM(pages) as sum_nbr', 'AVG(pages) as avg_nbr', 'COUNT(DISTINCT(stats_month)) as nbr_month', 'pages'), $condition, array('year' => $year, 'month' => $month, 'day' => $day));
             } catch (RowNotFoundException $e) {
             }
         }
         //On affiche les visiteurs totaux et du jour
         $compteur_total = $this->db_querier->get_column_value(StatsSetup::$stats_table, 'SUM(pages)', '');
         $compteur_day = array_sum(StatsSaver::retrieve_stats('pages')) + 1;
         $compteur_total = $compteur_total + $compteur_day;
         $compteur_day = !empty($compteur_day) ? $compteur_day : '1';
         $tpl->put_all(array('L_TODAY' => $date_lang['today'], 'L_TOTAL' => $LANG['total'], 'L_AVERAGE' => $LANG['average'], 'L_VISITORS' => $LANG['page_s'] . ':', 'L_VISITS_DAY' => $LANG['page_s'], 'L_DAY' => $date_lang['date'], 'L_MONTH' => $date_lang['month'], 'L_SUBMIT' => $LANG['submit']));
         //Gestion des mois pour s'adapter au array défini dans lang/main.php
         $array_l_months = array($date_lang['january'], $date_lang['february'], $date_lang['march'], $date_lang['april'], $date_lang['may'], $date_lang['june'], $date_lang['july'], $date_lang['august'], $date_lang['september'], $date_lang['october'], $date_lang['november'], $date_lang['december']);
         if (!empty($pages_year)) {
             //Années précédente et suivante
             $next_year = $pages_year + 1;
             $previous_year = $pages_year - 1;
             //On va chercher le nombre de jours présents dans la table, ainsi que le record mensuel
             $info = array('max_nbr' => 0, 'sum_nbr' => 0, 'nbr_month' => 0);
             try {
                 $info = $this->db_querier->select_single_row(StatsSetup::$stats_table, array('MAX(pages) as max_nbr', 'SUM(pages) as sum_nbr', 'COUNT(DISTINCT(stats_month)) as nbr_month'), 'WHERE stats_year = :year AND pages_detail <> \'\' GROUP BY stats_year', array('year' => $pages_year));
             } catch (RowNotFoundException $e) {
             }
             $tpl->put_all(array('C_STATS_VISIT' => true, 'TYPE' => 'pages', 'VISIT_TOTAL' => $compteur_total, 'VISIT_DAY' => $compteur_day, 'YEAR' => $pages_year, 'COLSPAN' => 13, 'SUM_NBR' => $info['sum_nbr'], 'MAX_NBR' => $info['max_nbr'], 'MOY_NBR' => !empty($info['nbr_month']) ? NumberHelper::round($info['sum_nbr'] / $info['nbr_month'], 1) : 0, 'U_NEXT_LINK' => url('.php?pages_year=' . $next_year), 'U_PREVIOUS_LINK' => url('.php?pages_year=' . $previous_year)));
             //Année maximale
             $info_year = array('max_year' => 0, 'min_year' => 0);
             try {
                 $info_year = $this->db_querier->select_single_row(StatsSetup::$stats_table, array('MAX(stats_year) as max_year', 'MIN(stats_year) as min_year'), '');
             } catch (RowNotFoundException $e) {
             }
             $years = '';
             for ($i = $info_year['min_year']; $i <= $info_year['max_year']; $i++) {
                 $selected = $i == $year ? ' selected="selected"' : '';
                 $years .= '<option value="' . $i . '"' . $selected . '>' . $i . '</option>';
             }
             $tpl->put_all(array('C_STATS_YEAR' => true, 'STATS_YEAR' => $years));
             if (@extension_loaded('gd')) {
                 $tpl->put_all(array('GRAPH_RESULT' => '<img src="display_stats.php?pages_year=1&amp;year=' . $pages_year . '" alt="' . $LANG['total_visit'] . '" />'));
                 //On fait la liste des visites journalières
                 $result = $this->db_querier->select("SELECT  stats_month, SUM(pages) AS total\r\n\t\t\t\t\t\tFROM " . StatsSetup::$stats_table . "\r\n\t\t\t\t\t\tWHERE stats_year = :stats_year\r\n\t\t\t\t\t\tGROUP BY stats_month", array('stats_year' => $pages_year));
                 while ($row = $result->fetch()) {
                     //On affiche les stats numériquement dans un tableau en dessous
                     $tpl->assign_block_vars('value', array('U_DETAILS' => '<a href="stats' . url('.php?m=' . $row['stats_month'] . '&amp;y=' . $pages_year . '&amp;pages=1') . '#stats">' . $array_l_months[$row['stats_month'] - 1] . '</a>', 'NBR' => $row['total']));
                 }
                 $result->dispose();
             } else {
                 $result = $this->db_querier->select("SELECT SUM(nbr) AS total\r\n\t\t\t\t\t\tFROM " . StatsSetup::$stats_table . "\r\n\t\t\t\t\t\tWHERE stats_year = :stats_year\r\n\t\t\t\t\t\tGROUP BY stats_month", array('stats_year' => $visit_year));
                 $max_month = 1;
                 while ($row = $result->fetch()) {
                     $max_month = $row['total'] <= $max_month ? $max_month : $row['total'];
                 }
                 $tpl->put_all(array('C_STATS_NO_GD' => true));
                 $i = 1;
                 $last_month = 1;
                 $months_not_empty = array();
                 $result = $this->db_querier->select("SELECT stats_month, SUM(pages) AS total\r\n\t\t\t\t\t\tFROM " . StatsSetup::$stats_table . "\r\n\t\t\t\t\t\tWHERE stats_year = :stats_year\r\n\t\t\t\t\t\tGROUP BY stats_month", array('stats_year' => $visit_year));
                 while ($row = $result->fetch()) {
                     $diff = 0;
                     if ($row['stats_month'] != $i) {
                         $diff = $row['stats_month'] - $i;
                         for ($j = 0; $j < $diff; $j++) {
                             $tpl->assign_block_vars('values', array('HEIGHT' => 0));
                         }
                     }
                     $i += $diff;
                     //On a des stats pour ce mois-ci, on l'enregistre
                     array_push($months_not_empty, $row['stats_month']);
                     //On calcule la proportion (le maximum du mois tiendra toute la hauteur)
                     $height = $row['total'] / $info['max_month'] * 200;
                     $tpl->assign_block_vars('months', array('HEIGHT' => ceil($height)));
                     $tpl->assign_block_vars('values.head', array());
                     //On affiche les stats numériquement dans un tableau en dessous
                     $tpl->assign_block_vars('value', array('U_DETAILS' => '<a href="stats' . url('.php?m=' . $row['stats_month'] . '&amp;y=' . $pages_year . '&amp;pages=1') . '#stats">' . $array_l_months[$row['stats_month'] - 1] . '</a>', 'NBR' => $row['total']));
                     $last_month = $row['stats_month'];
                     $i++;
                 }
                 $result->dispose();
                 //Génération des td manquants.
                 $date_day = isset($date_day) ? $date_day : 1;
                 for ($i = $last_month; $i < 12; $i++) {
                     $tpl->assign_block_vars('end_td', array('END_TD' => '<td style="width:13px;">&nbsp;</td>'));
                 }
                 //On liste les jours en dessous du graphique
                 $i = 1;
                 foreach ($array_l_months as $value) {
                     $tpl->assign_block_vars('legend', array('LEGEND' => in_array($i, $months_not_empty) ? '<a href="stats' . url('.php?m=' . $i . '&amp;y=' . $pages_year . '&amp;pages=1') . '#stats">' . substr($value, 0, 3) . '</a>' : substr($value, 0, 3)));
                     $i++;
                 }
             }
         } elseif (retrieve(GET, 'd', false)) {
             //Nombre de jours pour chaque mois (gestion des années bissextiles)
             $bissextile = date("L", mktime(0, 0, 0, 1, 1, $year)) == 1 ? 29 : 28;
             $array_month = array(31, $bissextile, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
             //Mois précédent et suivant
             $check_day = $day < $array_month[$month - 1];
             $next_day = $check_day ? $day + 1 : 1;
             $next_month = !$check_day && $month < 12 ? $month + 1 : $month;
             $next_year = !$check_day && $month == 12 ? $year + 1 : $year;
             $previous_day = $day > 1 ? $day - 1 : $array_month[$month - 1];
             $previous_month = $month > 1 ? $day == 1 ? $month - 1 : $month : 12;
             $previous_year = $month > 1 ? $year : $year - 1;
             $tpl->put_all(array('C_STATS_VISIT' => true, 'TYPE' => 'pages', 'VISIT_TOTAL' => $compteur_total, 'VISIT_DAY' => $compteur_day, 'SUM_NBR' => !empty($info['sum_nbr']) ? $info['sum_nbr'] : 0, 'MONTH' => $array_l_months[$month - 1], 'MAX_NBR' => $info['max_nbr'], 'MOY_NBR' => NumberHelper::round($info['avg_nbr'], 1), 'U_NEXT_LINK' => url('.php?d=' . $next_day . '&amp;m=' . $next_month . '&amp;y=' . $next_year . '&amp;pages=1', '-pages.php?d=' . $next_day . '&amp;m=' . $next_month . '&amp;y=' . $next_year), 'U_PREVIOUS_LINK' => url('.php?d=' . $previous_day . '&amp;m=' . $previous_month . '&amp;y=' . $previous_year . '&amp;pages=1', '-pages.php?d=' . $previous_day . '&amp;m=' . $previous_month . '&amp;y=' . $previous_year), 'U_YEAR' => '<a href="stats' . url('.php?pages_year=' . $year) . '#stats">' . $year . '</a>', 'U_VISITS_MORE' => '<a href="stats' . url('.php?pages_year=' . $year) . '#stats">' . $LANG['visits_year'] . ' ' . $year . '</a>'));
             $days = '';
             for ($i = 1; $i <= $array_month[$month - 1]; $i++) {
                 $selected = $i == $day ? ' selected="selected"' : '';
                 $days .= '<option value="' . $i . '"' . $selected . '>' . $i . '</option>';
             }
             $months = '';
             for ($i = 1; $i <= 12; $i++) {
                 $selected = $i == $month ? ' selected="selected"' : '';
                 $months .= '<option value="' . $i . '"' . $selected . '>' . $array_l_months[$i - 1] . '</option>';
             }
             //Année maximale
             $info_year = array('max_year' => 0, 'min_year' => 0);
             try {
                 $info_year = $this->db_querier->select_single_row(StatsSetup::$stats_table, array('MAX(stats_year) as max_year', 'MIN(stats_year) as min_year'), '');
             } catch (RowNotFoundException $e) {
             }
             $years = '';
             for ($i = $info_year['min_year']; $i <= $info_year['max_year']; $i++) {
                 $selected = $i == $year ? ' selected="selected"' : '';
                 $years .= '<option value="' . $i . '"' . $selected . '>' . $i . '</option>';
             }
             $tpl->put_all(array('C_STATS_DAY' => true, 'C_STATS_MONTH' => true, 'C_STATS_YEAR' => true, 'STATS_DAY' => $days, 'STATS_MONTH' => $months, 'STATS_YEAR' => $years, 'GRAPH_RESULT' => '<img src="display_stats.php?pages_day=1&amp;year=' . $year . '&amp;month=' . $month . '&amp;day=' . $day . '" alt="' . $LANG['total_visit'] . '" />'));
             //On fait la liste des visites journalières
             $result = $this->db_querier->select("SELECT pages, stats_day, stats_month, stats_year\r\n\t\t\t\t\tFROM " . StatsSetup::$stats_table . "\r\n\t\t\t\t\tWHERE stats_year = :stats_year AND stats_month = :stats_month\r\n\t\t\t\t\tGROUP BY stats_day", array('stats_year' => $year, 'stats_month' => $month));
             while ($row = $result->fetch()) {
                 $date_day = $row['stats_day'] < 10 ? 0 . $row['stats_day'] : $row['stats_day'];
                 //On affiche les stats numériquement dans un tableau en dessous
                 $tpl->assign_block_vars('value', array('U_DETAILS' => '<a href="stats' . url('.php?d=' . $row['stats_day'] . '&amp;m=' . $row['stats_month'] . '&amp;y=' . $row['stats_year'] . '&amp;pages=1', '-pages.php?d=' . $row['stats_day'] . '&amp;m=' . $row['stats_month'] . '&amp;y=' . $row['stats_year']) . '#stats">' . $date_day . '/' . sprintf('%02d', $row['stats_month']) . '/' . $row['stats_year'] . '</a>', 'NBR' => $row['pages']));
             }
             $result->dispose();
         } else {
             //Nombre de jours pour chaque mois (gestion des années bissextiles)
             $bissextile = date("L", mktime(0, 0, 0, 1, 1, $year)) == 1 ? 29 : 28;
             $array_month = array(31, $bissextile, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
             //Mois précédent et suivant
             $next_month = $month < 12 ? $month + 1 : 1;
             $next_year = $month < 12 ? $year : $year + 1;
             $previous_month = $month > 1 ? $month - 1 : 12;
             $previous_year = $month > 1 ? $year : $year - 1;
             $tpl->put_all(array('C_STATS_VISIT' => true, 'TYPE' => 'pages', 'VISIT_TOTAL' => $compteur_total, 'VISIT_DAY' => $compteur_day, 'COLSPAN' => $array_month[$month - 1] + 2, 'SUM_NBR' => !empty($info['sum_nbr']) ? $info['sum_nbr'] : 0, 'MONTH' => $array_l_months[$month - 1], 'MAX_NBR' => $info['max_nbr'], 'MOY_NBR' => NumberHelper::round($info['avg_nbr'], 1), 'U_NEXT_LINK' => url('.php?m=' . $next_month . '&amp;y=' . $next_year . '&amp;pages=1', '-pages.php?m=' . $next_month . '&amp;y=' . $next_year), 'U_PREVIOUS_LINK' => url('.php?m=' . $previous_month . '&amp;y=' . $previous_year . '&amp;pages=1', '-pages.php?m=' . $previous_month . '&amp;y=' . $previous_year), 'U_YEAR' => '<a href="stats' . url('.php?pages_year=' . $year) . '#stats">' . $year . '</a>', 'U_VISITS_MORE' => '<a href="stats' . url('.php?pages_year=' . $year) . '#stats">' . $LANG['visits_year'] . ' ' . $year . '</a>'));
             $months = '';
             for ($i = 1; $i <= 12; $i++) {
                 $selected = $i == $month ? ' selected="selected"' : '';
                 $months .= '<option value="' . $i . '"' . $selected . '>' . $array_l_months[$i - 1] . '</option>';
             }
             //Année maximale
             $info_year = array('max_year' => 0, 'min_year' => 0);
             try {
                 $info_year = $this->db_querier->select_single_row(StatsSetup::$stats_table, array('MAX(stats_year) as max_year', 'MIN(stats_year) as min_year'), '');
             } catch (RowNotFoundException $e) {
             }
             $years = '';
             for ($i = $info_year['min_year']; $i <= $info_year['max_year']; $i++) {
                 $selected = $i == $year ? ' selected="selected"' : '';
                 $years .= '<option value="' . $i . '"' . $selected . '>' . $i . '</option>';
             }
             $tpl->put_all(array('C_STATS_YEAR' => true, 'C_STATS_MONTH' => true, 'STATS_YEAR' => $years, 'STATS_MONTH' => $months));
             if (@extension_loaded('gd')) {
                 $tpl->put_all(array('GRAPH_RESULT' => '<img src="display_stats.php?pages_month=1&amp;year=' . $year . '&amp;month=' . $month . '" alt="' . $LANG['total_visit'] . '" />'));
                 //On fait la liste des visites journalières
                 $result = $this->db_querier->select("SELECT pages, stats_day, stats_month, stats_year\r\n\t\t\t\t\t\tFROM " . StatsSetup::$stats_table . "\r\n\t\t\t\t\t\tWHERE stats_year = :stats_year AND stats_month = :stats_month\r\n\t\t\t\t\t\tGROUP BY stats_day", array('stats_year' => $year, 'stats_month' => $month));
                 while ($row = $result->fetch()) {
                     $date_day = $row['stats_day'] < 10 ? 0 . $row['stats_day'] : $row['stats_day'];
                     //On affiche les stats numériquement dans un tableau en dessous
                     $tpl->assign_block_vars('value', array('U_DETAILS' => '<a href="stats' . url('.php?d=' . $row['stats_day'] . '&amp;m=' . $row['stats_month'] . '&amp;y=' . $row['stats_year'] . '&amp;pages=1', '-pages.php?d=' . $row['stats_day'] . '&amp;m=' . $row['stats_month'] . '&amp;y=' . $row['stats_year']) . '#stats">' . $date_day . '/' . sprintf('%02d', $row['stats_month']) . '/' . $row['stats_year'] . '</a>', 'NBR' => $row['pages']));
                 }
                 $result->dispose();
             } else {
                 //Mois selectionné.
                 if (!empty($month) && !empty($year)) {
                     $tpl->put_all(array('C_STATS_NO_GD' => true));
                     //On rajoute un 0 devant tous les mois plus petits que 10
                     $month = $month < 10 ? '0' . $month : $month;
                     unset($i);
                     //On fait la liste des visites journalières
                     $j = 0;
                     $result = $this->db_querier->select("SELECT pages, stats_day AS day, stats_month, stats_year\r\n\t\t\t\t\t\t\tFROM " . StatsSetup::$stats_table . "\r\n\t\t\t\t\t\t\tWHERE stats_year = :stats_year AND stats_month = :stats_month\r\n\t\t\t\t\t\t\tGROUP BY stats_day", array('stats_year' => $year, 'stats_month' => $month));
                     while ($row = $result->fetch()) {
                         //Complétion des jours précédent le premier enregistrement du mois.
                         if ($j == 0) {
                             for ($z = 1; $z < $row['day']; $z++) {
                                 $tpl->assign_block_vars('days', array('HEIGHT' => 0));
                             }
                             $j++;
                         }
                         //Remplissage des trous possibles entre les enregistrements.
                         $i = !isset($i) ? $row['day'] : $i;
                         $diff = 0;
                         if ($row['day'] != $i) {
                             $diff = $row['day'] - $i;
                             for ($j = 0; $j < $diff; $j++) {
                                 $tpl->assign_block_vars('days', array('HEIGHT' => 0));
                             }
                         }
                         $i += $diff;
                         //On calcule la proportion (le maximum du mois tiendra toute la hauteur)
                         $height = $row['pages'] / $info['max_nbr'] * 200;
                         $tpl->assign_block_vars('values', array('HEIGHT' => ceil($height)));
                         $tpl->assign_block_vars('values.head', array());
                         $date_day = $row['day'] < 10 ? 0 . $row['day'] : $row['day'];
                         //On affiche les stats numériquement dans un tableau en dessous
                         $tpl->assign_block_vars('value', array('U_DETAILS' => $date_day . '/' . sprintf('%02d', $row['stats_month']) . '/' . $row['stats_year'], 'NBR' => $row['pages']));
                         $i++;
                     }
                     $result->dispose();
                     //Génération des td manquants.
                     $date_day = isset($date_day) ? $date_day : 1;
                     for ($i = $date_day; $i < $array_month[$month - 1] - 1; $i++) {
                         $tpl->assign_block_vars('end_td', array('END_TD' => '<td style="width:13px;">&nbsp;</td>'));
                     }
                     //On liste les jours en dessous du graphique
                     for ($i = 1; $i <= $array_month[$month - 1]; $i++) {
                         $tpl->assign_block_vars('legend', array('LEGEND' => $i));
                     }
                 }
             }
         }
     } elseif ($referer) {
         include_once PATH_TO_ROOT . '/stats/stats_functions.php';
         $nbr_referer = $this->db_querier->count(StatsSetup::$stats_referer_table, 'WHERE type = :type', array('type' => 0), 'DISTINCT(url)');
         $page = AppContext::get_request()->get_getint('p', 1);
         $pagination = new ModulePagination($page, $nbr_referer, $_NBR_ELEMENTS_PER_PAGE);
         $pagination->set_url(new Url('/stats/admin_stats.php?referer=1&amp;p=%d'));
         if ($pagination->current_page_is_empty() && $page > 1) {
             $error_controller = PHPBoostErrors::unexisting_page();
             DispatchManager::redirect($error_controller);
         }
         $result = $this->db_querier->select("SELECT id, COUNT(*) as count, url, relative_url, SUM(total_visit) as total_visit, SUM(today_visit) as today_visit, SUM(yesterday_visit) as yesterday_visit, nbr_day, MAX(last_update) as last_update\r\n\t\t\t\tFROM " . PREFIX . "stats_referer\r\n\t\t\t\tWHERE type = 0\r\n\t\t\t\tGROUP BY url\r\n\t\t\t\tORDER BY total_visit DESC\r\n\t\t\t\tLIMIT :number_items_per_page OFFSET :display_from", array('number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from()));
         while ($row = $result->fetch()) {
             $trend_parameters = get_trend_parameters($row['total_visit'], $row['nbr_day'], $row['yesterday_visit'], $row['today_visit']);
             $tpl->assign_block_vars('referer_list', array('ID' => $row['id'], 'URL' => $row['url'], 'IMG_MORE' => '<a class="fa fa-plus-square-o" style="cursor:pointer;" onclick="XMLHttpRequest_referer(' . $row['id'] . ')" id="img_url' . $row['id'] . '"></a>', 'NBR_LINKS' => $row['count'], 'TOTAL_VISIT' => $row['total_visit'], 'AVERAGE_VISIT' => $trend_parameters['average'], 'LAST_UPDATE' => Date::to_format($row['last_update'], Date::FORMAT_DAY_MONTH_YEAR), 'TREND' => ($trend_parameters['picture'] ? '<i class="fa fa-trend-' . $trend_parameters['picture'] . '"></i> ' : '') . '(' . $trend_parameters['sign'] . $trend_parameters['trend'] . '%)'));
         }
         $result->dispose();
         $tpl->put_all(array('C_STATS_REFERER' => true, 'C_REFERERS' => $nbr_referer, 'C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display(), 'L_URL' => $LANG['url'], 'L_TOTAL_VISIT' => $LANG['total_visit'], 'L_AVERAGE_VISIT' => $LANG['average_visit'], 'L_TREND' => $LANG['trend'], 'L_LAST_UPDATE' => $LANG['last_update'], 'L_NO_REFERER' => $LANG['no_referer']));
     } elseif ($keyword) {
         include_once PATH_TO_ROOT . '/stats/stats_functions.php';
         $nbr_keyword = $this->db_querier->count(StatsSetup::$stats_referer_table, 'WHERE type = :type', array('type' => 1), 'DISTINCT(relative_url)');
         $page = AppContext::get_request()->get_getint('p', 1);
         $pagination = new ModulePagination($page, $nbr_keyword, $_NBR_ELEMENTS_PER_PAGE);
         $pagination->set_url(new Url('/stats/admin_stats.php?keyword=1&amp;p=%d'));
         if ($pagination->current_page_is_empty() && $page > 1) {
             $error_controller = PHPBoostErrors::unexisting_page();
             DispatchManager::redirect($error_controller);
         }
         $result = $this->db_querier->select("SELECT id, count(*) as count, relative_url, SUM(total_visit) as total_visit, SUM(today_visit) as today_visit, SUM(yesterday_visit) as yesterday_visit, nbr_day, MAX(last_update) as last_update\r\n\t\t\t\tFROM " . PREFIX . "stats_referer\r\n\t\t\t\tWHERE type = 1\r\n\t\t\t\tGROUP BY relative_url\r\n\t\t\t\tORDER BY total_visit DESC\r\n\t\t\t\tLIMIT :number_items_per_page OFFSET :display_from", array('number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from()));
         while ($row = $result->fetch()) {
             $trend_parameters = get_trend_parameters($row['total_visit'], $row['nbr_day'], $row['yesterday_visit'], $row['today_visit']);
             $tpl->assign_block_vars('keyword_list', array('ID' => $row['id'], 'KEYWORD' => $row['relative_url'], 'IMG_MORE' => '<a class="fa fa-plus-square-o" style="cursor:pointer;" onclick="XMLHttpRequest_referer(' . $row['id'] . ')" id="img_url' . $row['id'] . '"></a>', 'NBR_LINKS' => $row['count'], 'TOTAL_VISIT' => $row['total_visit'], 'AVERAGE_VISIT' => $trend_parameters['average'], 'LAST_UPDATE' => Date::to_format($row['last_update'], Date::FORMAT_DAY_MONTH_YEAR), 'TREND' => ($trend_parameters['picture'] ? '<i class="fa fa-trend-' . $trend_parameters['picture'] . '"></i> ' : '') . '(' . $trend_parameters['sign'] . $trend_parameters['trend'] . '%)'));
         }
         $result->dispose();
         $tpl->put_all(array('C_STATS_KEYWORD' => true, 'C_KEYWORDS' => $nbr_keyword, 'C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display(), 'L_SEARCH_ENGINE' => $LANG['keyword_s'], 'L_TOTAL_VISIT' => $LANG['total_visit'], 'L_AVERAGE_VISIT' => $LANG['average_visit'], 'L_TREND' => $LANG['trend'], 'L_LAST_UPDATE' => $LANG['last_update'], 'L_NO_KEYWORD' => $LANG['no_keyword']));
     } elseif ($browser || $os || $user_lang) {
         $path = '../images/stats/';
         if (!empty($browser)) {
             $tpl->put_all(array('C_STATS_BROWSERS' => true, 'GRAPH_RESULT' => !file_exists('../cache/browsers.png') ? '<img src="display_stats.php?browsers=1" alt="' . $LANG['browser_s'] . '" />' : '<img src="../cache/browsers.png" alt="' . $LANG['browser_s'] . '" />', 'L_BROWSERS' => $LANG['browser_s'], 'L_COLORS' => $LANG['colors'], 'L_PERCENTAGE' => $LANG['percentage']));
             $stats_menu = 'browsers';
             $array_stats_info = $stats_array_browsers;
             $path = '../images/stats/browsers/';
         } elseif (!empty($os)) {
             $tpl->put_all(array('C_STATS_OS' => true, 'GRAPH_RESULT' => !file_exists('../cache/os.png') ? '<img src="display_stats.php?os=1" alt="' . $LANG['os'] . '" />' : '<img src="../cache/os.png" alt="' . $LANG['os'] . '" />', 'L_OS' => $LANG['os'], 'L_COLORS' => $LANG['colors'], 'L_PERCENTAGE' => $LANG['percentage']));
             $stats_menu = 'os';
             $array_stats_info = $stats_array_os;
             $path = '../images/stats/os/';
         } elseif (!empty($user_lang)) {
             $tpl->put_all(array('C_STATS_LANG' => true, 'GRAPH_RESULT' => !file_exists('../cache/lang.png') ? '<img src="display_stats.php?lang=1" alt="' . $LANG['stat_lang'] . '" />' : '<img src="../cache/lang.png" alt="' . $LANG['stat_lang'] . '" />', 'L_LANG' => $LANG['stat_lang'], 'L_COLORS' => $LANG['colors'], 'L_PERCENTAGE' => $LANG['percentage']));
             $stats_menu = 'lang';
             $array_stats_info = $stats_array_lang;
             $path = '../images/stats/countries/';
         }
         $Stats = new ImagesStats();
         $Stats->load_data(StatsSaver::retrieve_stats($stats_menu), 'ellipse', 5);
         //Tri décroissant.
         arsort($Stats->data_stats);
         //Traitement des données.
         $array_stats_tmp = array();
         $array_order = array();
         $percent_other = 0;
         foreach ($Stats->data_stats as $value_name => $angle_value) {
             if (!isset($array_stats_info[$value_name]) || $value_name == 'other') {
                 $value_name = 'other';
                 $angle_value += $percent_other;
                 $percent_other += $angle_value;
                 $stats_img = !empty($array_stats_info['other'][1]) ? '<img src="' . $path . $array_stats_info['other'][1] . '" alt="' . $LANG['other'] . '" />' : '<img src="' . TPL_PATH_TO_ROOT . '/images/stats/other.png" alt="' . $LANG['other'] . '" />';
                 $name_stats = $LANG['other'];
             } else {
                 $stats_img = !empty($array_stats_info[$value_name][1]) ? '<img src="' . $path . $array_stats_info[$value_name][1] . '" alt="' . $array_stats_info[$value_name][0] . '" />' : '-';
                 $name_stats = $array_stats_info[$value_name][0];
             }
             if (!isset($array_order[$value_name])) {
                 $array_color = $Stats->array_allocated_color[$Stats->image_color_allocate_dark(false, NO_ALLOCATE_COLOR)];
                 $array_stats_tmp[$value_name] = array($name_stats, $array_color, $stats_img);
                 $array_order[$value_name] = $angle_value;
             }
         }
         //Affichage.
         foreach ($array_order as $value_name => $angle_value) {
             $tpl->assign_block_vars('list', array('COLOR' => 'RGB(' . trim(implode(', ', $array_stats_tmp[$value_name][1]), ', ') . ')', 'IMG' => $array_stats_tmp[$value_name][2], 'L_NAME' => $array_stats_tmp[$value_name][0], 'PERCENT' => NumberHelper::round($angle_value / 3.6, 1)));
         }
     } else {
         $tpl->put_all(array('C_STATS_SITE' => true, 'START' => GeneralConfig::load()->get_site_install_date()->format(Date::FORMAT_DAY_MONTH_YEAR), 'VERSION' => GeneralConfig::load()->get_phpboost_major_version(), 'L_START' => $LANG['start'], 'L_VERSION' => $LANG['version']));
     }
     return $tpl;
 }
Example #20
0
while ($row = $result->fetch()) {
    if (!empty($row['user_id'])) {
        $group_color = User::get_group_color($row['groups'], $row['level']);
        $com_pseudo = '<a href="' . UserUrlBuilder::profile($row['user_id'])->rel() . '" title="' . $row['display_name'] . '" class="' . UserService::get_level_class($row['level']) . '"' . (!empty($group_color) ? ' style="color:' . $group_color . '"' : '') . '>' . TextHelper::wordwrap_html($row['display_name'], 13) . '</a>';
    } else {
        $com_pseudo = '<span style="font-style:italic;">' . (!empty($row['display_name']) ? TextHelper::wordwrap_html($row['display_name'], 13) : $LANG['guest']) . '</span>';
    }
    $tpl->assign_block_vars('comments_list', array('CONTENT' => FormatingHelper::second_parse($row['message']), 'U_PSEUDO' => $com_pseudo, 'U_LINK' => Url::to_rel($row['path']) . '#com' . $row['id']));
    $i++;
}
$result->dispose();
//Advises
$advises_form = new HTMLForm('advises_list', '', false);
AdminServerSystemReportController::get_advises($advises_form);
//Header logo
$theme = ThemesManager::get_theme(AppContext::get_current_user()->get_theme());
$customize_interface = $theme->get_customize_interface();
$header_logo_path = $customize_interface->get_header_logo_path();
$tpl->put_all(array('L_QUICK_ACCESS' => $LANG['quick_access'], 'L_ADD_CONTENT' => $LANG['add_content'], 'L_MODULES_MANAGEMENT' => $LANG['modules_management'], 'L_ADD_ARTICLES' => $LANG['add_articles'], 'L_ADD_NEWS' => $LANG['add_news'], 'L_CUSTOMIZE_SITE' => $LANG['customize_site'], 'L_ADD_TEMPLATE' => $LANG['add_template'], 'L_MENUS_MANAGEMENT' => $LANG['menus_management'], 'L_CUSTOMIZE_TEMPLATE' => $LANG['customize_template'], 'L_SITE_MANAGEMENT' => $LANG['site_management'], 'L_GENERAL_CONFIG' => $LANG['general_config'], 'L_EMPTY_CACHE' => $LANG['empty_cache'], 'L_SAVE_DATABASE' => $LANG['save_database'], 'L_WELCOME_TITLE' => $LANG['welcome_title'], 'L_WELCOME_DESC' => $LANG['welcome_desc'], 'WRITING_PAD_CONTENT' => WritingPadConfig::load()->get_content(), 'C_HEADER_LOGO' => !empty($header_logo_path), 'HEADER_LOGO' => Url::to_rel($header_logo_path), 'C_NO_COM' => $i == 0, 'C_UNREAD_ALERTS' => (bool) AdministratorAlertService::get_number_unread_alerts(), 'L_INDEX_ADMIN' => $LANG['administration'], 'L_ADMIN_ALERTS' => $LANG['administrator_alerts'], 'L_NO_UNREAD_ALERT' => $LANG['no_unread_alert'], 'L_UNREAD_ALERT' => $LANG['unread_alerts'], 'L_DISPLAY_ALL_ALERTS' => $LANG['display_all_alerts'], 'L_ADMINISTRATOR_ALERTS' => $LANG['administrator_alerts'], 'L_QUICK_LINKS' => $LANG['quick_links'], 'L_ACTION_USERS_MANAGEMENT' => $LANG['action.members_management'], 'L_ACTION_MENUS_MANAGEMENT' => $LANG['action.menus_management'], 'L_ACTION_MODULES_MANAGEMENT' => $LANG['action.modules_management'], 'L_ACTION_THEMES_MANAGEMENT' => $LANG['action.themes_management'], 'L_ACTION_LANGS_MANAGEMENT' => $LANG['action.langs_management'], 'L_NO_COMMENT' => LangLoader::get_message('no_item_now', 'common'), 'L_LAST_COMMENTS' => $LANG['last_comments'], 'L_VIEW_ALL_COMMENTS' => $LANG['view_all_comments'], 'L_WRITING_PAD' => $LANG['writing_pad'], 'L_STATS' => $LANG['stats'], 'L_USER_ONLINE' => $LANG['user_online'], 'L_USER_IP' => $LANG['user_ip'], 'L_LOCALISATION' => $LANG['localisation'], 'L_LAST_UPDATE' => $LANG['last_update'], 'L_WEBSITE_UPDATES' => $LANG['website_updates'], 'L_BY' => $LANG['by'], 'L_UPDATE' => $LANG['update'], 'L_RESET' => $LANG['reset'], 'ADVISES' => $advises_form->display()));
//Liste des personnes en lignes.
$result = PersistenceContext::get_querier()->select("SELECT s.user_id, s.ip, s.timestamp, s.location_script, s.location_title, m.display_name, m.groups, m.level\nFROM " . DB_TABLE_SESSIONS . " s\nLEFT JOIN " . DB_TABLE_MEMBER . " m ON s.user_id = m.user_id\nWHERE s.timestamp > :timestamp\nORDER BY s.timestamp DESC", array('timestamp' => time() - SessionsConfig::load()->get_active_session_duration()));
while ($row = $result->fetch()) {
    //On vérifie que la session ne correspond pas à un robot.
    $robot = Robots::get_robot_by_ip($row['ip']);
    switch ($row['level']) {
        case User::MEMBER_LEVEL:
            $class = 'member';
            break;
        case User::MODERATOR_LEVEL:
            $class = 'modo';
            break;
 private function configure_theme($theme)
 {
     ThemesManager::install($theme);
 }
Example #22
0
$menu_template->put_all(array('L_ENABLED' => LangLoader::get_message('enabled', 'common'), 'L_DISABLED' => LangLoader::get_message('disabled', 'common'), 'I_HEADER' => Menu::BLOCK_POSITION__HEADER, 'I_SUBHEADER' => Menu::BLOCK_POSITION__SUB_HEADER, 'I_TOPCENTRAL' => Menu::BLOCK_POSITION__TOP_CENTRAL, 'I_BOTTOMCENTRAL' => Menu::BLOCK_POSITION__BOTTOM_CENTRAL, 'I_TOPFOOTER' => Menu::BLOCK_POSITION__TOP_FOOTER, 'I_FOOTER' => Menu::BLOCK_POSITION__FOOTER, 'I_LEFT' => Menu::BLOCK_POSITION__LEFT, 'I_RIGHT' => Menu::BLOCK_POSITION__RIGHT, 'U_TOKEN' => AppContext::get_session()->get_token()));
foreach ($menus_blocks as $block_id => $menus) {
    // For each block
    $i = 0;
    $max = count($menus);
    foreach ($menus as $menu) {
        // For each Menu in this block
        $menu_tpl = clone $menu_template;
        $id = $menu->get_id();
        $enabled = $menu->is_enabled();
        if (!$enabled) {
            $block_id = Menu::BLOCK_POSITION__NOT_ENABLED;
        }
        $edit_link = menu_admin_link($menu, 'edit');
        $del_link = menu_admin_link($menu, 'delete');
        $mini = in_array($block_id, array(Menu::BLOCK_POSITION__LEFT, Menu::BLOCK_POSITION__NOT_ENABLED, Menu::BLOCK_POSITION__RIGHT));
        $vertical_position = in_array($block_id, array(Menu::BLOCK_POSITION__LEFT, Menu::BLOCK_POSITION__RIGHT));
        $menu_tpl->put_all(array('NAME' => $menu->get_formated_title(), 'IDMENU' => $id, 'CONTENTS' => $menu->admin_display(), 'ACTIV' => $enabled ? 'disable' : 'enable', 'UNACTIV' => $enabled ? 'enable' : 'disable', 'C_MENU_ACTIVATED' => $enabled, 'C_EDIT' => !empty($edit_link), 'C_DEL' => !empty($del_link), 'C_UP' => $block_id != Menu::BLOCK_POSITION__NOT_ENABLED && $i > 0, 'C_DOWN' => $block_id != Menu::BLOCK_POSITION__NOT_ENABLED && $i < $max - 1, 'C_VERTICAL' => $vertical_position, 'C_HORIZONTAL' => !$vertical_position, 'L_DEL' => LangLoader::get_message('delete', 'common'), 'L_EDIT' => LangLoader::get_message('edit', 'common'), 'L_ACTIVATE' => LangLoader::get_message('enable', 'common'), 'L_UNACTIVATE' => LangLoader::get_message('disable', 'common'), 'L_MOVE_UP' => $LANG['move_up'], 'L_MOVE_DOWN' => $LANG['move_down'], 'U_EDIT' => menu_admin_link($menu, 'edit'), 'U_DELETE' => menu_admin_link($menu, 'delete'), 'U_UP' => menu_admin_link($menu, 'up'), 'U_DOWN' => menu_admin_link($menu, 'down'), 'U_MOVE' => menu_admin_link($menu, 'move')));
        $tpl->assign_block_vars(get_block($block_id), array('MENU' => $menu_tpl->render()));
        $i++;
    }
}
foreach (ThemesManager::get_activated_themes_map() as $theme => $properties) {
    $configuration = $properties->get_configuration();
    $selected = empty($name_theme) ? AppContext::get_current_user()->get_theme() == $theme : $name_theme == $theme ? ' selected="selected"' : '';
    $tpl->assign_block_vars('themes', array('NAME' => $configuration->get_name(), 'IDNAME' => $theme, 'SELECTED' => $selected));
}
$columns_disable = ThemesManager::get_theme($name_theme)->get_columns_disabled();
$tpl->put_all(array('NAME_THEME' => $name_theme, 'CHECKED_RIGHT_COLUMN' => !$columns_disable->right_columns_is_disabled() ? 'checked="checked"' : '', 'CHECKED_LEFT_COLUMN' => !$columns_disable->left_columns_is_disabled() ? 'checked="checked"' : '', 'CHECKED_FOOTER_COLUMN' => !$columns_disable->footer_is_disabled() ? 'checked="checked"' : '', 'CHECKED_TOP_FOOTER_COLUMN' => !$columns_disable->top_footer_is_disabled() ? 'checked="checked"' : '', 'CHECKED_BOTTOM_CENTRAL_COLUMN' => !$columns_disable->bottom_central_is_disabled() ? 'checked="checked"' : '', 'CHECKED_TOP_CENTRAL_COLUMN' => !$columns_disable->top_central_is_disabled() ? 'checked="checked"' : '', 'CHECKED_SUB_HEADER_COLUMN' => !$columns_disable->sub_header_is_disabled() ? 'checked="checked"' : '', 'CHECKED_HEADER_COLUMN' => !$columns_disable->header_is_disabled() ? 'checked="checked"' : '', 'C_RIGHT_COLUMN' => $columns_disable->right_columns_is_disabled(), 'C_LEFT_COLUMN' => $columns_disable->left_columns_is_disabled(), 'C_FOOTER_COLUMN' => $columns_disable->footer_is_disabled(), 'C_TOP_FOOTER_COLUMN' => $columns_disable->top_footer_is_disabled(), 'C_BOTTOM_CENTRAL_COLUMN' => $columns_disable->bottom_central_is_disabled(), 'C_TOP_CENTRAL_COLUMN' => $columns_disable->top_central_is_disabled(), 'C_SUB_HEADER_COLUMN' => $columns_disable->sub_header_is_disabled(), 'C_HEADER_COLUMN' => $columns_disable->header_is_disabled(), 'L_MENUS_MANAGEMENT' => $LANG['menus_management'], 'START_PAGE' => Environment::get_home_page(), 'L_INDEX' => $LANG['home'], 'L_CONFIRM_DEL_MENU' => LangLoader::get_message('confirm.delete', 'status-messages-common'), 'L_MOVETO' => $LANG['moveto'], 'L_GUEST' => $LANG['guest'], 'L_USER' => $LANG['member'], 'L_MODO' => $LANG['modo'], 'L_ADMIN' => $LANG['admin'], 'L_HEADER' => $LANG['menu_header'], 'L_SUB_HEADER' => $LANG['menu_subheader'], 'L_LEFT_MENU' => $LANG['menu_left'], 'L_RIGHT_MENU' => $LANG['menu_right'], 'L_TOP_CENTRAL_MENU' => $LANG['menu_top_central'], 'L_BOTTOM_CENTRAL_MENU' => $LANG['menu_bottom_central'], 'L_TOP_FOOTER' => $LANG['menu_top_footer'], 'L_FOOTER' => $LANG['menu_footer'], 'L_ADD_MENU' => $LANG['menus_add'], 'L_ADD_CONTENT_MENUS' => $LANG['menus_content_add'], 'L_ADD_LINKS_MENUS' => $LANG['menus_links_add'], 'L_ADD_FEED_MENUS' => $LANG['menus_feed_add'], 'L_VALID_POSTIONS' => $LANG['valid_position_menus'], 'L_THEME_MANAGEMENT' => $LANG['theme_management'], 'I_HEADER' => Menu::BLOCK_POSITION__HEADER, 'I_SUBHEADER' => Menu::BLOCK_POSITION__SUB_HEADER, 'I_TOPCENTRAL' => Menu::BLOCK_POSITION__TOP_CENTRAL, 'I_BOTTOMCENTRAL' => Menu::BLOCK_POSITION__BOTTOM_CENTRAL, 'I_TOPFOOTER' => Menu::BLOCK_POSITION__TOP_FOOTER, 'I_FOOTER' => Menu::BLOCK_POSITION__FOOTER, 'I_LEFT' => Menu::BLOCK_POSITION__LEFT, 'I_RIGHT' => Menu::BLOCK_POSITION__RIGHT, 'L_MENUS_AVAILABLE' => count($menus_blocks[Menu::BLOCK_POSITION__NOT_ENABLED]) ? $LANG['available_menus'] : $LANG['no_available_menus'], 'L_SUBMIT' => $LANG['submit'], 'L_RESET' => $LANG['reset'], 'U_TOKEN' => AppContext::get_session()->get_token()));
$tpl->display();
require_once PATH_TO_ROOT . '/admin/admin_footer.php';
 private function get_picture_theme($theme_id = null)
 {
     $theme_id = $theme_id !== null ? $theme_id : $this->user_accounts_config->get_default_theme();
     $picture = ThemesManager::get_theme($theme_id)->get_configuration()->get_first_picture();
     return Url::to_rel('/templates/' . $theme_id . '/' . $picture);
 }
Example #24
0
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 *
 ###################################################*/
if (defined('PHPBOOST') !== true) {
    exit;
}
load_module_lang('forum');
//Chargement de la langue du module.
$config = ForumConfig::load();
require_once PATH_TO_ROOT . '/forum/forum_defines.php';
//Supprime les menus suivant configuration du site.
$columns_disabled = ThemesManager::get_theme(AppContext::get_current_user()->get_theme())->get_columns_disabled();
if ($config->is_left_column_disabled()) {
    $columns_disabled->set_disable_left_columns(true);
}
if ($config->is_right_column_disabled()) {
    $columns_disabled->set_disable_right_columns(true);
}
//Fonction du forum.
require_once PATH_TO_ROOT . '/forum/forum_functions.php';
 private function get_header_logo_path($theme)
 {
     if ($theme == 'all') {
         return $this->config->get_header_logo_path_all_themes();
     } else {
         $theme = ThemesManager::get_theme($theme);
         $customize_interface = $theme->get_customize_interface();
         return $customize_interface->get_header_logo_path();
     }
 }