/**
  * Event: core.viewforum_get_topic_ids_data
  */
 public function viewforum_get_topic_ids_data($event)
 {
     $custom_sorting = array('by' => $this->user->data['user_topic_sortby_type'], 'order' => $this->user->data['user_topic_sortby_dir']);
     // Forum-specific sorting
     if ($event['forum_data']['sort_topics_by'] != $this->default_sort_by) {
         $custom_sorting = array('by' => $event['forum_data']['sort_topics_by'], 'order' => $event['forum_data']['sort_topics_order']);
     } else {
         if ($this->user->data['is_registered'] && !$this->user->data['is_bot'] && $this->config['kasimi.sorttopics.ucp_enabled'] && $this->user->data['sort_topics_by_created_time']) {
             $custom_sorting['by'] = 'c';
         }
     }
     // Temporary sorting if the user used the options at the bottom of viewforum
     if ($this->request->is_set('sk')) {
         $custom_sorting['by'] = $this->request->variable('sk', '');
     }
     if ($this->request->is_set('sd')) {
         $custom_sorting['order'] = $this->request->variable('sd', '');
     }
     $this->inject_created_time_select_option('S_SELECT_SORT_KEY', $custom_sorting['by'], 'S_SELECT_SORT_DIR', $custom_sorting['order']);
     // Bail out if we don't need to adjust sorting
     if ($custom_sorting['by'] == $this->sort_key && $custom_sorting['order'] == $this->sort_dir) {
         return;
     }
     // This forum requires custom topic sorting, let's get our hands dirty
     $sort_by_sql = array('a' => 't.topic_first_poster_name', 't' => array('t.topic_last_post_time', 't.topic_last_post_id'), 'c' => array('t.topic_time', 't.topic_id'), 'r' => $this->auth->acl_get('m_approve', $event['forum_data']['forum_id']) ? 't.topic_posts_approved + t.topic_posts_unapproved + t.topic_posts_softdeleted' : 't.topic_posts_approved', 's' => 't.topic_title', 'v' => 't.topic_views');
     $sort_sql = $sort_by_sql[$custom_sorting['by']];
     $direction = $custom_sorting['order'] == 'd' ? 'DESC' : 'ASC';
     $sql_sort_order = (is_array($sort_sql) ? implode(' ' . $direction . ', ', $sort_sql) : $sort_sql) . ' ' . $direction;
     $sql_ary = $event['sql_ary'];
     $store_reverse = $event['store_reverse'];
     $sql_ary['ORDER_BY'] = 't.topic_type ' . (!$store_reverse ? 'DESC' : 'ASC') . ', ' . $sql_sort_order;
     $event['sql_sort_order'] = $sql_sort_order;
     $event['sql_ary'] = $sql_ary;
 }
Example #2
0
 /**
  * Perform search and output results.
  *
  * @param string $sort_url		Base sort url.
  * @return \Symfony\Component\HttpFoundation\Response
  */
 protected function show_results($sort_url)
 {
     // Setup the sort tool
     $this->sort->set_defaults($this->config['posts_per_page'])->request();
     // Do the search
     $results = $this->query_index();
     // Grab the users
     \users_overlord::load_users($results['user_ids']);
     $this->display->assign_global_vars();
     $this->assign_doc_vars($results['documents']);
     $this->assign_result_vars($this->sort->total);
     $parameters = array();
     $expected_parameters = array('versions' => array(array(''), false), 'c' => array(array(0), false), 'sc' => array(false, false), 'keywords' => array('', true), 'sf' => array('', false), 'author' => array('', true), 'u' => array(0, false), 'type' => array(0, false), 'contrib' => array(0, false));
     foreach ($expected_parameters as $name => $properties) {
         if ($this->request->is_set($name)) {
             list($default_value, $multibyte) = $properties;
             $value = $this->request->variable($name, $default_value, $multibyte);
             // Clean up URL by not including default values.
             if ($value !== $default_value) {
                 $parameters[$name] = $value;
             }
         }
     }
     $this->sort->build_pagination($sort_url, $parameters);
     return $this->helper->render('search_results.html', $this->user->lang['SEARCH']);
 }
 protected function toggle_edit_mode()
 {
     $edit_mode = $this->request->variable($this->config['cookie_name'] . '_sm_edit_mode', false, false, \phpbb\request\request_interface::COOKIE);
     if ($this->request->is_set('edit_mode')) {
         $edit_mode = $this->request->variable('edit_mode', false);
         $this->user->set_cookie('sm_edit_mode', $edit_mode, 0);
     }
     return $edit_mode;
 }
