private function build_view() { $messages = array(MessageHelper::display($this->lang['css.message_success'], MessageHelper::SUCCESS), MessageHelper::display($this->lang['css.message_notice'], MessageHelper::NOTICE), MessageHelper::display($this->lang['css.message_warning'], MessageHelper::WARNING), MessageHelper::display($this->lang['css.message_error'], MessageHelper::ERROR), MessageHelper::display($this->lang['css.message_question'], MessageHelper::QUESTION)); foreach ($messages as $message) { $this->view->assign_block_vars('messages', array('VIEW' => $message)); } $pagination = new ModulePagination(2, 15, 5); $pagination->set_url(new Url('#%d')); $this->view->put('PAGINATION', $pagination->display()); }
function test_display() { global $SID; if (!empty($_GET['p'])) { unset($_GET['p']); } $pagination = new ModulePagination(1, 1, 11); $pagination->set_url(new Url('toto')); $ret = $pagination->display(); self::assertEquals($ret, ''); $pagination = new ModulePagination(10, 100, 5); $pagination->set_url(new Url('toto')); $ret = $pagination->display(); self::assertRegExp('|<a(.*)font-size:11px(.*)href="toto"(.*)>«</a>|', $ret); self::assertRegExp('|<a(.*)font-size:11px(.*)>»</a>|', $ret); }
private function build_form($request) { $field = $request->get_value('field', 'pseudo'); $sort = $request->get_value('sort', 'top'); $current_page = $request->get_int('page', 1); if (!NewsletterAuthorizationsService::id_stream($this->stream->get_id())->read_subscribers()) { NewsletterAuthorizationsService::get_errors()->read_subscribers(); } $mode = $sort == 'top' ? 'ASC' : 'DESC'; switch ($field) { case 'pseudo': $field_bdd = 'display_name'; break; default: $field_bdd = 'display_name'; } $subscribers_list = NewsletterService::list_subscribers_by_stream($this->stream->get_id()); $nbr_subscribers = count($subscribers_list); $pagination = new ModulePagination($current_page, $nbr_subscribers, $this->nbr_subscribers_per_page); $pagination->set_url(NewsletterUrlBuilder::subscribers($this->stream->get_id(), $this->stream->get_rewrited_name(), $field, $sort, '%d')); if ($pagination->current_page_is_empty() && $current_page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } $this->view->put_all(array('C_SUBSCRIBERS' => (int) $nbr_subscribers, 'C_SUBSCRIPTION' => NewsletterUrlBuilder::subscribe()->rel(), 'C_PAGINATION' => $pagination->has_several_pages(), 'SORT_PSEUDO_TOP' => NewsletterUrlBuilder::subscribers($this->stream->get_id(), $this->stream->get_rewrited_name(), 'pseudo', 'top', $current_page)->rel(), 'SORT_PSEUDO_BOTTOM' => NewsletterUrlBuilder::subscribers($this->stream->get_id(), $this->stream->get_rewrited_name(), 'pseudo', 'bottom', $current_page)->rel(), 'PAGINATION' => $pagination->display())); if (!empty($nbr_subscribers)) { $result = PersistenceContext::get_querier()->select("SELECT subscribers.id, subscribers.user_id, subscribers.mail, member.display_name, member.email\n\t\t\tFROM " . NewsletterSetup::$newsletter_table_subscribers . " subscribers\n\t\t\tLEFT JOIN " . DB_TABLE_MEMBER . " member ON subscribers.user_id = member.user_id\n\t\t\tWHERE subscribers.id IN :ids_list\n\t\t\tORDER BY " . $field_bdd . " " . $mode . "\n\t\t\tLIMIT :number_items_per_page OFFSET :display_from", array('ids_list' => array_keys($subscribers_list), 'number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from())); while ($row = $result->fetch()) { $pseudo = $row['user_id'] > 0 ? '<a href="' . UserUrlBuilder::profile($row['user_id'])->rel() . '">' . $row['display_name'] . '</a>' : LangLoader::get_message('visitor', 'user-common'); $mail = $row['user_id'] > 0 ? $row['email'] : $row['mail']; if (!empty($mail)) { $this->view->assign_block_vars('subscribers_list', array('C_AUTH_MODO' => NewsletterAuthorizationsService::id_stream($this->stream->get_id())->moderation_subscribers(), 'C_EDIT' => $row['user_id'] == User::VISITOR_LEVEL, 'U_EDIT' => $row['user_id'] == User::VISITOR_LEVEL ? NewsletterUrlBuilder::edit_subscriber($row['id'])->rel() : '', 'U_DELETE' => NewsletterUrlBuilder::delete_subscriber($row['id'], $this->stream->get_id())->rel(), 'PSEUDO' => $pseudo, 'MAIL' => $mail)); } } $result->dispose(); } }
include_once PATH_TO_ROOT . '/stats/stats_functions.php'; $nbr_keyword = $db_querier->count(StatsSetup::$stats_referer_table, 'WHERE type = 1', array(), '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&p=%d')); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } $result = $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\n\t\tFROM " . PREFIX . "stats_referer\n\t\tWHERE type = 1\n\t\tGROUP BY relative_url\n\t\tORDER BY total_visit DESC\n\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 (!empty($browser) || !empty($os) || !empty($user_lang)) { if (!empty($browser)) { $tpl->put_all(array('C_STATS_BROWSERS' => true, 'GRAPH_RESULT' => '<img src="display_stats.php?browsers=1" 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' => '<img src="display_stats.php?os=1" 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' => '<img src="display_stats.php?lang=1" 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;
$extended_fields_to_recover_list = ''; foreach ($displayed_extended_fields as $field_type) { $extended_fields_to_recover_list .= 'ext_field.' . $field_type . ', '; } $tpl = new FileTemplate('forum/forum_membermsg.tpl'); $authorized_categories = ForumService::get_authorized_categories(Category::ROOT_CATEGORY); $row = PersistenceContext::get_querier()->select_single_row_query("SELECT COUNT(*) as nbr_msg\n\tFROM " . PREFIX . "forum_msg msg\n\tLEFT JOIN " . PREFIX . "forum_topics t ON msg.idtopic = t.id\n\tWHERE msg.user_id = :user_id AND t.idcat IN :authorized_categories", array('authorized_categories' => $authorized_categories, 'user_id' => $view_msg)); $nbr_msg = $row['nbr_msg']; $page = AppContext::get_request()->get_getint('p', 1); $pagination = new ModulePagination($page, $nbr_msg, $_NBR_ELEMENTS_PER_PAGE, Pagination::LIGHT_PAGINATION); $pagination->set_url(new Url('/forum/membermsg.php?id=' . $view_msg . '&p=%d')); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } $tpl->put_all(array('C_PAGINATION' => $pagination->has_several_pages(), 'FORUM_NAME' => $config->get_forum_name() . ' : ' . $LANG['show_member_msg'], 'PAGINATION' => $pagination->display(), 'L_BACK' => $LANG['back'], 'L_VIEW_MSG_USER' => $LANG['show_member_msg'], 'L_FORUM_INDEX' => $LANG['forum_index'], 'U_FORUM_VIEW_MSG' => url('.php?id=' . $view_msg))); $result = PersistenceContext::get_querier()->select("SELECT msg.id, msg.user_id, msg.idtopic, msg.timestamp, msg.timestamp_edit, m.groups, t.title, t.status, t.idcat, c.name, m.display_name, m.level, m.email, m.show_email, m.registration_date AS registered, m.posted_msg, m.warning_percentage, m.delay_banned, s.user_id AS connect, msg.contents, ext_field.user_avatar, m.posted_msg, ext_field.user_sign, " . $extended_fields_to_recover_list . "m.warning_percentage, m.delay_readonly, m.delay_banned \n\tFROM " . PREFIX . "forum_msg msg\n\tLEFT JOIN " . PREFIX . "forum_topics t ON msg.idtopic = t.id\n\tLEFT JOIN " . ForumSetup::$forum_cats_table . " c ON c.id = t.idcat\n\tLEFT JOIN " . DB_TABLE_MEMBER . " m ON m.user_id = :user_id\n\tLEFT JOIN " . DB_TABLE_MEMBER_EXTENDED_FIELDS . " ext_field ON ext_field.user_id = msg.user_id\n\tLEFT JOIN " . DB_TABLE_SESSIONS . " s ON s.user_id = msg.user_id AND s.timestamp > :timestamp\n\tWHERE msg.user_id = :id AND t.idcat IN :authorized_categories\n\tORDER BY msg.id DESC\n\tLIMIT :number_items_per_page OFFSET :display_from", array('id' => $view_msg, 'user_id' => $view_msg, 'timestamp' => time() - SessionsConfig::load()->get_active_session_duration(), 'authorized_categories' => $authorized_categories, 'number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from())); while ($row = $result->fetch()) { //On encode l'url pour un éventuel rewriting, c'est une opération assez gourmande $rewrited_cat_title = ServerEnvironmentConfig::load()->is_url_rewriting_enabled() ? '+' . Url::encode_rewrite($row['name']) : ''; //On encode l'url pour un éventuel rewriting, c'est une opération assez gourmande $rewrited_title = ServerEnvironmentConfig::load()->is_url_rewriting_enabled() ? '+' . Url::encode_rewrite($row['title']) : ''; //Ajout du marqueur d'édition si activé. $edit_mark = $row['timestamp_edit'] > 0 && $config->is_edit_mark_enabled() ? '<span class="edit-pseudo">' . $LANG['edit_by'] . ' <a href="' . UserUrlBuilder::profile($row['user_id_edit'])->rel() . '">' . $row['login_edit'] . '</a> ' . $LANG['on'] . ' ' . Date::to_format($row['timestamp_edit'], Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE) . '</span><br />' : ''; $group_color = User::get_group_color($row['groups'], $row['level']); //Rang de l'utilisateur. $user_rank = $row['level'] === '0' ? $LANG['member'] : $LANG['guest']; $user_group = $user_rank; $user_rank_icon = ''; if ($row['level'] === '2') { $user_rank = $ranks_cache[-2]['name'];
$last_page_rewrite = $last_page > 1 ? '-' . $last_page : ''; $last_page = $last_page > 1 ? 'pt=' . $last_page . '&' : ''; } //On encode l'url pour un éventuel rewriting, c'est une opération assez gourmande $rewrited_title = ServerEnvironmentConfig::load()->is_url_rewriting_enabled() ? '+' . Url::encode_rewrite($row['title']) : ''; //Affichage du dernier message posté. $last_group_color = User::get_group_color($row['last_user_groups'], $row['last_user_level']); $last_msg = '<a href="topic' . url('.php?' . $last_page . 'id=' . $row['id'], '-' . $row['id'] . $last_page_rewrite . $rewrited_title . '.php') . '#m' . $last_msg_id . '" title=""><i class="fa fa-hand-o-right"></i></a>' . ' ' . $LANG['on'] . ' ' . Date::to_format($row['last_timestamp'], Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE) . '<br /> ' . $LANG['by'] . ' ' . (!empty($row['last_login']) ? '<a class="small ' . UserService::get_level_class($row['last_user_level']) . '"' . (!empty($last_group_color) ? ' style="color:' . $last_group_color . '"' : '') . ' href="' . UserUrlBuilder::profile($row['last_user_id'])->rel() . '">' . TextHelper::wordwrap_html($row['last_login'], 13) . '</a>' : '<em>' . $LANG['guest'] . '</em>'); //Ancre ajoutée aux messages non lus. $new_ancre = '<a href="topic' . url('.php?' . $last_page . 'id=' . $row['id'], '-' . $row['id'] . $last_page_rewrite . $rewrited_title . '.php') . '#m' . $last_msg_id . '" title=""><i class="fa fa-hand-o-right"></i></a>'; //On crée une pagination (si activé) si le nombre de topics est trop important. $page = AppContext::get_request()->get_getint('pt', 1); $topic_pagination = new ModulePagination($page, $row['nbr_msg'], $config->get_number_messages_per_page(), Pagination::LIGHT_PAGINATION); $topic_pagination->set_url(new Url('/forum/topic.php?id=' . $row['id'] . '&pt=%d')); $group_color = User::get_group_color($row['groups'], $row['user_level']); $tpl->assign_block_vars('topics', array('C_PAGINATION' => $topic_pagination->has_several_pages(), 'C_IMG_POLL' => !empty($row['question']), 'C_IMG_TRACK' => !empty($row['idtrack']), 'C_DISPLAY_MSG' => $config->is_message_before_topic_title_displayed() && $config->is_message_before_topic_title_icon_displayed() && $row['display_msg'], 'C_HOT_TOPIC' => $row['type'] == '0' && $row['status'] != '0' && $row['nbr_msg'] > $config->get_number_messages_per_page(), 'C_BLINK' => $blink, 'IMG_ANNOUNCE' => $img_announce, 'ANCRE' => $new_ancre, 'TYPE' => $type[$row['type']], 'TITLE' => stripslashes($row['title']), 'AUTHOR' => !empty($row['login']) ? '<a href="' . UserUrlBuilder::profile($row['user_id'])->rel() . '" class="small ' . UserService::get_level_class($row['user_level']) . '"' . (!empty($group_color) ? ' style="color:' . $group_color . '"' : '') . '>' . $row['login'] . '</a>' : '<em>' . $LANG['guest'] . '</em>', 'DESC' => $row['subtitle'], 'PAGINATION' => $topic_pagination->display(), 'MSG' => $row['nbr_msg'] - 1, 'VUS' => $row['nbr_views'], 'U_TOPIC_VARS' => url('.php?id=' . $row['id'], '-' . $row['id'] . $rewrited_title . '.php'), 'U_LAST_MSG' => $last_msg, 'L_DISPLAY_MSG' => $config->is_message_before_topic_title_displayed() && $row['display_msg'] ? $config->get_message_before_topic_title() : '')); } $result->dispose(); //Le membre a déjà lu tous les messages. if ($nbr_topics == 0) { $tpl->put_all(array('C_NO_TOPICS' => true, 'L_NO_TOPICS' => '0 ' . $LANG['no_last_read'])); } //Listes les utilisateurs en lignes. list($users_list, $total_admin, $total_modo, $total_member, $total_visit, $total_online) = forum_list_user_online("AND s.location_script LIKE '%" . "/forum/lastread.php%'"); //Liste des catégories. $search_category_children_options = new SearchCategoryChildrensOptions(); $search_category_children_options->add_authorizations_bits(Category::READ_AUTHORIZATIONS); $categories_tree = ForumService::get_categories_manager()->get_select_categories_form_field('cats', '', Category::ROOT_CATEGORY, $search_category_children_options); $method = new ReflectionMethod('AbstractFormFieldChoice', 'get_options'); $method->setAccessible(true); $categories_tree_options = $method->invoke($categories_tree);
} $tpl->put_all(array('MAX_ID' => $i)); $tpl->display(); } else { $_NBR_ELEMENTS_PER_PAGE = 20; $tpl = new FileTemplate('poll/admin_poll_management.tpl'); $nbr_poll = PersistenceContext::get_querier()->count(PREFIX . 'poll'); //On crée une pagination si le nombre de sondages est trop important. $page = AppContext::get_request()->get_getint('p', 1); $pagination = new ModulePagination($page, $nbr_poll, $_NBR_ELEMENTS_PER_PAGE); $pagination->set_url(new Url('/poll/admin_poll.php?p=%d')); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } $tpl->put_all(array('C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display(), 'L_POLL_MANAGEMENT' => $LANG['poll_management'], 'L_POLL_ADD' => $LANG['poll_add'], 'L_POLL_CONFIG' => $LANG['poll_config'], 'L_REQUIRE' => LangLoader::get_message('form.explain_required_fields', 'status-messages-common'), 'L_QUESTION' => $LANG['question'], 'L_POLLS' => $LANG['polls'], 'L_DATE' => LangLoader::get_message('date', 'date-common'), 'L_PSEUDO' => LangLoader::get_message('author', 'common'), 'L_APROB' => $LANG['aprob'], 'L_UPDATE' => $LANG['update'])); $result = PersistenceContext::get_querier()->select("SELECT p.id, p.question, p.archive, p.timestamp, p.visible, p.start, p.end, p.user_id, m.display_name, m.groups, m.level\n\tFROM " . PREFIX . "poll p\n\tLEFT JOIN " . DB_TABLE_MEMBER . " m ON p.user_id = m.user_id\n\tORDER BY p.timestamp DESC \n\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()) { if ($row['visible'] == 2) { $aprob = $LANG['waiting']; } elseif ($row['visible'] == 1) { $aprob = LangLoader::get_message('yes', 'common'); } else { $aprob = LangLoader::get_message('no', 'common'); } $archive = $row['archive'] == 1 ? LangLoader::get_message('yes', 'common') : LangLoader::get_message('no', 'common'); //On reccourci le lien si il est trop long pour éviter de déformer l'administration. $question = stripslashes(strlen($row['question']) > 45 ? substr($row['question'], 0, 45) . '...' : $row['question']); $visible = ''; if ($row['start'] > 0) { $visible .= Date::to_format($row['start'], Date::FORMAT_DAY_MONTH_YEAR);
} else { $db_where = null; } } else { $cat = 0; $db_where = null; $sub_cats = true; } $nbr_media = PersistenceContext::get_querier()->count(PREFIX . "media", 'WHERE ' . ($sub_cats && !empty($authorized_categories) ? 'idcat IN :authorized_categories' : 'idcat = :idcat') . (is_null($db_where) ? '' : ' AND infos = :infos'), array('authorized_categories' => $authorized_categories, 'idcat' => !empty($cat) ? $cat : 0, 'infos' => $db_where)); $categories_cache = MediaService::get_categories_manager()->get_categories_cache(); //On crée une pagination si le nombre de fichier est trop important. $page = AppContext::get_request()->get_getint('p', 1); $pagination = new ModulePagination($page, $nbr_media, $NUMBER_ELEMENTS_PER_PAGE); $pagination->set_url(new Url('/media/moderation_media.php?p=%d')); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } $result = PersistenceContext::get_querier()->select("SELECT media.*, media_cats.name AS cat_name\n\t\tFROM " . MediaSetup::$media_table . " media\n\t\tLEFT JOIN " . MediaSetup::$media_cats_table . " media_cats ON media_cats.id = media.idcat\n\t\tWHERE " . ($sub_cats && !empty($authorized_categories) ? 'idcat IN :authorized_categories' : 'idcat = :idcat') . (is_null($db_where) ? '' : ' AND infos = :infos') . "\n\t\tORDER BY infos ASC, timestamp DESC\n\t\tLIMIT :number_items_per_page OFFSET :display_from", array('authorized_categories' => $authorized_categories, 'idcat' => !empty($cat) ? $cat : 0, 'infos' => $db_where, 'number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from())); while ($row = $result->fetch()) { $js_array[] = $row['id']; $tpl->assign_block_vars('files', array('ID' => $row['id'], 'NAME' => $row['name'], 'U_FILE' => url('media.php?id=' . $row['id'], 'media-' . $row['id'] . '-' . $row['idcat'] . '+' . Url::encode_rewrite($row['name']) . '.php'), 'U_EDIT' => url('media_action.php?edit=' . $row['id']), 'CAT' => $categories_cache->category_exists($row['idcat']) ? $row['cat_name'] : $LANG['unknown'], 'U_CAT' => url('media.php?cat=' . $row['idcat']), 'COLOR' => $row['infos'] == MEDIA_STATUS_UNVISIBLE ? '#FFEE99' : ($row['infos'] == MEDIA_STATUS_APROBED ? '#CCFFCC' : '#FFCCCC'), 'SHOW' => $row['infos'] == MEDIA_STATUS_APROBED ? ' checked="checked"' : '', 'HIDE' => $row['infos'] == MEDIA_STATUS_UNVISIBLE ? ' checked="checked"' : '', 'UNAPROBED' => $row['infos'] == MEDIA_STATUS_UNAPROBED ? ' checked="checked"' : '')); } $result->dispose(); $search_category_children_options = new SearchCategoryChildrensOptions(); $search_category_children_options->add_authorizations_bits(Category::READ_AUTHORIZATIONS); $search_category_children_options->add_authorizations_bits(Category::CONTRIBUTION_AUTHORIZATIONS); $tpl->put_all(array('C_DISPLAY' => true, 'C_PAGINATION' => $pagination->has_several_pages(), 'L_FILTER' => $MEDIA_LANG['filter'], 'L_DISPLAY_FILE' => $MEDIA_LANG['display_file'], 'L_ALL' => $MEDIA_LANG['all_file'], 'SELECTED_ALL' => is_null($db_where) ? ' selected="selected"' : '', 'L_FVISIBLE' => $MEDIA_LANG['visible'], 'SELECTED_VISIBLE' => $db_where === MEDIA_STATUS_APROBED ? ' selected="selected"' : '', 'L_FUNVISIBLE' => $MEDIA_LANG['unvisible'], 'SELECTED_UNVISIBLE' => $db_where === MEDIA_STATUS_UNVISIBLE ? ' selected="selected"' : '', 'L_FUNAPROBED' => $MEDIA_LANG['unaprobed'], 'SELECTED_UNAPROBED' => $db_where === MEDIA_STATUS_UNAPROBED ? ' selected="selected"' : '', 'L_CATEGORIES' => $MEDIA_LANG['from_cats'], 'CATEGORIES_TREE' => MediaService::get_categories_manager()->get_select_categories_form_field('idcat', LangLoader::get_message('form.category', 'common'), $cat, $search_category_children_options)->display()->render(), 'L_INCLUDE_SUB_CATS' => $MEDIA_LANG['include_sub_cats'], 'SUB_CATS' => is_null($sub_cats) ? ' checked="checked"' : ($sub_cats ? ' checked="checked"' : ''), 'L_MODO_PANEL' => $LANG['modo_panel'], 'L_NAME' => $LANG['name'], 'L_VISIBLE' => $MEDIA_LANG['show_media_short'], 'L_UNVISIBLE' => $MEDIA_LANG['hide_media_short'], 'L_UNAPROBED' => $MEDIA_LANG['unaprobed_media_short'], 'C_NO_MODERATION' => $nbr_media > 0 ? 0 : 1, 'L_NO_MODERATION' => $MEDIA_LANG['no_media_moderate'], 'L_CONFIRM_DELETE_ALL' => str_replace('\'', '\\\'', $MEDIA_LANG['confirm_delete_media_all']), 'L_LEGEND' => $MEDIA_LANG['legend'], 'L_FILE_UNAPROBED' => $MEDIA_LANG['file_unaprobed'], 'L_FILE_UNVISIBLE' => $MEDIA_LANG['file_unvisible'], 'L_FILE_VISIBLE' => $MEDIA_LANG['file_visible'], 'PAGINATION' => $pagination->display(), 'L_SUBMIT' => $LANG['submit'], 'L_RESET' => $LANG['reset'], 'JS_ARRAY' => '"' . implode('", "', $js_array) . '"')); } $tpl->display(); require_once '../kernel/footer.php';
private function build_view() { global $LANG, $MEDIA_LANG; require_once PATH_TO_ROOT . '/media/media_constant.php'; load_module_lang('media'); $config = MediaConfig::load(); $category = $this->get_category(); $authorized_categories = MediaService::get_authorized_categories($category->get_id()); //Contenu de la catégorie $page = AppContext::get_request()->get_getint('p', 1); $subcategories_page = AppContext::get_request()->get_getint('subcategories_page', 1); $get_sort = retrieve(GET, 'sort', ''); $get_mode = retrieve(GET, 'mode', ''); $mode = $get_mode == 'asc' ? 'ASC' : 'DESC'; $unget = !empty($get_sort) && !empty($mode) ? '?sort=' . $get_sort . '&mode=' . $get_mode : ''; //On crée une pagination si le nombre de sous-catégories est trop important. $subcategories_number = count(MediaService::get_categories_manager()->get_categories_cache()->get_childrens($category->get_id())); $pagination = new ModulePagination($subcategories_page, $subcategories_number, $config->get_categories_number_per_page()); $pagination->set_url(new Url('/media/media.php' . (!empty($unget) ? $unget . '&' : '?') . 'cat=' . $category->get_id() . '&p=' . $page . '&subcategories_page=%d')); if ($pagination->current_page_is_empty() && $subcategories_page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } //Children categories $result = PersistenceContext::get_querier()->select('SELECT @id_cat:= media_cats.id, media_cats.*, (SELECT COUNT(*) FROM ' . MediaSetup::$media_table . ' WHERE idcat IN ( @id_cat, (SELECT GROUP_CONCAT(id SEPARATOR \',\') FROM ' . MediaSetup::$media_cats_table . ' WHERE id_parent = @id_cat), (SELECT GROUP_CONCAT(childs.id SEPARATOR \',\') FROM ' . MediaSetup::$media_cats_table . ' parents INNER JOIN ' . MediaSetup::$media_cats_table . ' childs ON parents.id = childs.id_parent WHERE parents.id_parent = @id_cat) ) AND infos = :status ) AS mediafiles_number FROM ' . MediaSetup::$media_cats_table . ' media_cats WHERE id_parent = :id_category AND id IN :authorized_categories ORDER BY id_parent, c_order LIMIT :number_items_per_page OFFSET :display_from', array('id_category' => $category->get_id(), 'status' => MEDIA_STATUS_APROBED, 'authorized_categories' => $authorized_categories, 'number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from())); $nbr_cat_displayed = 0; while ($row = $result->fetch()) { $category_image = new Url($row['image']); $this->tpl->assign_block_vars('sub_categories_list', array('C_CATEGORY_IMAGE' => !empty($row['image']), 'CATEGORY_NAME' => $row['name'], 'CATEGORY_IMAGE' => $category_image->rel(), 'MEDIAFILES_NUMBER' => sprintf($row['mediafiles_number'] > 1 ? $MEDIA_LANG['num_medias'] : $MEDIA_LANG['num_media'], $row['mediafiles_number']), 'U_CATEGORY' => MediaUrlBuilder::display_category($row['id'], $row['rewrited_name'])->rel())); $nbr_cat_displayed++; } $result->dispose(); $nbr_column_cats = $nbr_cat_displayed > $config->get_columns_number_per_line() ? $config->get_columns_number_per_line() : $nbr_cat_displayed; $nbr_column_cats = !empty($nbr_column_cats) ? $nbr_column_cats : 1; $cats_columns_width = floor(100 / $nbr_column_cats); $category_description = FormatingHelper::second_parse($category->get_description()); $this->tpl->put_all(array('C_CATEGORIES' => true, 'C_ROOT_CATEGORY' => $category->get_id() == Category::ROOT_CATEGORY, 'C_CATEGORY_DESCRIPTION' => $category_description, 'C_SUB_CATEGORIES' => $nbr_cat_displayed > 0, 'C_MODO' => MediaAuthorizationsService::check_authorizations($category->get_id())->moderation(), 'C_SUBCATEGORIES_PAGINATION' => $pagination->has_several_pages(), 'SUBCATEGORIES_PAGINATION' => $pagination->display(), 'L_UNAPROBED' => $MEDIA_LANG['unaprobed_media_short'], 'L_BY' => $MEDIA_LANG['media_added_by'], 'CATS_COLUMNS_WIDTH' => $cats_columns_width, 'CATEGORY_NAME' => $category->get_id() == Category::ROOT_CATEGORY ? LangLoader::get_message('module_title', 'common', 'media') : $category->get_name(), 'CATEGORY_DESCRIPTION' => $category_description, 'U_EDIT_CATEGORY' => $category->get_id() == Category::ROOT_CATEGORY ? MediaUrlBuilder::configuration()->rel() : MediaUrlBuilder::edit_category($category->get_id())->rel(), 'ID_CAT' => $category->get_id())); $selected_fields = array('alpha' => '', 'date' => '', 'nbr' => '', 'note' => '', 'com' => '', 'asc' => '', 'desc' => ''); switch ($get_sort) { case 'alpha': $sort = 'name'; $selected_fields['alpha'] = ' selected="selected"'; break; default: case 'date': $sort = 'timestamp'; $selected_fields['date'] = ' selected="selected"'; break; case 'nbr': $sort = 'counter'; $selected_fields['nbr'] = ' selected="selected"'; break; case 'note': $sort = 'average_notes'; $selected_fields['note'] = ' selected="selected"'; break; case 'com': $sort = 'com.number_comments'; $selected_fields['com'] = ' selected="selected"'; break; } if ($mode == 'ASC') { $selected_fields['asc'] = ' selected="selected"'; } else { $selected_fields['desc'] = ' selected="selected"'; } $this->tpl->put_all(array('C_DISPLAY_NOTATION' => $config->is_notation_enabled(), 'C_DISPLAY_COMMENTS' => $config->are_comments_enabled(), 'L_ALPHA' => $MEDIA_LANG['sort_title'], 'L_DATE' => LangLoader::get_message('date', 'date-common'), 'L_NBR' => $MEDIA_LANG['sort_popularity'], 'L_NOTE' => LangLoader::get_message('note', 'common'), 'L_COM' => $LANG['com'], 'L_DESC' => $LANG['desc'], 'L_ASC' => $LANG['asc'], 'L_ORDER_BY' => LangLoader::get_message('sort_by', 'common'), 'SELECTED_ALPHA' => $selected_fields['alpha'], 'SELECTED_DATE' => $selected_fields['date'], 'SELECTED_NBR' => $selected_fields['nbr'], 'SELECTED_NOTE' => $selected_fields['note'], 'SELECTED_COM' => $selected_fields['com'], 'SELECTED_ASC' => $selected_fields['asc'], 'SELECTED_DESC' => $selected_fields['desc'])); $condition = 'WHERE idcat = :idcat AND infos = :status'; $parameters = array('idcat' => $category->get_id(), 'status' => MEDIA_STATUS_APROBED); //On crée une pagination si le nombre de fichiers est trop important. $mediafiles_number = MediaService::count($condition, $parameters); $pagination = new ModulePagination($page, $mediafiles_number, $config->get_items_number_per_page()); $pagination->set_url(new Url('/media/media.php' . (!empty($unget) ? $unget . '&' : '?') . 'cat=' . $category->get_id() . '&p=%d&subcategories_page=' . $subcategories_page)); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } $notation = new Notation(); $notation->set_module_name('media'); $notation->set_notation_scale($config->get_notation_scale()); $result = PersistenceContext::get_querier()->select("SELECT v.id, v.iduser, v.name, v.timestamp, v.counter, v.infos, v.contents, mb.display_name, mb.groups, mb.level, notes.average_notes, com.number_comments\n\t\t\tFROM " . PREFIX . "media AS v\n\t\t\tLEFT JOIN " . DB_TABLE_MEMBER . " AS mb ON v.iduser = mb.user_id\n\t\t\tLEFT JOIN " . DB_TABLE_AVERAGE_NOTES . " notes ON v.id = notes.id_in_module AND notes.module_name = 'media'\n\t\t\tLEFT JOIN " . DB_TABLE_COMMENTS_TOPIC . " com ON v.id = com.id_in_module AND com.module_id = 'media'\n\t\t\t" . $condition . "\n\t\t\tORDER BY " . $sort . " " . $mode . "\n\t\t\tLIMIT :number_items_per_page OFFSET :display_from", array_merge($parameters, array('number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from()))); $this->tpl->put_all(array('C_FILES' => $result->get_rows_count() > 0, 'C_DISPLAY_NO_FILE_MSG' => $result->get_rows_count() == 0 && $category->get_id() != Category::ROOT_CATEGORY, 'C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display(), 'TARGET_ON_CHANGE_ORDER' => ServerEnvironmentConfig::load()->is_url_rewriting_enabled() ? 'media-0-' . $category->get_id() . '.php?' : 'media.php?cat=' . $category->get_id() . '&')); while ($row = $result->fetch()) { $notation->set_id_in_module($row['id']); $group_color = User::get_group_color($row['groups'], $row['level']); $this->tpl->assign_block_vars('file', array('ID' => $row['id'], 'NAME' => $row['name'], 'IMG_NAME' => str_replace('"', '\\"', $row['name']), 'C_DESCRIPTION' => !empty($row['contents']), 'DESCRIPTION' => stripslashes(FormatingHelper::second_parse($row['contents'])), 'POSTER' => $MEDIA_LANG['media_added_by'] . ' : ' . !empty($row['display_name']) ? '<a href="' . UserUrlBuilder::profile($row['iduser'])->rel() . '" class="' . UserService::get_level_class($row['level']) . '"' . (!empty($group_color) ? ' style="color:' . $group_color . '"' : '') . '>' . $row['display_name'] . '</a>' : $LANG['guest'], 'DATE' => sprintf($MEDIA_LANG['add_on_date'], Date::to_format($row['timestamp'], Date::FORMAT_DAY_MONTH_YEAR)), 'COUNT' => sprintf($MEDIA_LANG['view_n_times'], $row['counter']), 'NOTE' => NotationService::display_static_image($notation), 'U_MEDIA_LINK' => PATH_TO_ROOT . '/media/' . url('media.php?id=' . $row['id'], 'media-' . $row['id'] . '-' . $category->get_id() . '+' . Url::encode_rewrite($row['name']) . '.php'), 'U_ADMIN_UNVISIBLE_MEDIA' => PATH_TO_ROOT . url('/media/media_action.php?unvisible=' . $row['id'] . '&token=' . AppContext::get_session()->get_token()), 'U_ADMIN_EDIT_MEDIA' => PATH_TO_ROOT . url('/media/media_action.php?edit=' . $row['id']), 'U_ADMIN_DELETE_MEDIA' => PATH_TO_ROOT . url('/media/media_action.php?del=' . $row['id'] . '&token=' . AppContext::get_session()->get_token()), 'U_COM_LINK' => '<a href="' . PATH_TO_ROOT . '/media/media' . url('.php?id=' . $row['id'] . '&com=0', '-' . $row['id'] . '-' . $category->get_id() . '+' . Url::encode_rewrite($row['name']) . '.php?com=0') . '">' . CommentsService::get_number_and_lang_comments('media', $row['id']) . '</a>')); } $result->dispose(); }
$tpl->display(); } else { $tpl = new FileTemplate('user/pm.tpl'); $nbr_pm = PrivateMsg::count_conversations($current_user->get_id()); //On crée une pagination si le nombre de MP est trop important. $page = AppContext::get_request()->get_getint('p', 1); $pagination = new ModulePagination($page, $nbr_pm, $_NBR_ELEMENTS_PER_PAGE); $pagination->set_url(new Url('/user/pm.php?p=%d')); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } $limit_group = $current_user->check_max_value(PM_GROUP_LIMIT, $user_accounts_config->get_max_private_messages_number()); $unlimited_pm = $current_user->check_level(User::MODERATOR_LEVEL) || $limit_group === -1; $pm_max = $unlimited_pm ? $LANG['illimited'] : $limit_group; $tpl->assign_block_vars('convers', array('C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display(), 'NBR_PM' => $nbr_pm, 'PM_POURCENT' => '<strong>' . $nbr_pm . '</strong> / <strong>' . $pm_max . '</strong>', 'U_MARK_AS_READ' => 'pm.php?read=1', 'L_MARK_AS_READ' => $LANG['mark_pm_as_read'], 'U_USER_ACTION_PM' => url('.php?del_convers=1&p=' . $page . '&token=' . AppContext::get_session()->get_token()), 'U_PM_BOX' => '<a href="pm.php' . '">' . $LANG['pm_box'] . '</a>', 'U_POST_NEW_CONVERS' => 'pm' . url('.php?post=1', ''), 'L_POST_NEW_CONVERS' => $LANG['post_new_convers'])); //Aucun message privé. if ($nbr_pm == 0) { $tpl->assign_block_vars('convers.no_pm', array('L_NO_PM' => LangLoader::get_message('no_item_now', 'common'))); } $nbr_waiting_pm = 0; if (!$unlimited_pm && $nbr_pm > $limit_group) { $nbr_waiting_pm = $nbr_pm - $limit_group; //Nombre de messages privés non visibles. //Gestion erreur. if ($nbr_waiting_pm > 0) { $tpl->put('message_helper', MessageHelper::display(sprintf($LANG['e_pm_full'], $nbr_waiting_pm), MessageHelper::WARNING)); } } $tpl->put_all(array('L_REQUIRE_MESSAGE' => $LANG['require_text'], 'L_REQUIRE_TITLE' => $LANG['require_title'], 'L_DELETE_MESSAGE' => $LANG['alert_delete_msg'], 'L_PRIVATE_MSG' => $LANG['private_message'], 'L_PM_BOX' => $LANG['pm_box'], 'L_TITLE' => $LANG['title'], 'L_PARTICIPANTS' => $LANG['participants'], 'L_MESSAGE' => $LANG['replies'], 'L_LAST_MESSAGE' => $LANG['last_message'], 'L_STATUS' => $LANG['status'], 'L_DELETE' => LangLoader::get_message('delete', 'common'), 'L_READ' => $LANG['read'], 'L_TRACK' => $LANG['pm_track'], 'L_NOT_READ' => $LANG['not_read'])); //Conversation présente chez les deux membres: user_convers_status => 0.
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&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'] . '&y=' . $visit_year . '&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'] . '&y=' . $visit_year . '&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;"> </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 . '&y=' . $visit_year . '&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 . '&y=' . $next_year . '&visit=1', '-visit.php?m=' . $next_month . '&y=' . $next_year), 'U_PREVIOUS_LINK' => url('.php?m=' . $previous_month . '&y=' . $previous_year . '&visit=1', '-visit.php?m=' . $previous_month . '&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&year=' . $year . '&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;"> </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&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'] . '&y=' . $pages_year . '&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'] . '&y=' . $pages_year . '&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;"> </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 . '&y=' . $pages_year . '&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 . '&m=' . $next_month . '&y=' . $next_year . '&pages=1', '-pages.php?d=' . $next_day . '&m=' . $next_month . '&y=' . $next_year), 'U_PREVIOUS_LINK' => url('.php?d=' . $previous_day . '&m=' . $previous_month . '&y=' . $previous_year . '&pages=1', '-pages.php?d=' . $previous_day . '&m=' . $previous_month . '&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&year=' . $year . '&month=' . $month . '&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'] . '&m=' . $row['stats_month'] . '&y=' . $row['stats_year'] . '&pages=1', '-pages.php?d=' . $row['stats_day'] . '&m=' . $row['stats_month'] . '&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 . '&y=' . $next_year . '&pages=1', '-pages.php?m=' . $next_month . '&y=' . $next_year), 'U_PREVIOUS_LINK' => url('.php?m=' . $previous_month . '&y=' . $previous_year . '&pages=1', '-pages.php?m=' . $previous_month . '&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&year=' . $year . '&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'] . '&m=' . $row['stats_month'] . '&y=' . $row['stats_year'] . '&pages=1', '-pages.php?d=' . $row['stats_day'] . '&m=' . $row['stats_month'] . '&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;"> </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&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&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; }
} $tpl->display(); } } elseif ($archives) { $_NBR_ELEMENTS_PER_PAGE = 10; $tpl = new FileTemplate('poll/poll.tpl'); $nbrarchives = PersistenceContext::get_querier()->count(PREFIX . "poll", 'WHERE archive = 1 AND visible = 1'); //On crée une pagination si le nombre de sondages est trop important. $page = AppContext::get_request()->get_getint('p', 1); $pagination = new ModulePagination($page, $nbrarchives, $_NBR_ELEMENTS_PER_PAGE); $pagination->set_url(new Url('/poll/poll.php?p=%d')); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } $tpl->put_all(array('C_POLL_ARCHIVES' => true, 'C_IS_ADMIN' => AppContext::get_current_user()->check_level(User::ADMIN_LEVEL), 'C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display(), 'L_ARCHIVE' => $LANG['archives'], 'L_BACK_POLL' => $LANG['poll_back'], 'L_ON' => $LANG['on'], 'L_EDIT' => LangLoader::get_message('edit', 'common'), 'L_DELETE' => LangLoader::get_message('delete', 'common'))); //On recupère les sondages archivés. $result = PersistenceContext::get_querier()->select("SELECT id, question, votes, answers, type, timestamp\n\tFROM " . PREFIX . "poll\n\tWHERE archive = 1 AND visible = 1\n\tORDER BY timestamp DESC\n\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()) { $array_answer = explode('|', $row['answers']); $array_vote = explode('|', $row['votes']); $sum_vote = array_sum($array_vote); $sum_vote = $sum_vote == 0 ? 1 : $sum_vote; //Empêche la division par 0. $tpl->assign_block_vars('list', array('ID' => $row['id'], 'QUESTION' => stripslashes($row['question']), 'EDIT' => '<a href="' . PATH_TO_ROOT . '/poll/admin_poll' . url('.php?id=' . $row['id']) . '" title="' . LangLoader::get_message('edit', 'common') . '" class="fa fa-edit"></a>', 'DEL' => ' <a href="' . PATH_TO_ROOT . '/poll/admin_poll' . url('.php?delete=1&id=' . $row['id']) . '" title="' . LangLoader::get_message('delete', 'common') . '" class="fa fa-delete" data-confirmation="delete-element"></a>', 'VOTE' => $sum_vote, 'DATE' => Date::to_format(Date::DATE_NOW, Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE), 'L_VOTE' => $sum_vote > 1 ? $LANG['poll_vote_s'] : $LANG['poll_vote'])); $array_poll = array_combine($array_answer, $array_vote); foreach ($array_poll as $answer => $nbrvote) { $tpl->assign_block_vars('list.result', array('ANSWERS' => $answer, 'NBRVOTE' => $nbrvote, 'WIDTH' => NumberHelper::round($nbrvote * 100 / $sum_vote, 1) * 4, 'PERCENT' => NumberHelper::round($nbrvote * 100 / $sum_vote, 1), 'L_VOTE' => $nbrvote > 1 ? $LANG['poll_vote_s'] : $LANG['poll_vote'])); } } $result->dispose();
$tpl->assign_block_vars('list', array('TITLE' => $LANG['wiki_consult_article'], 'AUTHOR' => !empty($row['login']) ? '<a href="' . UserUrlBuilder::profile($row['user_id'])->rel() . '" class="' . UserService::get_level_class($row['level']) . '"' . (!empty($group_color) ? ' style="color:' . $group_color . '"' : '') . '>' . $row['login'] . '</a>' : $row['user_ip'], 'DATE' => Date::to_format($row['timestamp'], Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE), 'U_ARTICLE' => $row['activ'] == 1 ? url('wiki.php?title=' . $row['encoded_title'], $row['encoded_title']) : url('wiki.php?id_contents=' . $row['id_contents']), 'CURRENT_RELEASE' => $row['activ'] == 1 ? '(' . $LANG['wiki_current_version'] . ')' : '', 'ACTIONS' => !empty($actions) ? $actions : $LANG['wiki_no_possible_action'])); } $result->dispose(); $tpl->put_all(array('L_VERSIONS' => $LANG['wiki_version_list'], 'L_DATE' => LangLoader::get_message('date', 'date-common'), 'L_AUTHOR' => $LANG['wiki_author'], 'L_ACTIONS' => $LANG['wiki_possible_actions'])); $tpl->display(); } else { $_WIKI_NBR_ARTICLES_A_PAGE_IN_HISTORY = 25; //Champs sur lesquels on ordonne $field = $field == 'title' ? 'title' : 'timestamp'; $order = $order == 'asc' ? 'asc' : 'desc'; //On compte le nombre d'articles $nbr_articles = PersistenceContext::get_querier()->count(PREFIX . "wiki_articles", 'WHERE redirect = 0'); //On instancie la classe de pagination $page = AppContext::get_request()->get_getint('p', 1); $pagination = new ModulePagination($page, $nbr_articles, $_WIKI_NBR_ARTICLES_A_PAGE_IN_HISTORY); $pagination->set_url(new Url('/wiki/history.php?field=' . $field . '&order=' . $order . '&p=%d')); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } $tpl = new FileTemplate('wiki/history.tpl'); $tpl->put_all(array('C_PAGINATION' => $pagination->has_several_pages(), 'L_HISTORY' => $LANG['wiki_history'], 'L_TITLE' => $LANG['wiki_article_title'], 'L_AUTHOR' => $LANG['wiki_author'], 'L_DATE' => LangLoader::get_message('date', 'date-common'), 'TOP_TITLE' => $field == 'title' && $order == 'asc' ? '' : url('history.php?p=' . $page . '&field=title&order=asc'), 'BOTTOM_TITLE' => $field == 'title' && $order == 'desc' ? '' : url('history.php?p=' . $page . '&field=title&order=desc'), 'TOP_DATE' => $field == 'timestamp' && $order == 'asc' ? '' : url('history.php?p=' . $page . '&field=timestamp&order=asc'), 'BOTTOM_DATE' => $field == 'timestamp' && $order == 'desc' ? '' : url('history.php?p=' . $page . '&field=timestamp&order=desc'), 'PAGINATION' => $pagination->display())); $result = PersistenceContext::get_querier()->select("SELECT a.title, a.encoded_title, c.timestamp, c.id_contents AS id, c.user_id, c.user_ip, m.display_name, m.groups, m.level, c.id_article, c.activ, a.id_contents\n\t\tFROM " . PREFIX . "wiki_articles a\n\t\tLEFT JOIN " . PREFIX . "wiki_contents c ON c.id_contents = a.id_contents\n\t\tLEFT JOIN " . DB_TABLE_MEMBER . " m ON m.user_id = c.user_id\n\t\tWHERE a.redirect = 0\n\t\tORDER BY " . ($field == 'title' ? 'a' : 'c') . "." . $field . " " . $order . "\n\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()) { $group_color = User::get_group_color($row['groups'], $row['level']); $tpl->assign_block_vars('list', array('TITLE' => stripslashes($row['title']), 'AUTHOR' => !empty($row['login']) ? '<a href="' . UserUrlBuilder::profile($row['user_id'])->rel() . '" class="' . UserService::get_level_class($row['level']) . '"' . (!empty($group_color) ? ' style="color:' . $group_color . '"' : '') . '>' . $row['login'] . '</a>' : $row['user_ip'], 'DATE' => Date::to_format($row['timestamp'], Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE), 'U_ARTICLE' => url('wiki.php?title=' . $row['encoded_title'], $row['encoded_title']))); } $result->dispose(); $tpl->display(); } require_once '../kernel/footer.php';
$tpl->assign_block_vars('head', array('FIELD_NAME' => $field_name)); } } //On parse les valeurs de sortie $j = 0; foreach ($row as $field_name => $field_value) { if ($j == 0) { $tpl->assign_block_vars('line.field', array('FIELD_NAME' => '<span class="text-strong"><a href="admin_database_tools.php?table=' . $table . '&field=' . $field_name . '&value=' . $field_value . '&action=update&token=' . AppContext::get_session()->get_token() . '" title="' . $LANG['update'] . '" class="fa fa-edit"></a> <a href="admin_database_tools.php?table=' . $table . '&field=' . $field_name . '&value=' . $field_value . '&action=delete&token=' . AppContext::get_session()->get_token() . '" title="' . LangLoader::get_message('delete', 'common') . '" class="fa fa-delete" data-confirmation="delete-element"></a></span>', 'STYLE' => '')); } $tpl->assign_block_vars('line.field', array('FIELD_NAME' => str_replace("\n", '<br />', TextHelper::strprotect($field_value, TextHelper::HTML_PROTECT, TextHelper::ADDSLASHES_NONE)), 'STYLE' => is_numeric($field_value) ? 'text-align:right;' : '')); $j++; } $i++; } $result->dispose(); $tpl->put_all(array('C_DATABASE_TABLE_DATA' => true, 'C_DATABASE_TABLE_STRUCTURE' => false, 'C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display(), 'QUERY' => DatabaseService::indent_query($query), 'QUERY_HIGHLIGHT' => DatabaseService::highlight_query($query), 'L_REQUIRE' => LangLoader::get_message('form.explain_required_fields', 'status-messages-common'), 'L_EXPLAIN_QUERY' => $LANG['db_query_explain'], 'L_CONFIRM_QUERY' => $LANG['db_confirm_query'], 'L_EXECUTE' => $LANG['db_submit_query'], 'L_RESULT' => $LANG['db_query_result'], 'L_PAGE' => $LANG['page'], 'L_EXECUTED_QUERY' => $LANG['db_executed_query'])); } elseif (!empty($table) && $action == 'delete') { AppContext::get_session()->csrf_get_protect(); //Protection csrf $field = retrieve(GET, 'field', ''); $value = retrieve(GET, 'value', ''); if (!empty($value) && !empty($field)) { PersistenceContext::get_querier()->delete($table, 'WHERE ' . $field . '=:value', array('value' => $value)); } AppContext::get_response()->redirect('/database/admin_database_tools.php?table=' . $table . '&action=data'); } elseif (!empty($table) && $action == 'update') { AppContext::get_session()->csrf_get_protect(); //Protection csrf $table_structure = $backup->extract_table_structure(array($table)); //Extraction de la structure de la table. $value = retrieve(GET, 'value', '');
if ($num_contributions > CONTRIBUTIONS_PER_PAGE * ($page - 1) && $num_contributions <= CONTRIBUTIONS_PER_PAGE * $page) { $poster_group_color = User::get_group_color($this_contribution->get_poster_groups(), $this_contribution->get_poster_level()); $fixer_group_color = User::get_group_color($this_contribution->get_fixer_groups(), $this_contribution->get_fixer_level()); $template->assign_block_vars('contributions', array('C_POSTER_GROUP_COLOR' => !empty($poster_group_color), 'C_FIXER_GROUP_COLOR' => !empty($fixer_group_color), 'ENTITLED' => $this_contribution->get_entitled(), 'MODULE' => $this_contribution->get_module_name(), 'STATUS' => $this_contribution->get_status_name(), 'CREATION_DATE' => $creation_date->format(Date::FORMAT_DAY_MONTH_YEAR), 'FIXING_DATE' => $fixing_date->format(Date::FORMAT_DAY_MONTH_YEAR), 'POSTER' => $this_contribution->get_poster_login(), 'POSTER_LEVEL_CLASS' => UserService::get_level_class($this_contribution->get_poster_level()), 'POSTER_GROUP_COLOR' => $poster_group_color, 'FIXER' => $this_contribution->get_fixer_login(), 'FIXER_LEVEL_CLASS' => UserService::get_level_class($this_contribution->get_fixer_level()), 'FIXER_GROUP_COLOR' => $fixer_group_color, 'ACTIONS' => '', 'U_FIXER_PROFILE' => UserUrlBuilder::profile($this_contribution->get_fixer_id())->rel(), 'U_POSTER_PROFILE' => UserUrlBuilder::profile($this_contribution->get_poster_id())->rel(), 'U_CONSULT' => PATH_TO_ROOT . '/user/' . url('contribution_panel.php?id=' . $this_contribution->get_id()), 'C_FIXED' => $this_contribution->get_status() == Event::EVENT_STATUS_PROCESSED, 'C_PROCESSING' => $this_contribution->get_status() == Event::EVENT_STATUS_BEING_PROCESSED)); } $num_contributions++; } } $pagination = new ModulePagination($page, $num_contributions, CONTRIBUTIONS_PER_PAGE); $pagination->set_url(new Url('/user/contribution_panel.php?p=%d&criteria=' . $criteria . '&order=' . $order)); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } if ($num_contributions > 1) { $template->put_all(array('C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display())); } else { $template->put_all(array('C_NO_CONTRIBUTION' => true, 'L_NO_CONTRIBUTION_TO_DISPLAY' => LangLoader::get_message('no_item_now', 'common'))); } //Liste des modules proposant de contribuer define('NUMBER_OF_MODULES_PER_LINE', 4); $i_module = 0; $modules = ModulesManager::get_activated_modules_map_sorted_by_localized_name(); foreach ($modules as $name => $module) { $contribution_interface = $module->get_configuration()->get_contribution_interface(); $authorized = true; $authorizations_class = ucfirst($module->get_id()) . 'AuthorizationsService'; if (class_exists($authorizations_class) && method_exists($authorizations_class, 'check_authorizations') && method_exists($authorizations_class, 'contribution') && !$authorizations_class::check_authorizations()->contribution()) { $authorized = false; } if (!empty($contribution_interface) && $authorized) {
//On va chercher la liste des alertes $alerts_list = AdministratorAlertService::get_all_alerts($criteria, $order, ($page - 1) * NUM_ALERTS_PER_PAGE, NUM_ALERTS_PER_PAGE); foreach ($alerts_list as $alert) { $img_class = ''; switch ($alert->get_priority()) { case AdministratorAlert::ADMIN_ALERT_VERY_LOW_PRIORITY: $color = 'FFFFFF'; break; case AdministratorAlert::ADMIN_ALERT_LOW_PRIORITY: $color = 'ECDBB7'; break; case AdministratorAlert::ADMIN_ALERT_MEDIUM_PRIORITY: $color = 'F5D5C6'; break; case AdministratorAlert::ADMIN_ALERT_HIGH_PRIORITY: $img_class = 'fa fa-warning'; $color = 'FFD5D1'; break; case AdministratorAlert::ADMIN_ALERT_VERY_HIGH_PRIORITY: $img_class = 'fa fa-warning'; $color = 'F3A29B'; break; default: $color = 'FFFFFF'; } $creation_date = $alert->get_creation_date(); $template->assign_block_vars('alerts', array('C_PROCESSED' => $alert->get_status() == AdministratorAlert::ADMIN_ALERT_STATUS_PROCESSED, 'FIXING_URL' => url(PATH_TO_ROOT . '/' . $alert->get_fixing_url()), 'NAME' => $alert->get_entitled(), 'PRIORITY' => $alert->get_priority_name(), 'STYLE' => 'background:#' . $color . ';', 'IMG' => !empty($img_class) ? '<i class="' . $img_class . '"></i>' : '', 'DATE' => $creation_date->format(Date::FORMAT_DAY_MONTH_YEAR_HOUR_MINUTE), 'ID' => $alert->get_id(), 'STATUS' => $alert->get_status())); } $template->put_all(array('C_EXISTING_ALERTS' => (bool) count($alerts_list), 'C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display(), 'L_ADMIN_ALERTS' => $LANG['administrator_alerts'], 'L_TYPE' => $LANG['type'], 'L_DATE' => LangLoader::get_message('date', 'date-common'), 'L_PRIORITY' => $LANG['priority'], 'L_ADMINISTRATOR_ALERTS_LIST' => $LANG['administrator_alerts_list'], 'L_ACTIONS' => $LANG['administrator_alerts_action'], 'L_NO_ALERT' => $LANG['no_administrator_alert'], 'L_CONFIRM_DELETE_ALERT' => $LANG['confirm_delete_administrator_alert'], 'L_DELETE' => LangLoader::get_message('delete', 'common'), 'L_FIX' => $LANG['admin_alert_fix'], 'L_UNFIX' => $LANG['admin_alert_unfix'], 'C_ORDER_ENTITLED_ASC' => $criteria == 'entitled' && $order == 'asc', 'U_ORDER_ENTITLED_ASC' => url('admin_alerts.php?p=' . $page . '&criteria=entitled&order=asc'), 'C_ORDER_ENTITLED_DESC' => $criteria == 'entitled' && $order == 'desc', 'U_ORDER_ENTITLED_DESC' => url('admin_alerts.php?p=' . $page . '&criteria=entitled&order=desc'), 'C_ORDER_CREATION_DATE_ASC' => $criteria == 'creation_date' && $order == 'asc', 'U_ORDER_CREATION_DATE_ASC' => url('admin_alerts.php?p=' . $page . '&criteria=creation_date&order=asc'), 'C_ORDER_CREATION_DATE_DESC' => $criteria == 'creation_date' && $order == 'desc', 'U_ORDER_CREATION_DATE_DESC' => url('admin_alerts.php?p=' . $page . '&criteria=creation_date&order=desc'), 'C_ORDER_PRIORITY_ASC' => $criteria == 'priority' && $order == 'asc', 'U_ORDER_PRIORITY_ASC' => url('admin_alerts.php?p=' . $page . '&criteria=priority&order=asc'), 'C_ORDER_PRIORITY_DESC' => $criteria == 'priority' && $order == 'desc', 'U_ORDER_PRIORITY_DESC' => url('admin_alerts.php?p=' . $page . '&criteria=priority&order=desc'), 'C_ORDER_STATUS_ASC' => $criteria == 'current_status' && $order == 'asc', 'U_ORDER_STATUS_ASC' => url('admin_alerts.php?p=' . $page . '&criteria=current_status&order=asc'), 'C_ORDER_STATUS_DESC' => $criteria == 'current_status' && $order == 'desc', 'U_ORDER_STATUS_DESC' => url('admin_alerts.php?p=' . $page . '&criteria=current_status&order=desc'))); $template->display(); require_once '../admin/admin_footer.php';
private function build_view() { global $LANG, $Bread_crumb; load_module_lang('gallery'); $g_idpics = retrieve(GET, 'id', 0); $g_views = retrieve(GET, 'views', false); $g_notes = retrieve(GET, 'notes', false); $g_sort = retrieve(GET, 'sort', ''); $g_sort = !empty($g_sort) ? 'sort=' . $g_sort : ''; //Récupération du mode d'ordonnement. if (preg_match('`([a-z]+)_([a-z]+)`', $g_sort, $array_match)) { $g_type = $array_match[1]; $g_mode = $array_match[2]; } else { list($g_type, $g_mode) = array('date', 'desc'); } $comments_topic = new GalleryCommentsTopic(); $config = GalleryConfig::load(); $category = $this->get_category(); $categories = GalleryService::get_categories_manager()->get_categories_cache()->get_childrens($category->get_id()); $authorized_categories = GalleryService::get_authorized_categories($category->get_id()); $Gallery = new Gallery(); $nbr_pics = $this->db_querier->count(GallerySetup::$gallery_table, 'WHERE idcat=:idcat AND aprob = 1', array('idcat' => $category->get_id())); $total_cat = count($categories); //On crée une pagination si le nombre de catégories est trop important. $page = AppContext::get_request()->get_getint('p', 1); $pagination = new ModulePagination($page, $total_cat, $config->get_categories_number_per_page()); $pagination->set_url(new Url('/gallery/gallery.php?p=%d&cat=' . $category->get_id() . '&id=' . $g_idpics . '&' . $g_sort)); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } //Colonnes des catégories. $nbr_column_cats = $total_cat > $config->get_columns_number() ? $config->get_columns_number() : $total_cat; $nbr_column_cats = !empty($nbr_column_cats) ? $nbr_column_cats : 1; $column_width_cats = floor(100 / $nbr_column_cats); //Colonnes des images. $nbr_column_pics = $nbr_pics > $config->get_columns_number() ? $config->get_columns_number() : $nbr_pics; $nbr_column_pics = !empty($nbr_column_pics) ? $nbr_column_pics : 1; $column_width_pics = floor(100 / $nbr_column_pics); $is_admin = AppContext::get_current_user()->check_level(User::ADMIN_LEVEL); $is_modo = GalleryAuthorizationsService::check_authorizations($category->get_id())->moderation(); $module_data_path = $this->tpl->get_pictures_data_path(); $rewrite_title = Url::encode_rewrite($category->get_name()); ##### Catégorie disponibles ##### $nbr_cat_displayed = 0; if ($total_cat > 0 && empty($g_idpics)) { $this->tpl->put('C_GALLERY_CATS', true); $j = 0; $result = $this->db_querier->select('SELECT @id_cat:= gallery_cats.id, gallery_cats.*, (SELECT COUNT(*) FROM ' . GallerySetup::$gallery_table . ' WHERE idcat IN ( @id_cat, (SELECT GROUP_CONCAT(id SEPARATOR \',\') FROM ' . GallerySetup::$gallery_cats_table . ' WHERE id_parent = @id_cat), (SELECT GROUP_CONCAT(childs.id SEPARATOR \',\') FROM ' . GallerySetup::$gallery_cats_table . ' parents INNER JOIN ' . GallerySetup::$gallery_cats_table . ' childs ON parents.id = childs.id_parent WHERE parents.id_parent = @id_cat) ) AND aprob = 1 ) AS nbr_pics FROM ' . GallerySetup::$gallery_cats_table . ' gallery_cats WHERE id_parent = :id_category AND id IN :authorized_categories ORDER BY id_parent, c_order LIMIT :number_items_per_page OFFSET :display_from', array('id_category' => $category->get_id(), 'authorized_categories' => $authorized_categories, 'number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from())); while ($row = $result->fetch()) { $category_image = new Url($row['image']); $this->tpl->assign_block_vars('sub_categories_list', array('C_CATEGORY_IMAGE' => !empty($row['image']), 'CATEGORY_NAME' => $row['name'], 'CATEGORY_IMAGE' => $category_image->rel(), 'PICTURES_NUMBER' => sprintf($LANG['nbr_pics_info'], $row['nbr_pics']), 'U_CATEGORY' => GalleryUrlBuilder::get_link_cat($row['id'], $row['name']))); $nbr_cat_displayed++; } $result->dispose(); } $category_description = FormatingHelper::second_parse($category->get_description()); $this->tpl->put_all(array('C_ROOT_CATEGORY' => $category->get_id() == Category::ROOT_CATEGORY, 'C_CATEGORY_DESCRIPTION' => $category_description, 'C_SUB_CATEGORIES' => $nbr_cat_displayed > 0, 'C_SUBCATEGORIES_PAGINATION' => $pagination->has_several_pages(), 'SUBCATEGORIES_PAGINATION' => $pagination->display(), 'ARRAY_JS' => '', 'NBR_PICS' => 0, 'MAX_START' => 0, 'START_THUMB' => 0, 'END_THUMB' => 0, 'COLUMNS_NUMBER' => $nbr_column_pics, 'CATS_COLUMNS_WIDTH' => $column_width_cats, 'COLUMN_WIDTH_PICS' => $column_width_pics, 'CATEGORY_DESCRIPTION' => $category_description, 'U_EDIT_CATEGORY' => $category->get_id() == Category::ROOT_CATEGORY ? GalleryUrlBuilder::configuration()->rel() : GalleryUrlBuilder::edit_category($category->get_id())->rel(), 'CAT_ID' => $category->get_id(), 'DISPLAY_MODE' => $config->get_pics_enlargement_mode(), 'GALLERY' => $category->get_id() != Category::ROOT_CATEGORY ? $this->lang['module_title'] . ' - ' . $category->get_name() : $this->lang['module_title'], 'HEIGHT_MAX' => $config->get_mini_max_height(), 'WIDTH_MAX' => $column_width_pics, 'MODULE_DATA_PATH' => $module_data_path, 'L_APROB' => $LANG['aprob'], 'L_UNAPROB' => $LANG['unaprob'], 'L_FILE_FORBIDDEN_CHARS' => $LANG['file_forbidden_chars'], 'L_TOTAL_IMG' => $category->get_id() != Category::ROOT_CATEGORY ? sprintf($LANG['total_img_cat'], $nbr_pics) : '', 'L_ADD_IMG' => $LANG['add_pic'], 'L_GALLERY' => $this->lang['module_title'], 'L_CATEGORIES' => $category->get_id_parent() >= 0 ? $LANG['sub_album'] : $LANG['album'], 'L_NAME' => $LANG['name'], 'L_EDIT' => LangLoader::get_message('edit', 'common'), 'L_MOVETO' => $LANG['moveto'], 'L_DELETE' => LangLoader::get_message('delete', 'common'), 'L_SUBMIT' => $LANG['submit'], 'L_ALREADY_VOTED' => $LANG['already_vote'], 'L_ORDER_BY' => LangLoader::get_message('sort_by', 'common') . (isset($LANG[$g_type]) ? ' ' . strtolower($LANG[$g_type]) : ''), 'L_DIRECTION' => $LANG['direction'], 'L_DISPLAY' => LangLoader::get_message('display', 'common'), 'U_INDEX' => url('.php'), 'U_BEST_VIEWS' => PATH_TO_ROOT . '/gallery/gallery' . url('.php?views=1&cat=' . $category->get_id(), '-' . $category->get_id() . '.php?views=1'), 'U_BEST_NOTES' => PATH_TO_ROOT . '/gallery/gallery' . url('.php?notes=1&cat=' . $category->get_id(), '-' . $category->get_id() . '.php?notes=1'), 'U_ASC' => PATH_TO_ROOT . '/gallery/gallery' . url('.php?cat=' . $category->get_id() . '&sort=' . $g_type . '_' . 'asc', '-' . $category->get_id() . '.php?sort=' . $g_type . '_' . 'asc'), 'U_DESC' => PATH_TO_ROOT . '/gallery/gallery' . url('.php?cat=' . $category->get_id() . '&sort=' . $g_type . '_' . 'desc', '-' . $category->get_id() . '.php?sort=' . $g_type . '_' . 'desc'), 'U_ORDER_BY_NAME' => PATH_TO_ROOT . '/gallery/gallery' . url('.php?sort=name_desc&cat=' . $category->get_id(), '-' . $category->get_id() . '+' . $rewrite_title . '.php?sort=name_desc'), 'U_ORDER_BY_DATE' => PATH_TO_ROOT . '/gallery/gallery' . url('.php?sort=date_desc&cat=' . $category->get_id(), '-' . $category->get_id() . '+' . $rewrite_title . '.php?sort=date_desc'), 'U_ORDER_BY_VIEWS' => PATH_TO_ROOT . '/gallery/gallery' . url('.php?sort=views_desc&cat=' . $category->get_id(), '-' . $category->get_id() . '+' . $rewrite_title . '.php?sort=views_desc'), 'U_ORDER_BY_NOTES' => PATH_TO_ROOT . '/gallery/gallery' . url('.php?sort=notes_desc&cat=' . $category->get_id(), '-' . $category->get_id() . '+' . $rewrite_title . '.php?sort=notes_desc'), 'U_ORDER_BY_COM' => PATH_TO_ROOT . '/gallery/gallery' . url('.php?sort=com_desc&cat=' . $category->get_id(), '-' . $category->get_id() . '+' . $rewrite_title . '.php?sort=com_desc'), 'L_BEST_VIEWS' => $LANG['best_views'], 'L_BEST_NOTES' => $LANG['best_notes'], 'L_ASC' => $LANG['asc'], 'L_DESC' => $LANG['desc'], 'L_DATE' => LangLoader::get_message('date', 'date-common'), 'L_VIEWS' => $LANG['views'], 'L_NOTES' => LangLoader::get_message('notes', 'common'), 'L_COM' => $LANG['com_s'])); ##### Affichage des photos ##### if ($nbr_pics > 0) { switch ($g_type) { case 'name': $sort_type = 'g.name'; break; case 'date': $sort_type = 'g.timestamp'; break; case 'views': $sort_type = 'g.views'; break; case 'notes': $sort_type = 'notes.average_notes'; break; case 'com': $sort_type = 'com.number_comments'; break; default: $sort_type = 'g.timestamp'; } switch ($g_mode) { case 'desc': $sort_mode = 'DESC'; break; case 'asc': $sort_mode = 'ASC'; break; default: $sort_mode = 'DESC'; } $g_sql_sort = ' ORDER BY ' . $sort_type . ' ' . $sort_mode; if ($g_views) { $g_sql_sort = ' ORDER BY g.views DESC'; } elseif ($g_notes) { $g_sql_sort = ' ORDER BY notes.average_notes DESC'; } $this->tpl->put('C_GALLERY_PICS', true); //Affichage d'une photo demandée. if (!empty($g_idpics)) { $info_pics = $this->db_querier->select_single_row_query("SELECT g.*, m.display_name, m.groups, m.level, notes.average_notes, notes.number_notes, note.note\n\t\t\t\t\tFROM " . GallerySetup::$gallery_table . " g\n\t\t\t\t\tLEFT JOIN " . DB_TABLE_MEMBER . " m ON m.user_id = g.user_id\n\t\t\t\t\tLEFT JOIN " . DB_TABLE_COMMENTS_TOPIC . " com ON com.id_in_module = g.id AND com.module_id = 'gallery'\n\t\t\t\t\tLEFT JOIN " . DB_TABLE_AVERAGE_NOTES . " notes ON notes.id_in_module = g.id AND notes.module_name = 'gallery'\n\t\t\t\t\tLEFT JOIN " . DB_TABLE_NOTE . " note ON note.id_in_module = g.id AND note.module_name = 'gallery' AND note.user_id = :user_id\n\t\t\t\t\tWHERE g.idcat = :idcat AND g.id = :id AND g.aprob = 1\n\t\t\t\t\t" . $g_sql_sort, array('user_id' => AppContext::get_current_user()->get_id(), 'idcat' => $category->get_id(), 'id' => $g_idpics)); if (!empty($info_pics['id'])) { $Bread_crumb->add(stripslashes($info_pics['name']), PATH_TO_ROOT . '/gallery/gallery' . url('.php?cat=' . $info_pics['idcat'] . '&id=' . $info_pics['id'], '-' . $info_pics['idcat'] . '-' . $info_pics['id'] . '.php')); //Affichage miniatures. $id_previous = 0; $id_next = 0; $nbr_pics_display_before = floor(($nbr_column_pics - 1) / 2); //Nombres de photos de chaque côté de la miniature de la photo affichée. $nbr_pics_display_after = $nbr_column_pics - 1 - floor($nbr_pics_display_before); list($i, $reach_pics_pos, $pos_pics, $thumbnails_before, $thumbnails_after, $start_thumbnails, $end_thumbnails) = array(0, false, 0, 0, 0, $nbr_pics_display_before, $nbr_pics_display_after); $array_pics = array(); $array_js = 'var array_pics = new Array();'; $result = $this->db_querier->select("SELECT g.id, g.idcat, g.path\n\t\t\t\t\tFROM " . GallerySetup::$gallery_table . " g\n\t\t\t\t\tWHERE g.idcat = :idcat AND g.aprob = 1\n\t\t\t\t\t" . $g_sql_sort, array('idcat' => $category->get_id())); while ($row = $result->fetch()) { //Si la miniature n'existe pas (cache vidé) on regénère la miniature à partir de l'image en taille réelle. if (!file_exists(PATH_TO_ROOT . '/gallery/pics/thumbnails/' . $row['path'])) { $Gallery->Resize_pics(PATH_TO_ROOT . '/gallery/pics/' . $row['path']); } //Redimensionnement + création miniature //Affichage de la liste des miniatures sous l'image. $array_pics[] = '<td class="center" style="height:' . ($config->get_mini_max_height() + 16) . 'px"><span id="thumb' . $i . '"><a href="gallery' . url('.php?cat=' . $row['idcat'] . '&id=' . $row['id'] . '&sort=' . $g_sort, '-' . $row['idcat'] . '-' . $row['id'] . '.php?sort=' . $g_sort) . '#pics_max' . '"><img src="pics/thumbnails/' . $row['path'] . '" alt="' . $row['path'] . '" /></a></span></td>'; if ($row['id'] == $g_idpics) { $reach_pics_pos = true; $pos_pics = $i; } else { if (!$reach_pics_pos) { $thumbnails_before++; $id_previous = $row['id']; } else { $thumbnails_after++; if (empty($id_next)) { $id_next = $row['id']; } } } $array_js .= 'array_pics[' . $i . '] = new Array();' . "\n"; $array_js .= 'array_pics[' . $i . '][\'link\'] = \'' . GalleryUrlBuilder::get_link_item($row['idcat'], $row['id']) . '#pics_max' . "';\n"; $array_js .= 'array_pics[' . $i . '][\'path\'] = \'' . $row['path'] . "';\n"; $i++; } $result->dispose(); $activ_note = $config->is_notation_enabled() && AppContext::get_current_user()->check_level(User::MEMBER_LEVEL); if ($activ_note) { //Affichage notation. $notation = new Notation(); $notation->set_module_name('gallery'); $notation->set_id_in_module($info_pics['id']); $notation->set_notation_scale($config->get_notation_scale()); $notation->set_number_notes($info_pics['number_notes']); $notation->set_average_notes($info_pics['average_notes']); $notation->set_user_already_noted(!empty($info_pics['note'])); } if ($thumbnails_before < $nbr_pics_display_before) { $end_thumbnails += $nbr_pics_display_before - $thumbnails_before; } if ($thumbnails_after < $nbr_pics_display_after) { $start_thumbnails += $nbr_pics_display_after - $thumbnails_after; } $html_protected_name = $info_pics['name']; $comments_topic->set_id_in_module($info_pics['id']); $comments_topic->set_url(new Url('/gallery/gallery.php?cat=' . $category->get_id() . '&id=' . $g_idpics . '&com=0')); //Liste des catégories. $search_category_children_options = new SearchCategoryChildrensOptions(); $search_category_children_options->add_authorizations_bits(Category::READ_AUTHORIZATIONS); $search_category_children_options->add_authorizations_bits(Category::WRITE_AUTHORIZATIONS); $categories_tree = GalleryService::get_categories_manager()->get_select_categories_form_field($info_pics['id'] . 'cat', '', $info_pics['idcat'], $search_category_children_options); $method = new ReflectionMethod('AbstractFormFieldChoice', 'get_options'); $method->setAccessible(true); $categories_tree_options = $method->invoke($categories_tree); $cat_list = ''; foreach ($categories_tree_options as $option) { $cat_list .= $option->display()->render(); } $group_color = User::get_group_color($info_pics['groups'], $info_pics['level']); //Affichage de l'image et de ses informations. $this->tpl->put_all(array('C_GALLERY_PICS_MAX' => true, 'C_GALLERY_PICS_MODO' => $is_modo, 'C_AUTHOR_DISPLAYED' => $config->is_author_displayed(), 'C_VIEWS_COUNTER_ENABLED' => $config->is_views_counter_enabled(), 'C_TITLE_ENABLED' => $config->is_title_enabled(), 'C_COMMENTS_ENABLED' => $config->are_comments_enabled(), 'C_NOTATION_ENABLED' => $config->is_notation_enabled(), 'ID' => $info_pics['id'], 'NAME' => '<span id="fi_' . $info_pics['id'] . '">' . stripslashes($info_pics['name']) . '</span> <span id="fi' . $info_pics['id'] . '"></span>', 'POSTOR' => '<a class="small ' . UserService::get_level_class($info_pics['level']) . '"' . (!empty($group_color) ? ' style="color:' . $group_color . '"' : '') . ' href="' . UserUrlBuilder::profile($info_pics['user_id'])->rel() . '">' . $info_pics['display_name'] . '</a>', 'DATE' => Date::to_format($info_pics['timestamp'], Date::FORMAT_DAY_MONTH_YEAR), 'VIEWS' => $info_pics['views'] + 1, 'DIMENSION' => $info_pics['width'] . ' x ' . $info_pics['height'], 'SIZE' => NumberHelper::round($info_pics['weight'] / 1024, 1), 'L_COMMENTS' => CommentsService::get_number_and_lang_comments('gallery', $info_pics['id']), 'KERNEL_NOTATION' => $activ_note ? NotationService::display_active_image($notation) : '', 'COLSPAN' => $config->get_columns_number() + 2, 'CAT' => $cat_list, 'RENAME' => $html_protected_name, 'RENAME_CUT' => $html_protected_name, 'IMG_APROB' => $info_pics['aprob'] == 1 ? 'fa fa-eye-slash' : 'fa fa-eye', 'ARRAY_JS' => $array_js, 'NBR_PICS' => $i - 1, 'MAX_START' => $i - 1 - $nbr_column_pics, 'START_THUMB' => $pos_pics - $start_thumbnails > 0 ? $pos_pics - $start_thumbnails : 0, 'END_THUMB' => $pos_pics + $end_thumbnails, 'L_KB' => LangLoader::get_message('unit.kilobytes', 'common'), 'L_INFORMATIONS' => $LANG['informations'], 'L_NAME' => $LANG['name'], 'L_POSTOR' => $LANG['postor'], 'L_VIEWS' => $LANG['views'], 'L_ADD_ON' => $LANG['add_on'], 'L_DIMENSION' => $LANG['dimension'], 'L_SIZE' => $LANG['size'], 'L_NOTE' => LangLoader::get_message('note', 'common'), 'L_COM' => $LANG['com'], 'L_EDIT' => LangLoader::get_message('edit', 'common'), 'L_APROB_IMG' => $info_pics['aprob'] == 1 ? $LANG['unaprob'] : $LANG['aprob'], 'L_THUMBNAILS' => $LANG['thumbnails'], 'U_DEL' => url('gallery.php?del=' . $info_pics['id'] . '&token=' . AppContext::get_session()->get_token() . '&cat=' . $category->get_id()), 'U_MOVE' => url('gallery.php?id=' . $info_pics['id'] . '&token=' . AppContext::get_session()->get_token() . '&move=\' + this.options[this.selectedIndex].value'), 'U_PREVIOUS' => $pos_pics > 0 ? '<a href="' . GalleryUrlBuilder::get_link_item($category->get_id(), $id_previous) . '#pics_max"><i class="fa fa-arrow-left fa-2x"></i></a> <a href="' . GalleryUrlBuilder::get_link_item($category->get_id(), $id_previous) . '#pics_max">' . $LANG['previous'] . '</a>' : '', 'U_NEXT' => $pos_pics < $i - 1 ? '<a href="' . GalleryUrlBuilder::get_link_item($category->get_id(), $id_next) . '#pics_max">' . $LANG['next'] . '</a> <a href="' . GalleryUrlBuilder::get_link_item($category->get_id(), $id_next) . '#pics_max"><i class="fa fa-arrow-right fa-2x"></i></a>' : '', 'U_LEFT_THUMBNAILS' => $pos_pics - $start_thumbnails > 0 ? '<span id="display_left"><a href="javascript:display_thumbnails(\'left\')"><i class="fa fa-arrow-left fa-2x"></i></a></span>' : '<span id="display_left"></span>', 'U_RIGHT_THUMBNAILS' => $pos_pics - $start_thumbnails <= $i - 1 - $nbr_column_pics ? '<span id="display_right"><a href="javascript:display_thumbnails(\'right\')"><i class="fa fa-arrow-right fa-2x"></i></a></span>' : '<span id="display_right"></span>', 'U_COMMENTS' => GalleryUrlBuilder::get_link_item($info_pics['idcat'], $info_pics['id'], 0, $g_sort) . '#comments-list', 'U_IMG_MAX' => 'show_pics.php?id=' . $info_pics['id'] . '&cat=' . $info_pics['idcat'])); //Affichage de la liste des miniatures sous l'image. $i = 0; foreach ($array_pics as $pics) { if ($i >= $pos_pics - $start_thumbnails && $i <= $pos_pics + $end_thumbnails) { $this->tpl->assign_block_vars('list_preview_pics', array('PICS' => $pics)); } $i++; } //Commentaires if (AppContext::get_request()->get_getint('com', 0) == 0 && $config->are_comments_enabled()) { $this->tpl->put_all(array('COMMENTS' => CommentsService::display($comments_topic)->render())); } } } else { $sort = retrieve(GET, 'sort', ''); //On crée une pagination si le nombre de photos est trop important. $page = AppContext::get_request()->get_getint('pp', 1); $pagination = new ModulePagination($page, $nbr_pics, $config->get_pics_number_per_page()); $pagination->set_url(new Url('/gallery/gallery.php?pp=%d' . (!empty($sort) ? '&sort=' . $sort : '') . '&cat=' . $category->get_id())); if ($pagination->current_page_is_empty() && $page > 1) { $error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } $this->tpl->put_all(array('C_GALLERY_MODO' => $is_modo, 'C_PICTURE_NAME_DISPLAYED' => $config->is_title_enabled(), 'C_AUTHOR_DISPLAYED' => $config->is_author_displayed(), 'C_VIEWS_COUNTER_ENABLED' => $config->is_views_counter_enabled(), 'C_COMMENTS_ENABLED' => $config->are_comments_enabled(), 'C_PAGINATION' => $pagination->has_several_pages(), 'PAGINATION' => $pagination->display(), 'L_EDIT' => LangLoader::get_message('edit', 'common'), 'L_VIEW' => $LANG['view'], 'L_VIEWS' => $LANG['views'])); $is_connected = AppContext::get_current_user()->check_level(User::MEMBER_LEVEL); $j = 0; $result = $this->db_querier->select("SELECT g.id, g.idcat, g.name, g.path, g.timestamp, g.aprob, g.width, g.height, g.user_id, g.views, g.aprob, m.display_name, m.groups, m.level, notes.average_notes, notes.number_notes, note.note\n\t\t\t\tFROM " . GallerySetup::$gallery_table . " g\n\t\t\t\tLEFT JOIN " . DB_TABLE_MEMBER . " m ON m.user_id = g.user_id\n\t\t\t\tLEFT JOIN " . DB_TABLE_COMMENTS_TOPIC . " com ON com.id_in_module = g.id AND com.module_id = 'gallery'\n\t\t\t\tLEFT JOIN " . DB_TABLE_AVERAGE_NOTES . " notes ON notes.id_in_module = g.id AND notes.module_name = 'gallery'\n\t\t\t\tLEFT JOIN " . DB_TABLE_NOTE . " note ON note.id_in_module = g.id AND note.module_name = 'gallery' AND note.user_id = :user_id\n\t\t\t\tWHERE g.idcat = :idcat AND g.aprob = 1\n\t\t\t\t" . $g_sql_sort . "\n\t\t\t\tLIMIT :number_items_per_page OFFSET :display_from", array('user_id' => AppContext::get_current_user()->get_id(), 'idcat' => $category->get_id(), 'number_items_per_page' => $pagination->get_number_items_per_page(), 'display_from' => $pagination->get_display_from())); while ($row = $result->fetch()) { //Si la miniature n'existe pas (cache vidé) on regénère la miniature à partir de l'image en taille réelle. if (!file_exists(PATH_TO_ROOT . '/gallery/pics/thumbnails/' . $row['path'])) { $Gallery->Resize_pics(PATH_TO_ROOT . '/gallery/pics/' . $row['path']); } //Redimensionnement + création miniature $onclick = ''; //Affichage de l'image en grand. if ($config->get_pics_enlargement_mode() == GalleryConfig::FULL_SCREEN) { $display_link = PATH_TO_ROOT . '/gallery/pics/' . $row['path'] . '" onmousedown="increment_view(' . $row['id'] . ');" title="' . str_replace('"', '', stripslashes($row['name'])); } elseif ($config->get_pics_enlargement_mode() == GalleryConfig::POPUP) { $onclick = 'increment_view(' . $row['id'] . ');display_pics_popup(\'' . PATH_TO_ROOT . '/gallery/show_pics' . url('.php?id=' . $row['id'] . '&cat=' . $row['idcat']) . '\', \'' . $row['width'] . '\', \'' . $row['height'] . '\');return false;'; $display_link = ''; } elseif ($config->get_pics_enlargement_mode() == GalleryConfig::RESIZE) { $onclick = 'increment_view(' . $row['id'] . ');display_pics(' . $row['id'] . ', \'' . PATH_TO_ROOT . '/gallery/show_pics' . url('.php?id=' . $row['id'] . '&cat=' . $row['idcat']) . '\');return false;'; $display_link = ''; } else { $onclick = true; $display_link = url('gallery.php?cat=' . $row['idcat'] . '&id=' . $row['id'], 'gallery-' . $row['idcat'] . '-' . $row['id'] . '.php') . '#pics_max'; } //Liste des catégories. $search_category_children_options = new SearchCategoryChildrensOptions(); $search_category_children_options->add_authorizations_bits(Category::READ_AUTHORIZATIONS); $search_category_children_options->add_authorizations_bits(Category::WRITE_AUTHORIZATIONS); $categories_tree = GalleryService::get_categories_manager()->get_select_categories_form_field($row['id'] . 'cat', '', $row['idcat'], $search_category_children_options); $method = new ReflectionMethod('AbstractFormFieldChoice', 'get_options'); $method->setAccessible(true); $categories_tree_options = $method->invoke($categories_tree); $cat_list = ''; foreach ($categories_tree_options as $option) { $cat_list .= $option->display()->render(); } $notation = new Notation(); $notation->set_module_name('gallery'); $notation->set_notation_scale($config->get_notation_scale()); $notation->set_id_in_module($row['id']); $notation->set_number_notes($row['number_notes']); $notation->set_average_notes($row['average_notes']); $notation->set_user_already_noted(!empty($row['note'])); $group_color = User::get_group_color($row['groups'], $row['level']); $comments_topic->set_id_in_module($row['id']); $html_protected_name = $row['name']; $this->tpl->assign_block_vars('pics_list', array('C_IMG_APROB' => $row['aprob'] == 1, 'C_OPEN_TR' => is_int($j++ / $nbr_column_pics), 'C_CLOSE_TR' => is_int($j / $nbr_column_pics), 'ID' => $row['id'], 'APROB' => $row['aprob'], 'PATH' => $row['path'], 'NAME' => stripslashes($row['name']), 'SHORT_NAME' => TextHelper::wordwrap_html(stripslashes($row['name']), 22, ' '), 'POSTOR' => $LANG['by'] . (!empty($row['display_name']) ? ' <a class="small ' . UserService::get_level_class($row['level']) . '"' . (!empty($group_color) ? ' style="color:' . $group_color . '"' : '') . ' href="' . UserUrlBuilder::profile($row['user_id'])->rel() . '">' . $row['display_name'] . '</a>' : ' ' . $LANG['guest']), 'VIEWS' => $row['views'], 'L_VIEWS' => $row['views'] > 1 ? $LANG['views'] : $LANG['view'], 'L_COMMENTS' => CommentsService::get_number_and_lang_comments('gallery', $row['id']), 'KERNEL_NOTATION' => $config->is_notation_enabled() && $is_connected ? NotationService::display_active_image($notation) : NotationService::display_static_image($notation), 'CAT' => $cat_list, 'ONCLICK' => $onclick, 'RENAME' => $html_protected_name, 'RENAME_CUT' => $html_protected_name, 'L_APROB_IMG' => $row['aprob'] == 1 ? $LANG['unaprob'] : $LANG['aprob'], 'U_PICTURE_LINK' => PATH_TO_ROOT . '/gallery/gallery' . url('.php?cat=' . $row['idcat'] . '&id=' . $row['id'], '-' . $row['idcat'] . '-' . $row['id'] . '.php'), 'U_PICTURE' => PATH_TO_ROOT . '/gallery/pics/thumbnails/' . $row['path'], 'U_DEL' => url('gallery.php?del=' . $row['id'] . '&token=' . AppContext::get_session()->get_token() . '&cat=' . $category->get_id()), 'U_MOVE' => url('gallery.php?id=' . $row['id'] . '&token=' . AppContext::get_session()->get_token() . '&move=\' + this.options[this.selectedIndex].value'), 'U_DISPLAY' => $display_link, 'U_COMMENTS' => PATH_TO_ROOT . '/gallery/gallery' . url('.php?cat=' . $row['idcat'] . '&id=' . $row['id'] . '&com=0', '-' . $row['idcat'] . '-' . $row['id'] . '.php?com=0') . '#comments-list')); } $result->dispose(); //Création des cellules du tableau si besoin est. while (!is_int($j / $nbr_column_pics)) { $this->tpl->assign_block_vars('end_table', array('TD_END' => '<td class="td-end" style="width:' . $column_width_pics . '%"> </td>', 'TR_END' => is_int(++$j / $nbr_column_pics) ? '</tr>' : '')); } } } }
$error_controller = PHPBoostErrors::unexisting_page(); DispatchManager::redirect($error_controller); } //Affichage de l'arborescence des catégories. $i = 0; $forum_cats = ''; $Bread_crumb->remove_last(); foreach ($Bread_crumb->get_links() as $key => $array) { if ($i == 2) { $forum_cats .= '<a href="' . $array[1] . '">' . $array[0] . '</a>'; } elseif ($i > 2) { $forum_cats .= ' » <a href="' . $array[1] . '">' . $array[0] . '</a>'; } $i++; } $vars_tpl = array('C_PAGINATION' => $pagination->has_several_pages(), 'C_FOCUS_CONTENT' => !empty($quote_get), 'FORUM_NAME' => $config->get_forum_name(), 'MODULE_DATA_PATH' => $module_data_path, 'DESC' => !empty($topic['subtitle']) ? $topic['subtitle'] : '', 'PAGINATION' => $pagination->display(), 'USER_ID' => $topic['user_id'], 'ID' => $topic['idcat'], 'IDTOPIC' => $id_get, 'PAGE' => $page, 'TITLE_T' => stripslashes($topic['title']), 'DISPLAY_MSG' => $config->is_message_before_topic_title_displayed() && $topic['display_msg'] ? $config->get_message_before_topic_title() . ' ' : '', 'U_MSG_SET_VIEW' => '<a class="small" href="' . PATH_TO_ROOT . '/forum/action' . url('.php?read=1&f=' . $topic['idcat'], '') . '" title="' . $LANG['mark_as_read'] . '" onclick="javascript:return Confirm_read_topics();">' . $LANG['mark_as_read'] . '</a>', 'U_CHANGE_CAT' => 'topic' . url('.php?id=' . $id_get, '-' . $id_get . '+' . $category->get_rewrited_name() . '.php'), 'U_ONCHANGE' => url(".php?id=' + this.options[this.selectedIndex].value + '", "forum-' + this.options[this.selectedIndex].value + '.php"), 'U_ONCHANGE_CAT' => url("index.php?id=' + this.options[this.selectedIndex].value + '", "cat-' + this.options[this.selectedIndex].value + '.php"), 'U_FORUM_CAT' => !empty($forum_cats) ? $forum_cats . ' »' : '', 'U_TITLE_T' => 'topic' . url('.php?id=' . $id_get, '-' . $id_get . $rewrited_title . '.php'), 'L_REQUIRE_MESSAGE' => $LANG['require_text'], 'L_DELETE_MESSAGE' => $LANG['alert_delete_msg'], 'L_GUEST' => $LANG['guest'], 'L_DELETE' => LangLoader::get_message('delete', 'common'), 'L_EDIT' => LangLoader::get_message('edit', 'common'), 'L_CUT_TOPIC' => $LANG['cut_topic'], 'L_EDIT_BY' => $LANG['edit_by'], 'L_PUNISHMENT_MANAGEMENT' => $LANG['punishment_management'], 'L_WARNING_MANAGEMENT' => $LANG['warning_management'], 'L_FORUM_INDEX' => $LANG['forum_index'], 'L_QUOTE' => $LANG['quote'], 'L_ON' => $LANG['on'], 'L_RESPOND' => $LANG['respond'], 'L_SUBMIT' => $LANG['submit'], 'L_PREVIEW' => $LANG['preview'], 'L_RESET' => $LANG['reset']); //Création du tableau des rangs. $array_ranks = array(-1 => $LANG['guest_s'], 0 => $LANG['member_s'], 1 => $LANG['modo_s'], 2 => $LANG['admin_s']); $extended_fields_cache = ExtendedFieldsCache::load(); $displayed_extended_fields = $extended_fields_cache->get_websites_or_emails_extended_field_field_types(); $extended_fields_to_recover_list = ''; foreach ($displayed_extended_fields as $field_type) { $extended_fields_to_recover_list .= 'ext_field.' . $field_type . ', '; } list($track, $track_pm, $track_mail, $poll_done) = array(false, false, false, false); $ranks_cache = ForumRanksCache::load()->get_ranks(); //Récupère les rangs en cache. $quote_last_msg = $page > 1 ? 1 : 0; //On enlève 1 au limite si on est sur une page > 1, afin de récupérer le dernier msg de la page précédente. $i = 0; $j = 0;