/** * Delegates requested action to appropriate method. * * @param int $id Queue item id. * @param string $action Requested action. * * @return \Symfony\Component\HttpFoundation\Response */ public function item_action($id, $action) { $this->load_item($id); if (!$this->check_auth($action)) { return $this->helper->needs_auth(); } $this->display->assign_global_vars(); $this->generate_navigation('queue'); $valid_action = false; $check_actions = array('in_progress', 'no_progress', 'tested', 'not_tested', 'rebuild'); if (in_array($action, $check_actions) && !check_link_hash($this->request->variable('hash', ''), 'queue_action')) { return $this->helper->error('PAGE_REQUEST_INVALID'); } // Only allow these actions to run if the queue item is still open. if ($this->queue->queue_status > 0) { $valid_action = true; switch ($action) { case 'in_progress': $this->queue->in_progress(); break; case 'no_progress': $this->queue->no_progress(); break; case 'tested': $this->queue->change_tested_mark(true); break; case 'not_tested': $this->queue->change_tested_mark(false); break; case 'move': $this->move(); break; case 'allow_author_repack': return $this->allow_author_repack(); break; case 'approve': return $this->approve(); break; case 'deny': return $this->deny(); break; default: $valid_action = false; } } switch ($action) { case 'rebuild': $this->queue->update_first_queue_post(); break; case 'reply': case 'quote': case 'edit': case 'quick_edit': case 'delete': case 'undelete': return $this->posting($action); break; default: if (!$valid_action) { return $this->helper->error('INVALID_ACTION', 404); } } redirect($this->queue->get_url()); }
public function queue($mode, $queue_id = false) { switch ($mode) { case 'update_first_queue_post': $queue = new titania_queue(); $contrib = new titania_contribution(); $sql = 'SELECT * FROM ' . TITANIA_QUEUE_TABLE . ' q, ' . TITANIA_CONTRIBS_TABLE . ' c WHERE c.contrib_id = q.contrib_id' . ($queue_id ? ' AND queue_id = ' . (int) $queue_id : ''); $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { $contrib->__set_array($row); $queue->__set_array($row); $queue->update_first_queue_post(false, $contrib); } phpbb::$db->sql_freeresult($result); unset($queue); break; case 'revision_queue_id': $sql = 'SELECT queue_id, revision_id FROM ' . TITANIA_QUEUE_TABLE; $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { $sql = 'UPDATE ' . TITANIA_REVISIONS_TABLE . ' SET revision_queue_id = ' . (int) $row['queue_id'] . ' WHERE revision_id = ' . (int) $row['revision_id']; phpbb::$db->sql_query($sql); } phpbb::$db->sql_freeresult($result); break; } }
/** * Sync queue * * @param string $mode * @param int|bool $queue_id (Optional) Queue id to limit to. Defaults to false. */ public function queue($mode, $queue_id = false) { switch ($mode) { case 'update_first_queue_post': $queue = new \titania_queue(); $contrib = new \titania_contribution(); $sql = 'SELECT * FROM ' . $this->queue_table . ' q, ' . $this->contribs_table . ' c WHERE c.contrib_id = q.contrib_id' . ($queue_id ? ' AND queue_id = ' . (int) $queue_id : ''); $result = $this->db->sql_query($sql); while ($row = $this->db->sql_fetchrow($result)) { $contrib->__set_array($row); $contrib->set_type($row['contrib_type']); $queue->__set_array($row); $queue->update_first_queue_post(false, $contrib); } $this->db->sql_freeresult($result); unset($queue); break; case 'revision_queue_id': $sql = 'SELECT queue_id, revision_id FROM ' . $this->queue_table; $result = $this->db->sql_query($sql); while ($row = $this->db->sql_fetchrow($result)) { $sql = 'UPDATE ' . $this->revisions_table . ' SET revision_queue_id = ' . (int) $row['queue_id'] . ' WHERE revision_id = ' . (int) $row['revision_id']; $this->db->sql_query($sql); } $this->db->sql_freeresult($result); break; } }