Example #4
0
 /**
  * Processes all actions
  *
  * @return array errors
  */
 protected function process_submit()
 {
     if (!$this->request->is_set($this->action_name)) {
         return array();
     }
     $action = $this->request->variable($this->action_name, '');
     if (!$this->survey->enabled) {
         return array($this->user->lang('SURVEY_IS_DISABLED'));
     }
     $can_manage = $this->survey->can_manage($this->user->data['user_id']);
     if (!$can_manage && preg_match("/^(config_change|close|reopen|question_addition_or_modification|question_deletion|question_load_modify|delete|disable)\$/", $action)) {
         return array($this->user->lang('NO_AUTH_OPERATION'));
     }
     if ($this->survey->is_closed() && !$can_manage) {
         return array($this->user->lang('SURVEY_IS_CLOSED'));
     }
     if ($action == "config_change") {
         return $this->process_config_change();
     }
     if ($action == "reopen") {
         if (!$this->survey->is_closed()) {
             return array($this->user->lang('SURVEY_IS_NOT_CLOSED'));
         }
         return $this->process_reopen();
     }
     if ($action == "close") {
         if ($this->survey->is_closed()) {
             return array($this->user->lang('SURVEY_IS_CLOSED', $this->user->format_date($this->survey->settings['stop_time'])));
         }
         return $this->process_close();
     }
     if ($action == "entry_deletion") {
         return $this->process_entry_deletion();
     }
     if ($action == "entry_modification") {
         return $this->process_entry_modification();
     }
     if ($action == "question_addition_or_modification") {
         return $this->process_question_addition_or_modification();
     }
     if ($action == "question_deletion") {
         return $this->process_question_deletion();
     }
     if ($action == "question_load_modify") {
         return $this->process_question_load_modify();
     }
     if ($action == "disable") {
         return $this->process_disable();
     }
     if ($action == "delete") {
         return $this->process_delete();
     }
     return array();
 }
Example #5
0
 /**
  * Confirm tool action.
  *
  * @return bool Returns true if confirmed, false otherwise.
  */
 protected function confirm_action()
 {
     $submit = $this->request->is_set('submit');
     $hash = $this->request->variable('hash', '');
     if (confirm_box(true) || $submit && check_link_hash($hash, 'titania_manage')) {
         return true;
     } else {
         confirm_box(false, $this->user->lang('CONFIRM_TOOL_ACTION'));
         return false;
     }
 }
Example #6
0
 /**
  * - Add "Forum" to navbar when we are not on the forum page (viewforum/viewtopic)
  * - Add "Forum" to the breadcrump when viewing forum page (viewforum/viewtopic)
  */
 public function prepend_breadcrump()
 {
     $u_viewforum = $this->phpbb_container->get('controller.helper')->route('blitze_sitemaker_forum');
     // Add "Forum" to breadcrump menu when viewing forum pages (viewforum/viewtopic/posting)
     if ($this->request->is_set('f')) {
         $this->template->alter_block_array('navlinks', array('FORUM_NAME' => $this->user->lang('FORUM'), 'U_VIEW_FORUM' => $u_viewforum));
     } else {
         if ($this->user->page['page'] !== 'app.' . $this->php_ext . '/forum') {
             $this->template->assign_vars(array('S_PT_SHOW_FORUM_NAV' => true, 'U_PT_VIEWFORUM' => $u_viewforum));
         }
     }
 }
 /**
  * Apply custom sorting to SQL query
  *
  * @param $event
  */
 public function viewforum_get_topic_ids_data($event)
 {
     $this->sort_options_source = 'default';
     $this->custom_sort_key = $this->user->data['user_topic_sortby_type'];
     $this->custom_sort_dir = $this->user->data['user_topic_sortby_dir'];
     if ($event['forum_data']['sort_topics_by'] != $this->default_sort_by) {
         // Forum-specific sorting
         $this->sort_options_source = 'forum';
         $this->custom_sort_key = $event['forum_data']['sort_topics_by'];
         $this->custom_sort_dir = $event['forum_data']['sort_topics_order'];
     } else {
         if ($this->user->data['is_registered'] && $this->config['kasimi.sorttopics.ucp_enabled'] && $this->user->data['sort_topics_by_created_time']) {
             // UCP-specific sorting by created time
             $this->sort_options_source = 'ucp';
             $this->custom_sort_key = 'c';
         }
     }
     // Temporary sorting if the user used the options at the bottom of viewforum
     if ($this->request->is_set('sk')) {
         $this->sort_options_source = 'request';
         $this->custom_sort_key = $this->request->variable('sk', $this->custom_sort_key);
         $this->custom_sort_dir = $this->request->variable('sd', $this->custom_sort_dir);
     }
     $this->inject_created_time_select_option('S_SELECT_SORT_KEY', $this->custom_sort_key, 'S_SELECT_SORT_DIR', $this->custom_sort_dir);
     // Bail out if we don't need to adjust sorting
     if ($this->custom_sort_key == $this->sort_key && $this->custom_sort_dir == $this->sort_dir) {
         return;
     }
     // This forum requires custom topic sorting, let's get our hands dirty
     $sort_by_sql = array('a' => 't.topic_first_poster_name', 't' => array('t.topic_last_post_time', 't.topic_last_post_id'), 'c' => array('t.topic_time', 't.topic_id'), 'r' => $this->auth->acl_get('m_approve', $event['forum_data']['forum_id']) ? 't.topic_posts_approved + t.topic_posts_unapproved + t.topic_posts_softdeleted' : 't.topic_posts_approved', 's' => 't.topic_title', 'v' => 't.topic_views');
     $store_reverse = $event['store_reverse'];
     if ($store_reverse) {
         $direction = $this->custom_sort_dir == 'd' ? 'ASC' : 'DESC';
     } else {
         $direction = $this->custom_sort_dir == 'd' ? 'DESC' : 'ASC';
     }
     if (is_array($sort_by_sql[$this->custom_sort_key])) {
         $sql_sort_order = implode(' ' . $direction . ', ', $sort_by_sql[$this->custom_sort_key]) . ' ' . $direction;
     } else {
         $sql_sort_order = $sort_by_sql[$this->custom_sort_key] . ' ' . $direction;
     }
     $sql_ary = $event['sql_ary'];
     $sql_ary['ORDER_BY'] = 't.topic_type ' . (!$store_reverse ? 'DESC' : 'ASC') . ', ' . $sql_sort_order;
     $event['sql_sort_order'] = $sql_sort_order;
     $event['sql_ary'] = $sql_ary;
     $rootref =& $this->template_context->get_root_ref();
     if ($this->sort_options_source == 'request' && $this->custom_sort_key == 'c') {
         $rootref['U_VIEW_FORUM'] .= '&sk=c';
     }
 }
