/** * Display a single queue item * * @param int $queue_id * @return array('row' => (sql selection), 'contrib' => $contrib, 'topic' => $topic) */ public static function display_queue_item($queue_id) { titania::add_lang('contributions'); $sql_ary = array('SELECT' => '*', 'FROM' => array(TITANIA_QUEUE_TABLE => 'q', TITANIA_REVISIONS_TABLE => 'r', TITANIA_TOPICS_TABLE => 't'), 'WHERE' => 'q.queue_id = ' . (int) $queue_id . ' AND r.revision_id = q.revision_id AND t.topic_id = q.queue_topic_id'); // Main SQL Query $sql = phpbb::$db->sql_build_query('SELECT', $sql_ary); $result = phpbb::$db->sql_query($sql); $row = phpbb::$db->sql_fetchrow($result); phpbb::$db->sql_freeresult($result); if (!$row) { trigger_error('NO_QUEUE_ITEM'); } self::$queue[$queue_id] = $row; // Load the contribution $contrib = new titania_contribution(); $contrib->load((int) $row['contrib_id']); $contrib->get_download($row['revision_id']); $contrib->get_revisions(); $contrib->get_screenshots(); $contrib->assign_details(); // Load the topic (with the already selected data) $topic = new titania_topic(); $topic->__set_array($row); // Bit of a hack for the posting $_REQUEST['t'] = $topic->topic_id; // Some quick-actions $quick_actions = array(); if ($row['queue_status'] > 0) { if ($row['queue_progress'] == phpbb::$user->data['user_id']) { $quick_actions['MARK_NO_PROGRESS'] = array('url' => titania_url::append_url(titania_url::$current_page_url, array('action' => 'no_progress')), 'class' => 'queue_progress'); } else { if (!$row['queue_progress']) { $quick_actions['MARK_IN_PROGRESS'] = array('url' => titania_url::append_url(titania_url::$current_page_url, array('action' => 'in_progress')), 'class' => 'queue_progress'); } } $tags = titania::$cache->get_tags(TITANIA_QUEUE); unset($tags[$row['queue_status']]); $quick_actions['CHANGE_STATUS'] = array('url' => titania_url::append_url(titania_url::$current_page_url, array('action' => 'move')), 'class' => 'change_status', 'tags' => $tags); if (titania_types::$types[$contrib->contrib_type]->acl_get('moderate')) { $quick_actions['REPACK'] = array('url' => titania_url::append_url($contrib->get_url('revision'), array('repack' => $row['revision_id'])), 'class' => 'repack'); } // This allows you to alter the author submitted notes to the validation team, not really useful as the field's purpose was changed, so commenting out /*$quick_actions['ALTER_NOTES'] = array( 'url' => titania_url::append_url(titania_url::$current_page_url, array('action' => 'notes')), );*/ // Misc actions $subactions = array(); if (titania_types::$types[$contrib->contrib_type]->mpv_test) { $subactions['RETEST_MPV'] = array('url' => titania_url::build_url('', array('action' => 'mpv', 'revision' => $row['revision_id']))); } if (titania_types::$types[$contrib->contrib_type]->automod_test) { $subactions['RETEST_AUTOMOD'] = array('url' => titania_url::build_url('', array('action' => 'automod', 'revision' => $row['revision_id']))); } $subactions['REBUILD_FIRST_POST'] = array('url' => titania_url::append_url(titania_url::$current_page_url, array('action' => 'rebuild'))); $quick_actions['CAT_MISC'] = array('subactions' => $subactions, 'class' => 'misc'); // Validation if (titania_types::$types[$contrib->contrib_type]->acl_get('validate')) { $quick_actions['APPROVE'] = array('url' => titania_url::append_url(titania_url::$current_page_url, array('action' => 'approve', 'start' => '*destroy*')), 'class' => 'approve'); $quick_actions['DENY'] = array('url' => titania_url::append_url(titania_url::$current_page_url, array('action' => 'deny', 'start' => '*destroy*')), 'class' => 'deny'); } } foreach ($quick_actions as $lang_key => $data) { phpbb::$template->assign_block_vars('queue_actions', array('NAME' => isset(phpbb::$user->lang[$lang_key]) ? phpbb::$user->lang[$lang_key] : $lang_key, 'CLASS' => isset($data['class']) ? $data['class'] : '', 'U_VIEW' => isset($data['url']) ? $data['url'] : '')); if (isset($data['tags'])) { foreach ($data['tags'] as $tag_id => $tag_row) { phpbb::$template->assign_block_vars('queue_actions.subactions', array('ID' => $tag_id, 'NAME' => isset(phpbb::$user->lang[$tag_row['tag_field_name']]) ? phpbb::$user->lang[$tag_row['tag_field_name']] : $tag_row['tag_field_name'], 'U_ACTION' => titania_url::append_url($data['url'], array('id' => $tag_id, 'hash' => generate_link_hash('quick_actions'))))); } } if (isset($data['subactions'])) { foreach ($data['subactions'] as $sublang_key => $subdata) { phpbb::$template->assign_block_vars('queue_actions.subactions', array('NAME' => isset(phpbb::$user->lang[$sublang_key]) ? phpbb::$user->lang[$sublang_key] : $sublang_key, 'U_ACTION' => $subdata['url'])); } } } if ($row['queue_status'] == -2) { $current_status = phpbb::$user->lang['REVISION_DENIED']; } else { if ($row['queue_status'] == -1) { $current_status = phpbb::$user->lang['REVISION_APPROVED']; } else { $current_status = titania_tags::get_tag_name($row['queue_status']); } } phpbb::$template->assign_vars(array('CURRENT_STATUS' => $current_status, 'S_DISPLAY_CONTRIBUTION' => true, 'S_IN_QUEUE' => true, 'U_POST_REPLY' => titania_url::append_url(titania_url::$current_page_url, array('action' => 'reply', 't' => $topic->topic_id)), 'U_NEW_REVISION' => false)); // Subscriptions titania_subscriptions::handle_subscriptions(TITANIA_TOPIC, $topic->topic_id, titania_url::$current_page_url); return compact('row', 'contrib', 'topic'); }
/** * Display a single queue item * * @param int $queue_id * @return array('row' => (sql selection), 'contrib' => $contrib, 'topic' => $topic) */ public static function display_queue_item($queue_id) { phpbb::$user->add_lang_ext('phpbb/titania', 'contributions'); $controller_helper = phpbb::$container->get('phpbb.titania.controller.helper'); $path_helper = phpbb::$container->get('path_helper'); $sql_ary = array('SELECT' => '*', 'FROM' => array(TITANIA_QUEUE_TABLE => 'q', TITANIA_REVISIONS_TABLE => 'r', TITANIA_TOPICS_TABLE => 't'), 'WHERE' => 'q.queue_id = ' . (int) $queue_id . ' AND r.revision_id = q.revision_id AND t.topic_id = q.queue_topic_id'); // Main SQL Query $sql = phpbb::$db->sql_build_query('SELECT', $sql_ary); $result = phpbb::$db->sql_query($sql); $row = phpbb::$db->sql_fetchrow($result); phpbb::$db->sql_freeresult($result); if (!$row) { trigger_error('NO_QUEUE_ITEM'); } self::$queue[$queue_id] = $row; $queue = self::get_queue_object($queue_id); // Load the contribution $contrib = new titania_contribution(); $contrib->load((int) $row['contrib_id']); $contrib->get_download($row['revision_id']); $contrib->get_revisions(); $contrib->get_screenshots(); $contrib->assign_details(); // Load the topic (with the already selected data) $topic = new titania_topic(); $topic->__set_array($row); // Bit of a hack for the posting phpbb::$request->overwrite('t', $topic->topic_id); $is_moderator = $contrib->type->acl_get('moderate'); $is_validator = $contrib->type->acl_get('validate'); $hash = array('hash' => generate_link_hash('queue_tool')); // Misc actions $misc_actions = array(array('RETEST_PV', $queue->get_tool_url('mpv', $row['revision_id'], $hash), $contrib->type->mpv_test), array('RETEST_PV', $queue->get_tool_url('epv', $row['revision_id'], $hash), $contrib->type->epv_test), array('RETEST_AUTOMOD', $queue->get_tool_url('automod', $row['revision_id'], $hash), $contrib->type->automod_test)); // Some quick-actions $quick_actions = array(); $hash = array('hash' => generate_link_hash('queue_action')); if ($row['queue_status'] > 0) { $misc_actions = array_merge($misc_actions, array(array('REBUILD_FIRST_POST', $queue->get_url('rebuild', $hash), true), array('ALLOW_AUTHOR_REPACK', $queue->get_url('allow_author_repack'), $is_moderator && !$row['allow_author_repack']), array('MARK_TESTED', $queue->get_url('tested', $hash), !$row['queue_tested']), array('MARK_UNTESTED', $queue->get_url('not_tested', $hash), $row['queue_tested']))); $tags = titania::$cache->get_tags(TITANIA_QUEUE); unset($tags[$row['queue_status']]); $quick_actions = array(array('MARK_NO_PROGRESS', $queue->get_url('no_progress', $hash), $row['queue_progress'] == phpbb::$user->data['user_id'], 'queue_progress'), array('MARK_IN_PROGRESS', $queue->get_url('in_progress', $hash), !$row['queue_progress'], 'queue_progress'), array('CHANGE_STATUS', $queue->get_url('move'), true, 'change_status', $tags), array('REPACK', $contrib->get_url('revision', array('page' => 'repack', 'id' => $row['revision_id'])), $is_moderator, 'repack'), array('CAT_MISC', '', true, 'misc', '', $misc_actions), array('APPROVE', $queue->get_url('approve'), $is_validator, 'approve'), array('DENY', $queue->get_url('deny'), $is_validator, 'deny')); } if (empty($quick_actions) && !empty($misc_actions)) { $quick_actions = array(array('CAT_MISC', '', true, 'misc', '', $misc_actions)); } foreach ($quick_actions as $data) { $properties = array('name', 'url', 'auth', 'class', 'tags', 'subactions'); $data = array_pad($data, sizeof($properties), ''); $data = array_combine($properties, $data); if (!$data['auth']) { continue; } phpbb::$template->assign_block_vars('queue_actions', array('NAME' => phpbb::$user->lang($data['name']), 'CLASS' => $data['class'], 'U_VIEW' => $data['url'])); if ($data['tags']) { foreach ($data['tags'] as $tag_id => $tag_row) { phpbb::$template->assign_block_vars('queue_actions.subactions', array('ID' => $tag_id, 'NAME' => phpbb::$user->lang($tag_row['tag_field_name']), 'U_ACTION' => $path_helper->append_url_params($data['url'], array('id' => $tag_id, 'hash' => generate_link_hash('quick_actions'))))); } } if ($data['subactions']) { foreach ($data['subactions'] as $subdata) { $subdata = array_pad($subdata, sizeof($properties), ''); $subdata = array_combine($properties, $subdata); if (!$subdata['auth']) { continue; } phpbb::$template->assign_block_vars('queue_actions.subactions', array('NAME' => phpbb::$user->lang($subdata['name']), 'U_ACTION' => $subdata['url'])); } } } if ($row['queue_status'] == -3) { $current_status = phpbb::$user->lang('QUEUE_CLOSED'); } else { if ($row['queue_status'] == -2) { $current_status = phpbb::$user->lang['REVISION_DENIED']; } else { if ($row['queue_status'] == -1) { $current_status = phpbb::$user->lang['REVISION_APPROVED']; } else { $current_status = phpbb::$container->get('phpbb.titania.tags')->get_tag_name($row['queue_status']); } } } phpbb::$template->assign_vars(array('CURRENT_STATUS' => $current_status, 'S_DISPLAY_CONTRIBUTION' => true, 'S_IN_QUEUE' => true, 'U_POST_REPLY' => $queue->get_url('reply'), 'U_NEW_REVISION' => false)); // Subscriptions phpbb::$container->get('phpbb.titania.subscriptions')->handle_subscriptions(TITANIA_TOPIC, $topic->topic_id, $controller_helper->get_current_url(), 'SUBSCRIBE_TOPIC'); return compact('row', 'contrib', 'topic'); }