/** * Handle some stuff we need when submitting a revision */ public function submit() { if (!$this->revision_id) { // Update the contrib_last_update if required here if (!titania::$config->require_validation || !titania_types::$types[$this->contrib->contrib_type]->require_validation) { $this->contrib->contrib_last_update = titania::$time; $sql_ary = array('contrib_last_update' => $this->contrib->contrib_last_update); $sql = 'UPDATE ' . TITANIA_CONTRIBS_TABLE . ' SET ' . phpbb::$db->sql_build_array('UPDATE', $sql_ary) . ' WHERE contrib_id = ' . $this->contrib_id; phpbb::$db->sql_query($sql); // Subscriptions $email_vars = array('NAME' => $this->contrib->contrib_name, 'U_VIEW' => $this->contrib->get_url()); titania_subscriptions::send_notifications(TITANIA_CONTRIB, $this->contrib_id, 'subscribe_notify.txt', $email_vars); } } else { if (sizeof($this->phpbb_versions)) { $sql = 'DELETE FROM ' . TITANIA_REVISIONS_PHPBB_TABLE . ' WHERE revision_id = ' . (int) $this->revision_id; phpbb::$db->sql_query($sql); } } parent::submit(); // Add phpBB versions supported if (sizeof($this->phpbb_versions)) { $versions = titania::$cache->get_phpbb_versions(); $sql_ary = array(); foreach ($this->phpbb_versions as $row) { if (!is_array($row)) { $row = array('phpbb_version_branch' => (int) $row); } if (!isset($row['phpbb_version_branch']) || !isset(titania::$config->phpbb_versions[$row['phpbb_version_branch']])) { continue; } // OMG, it's not in our cache! if (!isset($versions[$row['phpbb_version_branch'] . titania::$config->phpbb_versions[$row['phpbb_version_branch']]])) { titania::$cache->destroy('_titania_phpbb_versions'); } $sql_ary[] = array('revision_id' => $this->revision_id, 'contrib_id' => $this->contrib_id, 'revision_validated' => $this->revision_status == TITANIA_REVISION_APPROVED ? true : false, 'phpbb_version_branch' => $row['phpbb_version_branch'], 'phpbb_version_revision' => get_real_revision_version(isset($row['phpbb_version_revision']) ? $row['phpbb_version_revision'] : titania::$config->phpbb_versions[$row['phpbb_version_branch']]['latest_revision'])); } if (sizeof($sql_ary)) { phpbb::$db->sql_multi_insert(TITANIA_REVISIONS_PHPBB_TABLE, $sql_ary); } } // Update the release topic if ($this->revision_status == TITANIA_REVISION_APPROVED) { $this->contrib->update_release_topic(); } // Hooks titania::$hook->call_hook_ref(array(__CLASS__, __FUNCTION__), $this); }
function run_tool() { $new_phpbb_version = request_var('new_phpbb_version', ''); $limit_phpbb_versions = request_var('limit_phpbb_version', array('')); if (!$new_phpbb_version || strlen($new_phpbb_version) < 5 || $new_phpbb_version[1] != '.' || $new_phpbb_version[3] != '.') { trigger_back('NO_VERSION_SELECTED'); } // Does the zip for this exist? $version = preg_replace('#[^a-zA-Z0-9\\.\\-]+#', '', $new_phpbb_version); if (!file_exists(TITANIA_ROOT . 'includes/phpbb_packages/phpBB-' . $version . '.zip')) { trigger_back(sprintf(phpbb::$user->lang['FILE_NOT_EXIST'], 'includes/phpbb_packages/phpBB-' . $version . '.zip')); } $phpbb_version_branch = (int) $new_phpbb_version[0] . (int) $new_phpbb_version[2]; $phpbb_version_revision = get_real_revision_version(substr($new_phpbb_version, 4)); // Is it in our version cache? $versions = titania::$cache->get_phpbb_versions(); if (!isset($versions[$phpbb_version_branch . $phpbb_version_revision])) { titania::$cache->destroy('_titania_phpbb_versions'); } $testable_types = array(); foreach (titania_types::$types as $type_id => $type) { if ($type->automod_test) { $testable_types[] = $type_id; } } if (!sizeof($testable_types)) { trigger_back('NO_REVISIONS_UPDATED'); } $revisions = array(); $sql = 'SELECT DISTINCT(c.contrib_id), r.revision_id FROM ' . TITANIA_REVISIONS_TABLE . ' r, ' . TITANIA_CONTRIBS_TABLE . ' c WHERE c.contrib_id = r.contrib_id AND ' . phpbb::$db->sql_in_set('c.contrib_type', $testable_types) . ' GROUP BY c.contrib_id ORDER BY r.revision_time DESC'; $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { $revisions[$row['revision_id']] = $row['contrib_id']; } phpbb::$db->sql_freeresult($result); if (sizeof($limit_phpbb_versions) > 1 || sizeof($limit_phpbb_versions) && $limit_phpbb_versions[0] != 0) { $revisions_selected = array(); // phpBB versions limiter foreach ($limit_phpbb_versions as $limit_phpbb_version) { $sql = 'SELECT revision_id FROM ' . TITANIA_REVISIONS_PHPBB_TABLE . ' WHERE phpbb_version_branch = ' . (int) substr($limit_phpbb_version, 0, 2) . ' AND phpbb_version_revision = \'' . phpbb::$db->sql_escape(substr($limit_phpbb_version, 2)) . '\''; $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { if (isset($revisions[$row['revision_id']])) { $revisions_selected[$row['revision_id']] = $revisions[$row['revision_id']]; } } phpbb::$db->sql_freeresult($result); } // swap $revisions = $revisions_selected; } if (!sizeof($revisions)) { trigger_back('NO_REVISIONS_UPDATED'); } // Don't include those which already are marked for this phpBB version $sql = 'SELECT revision_id FROM ' . TITANIA_REVISIONS_PHPBB_TABLE . ' WHERE ' . phpbb::$db->sql_in_set('revision_id', array_map('intval', array_keys($revisions))) . ' AND phpbb_version_branch = ' . $phpbb_version_branch . ' AND phpbb_version_revision = \'' . phpbb::$db->sql_escape($phpbb_version_revision) . '\''; $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { unset($revisions[$row['revision_id']]); } phpbb::$db->sql_freeresult($result); // Don't include those which already are in the automod queue $sql = 'SELECT revision_id FROM ' . TITANIA_AUTOMOD_QUEUE_TABLE . ' WHERE phpbb_version_branch = ' . $phpbb_version_branch . ' AND phpbb_version_revision = \'' . phpbb::$db->sql_escape($phpbb_version_revision) . '\''; $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { unset($revisions[$row['revision_id']]); } phpbb::$db->sql_freeresult($result); if (!sizeof($revisions)) { trigger_back('NO_REVISIONS_UPDATED'); } $sql_ary = array(); foreach ($revisions as $revision_id => $contrib_id) { $sql_ary[] = array('revision_id' => (int) $revision_id, 'phpbb_version_branch' => $phpbb_version_branch, 'phpbb_version_revision' => $phpbb_version_revision); } phpbb::$db->sql_multi_insert(TITANIA_AUTOMOD_QUEUE_TABLE, $sql_ary); trigger_back(sprintf(phpbb::$user->lang['REVISIONS_ADDED_TO_QUEUE'], sizeof($revisions))); }
WHERE row_id = ' . $row['row_id']; phpbb::$db->sql_query($sql); $new_dir_name = $row['contrib_name_clean'] . '_' . preg_replace('#[^0-9a-z]#', '_', strtolower($row['revision_version'])); $version = $row['phpbb_version_branch'][0] . '.' . $row['phpbb_version_branch'][1] . '.' . $row['phpbb_version_revision']; $zip = titania::$config->upload_path . utf8_basename($row['attachment_directory']) . '/' . utf8_basename($row['physical_filename']); $details = $results = $bbcode_results = ''; $contrib_tools = new titania_contrib_tools($zip, $new_dir_name); $package_root = $contrib_tools->find_root(); $contrib_tools->restore_root($package_root); if (sizeof($contrib_tools->error)) { continue; } if (!($phpbb_path = $contrib_tools->automod_phpbb_files($version))) { continue; } if ($contrib_tools->automod($phpbb_path, $details, $results, $bbcode_results)) { $sql_ary = array('revision_id' => $row['revision_id'], 'contrib_id' => $row['contrib_id'], 'phpbb_version_branch' => $row['phpbb_version_branch'], 'phpbb_version_revision' => get_real_revision_version($row['phpbb_version_revision']), 'revision_validated' => $row['revision_status'] == TITANIA_REVISION_APPROVED ? true : false); phpbb::$db->sql_query('INSERT INTO ' . TITANIA_REVISIONS_PHPBB_TABLE . ' ' . phpbb::$db->sql_build_array('INSERT', $sql_ary)); } $contrib_tools->remove_temp_files(); unset($contrib_tools); } phpbb::$db->sql_freeresult($result); } // Unloading cache and closing db after having done the dirty work. if ($use_shutdown_function) { register_shutdown_function('garbage_collection'); } else { garbage_collection(); } exit;
function run_tool() { $new_phpbb_version = request_var('new_phpbb_version', ''); $limit_phpbb_versions = request_var('limit_phpbb_version', array('')); $categories = request_var('category', array(0)); if (!$new_phpbb_version || strlen($new_phpbb_version) < 5 || $new_phpbb_version[1] != '.' || $new_phpbb_version[3] != '.') { trigger_back('NO_VERSION_SELECTED'); } $phpbb_version_branch = (int) $new_phpbb_version[0] . (int) $new_phpbb_version[2]; $phpbb_version_revision = get_real_revision_version(substr($new_phpbb_version, 4)); // Is it in our version cache? $versions = titania::$cache->get_phpbb_versions(); if (!isset($versions[$phpbb_version_branch . $phpbb_version_revision])) { titania::$cache->destroy('_titania_phpbb_versions'); } // Categories limiter $contribs = $revisions = array(); if (sizeof($categories) > 1 || sizeof($categories) && $categories[0] != 0) { $sql = 'SELECT contrib_id FROM ' . TITANIA_CONTRIB_IN_CATEGORIES_TABLE . ' WHERE ' . phpbb::$db->sql_in_set('category_id', array_map('intval', $categories)); $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { $contribs[] = $row['contrib_id']; } phpbb::$db->sql_freeresult($result); if (!sizeof($contribs)) { trigger_back('NO_REVISIONS_UPDATED'); } } if (sizeof($limit_phpbb_versions) > 1 || sizeof($limit_phpbb_versions) && $limit_phpbb_versions[0] != 0) { // phpBB versions limiter foreach ($limit_phpbb_versions as $limit_phpbb_version) { $sql = 'SELECT rp.contrib_id, rp.revision_id, r.revision_status FROM ' . TITANIA_REVISIONS_PHPBB_TABLE . ' rp, ' . TITANIA_REVISIONS_TABLE . ' r WHERE rp.phpbb_version_branch = ' . (int) substr($limit_phpbb_version, 0, 2) . ' AND rp.phpbb_version_revision = \'' . phpbb::$db->sql_escape(substr($limit_phpbb_version, 2)) . '\'' . (sizeof($contribs) ? ' AND ' . phpbb::$db->sql_in_set('rp.contrib_id', array_map('intval', $contribs)) : '') . ' AND r.revision_id = rp.revision_id'; $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { $revisions[$row['revision_id']] = $row; } phpbb::$db->sql_freeresult($result); } } else { if (sizeof($categories) > 1 || sizeof($categories) && $categories[0] != 0) { // Only category limited $sql = 'SELECT contrib_id, revision_id, revision_status FROM ' . TITANIA_REVISIONS_TABLE . ' WHERE ' . phpbb::$db->sql_in_set('contrib_id', array_map('intval', $contribs)); $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { $revisions[$row['revision_id']] = $row; } phpbb::$db->sql_freeresult($result); } else { // All $sql = 'SELECT contrib_id, revision_id, revision_status FROM ' . TITANIA_REVISIONS_TABLE; $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { $revisions[$row['revision_id']] = $row; } phpbb::$db->sql_freeresult($result); } } if (!sizeof($revisions)) { trigger_back('NO_REVISIONS_UPDATED'); } // Don't include those which already are marked for this phpBB version $sql = 'SELECT revision_id FROM ' . TITANIA_REVISIONS_PHPBB_TABLE . ' WHERE ' . phpbb::$db->sql_in_set('revision_id', array_map('intval', array_keys($revisions))) . ' AND phpbb_version_branch = ' . $phpbb_version_branch . ' AND phpbb_version_revision = \'' . phpbb::$db->sql_escape($phpbb_version_revision) . '\''; $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { unset($revisions[$row['revision_id']]); } phpbb::$db->sql_freeresult($result); if (!sizeof($revisions)) { trigger_back('NO_REVISIONS_UPDATED'); } $sql_ary = array(); foreach ($revisions as $revision_id => $row) { $sql_ary[] = array('contrib_id' => (int) $row['contrib_id'], 'revision_id' => (int) $revision_id, 'phpbb_version_branch' => $phpbb_version_branch, 'phpbb_version_revision' => $phpbb_version_revision, 'revision_validated' => $row['revision_status'] == TITANIA_REVISION_APPROVED ? true : false); } phpbb::$db->sql_multi_insert(TITANIA_REVISIONS_PHPBB_TABLE, $sql_ary); trigger_back(sprintf(phpbb::$user->lang['REVISIONS_UPDATED'], sizeof($revisions))); }
WHERE ' . phpbb::$db->sql_in_set('category_id', array(13, 14, 15, 16)); $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { $contrib_ids[] = $row['contrib_id']; } phpbb::$db->sql_freeresult($result); $sql = 'DELETE FROM ' . TITANIA_REVISIONS_PHPBB_TABLE . ' WHERE ' . phpbb::$db->sql_in_set('contrib_id', $contrib_ids); phpbb::$db->sql_query($sql); $versions = array(array(20, '23'), array(30, '0'), array(30, '1'), array(30, '2'), array(30, '3'), array(30, '4'), array(30, '5'), array(30, '6'), array(30, '7'), array(30, '7-pl1')); $sql = 'SELECT contrib_id, revision_id, revision_validated FROM ' . TITANIA_REVISIONS_TABLE . ' WHERE ' . phpbb::$db->sql_in_set('contrib_id', $contrib_ids); $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { foreach ($versions as $data) { $sql_ary[] = array('contrib_id' => $row['contrib_id'], 'revision_id' => $row['revision_id'], 'phpbb_version_branch' => $data[0], 'phpbb_version_revision' => get_real_revision_version($data[1]), 'revision_validated' => $row['revision_validated']); } } phpbb::$db->sql_freeresult($result); phpbb::$db->sql_multi_insert(TITANIA_REVISIONS_PHPBB_TABLE, $sql_ary); $display_message = 'Smilies, Avatars, Ranks, Styles Misc support the latest phpBB'; break; case 7: $sync = new titania_sync(); $sync->authors('count'); $display_message = 'Authors'; break; case 8: $sync = new titania_sync(); $sync->contribs('validated'); $sync->categories('count');
function titania_custom($action, $version) { switch ($action) { case 'install': switch ($version) { case '0.1.40': titania_tags(); titania_categories(); break; } break; case 'update': switch ($version) { case '0.1.34': $sync = new titania_sync(); $sync->topics('post_count'); break; case '0.1.37': $sync = new titania_sync(); $sync->queue('revision_queue_id'); break; case '0.1.47': $sync = new titania_sync(); $sync->topics('queue_discussion_category'); break; case '0.1.49': $sql = 'UPDATE ' . TITANIA_TOPICS_TABLE . ' SET topic_sticky = 1 WHERE topic_type = ' . TITANIA_QUEUE_DISCUSSION; phpbb::$db->sql_query($sql); break; case '0.1.53': $sql_ary = array(); $sql = 'SELECT contrib_id, revision_id, phpbb_version FROM ' . TITANIA_REVISIONS_TABLE; $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { $sql_ary[] = array('revision_id' => $row['revision_id'], 'contrib_id' => $row['contrib_id'], 'phpbb_version_branch' => $row['phpbb_version'][0] . $row['phpbb_version'][2], 'phpbb_version_revision' => get_real_revision_version(substr($row['phpbb_version'], 4))); } phpbb::$db->sql_freeresult($result); phpbb::$db->sql_multi_insert(TITANIA_REVISIONS_PHPBB_TABLE, $sql_ary); break; case '0.1.55': $validated = array(); $sql = 'SELECT revision_id FROM ' . TITANIA_REVISIONS_TABLE . ' WHERE revision_validated = 1'; $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { $validated[] = $row['revision_id']; } phpbb::$db->sql_freeresult($result); if (sizeof($validated)) { $sql = 'UPDATE ' . TITANIA_REVISIONS_PHPBB_TABLE . ' SET revision_validated = 1 WHERE ' . phpbb::$db->sql_in_set('revision_id', $validated); phpbb::$db->sql_query($sql); } break; case '0.3.2': $update = array(); // Reset the status $sql = 'UPDATE ' . TITANIA_REVISIONS_TABLE . ' SET revision_status = 0'; phpbb::$db->sql_query($sql); $sql = 'SELECT r.revision_id, q.queue_status FROM ' . TITANIA_REVISIONS_TABLE . ' r, ' . TITANIA_QUEUE_TABLE . ' q WHERE q.revision_id = r.revision_id'; $result = phpbb::$db->sql_query($sql); while ($row = phpbb::$db->sql_fetchrow($result)) { switch ($row['queue_status']) { case TITANIA_QUEUE_DENIED: $update[TITANIA_REVISION_DENIED][] = $row['revision_id']; break; case TITANIA_QUEUE_APPROVED: $update[TITANIA_REVISION_APPROVED][] = $row['revision_id']; break; case TITANIA_QUEUE_NEW: $update[TITANIA_REVISION_NEW][] = $row['revision_id']; break; } } phpbb::$db->sql_freeresult($result); foreach ($update as $status => $revision_ids) { $sql = 'UPDATE ' . TITANIA_REVISIONS_TABLE . ' SET revision_status = ' . (int) $status . ' WHERE ' . phpbb::$db->sql_in_set('revision_id', $revision_ids); phpbb::$db->sql_query($sql); } // Any that are left should be repacked $sql = 'UPDATE ' . TITANIA_REVISIONS_TABLE . ' SET revision_status = ' . TITANIA_REVISION_REPACKED . ' WHERE revision_status = 0'; phpbb::$db->sql_query($sql); break; case '0.3.3': titania_sync::contribs('faq_count'); break; } break; case 'uninstall': // Uninstall the types (prevent errors) foreach (titania_types::$types as $class) { $class->uninstall(); } titania_search::truncate(); break; } }
} if (!copy($filename, titania::$config->upload_path . $move_dir . '/' . $move_file)) { echo 'Could Not Copy File - ' . $filename . '<br />'; continue; } $sql_ary = array('object_type' => TITANIA_CONTRIB, 'object_id' => $row['contrib_id'], 'attachment_access' => TITANIA_ACCESS_PUBLIC, 'attachment_comment' => '', 'attachment_directory' => $move_dir, 'physical_filename' => $move_file, 'real_filename' => $row['revision_filename'], 'download_count' => 0, 'filesize' => $row['revision_filesize'], 'filetime' => $row['revision_date'], 'extension' => strpos($row['revision_filename'], '.zip') ? 'zip' : 'mod', 'mimetype' => strpos($row['revision_filename'], '.zip') ? 'application/x-zip-compressed' : 'text/plain', 'hash' => $row['revision_md5'], 'thumbnail' => 0, 'is_orphan' => 0); // Insert $attach_id = titania_insert(TITANIA_ATTACHMENTS_TABLE, $sql_ary); $sql_ary = array('revision_id' => $row['revision_id'], 'contrib_id' => $row['contrib_id'], 'attachment_id' => $attach_id, 'revision_version' => $row['revision_version'], 'revision_name' => $row['revision_name'], 'revision_time' => $row['revision_date'], 'revision_validated' => $row['queue_status'] == -1 ? true : false, 'validation_date' => $row['queue_status'] == -1 ? $row['revision_date'] : 0, 'install_time' => 0, 'install_level' => 0, 'revision_submitted' => 1, 'revision_queue_id' => isset($row['queue_id']) ? (int) $row['queue_id'] : 0); // Insert $revision_id = titania_insert(TITANIA_REVISIONS_TABLE, $sql_ary); if ($row['contrib_filename_internal'] == $row['revision_filename_internal']) { // More Ariel nubish. $sql_ary = array('revision_id' => $revision_id, 'contrib_id' => $row['contrib_id'], 'phpbb_version_branch' => $row['contrib_phpbb_version'][0] == '3' ? 30 : 20, 'phpbb_version_revision' => get_real_revision_version(substr($row['contrib_phpbb_version'], 4)), 'revision_validated' => $row['queue_status'] == -1 ? true : false); } else { $sql_ary = array('revision_id' => $revision_id, 'contrib_id' => $row['contrib_id'], 'phpbb_version_branch' => $row['revision_phpbb_version'][0] == '3' ? 30 : 20, 'phpbb_version_revision' => get_real_revision_version(substr($row['revision_phpbb_version'], 4)), 'revision_validated' => $row['queue_status'] == -1 ? true : false); } titania_insert(TITANIA_REVISIONS_PHPBB_TABLE, $sql_ary); // Update the contrib_last_update if ($row['queue_status'] == -1 || !titania::$config->require_validation) { $sql = 'UPDATE ' . TITANIA_CONTRIBS_TABLE . ' SET contrib_last_update = ' . (int) $row['revision_date'] . ' WHERE contrib_id = ' . (int) $row['contrib_id'] . ' AND contrib_last_update < ' . (int) $row['revision_date']; phpbb::$db->sql_query($sql); } } phpbb::$db->sql_freeresult($result); /** * QUEUE DISCUSSION ------------------------------------------------------------------------------------------------------------------------------ */