Example #8
0
 /**
  * Get data to return in Plupload request.
  *
  * @return array
  */
 public function get_plupload_response_data()
 {
     if ($this->get_errors()) {
         return array('jsonrpc' => '2.0', 'id' => 'id', 'error' => array('code' => 100, 'message' => implode('<br />', $this->get_errors())));
     }
     $data = array_values($this->get_basic_attachment_data());
     if ($this->request->is_set('delete_file')) {
         return $data;
     }
     $result = array('data' => array_values($this->get_basic_attachment_data()));
     if ($this->uploaded) {
         $result['download_url'] = $this->get_uploaded_attachment()->get_url();
     }
     return $result;
 }
Example #9
0
 /**
  * Performs the account linking for auth_link
  *
  * @param	array	$link_data		The same variable given to {@see \phpbb\auth\provider\provider_interface::link_account}
  * @param	string	$service_name	The name of the service being used in
  *									linking.
  * @return	string|null	Returns a language constant (string) if an error is
  *						encountered, or null on success.
  */
 protected function link_account_auth_link(array $link_data, $service_name)
 {
     $storage = new \phpbb\auth\provider\oauth\token_storage($this->db, $this->user, $this->auth_provider_oauth_token_storage_table);
     $query = 'i=ucp_auth_link&mode=auth_link&link=1&oauth_service=' . strtolower($link_data['oauth_service']);
     $service_credentials = $this->service_providers[$service_name]->get_service_credentials();
     $scopes = $this->service_providers[$service_name]->get_auth_scope();
     $service = $this->get_service(strtolower($link_data['oauth_service']), $storage, $service_credentials, $query, $scopes);
     if ($this->request->is_set('code', \phpbb\request\request_interface::GET)) {
         $this->service_providers[$service_name]->set_external_service_provider($service);
         $unique_id = $this->service_providers[$service_name]->perform_auth_login();
         // Insert into table, they will be able to log in after this
         $data = array('user_id' => $this->user->data['user_id'], 'provider' => strtolower($link_data['oauth_service']), 'oauth_provider_id' => $unique_id);
         $this->link_account_perform_link($data);
     } else {
         $url = $service->getAuthorizationUri();
         header('Location: ' . $url);
     }
 }
Example #10
0
 /**
  * @return void
  */
 public function versions()
 {
     $action = $this->request->variable('action', '');
     $id = $this->request->variable('id', 0);
     switch ($action) {
         case 'order':
             $this->orderVersions($id, $this->request->variable('up', false));
             break;
         case 'add':
             $this->addVersion();
             break;
         case 'active':
             $this->activate($id, $this->request->is_set('active'));
         case 'addRelease':
             $this->createNewRelease();
             break;
         default:
             $this->versionsIndex();
     }
 }
    /**
     * @param int $topic_id
     * @return array
     */
    private function _get_users_votes($topic_id)
    {
        $cur_voted_id = array();
        if ($this->user->data['is_registered']) {
            $sql = 'SELECT poll_option_id
			FROM ' . POLL_VOTES_TABLE . '
			WHERE topic_id = ' . $topic_id . '
				AND vote_user_id = ' . $this->user->data['user_id'];
            $result = $this->db->sql_query($sql);
            while ($row = $this->db->sql_fetchrow($result)) {
                $cur_voted_id[] = $row['poll_option_id'];
            }
            $this->db->sql_freeresult($result);
        } else {
            // Cookie based guest tracking ... I don't like this but hum ho
            // it's oft requested. This relies on "nice" users who don't feel
            // the need to delete cookies to mess with results.
            if ($this->request->is_set($this->config['cookie_name'] . '_poll_' . $topic_id, \phpbb\request\request_interface::COOKIE)) {
                $cur_voted_id = explode(',', $this->request->variable($this->config['cookie_name'] . '_poll_' . $topic_id, '', true, \phpbb\request\request_interface::COOKIE));
                $cur_voted_id = array_map('intval', $cur_voted_id);
            }
        }
        return $cur_voted_id;
    }
