private function build_form($request) { $field = $request->get_value('field', NewsletterUrlBuilder::DEFAULT_SORT_FIELD); $sort = $request->get_value('sort', NewsletterUrlBuilder::DEFAULT_SORT_MODE); $current_page = $request->get_int('page', 1); $mode = $sort == 'top' ? 'ASC' : 'DESC'; if (!NewsletterAuthorizationsService::id_stream($this->stream->get_id())->read_archives()) { NewsletterAuthorizationsService::get_errors()->read_archives(); } if (!NewsletterStreamsCache::load()->stream_exists($this->stream->get_id())) { $controller = new UserErrorController(LangLoader::get_message('error', 'status-messages-common'), LangLoader::get_message('admin.stream-not-existed', 'common', 'newsletter')); DispatchManager::redirect($controller); } switch ($field) { case 'stream': $field_bdd = 'stream_id'; break; case 'subject': $field_bdd = 'subject'; break; case 'date': $field_bdd = 'timestamp'; break; case 'subscribers': $field_bdd = 'nbr_subscribers'; break; default: $field_bdd = 'timestamp'; } $stream_id = $this->stream->get_id(); $stream_condition = $stream_id ? "WHERE stream_id = '" . $stream_id . "'" : ""; $nbr_archives = PersistenceContext::get_querier()->count(NewsletterSetup::$newsletter_table_archives, $stream_condition); $pagination = $this->get_pagination($current_page, $nbr_archives, $field, $sort); $moderation_auth = NewsletterAuthorizationsService::id_stream($this->stream->get_id())->moderation_archives(); $this->view->put_all(array('C_MODERATE' => $moderation_auth, 'C_ARCHIVES' => (double) $nbr_archives, 'C_SPECIFIC_STREAM' => $stream_id, 'C_PAGINATION' => $pagination->has_several_pages(), 'NUMBER_COLUMN' => 3 + (int) (empty($stream_id) && !empty($nbr_archives)) + $moderation_auth, 'SORT_STREAM_TOP' => NewsletterUrlBuilder::archives($this->stream->get_id(), $this->stream->get_rewrited_name(), 'stream', 'top', $current_page)->rel(), 'SORT_STREAM_BOTTOM' => NewsletterUrlBuilder::archives($this->stream->get_id(), $this->stream->get_rewrited_name(), 'stream', 'bottom', $current_page)->rel(), 'SORT_SUBJECT_TOP' => NewsletterUrlBuilder::archives($this->stream->get_id(), $this->stream->get_rewrited_name(), 'subject', 'top', $current_page)->rel(), 'SORT_SUBJECT_BOTTOM' => NewsletterUrlBuilder::archives($this->stream->get_id(), $this->stream->get_rewrited_name(), 'subject', 'bottom', $current_page)->rel(), 'SORT_DATE_TOP' => NewsletterUrlBuilder::archives($this->stream->get_id(), $this->stream->get_rewrited_name(), 'date', 'top', $current_page)->rel(), 'SORT_DATE_BOTTOM' => NewsletterUrlBuilder::archives($this->stream->get_id(), $this->stream->get_rewrited_name(), 'date', 'bottom', $current_page)->rel(), 'SORT_SUBSCRIBERS_TOP' => NewsletterUrlBuilder::archives($this->stream->get_id(), $this->stream->get_rewrited_name(), 'subscribers', 'top', $current_page)->rel(), 'SORT_SUBSCRIBERS_BOTTOM' => NewsletterUrlBuilder::archives($this->stream->get_id(), $this->stream->get_rewrited_name(), 'subscribers', 'bottom', $current_page)->rel(), 'PAGINATION' => $pagination->display())); $result = PersistenceContext::get_querier()->select("SELECT *\n\t\tFROM " . NewsletterSetup::$newsletter_table_archives . "\n\t\t" . $stream_condition . "\n\t\tORDER BY " . $field_bdd . " " . $mode . "\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()) { $stream = NewsletterStreamsCache::load()->get_stream($row['stream_id']); $this->view->assign_block_vars('archives_list', array('STREAM_NAME' => $stream->get_name(), 'SUBJECT' => $row['subject'], 'DATE' => Date::to_format($row['timestamp'], Date::FORMAT_DAY_MONTH_YEAR), 'NBR_SUBSCRIBERS' => $row['nbr_subscribers'], 'U_VIEW_STREAM' => NewsletterUrlBuilder::archives($stream->get_id(), $this->stream->get_rewrited_name())->rel(), 'U_VIEW_ARCHIVE' => NewsletterUrlBuilder::archive($row['id'])->rel(), 'U_DELETE_ARCHIVE' => NewsletterUrlBuilder::delete_archive($row['id'], $stream->get_id())->rel())); } $result->dispose(); }