예제 #1
0
    /**
     * A hook that adds the subject prefixes to phpBB pages without modifying the page itself
     * @param	phpbb_hook	$phpbb_hook	The phpBB hook object
     * @return	void
     * @todo	Change this method to a more flexible one. The current method is really
     * 			static and there is a lot of code duplication around here.
     */
    public static function add_subject_prefix_to_page(&$hook)
    {
        // Only on regular pages
        if (!empty(sp_phpbb::$user->page['page_dir'])) {
            return;
        }
        // This is kinda nasty, viewforum.php?f=. should be handled as index.php
        if (sp_phpbb::$user->page['page_name'] == 'viewforum.' . PHP_EXT && isset(sp_phpbb::$template->_tpldata['forumrow'])) {
            sp_phpbb::$user->page['page_name'] = 'index.' . PHP_EXT;
        }
        // Add the prefix to certain pages
        switch (sp_phpbb::$user->page['page_name']) {
            case 'index.' . PHP_EXT:
                if (empty(sp_phpbb::$template->_tpldata['forumrow'])) {
                    return;
                }
                // This MOD also supports Joas his "last post topic title MOD".
                if (isset(sp_phpbb::$config['altt_active']) && sp_phpbb::$config['altt_active']) {
                    $blockvar = 'ALTT_LINK_NAME_SHORT';
                } else {
                    $blockvar = 'LAST_POST_SUBJECT';
                }
                // To fetch the subject prefixes we'll need the last post ids
                $last_post_ids = array();
                foreach (sp_phpbb::$template->_tpldata['forumrow'] as $row => $data) {
                    // Need the last post link
                    if (empty($data['U_LAST_POST'])) {
                        continue;
                    }
                    $last_post_ids[$row] = substr(strrchr($data['U_LAST_POST'], 'p'), 1);
                }
                // Get the prefixes
                $sql = 'SELECT topic_last_post_id, subject_prefix_id
					FROM ' . TOPICS_TABLE . '
					WHERE ' . sp_phpbb::$db->sql_in_set('topic_last_post_id', $last_post_ids);
                $result = sp_phpbb::$db->sql_query($sql);
                $last_post_ids = array_flip($last_post_ids);
                while ($row = sp_phpbb::$db->sql_fetchrow($result)) {
                    $last_post_subject = sp_core::generate_prefix_string($row['subject_prefix_id']) . ' ' . sp_phpbb::$template->_tpldata['forumrow'][$last_post_ids[$row['topic_last_post_id']]][$blockvar];
                    // Alter the array
                    sp_phpbb::$template->alter_block_array('forumrow', array($blockvar => $last_post_subject), $key = $last_post_ids[$row['topic_last_post_id']], 'change');
                }
                sp_phpbb::$db->sql_freeresult($result);
                break;
            case 'mcp.' . PHP_EXT:
                break;
            case 'memberlist.' . PHP_EXT:
                // Most active topic
                if (!empty(sp_phpbb::$template->_tpldata['.'][0]['ACTIVE_TOPIC'])) {
                    // Strip the topic id from link
                    $topic_id = substr(strrchr(sp_phpbb::$template->_tpldata['.'][0]['U_ACTIVE_TOPIC'], '='), 1);
                    // Get the subject prefix
                    $sql = 'SELECT subject_prefix_id
						FROM ' . TOPICS_TABLE . '
						WHERE topic_id = ' . (int) $topic_id;
                    $result = sp_phpbb::$db->sql_query($sql);
                    $pid = sp_phpbb::$db->sql_fetchfield('subject_prefix_id', false, $result);
                    sp_phpbb::$db->sql_freeresult($result);
                    // Send to the template
                    $active_title = sp_core::generate_prefix_string($pid) . ' ' . sp_phpbb::$template->_tpldata['.'][0]['ACTIVE_TOPIC'];
                    sp_phpbb::$template->assign_var('ACTIVE_TOPIC', $active_title);
                }
                break;
            case 'posting.' . PHP_EXT:
                global $preview;
                // When previewing this add the tag
                if (!empty($preview)) {
                    $pid = request_var('subjectprefix', 0);
                    $topic_title = sp_phpbb::$template->_tpldata['.'][0]['TOPIC_TITLE'];
                    $topic_title = sp_core::generate_prefix_string($pid) . ' ' . $topic_title;
                    sp_phpbb::$template->assign_var('TOPIC_TITLE', $topic_title);
                }
                break;
            case 'search.' . PHP_EXT:
                if (empty(sp_phpbb::$template->_tpldata['searchresults'])) {
                    return;
                }
                $sr = request_var('sr', '');
                // Collect the post ids
                $row_id = array();
                foreach (sp_phpbb::$template->_tpldata['searchresults'] as $row => $data) {
                    if ($sr == 'topics') {
                        if (empty($data['U_VIEW_TOPIC'])) {
                            continue;
                        }
                        $row_id[$row] = (int) substr(strrchr(sp_phpbb::$template->_tpldata['searchresults'][$row]['U_VIEW_TOPIC'], '='), 1);
                    } else {
                        if (empty($data['POST_ID'])) {
                            continue;
                        }
                        $row_id[$row] = $data['POST_ID'];
                    }
                }
                // Fetch the prefixes
                switch ($sr) {
                    case 'topics':
                        $sql = 'SELECT topic_id, subject_prefix_id
							FROM ' . TOPICS_TABLE . '
							WHERE ' . sp_phpbb::$db->sql_in_set('topic_id', $row_id);
                        $rowfield = 'topic_id';
                        break;
                    default:
                        $sql = 'SELECT p.post_id, t.subject_prefix_id
							FROM (' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t)
							WHERE ' . sp_phpbb::$db->sql_in_set('p.post_id', $row_id) . '
								AND t.topic_id = p.topic_id';
                        $rowfield = 'post_id';
                }
                $result = sp_phpbb::$db->sql_query($sql);
                $row_id = array_flip($row_id);
                while ($row = sp_phpbb::$db->sql_fetchrow($result)) {
                    $topic_title = sp_core::generate_prefix_string($row['subject_prefix_id']) . ' ' . sp_phpbb::$template->_tpldata['searchresults'][$row_id[$row[$rowfield]]]['TOPIC_TITLE'];
                    // Update the template
                    sp_phpbb::$template->alter_block_array('searchresults', array('TOPIC_TITLE' => $topic_title), $row_id[$row[$rowfield]], 'change');
                }
                sp_phpbb::$db->sql_freeresult($result);
                break;
            case 'ucp.' . PHP_EXT:
                // Bookmarks and subscriptions
                if (!empty(sp_phpbb::$template->_tpldata['topicrow'])) {
                    $topic_ids_rows = array();
                    foreach (sp_phpbb::$template->_tpldata['topicrow'] as $row => $data) {
                        $topic_ids_rows[$row] = $data['TOPIC_ID'];
                    }
                    $sql = 'SELECT topic_id, subject_prefix_id
						FROM ' . TOPICS_TABLE . '
						WHERE ' . sp_phpbb::$db->sql_in_set('topic_id', $topic_ids_rows) . '
							AND subject_prefix_id > 0';
                    $result = sp_phpbb::$db->sql_query($sql);
                    $topic_ids_rows = array_flip($topic_ids_rows);
                    while ($row = sp_phpbb::$db->sql_fetchrow($result)) {
                        $topic_title = sp_core::generate_prefix_string($row['subject_prefix_id']) . ' ' . sp_phpbb::$template->_tpldata['topicrow'][$topic_ids_rows[$row['topic_id']]]['TOPIC_TITLE'];
                        // Alter the array
                        sp_phpbb::$template->alter_block_array('topicrow', array('TOPIC_TITLE' => $topic_title), $key = $topic_ids_rows[$row['topic_id']], 'change');
                    }
                    sp_phpbb::$db->sql_freeresult($result);
                }
                // Most active topic
                if (!empty(sp_phpbb::$template->_tpldata['.'][0]['ACTIVE_TOPIC'])) {
                    // Strip the topic id from link
                    $topic_id = substr(strrchr(sp_phpbb::$template->_tpldata['.'][0]['U_ACTIVE_TOPIC'], '='), 1);
                    // Get the subject prefix
                    $sql = 'SELECT subject_prefix_id
						FROM ' . TOPICS_TABLE . '
						WHERE topic_id = ' . (int) $topic_id;
                    $result = sp_phpbb::$db->sql_query($sql);
                    $pid = sp_phpbb::$db->sql_fetchfield('subject_prefix_id', false, $result);
                    sp_phpbb::$db->sql_freeresult($result);
                    // Send to the template
                    $active_title = sp_core::generate_prefix_string($pid) . ' ' . sp_phpbb::$template->_tpldata['.'][0]['ACTIVE_TOPIC'];
                    sp_phpbb::$template->assign_var('ACTIVE_TOPIC', $active_title);
                }
                break;
            case 'viewforum.' . PHP_EXT:
                // As the topic data is unset once its used we'll have to introduce an query to
                // fetch the prefixes
                if (empty(sp_phpbb::$template->_tpldata['topicrow'])) {
                    return;
                }
                $topic_ids_rows = array();
                foreach (sp_phpbb::$template->_tpldata['topicrow'] as $row => $data) {
                    $topic_ids_rows[$row] = $data['TOPIC_ID'];
                }
                $sql = 'SELECT topic_id, subject_prefix_id
					FROM ' . TOPICS_TABLE . '
					WHERE ' . sp_phpbb::$db->sql_in_set('topic_id', $topic_ids_rows) . '
						AND subject_prefix_id > 0';
                $result = sp_phpbb::$db->sql_query($sql);
                $topic_ids_rows = array_flip($topic_ids_rows);
                while ($row = sp_phpbb::$db->sql_fetchrow($result)) {
                    $topic_title = sp_core::generate_prefix_string($row['subject_prefix_id']) . ' ' . sp_phpbb::$template->_tpldata['topicrow'][$topic_ids_rows[$row['topic_id']]]['TOPIC_TITLE'];
                    // Alter the array
                    sp_phpbb::$template->alter_block_array('topicrow', array('TOPIC_TITLE' => $topic_title), $key = $topic_ids_rows[$row['topic_id']], 'change');
                }
                sp_phpbb::$db->sql_freeresult($result);
                break;
            case 'viewtopic.' . PHP_EXT:
                global $forum_id, $topic_id;
                global $viewtopic_url, $topic_data;
                // Add to the page title
                $page_title = sp_phpbb::$template->_tpldata['.'][0]['PAGE_TITLE'];
                $page_title = substr_replace($page_title, ' ' . sp_core::generate_prefix_string($topic_data['subject_prefix_id'], false), strpos($page_title, '-') + 1, 0);
                sp_phpbb::$template->assign_var('PAGE_TITLE', $page_title);
                // Add to the topic title
                $topic_title = sp_phpbb::$template->_tpldata['.'][0]['TOPIC_TITLE'];
                $topic_title = sp_core::generate_prefix_string($topic_data['subject_prefix_id']) . ' ' . $topic_title;
                sp_phpbb::$template->assign_var('TOPIC_TITLE', $topic_title);
                // The quick MOD box
                if (sp_phpbb::$auth->acl_get('m_subject_prefix', $forum_id)) {
                    sp_phpbb::$template->assign_vars(array('S_SUBJECT_PREFIX_QUICK_MOD' => sp_core::generate_prefix_options($forum_id, $topic_data['subject_prefix_id']), 'S_SUBJECT_PREFIX_QUICK_MOD_ACTION' => append_sid(PHPBB_ROOT_PATH . 'mcp.' . PHP_EXT, array('i' => 'subject_prefix', 'mode' => 'quick_edit', 'f' => $forum_id, 't' => $topic_id, 'redirect' => urlencode(str_replace('&', '&', $viewtopic_url))), true, sp_phpbb::$user->session_id)));
                }
                break;
        }
    }
예제 #2
0
    public function main($id, $mode)
    {
        global $phpbb_admin_path;
        // Anoyingly can't use a constant due to phpBB :/
        // Set some stuff we *really* need
        $this->tpl_name = 'acp_subject_prefix';
        $this->page_title = 'ACP_SUBJECT_PREFIX';
        add_form_key('acp_subject_prefix');
        $action = request_var('action', '');
        switch ($mode) {
            case 'add':
                $pid = request_var('pid', 0);
                // Handle
                if (isset($_POST['submit'])) {
                    // Get the data
                    $colour = request_var('prefix_colour', '');
                    $forum_ids = request_var('prefix_forums_id', array(0 => 0));
                    $title = request_var('prefix_title', '', true);
                    // Create or edit
                    if ($pid > 0) {
                        sp_core::prefix_update($pid, $title, $colour, $forum_ids, $this->error);
                        $msg = 'PREFIX_SUCCESSFULLY_EDITED';
                    } else {
                        $pid = sp_core::prefix_add($title, $colour, $forum_ids, $this->error);
                        $msg = 'PREFIX_SUCCESSFULLY_ADDED';
                    }
                    // Redirect
                    meta_refresh(5, $this->u_action);
                    trigger_error(sp_phpbb::$user->lang[$msg] . adm_back_link($this->u_action));
                }
                // Editing
                if ($pid > 0) {
                    $prefixes = sp_phpbb::$cache->obtain_subject_prefixes();
                    if (!empty($prefixes[$pid])) {
                        sp_phpbb::$template->assign_vars(array('COLOUR' => $prefixes[$pid]['colour'], 'TITLE' => $prefixes[$pid]['title']));
                        // The forum select
                        $selected = array();
                        $sql = 'SELECT forum_id
							FROM ' . SUBJECT_PREFIX_FORUMS_TABLE . '
							WHERE prefix_id = ' . $pid;
                        $result = sp_phpbb::$db->sql_query($sql);
                        while ($row = sp_phpbb::$db->sql_fetchrow($result)) {
                            $selected[] = $row['forum_id'];
                        }
                        sp_phpbb::$db->sql_freeresult($result);
                        $forum_select = make_forum_select($selected, false, true, false, false);
                    }
                }
                if (!isset($forum_select)) {
                    $forum_select = make_forum_select(false, false, true, false, false);
                }
                // Display page
                sp_phpbb::$template->assign_vars(array('L_SUBJECT_PREFIX_ADD_EDIT' => sp_phpbb::$user->lang('SUBJECT_PREFIX_ADD_EDIT', $mode == 'add' ? 0 : 1), 'PREFIX_FORUMS_OPTIONS' => $forum_select, 'S_EDIT' => true, 'U_ACTION' => $this->u_action . '&pid=' . $pid, 'U_SWATCH' => append_sid($phpbb_admin_path . 'swatch.' . PHP_EXT, array('form' => 'acp_subject_prefix', 'name' => 'prefix_colour'))));
                break;
            case 'main':
                // Quick actions
                if (method_exists($this, 'qa_' . $action)) {
                    call_user_func(array($this, 'qa_' . $action));
                }
                $data = $forums = array();
                sp_phpbb::$cache->obtain_prefix_forum_tree($data, $forums);
                if (is_array($data) && is_array($forums)) {
                    ksort($data);
                    // Output the list
                    foreach ($data as $forum_id => $prefixes) {
                        // The forum block
                        sp_phpbb::$template->assign_block_vars('forumrow', array('FORUMNAME' => $forums[$forum_id], 'FORUM_ID' => $forum_id));
                        // The prefixes
                        foreach ($prefixes as $prefix) {
                            sp_phpbb::$template->assign_block_vars('forumrow.prefixrow', array('PREFIX_ID' => $prefix['prefix_id'], 'PREFIX_NAME' => $prefix['prefix_title'], 'PREFIX_COLOUR' => $prefix['prefix_colour'], 'PREFIX_FULL' => sp_core::generate_prefix_string($prefix['prefix_id']), 'U_DELETE' => sp_phpbb::$auth->acl_get('a_subject_prefix_create') ? $this->u_action . "&action=delete&pid={$prefix['prefix_id']}&fid={$forum_id}" : false, 'U_EDIT' => sp_phpbb::$auth->acl_get('a_subject_prefix_create') ? $this->u_action . "&mode=add&pid={$prefix['prefix_id']}" : false, 'U_MOVE_DOWN' => $this->u_action . '&action=move&direction=down&prefix_order=' . $prefix['prefix_order'] . '&f=' . $forum_id, 'U_MOVE_UP' => $this->u_action . '&action=move&direction=up&prefix_order=' . $prefix['prefix_order'] . '&f=' . $forum_id));
                        }
                    }
                }
                // Some common stuff
                sp_phpbb::$template->assign_vars(array('U_SUBJECT_PREFIX_AJAX_REQUEST' => append_sid(PHPBB_ROOT_PATH . 'sp_ajax.' . PHP_EXT)));
                break;
        }
    }