Example #12
0
    /**
     * Parses parameters found in $request, which is an instance of
     * \phpbb\request\request_interface.
     *
     * It is expected to have a key f whose value is id of the forum to be pruned.
     *
     * @param \phpbb\request\request_interface $request Request object.
     *
     * @return null
     */
    public function parse_parameters(\phpbb\request\request_interface $request)
    {
        $this->forum_data = null;
        if ($request->is_set('f')) {
            $forum_id = $request->variable('f', 0);
            $sql = 'SELECT forum_id, prune_next, enable_prune, prune_days, prune_viewed, forum_flags, prune_freq
				FROM ' . FORUMS_TABLE . "\n\t\t\t\tWHERE forum_id = {$forum_id}";
            $result = $this->db->sql_query($sql);
            $row = $this->db->sql_fetchrow($result);
            $this->db->sql_freeresult($result);
            if ($row) {
                $this->forum_data = $row;
            }
        }
    }
Example #13
0
    /**
     * Processes hookup set activedate requests
     *
     * @param \phpbb\event\data $event
     * @param bool $is_owner
     */
    protected function process_set_activedate($event, $is_owner)
    {
        $set_active_set = $this->request->is_set('set_active', \phpbb\request\request_interface::POST) || $this->request->is_set('set_active', \phpbb\request\request_interface::GET);
        $set_active = $this->request->variable('set_active', 0);
        if (!$set_active_set) {
            return array();
        }
        if (!$is_owner) {
            return array($this->user->lang('NOT_AUTH_HOOKUP'));
        }
        if ($set_active && !isset($this->hookup->hookup_dates[$set_active])) {
            trigger_error('NO_DATE');
        }
        $active_date_formatted = $set_active != 0 ? $this->user->format_date($this->hookup->hookup_dates[$set_active]['date_time']) : '-';
        $topic_id = $event['topic_id'];
        $forum_id = $event['forum_id'];
        $viewtopic_url = append_sid("{$this->phpbb_root_path}viewtopic.{$this->phpEx}?f={$forum_id}&t={$topic_id}");
        if (confirm_box(true)) {
            $title_prefix = $this->request->variable('title_prefix', false);
            $send_email = $this->request->variable('send_email', false);
            $post_reply = $this->request->variable('post_reply', false);
            $topic_data = $event['topic_data'];
            $new_title = preg_replace('#^(\\[.+?\\] )?#', $set_active != 0 ? '[' . $this->user->format_date($this->hookup->hookup_dates[$set_active]['date_time'], $this->user->lang['HOOKUP_DATEFORMAT_TITLE']) . '] ' : '', $event['topic_data']['topic_title']);
            /**
             * Perform additional actions when active date is set
             *
             * @event gn36.hookup.set_activedate_confirmed
             * @var bool	title_prefix	User wants to have a title prefix added
             * @var bool	send_email		User wants E-Mails to be sent
             * @var bool	post_reply		User wants to post a reply to the topic
             * @var int		set_active		Date selected as active (0 means reset of active date)
             * @var string	new_title		The new topic title that will be present after the update
             * @var int 	topic_id		ID of the topic of the hookup
             * @var int 	forum_id		ID of the forum the topic is in
             * @var array 	topic_data		Topic data as received from core.viewtopic_assign_template_vars_before
             * @since 1.0.0-dev
             */
            $vars = array('title_prefix', 'send_email', 'post_reply', 'set_active', 'new_title', 'topic_id', 'forum_id', 'topic_data');
            extract($this->phpbb_dispatcher->trigger_event('gn36.hookup.set_activedate_confirmed', compact($vars)));
            //insert active date (short format) into topic title. this will use language
            //and timezone of the "active maker" but the alternative would be
            //to query the HOOKUP_DATES table every time we need the topic title
            if ($set_active == 0 || $title_prefix) {
                $sql = 'UPDATE ' . TOPICS_TABLE . '
						SET hookup_active_date = ' . (int) $set_active . ",\n\t\t\t\t\t\t\ttopic_title = '" . $this->db->sql_escape($new_title) . "'\n\t\t\t\t\t\t\t\t\tWHERE topic_id = {$topic_id}";
                $this->db->sql_query($sql);
                $sql = "UPDATE " . POSTS_TABLE . "\n\t\t\t\t\t\tSET post_subject='" . $this->db->sql_escape($new_title) . "'\n\t\t\t\t\t\t\t\tWHERE post_id = {$event['topic_data']['topic_first_post_id']}";
                $this->db->sql_query($sql);
            } else {
                //only set hookup_active_date
                $sql = 'UPDATE ' . TOPICS_TABLE . '
						SET hookup_active_date = ' . (int) $set_active . "\n\t\t\t\t\t\t\t\tWHERE topic_id = {$topic_id}";
                $this->db->sql_query($sql);
            }
            //notify all members about active date
            if ($set_active && $send_email && !empty($this->hookup->hookup_users)) {
                if ($this->messenger == null) {
                    include_once $this->phpbb_root_path . 'includes/functions_messenger.' . $this->phpEx;
                    $this->messenger = new \messenger();
                }
                $messenger = $this->messenger;
                $title_without_date = preg_replace('#^(\\[.+?\\] )#', '', $event['topic_data']['topic_title']);
                $sql = 'SELECT u.user_id, u.username, u.user_lang, u.user_dateformat, u.user_email, u.user_jabber, u.user_notify_type
					FROM ' . USERS_TABLE . " u\n\t\t\t\t\tWHERE " . $this->db->sql_in_set('user_id', array_keys($this->hookup->hookup_users));
                $result = $this->db->sql_query($sql);
                while ($row = $this->db->sql_fetchrow($result)) {
                    $messenger->template('@gn36_hookup/hookup_active_date', $row['user_lang']);
                    $messenger->to($row['user_email'], $row['username']);
                    $messenger->im($row['user_jabber'], $row['username']);
                    $messenger->assign_vars(array('USERNAME' => $row['username'], 'TOPIC_TITLE' => $title_without_date, 'U_TOPIC' => generate_board_url() . "/viewtopic.{$this->phpEx}?f={$forum_id}&t={$topic_id}", 'ACTIVE_DATE' => $this->user->format_date($this->hookup->hookup_dates[$set_active]['date_time'], $row['user_dateformat']), 'ACTIVE_DATE_SHORT' => $this->user->format_date($this->hookup->hookup_dates[$set_active]['date_time'], $this->user->lang['HOOKUP_DATEFORMAT'])));
                    $messenger->send($row['user_notify_type']);
                }
                $this->db->sql_freeresult($result);
                $messenger->save_queue();
            }
            //post reply to this topic. Again this can only be in the "active maker"s language
            if ($set_active && $post_reply) {
                $message = $this->user->lang['SET_ACTIVE_POST_TEMPLATE'];
                $message = str_replace('{ACTIVE_DATE}', $this->user->format_date($this->hookup->hookup_dates[$set_active]['date_time'], $this->user->lang['HOOKUP_DATEFORMAT_POST']), $message);
                //TODO: functions_post_oo!
                //$post = new post($topic_id);
                //$post->post_text = $message;
                //$post->submit();
            }
            meta_refresh(3, $viewtopic_url);
            $message = ($set_active != 0 ? sprintf($this->user->lang['ACTIVE_DATE_SET'], $active_date_formatted) : $this->user->lang['ACTIVE_DATE_UNSET']) . '<br /><br />' . sprintf($this->user->lang['RETURN_TOPIC'], '<a href="' . $viewtopic_url . '">', '</a>');
            trigger_error($message);
        } else {
            $s_hidden_fields = build_hidden_fields(array('t' => $topic_id, 'set_active' => $set_active));
            if ($set_active != 0) {
                confirm_box(false, sprintf($this->user->lang['SET_ACTIVE_CONFIRM'], $active_date_formatted), $s_hidden_fields, '@gn36_hookup/hookup_active_date_confirm.html');
            } else {
                confirm_box(false, 'UNSET_ACTIVE', $s_hidden_fields);
            }
        }
        return array();
    }
    /**
     * Processes hookup set activedate requests
     *
     * @param \phpbb\event\data $event
     * @param bool $is_owner
     */
    protected function process_set_activedate($event, $is_owner)
    {
        $set_active_set = $this->request->is_set('set_active', \phpbb\request\request_interface::POST) || $this->request->is_set('set_active', \phpbb\request\request_interface::GET);
        $set_active = $this->request->variable('set_active', 0);
        if (!$set_active_set) {
            return array();
        }
        if (!$is_owner) {
            return array($this->user->lang('NOT_AUTH_HOOKUP'));
        }
        if ($set_active && !isset($this->hookup->hookup_dates[$set_active])) {
            trigger_error('NO_DATE');
        }
        $active_date_formatted = '-';
        if ($set_active != 0) {
            $active_date_formatted = $this->user->format_date($this->hookup->hookup_dates[$set_active]['date_time']);
            if ($this->hookup->hookup_dates[$set_active]['text'] != null) {
                $active_date_formatted = $this->hookup->hookup_dates[$set_active]['text'];
            }
        }
        $topic_id = $event['topic_id'];
        $forum_id = $event['forum_id'];
        $viewtopic_url = append_sid("{$this->phpbb_root_path}viewtopic.{$this->phpEx}?f={$forum_id}&t={$topic_id}");
        if (confirm_box(true)) {
            $title_prefix = $this->request->variable('title_prefix', false);
            $send_email = $this->request->variable('send_email', false);
            $post_reply = $this->request->variable('post_reply', false);
            $topic_data = $event['topic_data'];
            $new_string = '';
            if ($set_active != 0) {
                if ($this->hookup->hookup_dates[$set_active]['text'] != null) {
                    $new_string = '[' . $this->hookup->hookup_dates[$set_active]['text'] . '] ';
                } else {
                    $new_string = '[' . $this->user->format_date($this->hookup->hookup_dates[$set_active]['date_time'], $this->user->lang['HOOKUP_DATEFORMAT_TITLE']) . '] ';
                }
            }
            $new_title = preg_replace('#^(\\[.+?\\] )?#', $new_string, $event['topic_data']['topic_title']);
            /**
             * Perform additional actions when active date is set
             *
             * @event gn36.hookup.set_activedate_confirmed
             * @var bool	title_prefix	User wants to have a title prefix added
             * @var bool	send_email		User wants E-Mails to be sent
             * @var bool	post_reply		User wants to post a reply to the topic
             * @var int		set_active		Date selected as active (0 means reset of active date)
             * @var string	new_title		The new topic title that will be present after the update
             * @var int 	topic_id		ID of the topic of the hookup
             * @var int 	forum_id		ID of the forum the topic is in
             * @var array 	topic_data		Topic data as received from core.viewtopic_assign_template_vars_before
             * @since 1.0.0-a1
             */
            $vars = array('title_prefix', 'send_email', 'post_reply', 'set_active', 'new_title', 'topic_id', 'forum_id', 'topic_data');
            extract($this->phpbb_dispatcher->trigger_event('gn36.hookup.set_activedate_confirmed', compact($vars)));
            //insert active date (short format) into topic title. this will use language
            //and timezone of the "active maker" but the alternative would be
            //to query the HOOKUP_DATES table every time we need the topic title
            if ($set_active == 0 || $title_prefix) {
                $sql = 'UPDATE ' . TOPICS_TABLE . '
						SET hookup_active_date = ' . (int) $set_active . ",\n\t\t\t\t\t\t\ttopic_title = '" . $this->db->sql_escape($new_title) . "'\n\t\t\t\t\t\t\t\t\tWHERE topic_id = {$topic_id}";
                $this->db->sql_query($sql);
                $sql = "UPDATE " . POSTS_TABLE . "\n\t\t\t\t\t\tSET post_subject='" . $this->db->sql_escape($new_title) . "'\n\t\t\t\t\t\t\t\tWHERE post_id = {$event['topic_data']['topic_first_post_id']}";
                $this->db->sql_query($sql);
            } else {
                //only set hookup_active_date
                $sql = 'UPDATE ' . TOPICS_TABLE . '
						SET hookup_active_date = ' . (int) $set_active . "\n\t\t\t\t\t\t\t\tWHERE topic_id = {$topic_id}";
                $this->db->sql_query($sql);
            }
            $this->hookup->update_available_sums();
            //notify all members about active date
            if (!empty($this->hookup->hookup_users)) {
                if ($set_active) {
                    $notify_data = array('user_id' => $this->user->data['user_id'], 'date_id' => $set_active, 'date' => $this->hookup->hookup_dates[$set_active]['date_time'], 'text' => $this->hookup->hookup_dates[$set_active]['text'], 'topic_title' => $event['topic_data']['topic_title'], 'topic_id' => $event['topic_id'], 'forum_id' => $event['forum_id'], 'yes' => $this->hookup->hookup_available_sums[$set_active][\gn36\hookup\functions\hookup::HOOKUP_YES], 'no' => $this->hookup->hookup_available_sums[$set_active][\gn36\hookup\functions\hookup::HOOKUP_NO], 'maybe' => $this->hookup->hookup_available_sums[$set_active][\gn36\hookup\functions\hookup::HOOKUP_MAYBE]);
                    $this->notification_manager->add_notifications('gn36.hookup.notification.type.active_date_set', $notify_data);
                    $this->notification_manager->update_notifications('gn36.hookup.notification.type.active_date_set', $notify_data);
                    $this->notification_manager->delete_notifications('gn36.hookup.notification.type.active_date_reset', $event['topic_id']);
                } else {
                    $notify_data = array('user_id' => $this->user->data['user_id'], 'topic_title' => isset($new_title) ? $new_title : $event['topic_data']['topic_title'], 'topic_id' => $event['topic_id'], 'forum_id' => $event['forum_id']);
                    $this->notification_manager->delete_notifications('gn36.hookup.notification.type.active_date_set', $event['topic_id']);
                    $this->notification_manager->add_notifications('gn36.hookup.notification.type.active_date_reset', $notify_data);
                    $this->notification_manager->update_notifications('gn36.hookup.notification.type.active_date_reset', $notify_data);
                }
            }
            //post reply to this topic. Again this can only be in the "active maker"s language
            if ($set_active && $post_reply) {
                $message = $this->user->lang['SET_ACTIVE_POST_TEMPLATE'];
                $active_date = $this->user->format_date($this->hookup->hookup_dates[$set_active]['date_time'], $this->user->lang['HOOKUP_DATEFORMAT_POST']);
                if ($this->hookup->hookup_dates[$set_active]['text'] != null) {
                    $active_date = $this->hookup->hookup_dates[$set_active]['text'];
                }
                $message = str_replace('{ACTIVE_DATE}', $active_date, $message);
                //TODO: functions_post_oo!
                //$post = new post($topic_id);
                //$post->post_text = $message;
                //$post->submit();
            }
            meta_refresh(3, $viewtopic_url);
            $message = ($set_active != 0 ? sprintf($this->user->lang['ACTIVE_DATE_SET'], $active_date_formatted) : $this->user->lang['ACTIVE_DATE_UNSET']) . '<br /><br />' . sprintf($this->user->lang['RETURN_TOPIC'], '<a href="' . $viewtopic_url . '">', '</a>');
            trigger_error($message);
        } else {
            $s_hidden_fields = build_hidden_fields(array('t' => $topic_id, 'set_active' => $set_active));
            if ($set_active != 0) {
                confirm_box(false, sprintf($this->user->lang['SET_ACTIVE_CONFIRM'], $active_date_formatted), $s_hidden_fields, '@gn36_hookup/hookup_active_date_confirm.html');
            } else {
                confirm_box(false, 'UNSET_ACTIVE', $s_hidden_fields);
            }
        }
        return array();
    }
Example #15
0
 /**
  * {@inheritdoc}
  */
 public function get_template_side($module_id)
 {
     $portal_config = obtain_portal_config();
     // 0 = Sunday first - 1 = Monday first. ;-)
     if ($this->config['board3_sunday_first_' . $module_id]) {
         $this->mini_cal_fdow = 0;
     } else {
         $this->mini_cal_fdow = 1;
     }
     // get the calendar month
     $this->mini_cal_month = 0;
     if ($this->request->is_set('m' . $module_id)) {
         $this->mini_cal_month = $this->request->variable('m' . $module_id, 0);
     }
     // initialise some variables
     $this->time = $this->user->create_datetime();
     $now = phpbb_gmgetdate($this->time->getTimestamp() + $this->time->getOffset());
     $today_timestamp = $now[0];
     $mini_cal_today = date('Ymd', $today_timestamp);
     $this->stamp = (int) $today_timestamp;
     $s_cal_month = $this->mini_cal_month != 0 ? $this->mini_cal_month . ' month' : $mini_cal_today;
     $this->get_month($s_cal_month);
     $mini_cal_count = $this->mini_cal_fdow;
     $mini_cal_this_year = $this->dateYYYY;
     $mini_cal_this_month = $this->dateMM;
     $mini_cal_month_days = $this->daysMonth;
     // output our general calendar bits
     $down = $this->mini_cal_month - 1;
     $up = $this->mini_cal_month + 1;
     $prev_month = '<a href="' . $this->modules_helper->route('board3_portal_controller') . "?m{$module_id}={$down}#minical{$module_id}" . '" rel="nofollow"><span class="portal-arrow-left-icon" title="' . $this->user->lang['VIEW_PREVIOUS_MONTH'] . '"></span></a>';
     $next_month = '<a href="' . $this->modules_helper->route('board3_portal_controller') . "?m{$module_id}={$up}#minical{$module_id}" . '" rel="nofollow"><span class="portal-arrow-right-icon" title="' . $this->user->lang['VIEW_NEXT_MONTH'] . '"></span></a>';
     $this->template->assign_block_vars('minical', array('S_SUNDAY_FIRST' => $this->config['board3_sunday_first_' . $module_id] ? true : false, 'L_MINI_CAL_MONTH' => ($this->config['board3_long_month_' . $module_id] ? $this->user->lang['mini_cal']['long_month'][$this->day[0][1]] : $this->user->lang['mini_cal']['month'][$this->day[0][1]]) . " " . $this->day[0][2], 'L_MINI_CAL_SUN' => '<span style="color: ' . $this->config['board3_calendar_sunday_color_' . $module_id] . ';">' . $this->user->lang['mini_cal']['day'][1] . '</span>', 'L_MINI_CAL_MON' => $this->user->lang['mini_cal']['day'][2], 'L_MINI_CAL_TUE' => $this->user->lang['mini_cal']['day'][3], 'L_MINI_CAL_WED' => $this->user->lang['mini_cal']['day'][4], 'L_MINI_CAL_THU' => $this->user->lang['mini_cal']['day'][5], 'L_MINI_CAL_FRI' => $this->user->lang['mini_cal']['day'][6], 'L_MINI_CAL_SAT' => $this->user->lang['mini_cal']['day'][7], 'U_PREV_MONTH' => $prev_month, 'U_NEXT_MONTH' => $next_month, 'S_DISPLAY_EVENTS' => $this->config['board3_display_events_' . $module_id] ? true : false, 'MODULE_ID' => $module_id));
     // output the days for the current month
     for ($i = 0; $i < $mini_cal_month_days;) {
         // is this the first day of the week?
         if ($mini_cal_count == $this->mini_cal_fdow) {
             $this->template->assign_block_vars('minical.mini_cal_row', array('MODULE_ID' => $module_id));
         }
         // is this a valid weekday?
         if ($mini_cal_count == $this->day[$i][3]) {
             $mini_cal_this_day = $this->day[$i][0];
             $d_mini_cal_today = $mini_cal_this_year . ($mini_cal_this_month <= 9 ? '0' . $mini_cal_this_month : $mini_cal_this_month) . ($mini_cal_this_day <= 9 ? '0' . $mini_cal_this_day : $mini_cal_this_day);
             $mini_cal_day = $mini_cal_today == $d_mini_cal_today ? '<span style="font-weight: bold; color: ' . $this->config['board3_calendar_today_color_' . $module_id] . ';">' . $mini_cal_this_day . '</span>' : $mini_cal_this_day;
             $this->template->assign_block_vars('minical.mini_cal_row.mini_cal_days', array('MINI_CAL_DAY' => $mini_cal_count == 0 ? '<span style="color: ' . $this->config['board3_calendar_sunday_color_' . $module_id] . ';">' . $mini_cal_day . '</span>' : $mini_cal_day));
             $i++;
         } else {
             $this->template->assign_block_vars('minical.mini_cal_row.mini_cal_days', array('MINI_CAL_DAY' => ' '));
         }
         // is this the last day of the week?
         if ($mini_cal_count == self::DAYS_PER_WEEK) {
             // if so then reset the count
             $mini_cal_count = 0;
         } else {
             // otherwise increment the count
             $mini_cal_count++;
         }
     }
     // fill table with empty strings
     while ($mini_cal_count <= self::DAYS_PER_WEEK) {
         $this->template->assign_block_vars('minical.mini_cal_row.mini_cal_days', array('MINI_CAL_DAY' => ' '));
         $mini_cal_count++;
     }
     /*
      * Let's start displaying the events
      * make sure we only display events in the future
      */
     $events = json_decode($portal_config['board3_calendar_events_' . $module_id], true);
     if (!empty($events) && $this->config['board3_display_events_' . $module_id]) {
         $time_ary = array();
         // we sort the $events array by the start time
         foreach ($events as $key => $cur_event) {
             $time_ary[$key] = $cur_event['start_time'];
         }
         array_multisort($time_ary, SORT_NUMERIC, $events);
         $groups_ary = get_user_groups();
         foreach ($events as $key => $cur_event) {
             if ($cur_event['start_time'] + $this->time->getOffset() >= $today_timestamp || $cur_event['end_time'] + $this->time->getOffset() >= $today_timestamp || $cur_event['start_time'] + $this->time->getOffset() + self::TIME_DAY >= $today_timestamp && $cur_event['all_day']) {
                 $cur_permissions = explode(',', $cur_event['permission']);
                 $permission_check = array_intersect($groups_ary, $cur_permissions);
                 if (!empty($permission_check) || $cur_event['permission'] == '') {
                     // check if this is an external link
                     if (isset($cur_event['url']) && strpos($cur_event['url'], generate_board_url()) === false) {
                         $is_external = true;
                     } else {
                         $is_external = false;
                     }
                     /**
                      * Current events
                      *
                      * Events are treated as current if the following is met:
                      * - We have an all day event and the start of that event is less than 1 day (86400 seconds) away
                      * - We have a normal event with a start that is less then 1 day away and that hasn't ended yet
                      */
                     if ($cur_event['start_time'] + $this->time->getOffset() - $today_timestamp <= self::TIME_DAY && $cur_event['all_day'] || $cur_event['start_time'] + $this->time->getOffset() - $today_timestamp <= self::TIME_DAY && $cur_event['end_time'] + $this->time->getOffset() >= $today_timestamp) {
                         $this->template->assign_block_vars('minical.cur_events', array('EVENT_URL' => isset($cur_event['url']) && $cur_event['url'] != '' ? $this->validate_url($cur_event['url']) : '', 'EVENT_TITLE' => $cur_event['title'], 'START_TIME' => $this->user->format_date($cur_event['start_time']), 'END_TIME' => !empty($cur_event['end_time']) ? $this->user->format_date($cur_event['end_time']) : false, 'EVENT_DESC' => isset($cur_event['desc']) && $cur_event['desc'] != '' ? $cur_event['desc'] : '', 'ALL_DAY' => $cur_event['all_day'] ? true : false, 'MODULE_ID' => $module_id, 'EVENT_URL_NEW_WINDOW' => $is_external && $this->config['board3_events_url_new_window_' . $module_id] ? true : false));
                     } else {
                         $this->template->assign_block_vars('minical.upcoming_events', array('EVENT_URL' => isset($cur_event['url']) && $cur_event['url'] != '' ? $this->validate_url($cur_event['url']) : '', 'EVENT_TITLE' => $cur_event['title'], 'START_TIME' => $this->user->format_date($cur_event['start_time']), 'END_TIME' => !$cur_event['all_day'] ? $this->user->format_date($cur_event['end_time']) : '', 'EVENT_DESC' => isset($cur_event['desc']) && $cur_event['desc'] != '' ? $cur_event['desc'] : '', 'ALL_DAY' => $cur_event['start_time'] - $cur_event['end_time'] == 1 ? true : false, 'MODULE_ID' => $module_id, 'EVENT_URL_NEW_WINDOW' => $is_external && $this->config['board3_events_url_new_window_' . $module_id] ? true : false));
                     }
                 }
             }
         }
     }
     return 'calendar_side.html';
 }
    /**
     * Parses parameters found in $request, which is an instance of
     * \phpbb\request\request_interface.
     *
     * It is expected to have a key f whose value is id of the forum to be pruned.
     *
     * @param	\phpbb\request\request_interface	$request Request object.
     * @return	null
     */
    public function parse_parameters(\phpbb\request\request_interface $request)
    {
        $this->cat_data = array();
        if ($request->is_set('c')) {
            $cat_id = $request->variable('c', 0);
            $sql = 'SELECT cat_id, cat_cron_enable, cat_cron_next, cat_cron_freq, cat_cron_nb_check
				FROM ' . DIR_CAT_TABLE . "\n\t\t\t\tWHERE cat_id = {$cat_id}";
            $result = $this->db->sql_query($sql);
            $row = $this->db->sql_fetchrow($result);
            $this->db->sql_freeresult($result);
            if ($row) {
                $this->cat_data = $row;
            }
        }
    }