/** * @see XenForo_CacheRebuilder_DailyStats::rebuild() */ public function rebuild($position = 0, array &$options = array(), &$detailedMessage = '') { $options['batch'] = isset($options['batch']) ? $options['batch'] : 28; $options['batch'] = max(1, $options['batch']); /* @var $userModel XenForo_Model_Stats */ $statsModel = XenForo_Model::create('XenForo_Model_Stats'); if ($position == 0) { // delete old stats cache if required if (!empty($options['delete'])) { $statsModel->deleteStats(); } $xenOptions = XenForo_Application::get('options'); // an appropriate date from which to start... first thread, or earliest user reg? if ($xenOptions->th_noForo_noForum) { $position = XenForo_Model::create('XenForo_Model_User')->getEarliestRegistrationDate(); } else { $position = min(XenForo_Model::create('XenForo_Model_Thread')->getEarliestThreadDate(), XenForo_Model::create('XenForo_Model_User')->getEarliestRegistrationDate()); } // start on a 24 hour increment point $position = $position - $position % 86400; } else { if ($position > XenForo_Application::$time) { return true; } } XenForo_Db::beginTransaction(); $endPosition = $position + $options['batch'] * 86400; $data = $statsModel->buildStatsData($position, $endPosition); XenForo_Db::commit(); $detailedMessage = XenForo_Locale::date($position, 'absolute'); return $endPosition; }
public function execute(array $deferred, array $data, $targetRunTime, &$status) { $data = array_merge(array('position' => 0, 'batch' => 70), $data); $data['batch'] = max(1, $data['batch']); /* @var $userModel XenForo_Model_User */ $userModel = XenForo_Model::create('XenForo_Model_User'); /* @var $conversationModel XenForo_Model_Conversation */ $conversationModel = XenForo_Model::create('XenForo_Model_Conversation'); $userIds = $userModel->getUserIdsInRange($data['position'], $data['batch']); if (sizeof($userIds) == 0) { return true; } foreach ($userIds as $userId) { $data['position'] = $userId; /* @var $userDw XenForo_DataWriter_User */ $userDw = XenForo_DataWriter::create('XenForo_DataWriter_User', XenForo_DataWriter::ERROR_SILENT); if ($userDw->setExistingData($userId)) { XenForo_Db::beginTransaction(); $userDw->set('alerts_unread', $userModel->getUnreadAlertsCount($userId)); $userDw->set('conversations_unread', $conversationModel->countUnreadConversationsForUser($userId)); $userDw->save(); $userDw->rebuildUserGroupRelations(); $userDw->rebuildPermissionCombinationId(); $userDw->rebuildDisplayStyleGroupId(); $userDw->rebuildCustomFields(); $userDw->rebuildIgnoreCache(); XenForo_Db::commit(); } } $actionPhrase = new XenForo_Phrase('rebuilding'); $typePhrase = new XenForo_Phrase('users'); $status = sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, XenForo_Locale::numberFormat($data['position'])); return $data; }
/** * Rebuilds the data. * * @see XenForo_CacheRebuilder_Abstract::rebuild() */ public function rebuild($position = 0, array &$options = array(), &$detailedMessage = '') { $options = array_merge(array('batch' => 100, 'positionRebuild' => false), $options); /* @var $threadModel XenForo_Model_Thread */ $threadModel = XenForo_Model::create('XenForo_Model_Thread'); $threadIds = $threadModel->getThreadIdsInRange($position, $options['batch']); if (sizeof($threadIds) == 0) { return true; } XenForo_Db::beginTransaction(); foreach ($threadIds as $threadId) { $position = $threadId; $dw = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread', XenForo_DataWriter::ERROR_SILENT); if ($dw->setExistingData($threadId)) { $dw->setOption(XenForo_DataWriter_Discussion::OPTION_UPDATE_CONTAINER, false); if ($options['positionRebuild']) { $dw->rebuildDiscussion(); } else { $dw->rebuildDiscussionCounters(); } $dw->save(); } } XenForo_Db::commit(); $detailedMessage = XenForo_Locale::numberFormat($position); return $position; }
public function execute(array $deferred, array $data, $targetRunTime, &$status) { $data = array_merge(array('tagId' => null, 'position' => 0, 'deleteFirst' => false), $data); if (!$data['tagId']) { return false; } $db = XenForo_Application::getDb(); $matches = $db->fetchAll("\r\n\t\t\tSELECT tag_content_id, content_type, content_id\r\n\t\t\tFROM xf_tag_content\r\n\t\t\tWHERE tag_id = ?\r\n\t\t\t\tAND tag_content_id > ?\r\n\t\t\tORDER BY tag_content_id\r\n\t\t\tLIMIT 1000\r\n\t\t", array($data['tagId'], $data['position'])); if (!$matches) { return false; } /** @var XenForo_Model_Tag $tagModel */ $tagModel = XenForo_Model::create('XenForo_Model_Tag'); XenForo_Db::beginTransaction($db); $limitTime = $targetRunTime > 0; $s = microtime(true); foreach ($matches as $match) { $data['position'] = $match['tag_content_id']; if ($data['deleteFirst']) { $db->delete('xf_tag_content', 'tag_content_id = ' . $match['tag_content_id']); } $tagModel->rebuildTagCache($match['content_type'], $match['content_id']); if ($limitTime && microtime(true) - $s >= $targetRunTime) { break; } } XenForo_Db::commit($db); $actionPhrase = new XenForo_Phrase('rebuilding'); $typePhrase = new XenForo_Phrase('tags'); $status = sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, XenForo_Locale::numberFormat($data['position'])); return $data; }
public function execute(array $deferred, array $data, $targetRunTime, &$status) { $data = array_merge(array('position' => 0, 'batch' => 70), $data); $data['batch'] = max(1, $data['batch']); /* @var $postModel XenForo_Model_Post */ $postModel = XenForo_Model::create('XenForo_Model_Post'); $postIds = $postModel->getPostIdsInRange($data['position'], $data['batch']); if (sizeof($postIds) == 0) { return true; } foreach ($postIds as $postId) { $data['position'] = $postId; /* @var $postDw XenForo_DataWriter_DiscussionMessage_Post */ $postDw = XenForo_DataWriter::create('XenForo_DataWriter_DiscussionMessage_Post', XenForo_DataWriter::ERROR_SILENT); if ($postDw->setExistingData($postId)) { XenForo_Db::beginTransaction(); $postDw->rebuildPostVerseCache(); XenForo_Db::commit(); } } $actionPhrase = new XenForo_Phrase('rebuilding'); $typePhrase = new XenForo_Phrase('posts'); $status = sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, XenForo_Locale::numberFormat($data['position'])); return $data; }
public function execute(array $deferred, array $data, $targetRunTime, &$status) { return true; $data = array_merge(array('position' => 0, 'batch' => 10), $data); $data['batch'] = max(1, $data['batch']); /* @var $feedbackModel NixFifty_XenTrader_Model_Feedback */ $feedbackModel = XenForo_Model::create('NixFifty_XenTrader_Model_Feedback'); $feedbackItems = $feedbackModel->getUserIdsInFeedbackRange($data['position'], $data['batch']); if (sizeof($feedbackItems) == 0) { return true; } $db = XenForo_Application::getDb(); XenForo_Db::beginTransaction($db); foreach ($feedbackItems as $feedbackItem) { $data['position'] = $item['media_id']; $feedbackCount = $db->fetchOne(' SELECT COUNT(*) FROM xf_nixfifty_xentrader_feedback WHERE to_user_id = ? ', $feedbackItem); $db->update('xf_nixfifty_xentrader_user', array('total' => $feedbackCount), 'user_id = ' . $db->quote($feedbackItem)); } XenForo_Db::commit($db); $actionPhrase = new XenForo_Phrase('rebuilding'); $typePhrase = 'fam i think im broken'; //new XenForo_Phrase('xengallery_rebuild_thumbnails'); $status = sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, XenForo_Locale::numberFormat($data['position'])); return $data; }
/** * Rebuilds the data. * * @see XenForo_CacheRebuilder_Abstract::rebuild() */ public function rebuild($position = 0, array &$options = array(), &$detailedMessage = '') { $options['batch'] = isset($options['batch']) ? $options['batch'] : 75; $options['batch'] = max(1, $options['batch']); /* @var $userModel XenForo_Model_User */ $userModel = XenForo_Model::create('XenForo_Model_User'); /* @var $conversationModel XenForo_Model_Conversation */ $conversationModel = XenForo_Model::create('XenForo_Model_Conversation'); $userIds = $userModel->getUserIdsInRange($position, $options['batch']); if (sizeof($userIds) == 0) { return true; } XenForo_Db::beginTransaction(); foreach ($userIds as $userId) { $position = $userId; /* @var $userDw XenForo_DataWriter_User */ $userDw = XenForo_DataWriter::create('XenForo_DataWriter_User', XenForo_DataWriter::ERROR_SILENT); if ($userDw->setExistingData($userId)) { $userDw->set('alerts_unread', $userModel->getUnreadAlertsCount($userId)); $userDw->set('conversations_unread', $conversationModel->countUnreadConversationsForUser($userId)); $userDw->save(); $userDw->rebuildUserGroupRelations(); $userDw->rebuildPermissionCombinationId(); $userDw->rebuildDisplayStyleGroupId(); $userDw->rebuildIdentities(); } } XenForo_Db::commit(); $detailedMessage = XenForo_Locale::numberFormat($position); return $position; }
/** * Rebuilds the data. * * @see XenForo_CacheRebuilder_Abstract::rebuild() */ public function rebuild($position = 0, array &$options = array(), &$detailedMessage = '') { $options['batch'] = max(1, isset($options['batch']) ? $options['batch'] : 10); $socialForumModel = ThemeHouse_SocialGroups_SocialForum::getSocialForumModel(); if ($position == 0) { $socialForumModel->unlinkMovedThreads(); } $socialForums = $socialForumModel->getSocialForums(array(), array('limit' => $options['batch'], 'offset' => $position)); XenForo_Db::beginTransaction(); foreach ($socialForums as $socialForum) { $position++; /* @var $socialForumDw ThemeHouse_SocialGroups_DataWriter_SocialForum */ $socialForumDw = XenForo_DataWriter::create('ThemeHouse_SocialGroups_DataWriter_SocialForum', XenForo_DataWriter::ERROR_SILENT); if ($socialForumDw->setExistingData($socialForum, true)) { $socialForumDw->rebuildCounters(); $socialForumDw->save(); } } XenForo_Db::commit(); $detailedMessage = XenForo_Locale::numberFormat($position); if (!$socialForums) { return true; } else { return $position; } }
public static function initiate($method, array $args) { if (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 50307) { throw new GFNCore_Exception('This add-on does not support PHP versions lesser than 5.3.7', true); } if ($method == 'install' && !empty($args[0])) { $job = 'upgrade'; } else { $job = $method; } /** @var GFNCore_Installer_Abstract $obj */ $obj = new static(); $obj->setJob($job); if ($method == 'install') { $obj->setNewData($args[1]); $obj->setXml($args[2]); } if (in_array($job, array('upgrade', 'uninstall'))) { $obj->setExistingData($args[0]); } $class = 'GFNCore_Installer_Controller_' . ucfirst($job); XenForo_Db::beginTransaction(); try { /** @var GFNCore_Installer_Controller_Abstract $controller */ $controller = new $class($obj); $controller->execute(); } catch (Exception $e) { XenForo_Db::rollback(); throw $e; } XenForo_Db::commit(); $style = new GFNCore_Installer_Handler_Style(); $style->handle($obj->getData()->addon_id); }
/** * Rebuilds the data. * * @see XenForo_CacheRebuilder_Abstract::rebuild() */ public function rebuild($position = 0, array &$options = array(), &$detailedMessage = '') { $options['batch'] = max(1, isset($options['batch']) ? $options['batch'] : 10); if ($position == 0) { XenForo_Model::create('XenForo_Model_Node')->updateNestedSetInfo(); } /* @var $forumModel XenForo_Model_Forum */ $forumModel = XenForo_Model::create('XenForo_Model_Forum'); $forums = $forumModel->getForums(array(), array('limit' => $options['batch'], 'offset' => $position)); XenForo_Db::beginTransaction(); foreach ($forums as $forum) { $position++; $forumDw = XenForo_DataWriter::create('XenForo_DataWriter_Forum', XenForo_DataWriter::ERROR_SILENT); if ($forumDw->setExistingData($forum, true)) { $forumDw->rebuildCounters(); $forumDw->save(); } } XenForo_Db::commit(); $detailedMessage = XenForo_Locale::numberFormat($position); if (!$forums) { return true; } else { return $position; } }
public function execute(array $deferred, array $data, $targetRunTime, &$status) { $data = array_merge(array('position' => 0, 'batch' => 10), $data); $data['batch'] = max(1, $data['batch']); /* @var $albumModel XenGallery_Model_Album */ $albumModel = XenForo_Model::create('XenGallery_Model_Album'); $albumIds = $albumModel->getSharedAlbumIdsInRange($data['position'], $data['batch']); if (sizeof($albumIds) == 0) { return true; } $db = XenForo_Application::getDb(); XenForo_Db::beginTransaction($db); foreach ($albumIds as $albumId) { $data['position'] = $albumId; $album = $albumModel->getAlbumByIdSimple($albumId); $bind = array($album['album_id'], $album['album_user_id']); $ownerShared = $db->fetchOne('SELECT shared_user_id FROM xengallery_shared_map WHERE album_id = ? AND shared_user_id = ?', $bind); if (!$ownerShared) { $db->query(' INSERT IGNORE INTO xengallery_shared_map (album_id, shared_user_id) VALUES (?, ?) ', $bind); } } XenForo_Db::commit($db); $actionPhrase = new XenForo_Phrase('rebuilding'); $typePhrase = new XenForo_Phrase('xengallery_album_permissions'); $status = sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, XenForo_Locale::numberFormat($data['position'])); return $data; }
/** * @param int $position * @param array $options * @param string $detailedMessage * @return bool|int|string|true */ public function rebuild($position = 0, array &$options = array(), &$detailedMessage = '') { $options['batch'] = max(1, isset($options['batch']) ? $options['batch'] : 10); /* @var sonnb_XenGallery_Model_Location $locationModel */ $locationModel = XenForo_Model::create('sonnb_XenGallery_Model_Location'); $locations = $locationModel->getLocationsWithoutCoordinate($position, $options['batch']); if (count($locations) < 1) { return true; } XenForo_Db::beginTransaction(); $db = XenForo_Application::getDb(); /** @var sonnb_XenGallery_Model_Location $locationModel */ $locationModel = XenForo_Model::create('sonnb_XenGallery_Model_Location'); foreach ($locations as $locationId => $location) { $position = $location['location_id']; try { $client = XenForo_Helper_Http::getClient($locationModel->getGeocodeUrlForAddress($location['location_name'])); $response = $client->request('GET'); $response = @json_decode($response->getBody(), true); if (empty($response['results'][0])) { continue; } $address = $response['results'][0]['formatted_address']; $lat = $response['results'][0]['geometry']['location']['lat']; $lng = $response['results'][0]['geometry']['location']['lng']; $db->update('sonnb_xengallery_location', array('location_name' => $address, 'location_lat' => $lat, 'location_lng' => $lng), array('location_id = ?' => $location['location_id'])); } catch (Exception $e) { continue; } } XenForo_Db::commit(); $detailedMessage = XenForo_Locale::numberFormat($position); return $position; }
public function updateOptions($input) { $dbOptions = $this->getOptionsByBlock($input['block_id']); $db = $this->_getDb(); XenForo_Db::beginTransaction($db); foreach ($dbOptions as $dbOption) { $newValue = $input['options'][$dbOption['option_id']]; if (is_array($newValue)) { $newValue = serialize($newValue); } $dw = XenForo_DataWriter::create('EWRporta_DataWriter_Options'); $dw->setExistingData($dbOption, true); $dw->set('option_value', $newValue); $dw->save(); } $dw2 = XenForo_DataWriter::create('EWRporta_DataWriter_Blocks'); $dw2->setExistingData($input); $dw2->set('display', $input['display']); $dw2->set('cache', $input['cache']); $dw2->set('locked', $input['locked']); $dw2->set('groups', implode(',', $input['groups'])); $dw2->save(); XenForo_Db::commit($db); return $input; }
public static function uninstall() { //Get the db $db = XenForo_Application::getDb(); XenForo_Db::beginTransaction($db); //Drop the custom tables from the db try { $db->query("\n\t\t\t DROP TABLE IF EXISTS `xf_thread_rating`\n\t\t "); } catch (Zend_Db_Exception $e) { } //Drop the `rating_count` field from the thread table try { $db->query("\n\t\t\t\tALTER TABLE xf_thread\n\t\t\t\t\tDROP COLUMN `rating_count`\n\t\t\t"); } catch (Zend_Db_Exception $e) { } //Drop the `rating_sum` field from the thread table try { $db->query("\n\t\t\t\tALTER TABLE xf_thread\n\t\t\t\t\tDROP COLUMN `rating_sum`\n\t\t\t"); } catch (Zend_Db_Exception $e) { } //Drop the `rating_avg` field from the thread table try { $db->query("\n\t\t\t\tALTER TABLE xf_thread\n\t\t\t\t\tDROP COLUMN `rating_avg`\n\t\t\t"); } catch (Zend_Db_Exception $e) { } XenForo_Db::commit($db); }
/** * Gives a user the specified promotion. * * @param array $promotion * @param integer $userId * @param string $state Type of promotion (automatic, manual); this affects * automatic demotion * @param integer $endDate */ public function promoteUserWithEndDate(array $promotion, $userId, $state = 'automatic', $endDate) { $db = $this->_getDb(); XenForo_Db::beginTransaction($db); $this->_getUserModel()->addUserGroupChange($userId, "ugPromotion{$promotion['promotion_id']}", $promotion['extra_user_group_ids']); $this->insertPromotionLogEntryWithEndDate($promotion['promotion_id'], $userId, $state, $endDate); XenForo_Db::commit($db); }
public static function uninstaller() { $db = self::_getDb(); XenForo_Db::beginTransaction($db); if (self::_doesIndexExist()) { self::_dropIndex(); } XenForo_Db::commit($db); }
public function run($addonId, $path) { $addonModel = XenForo_Model::create('XenForo_Model_AddOn'); $this->printMessage('Importing ' . $addonId . ' from ' . realPath($path) . '...'); $print = 'importing addon.xml...'; $print .= str_repeat(' ', $this->_column - strlen($print)); $t = microtime(true); $m = memory_get_usage(true); $this->printMessage($print, false); $xml = new SimpleXMLElement($path . '/addon.xml', 0, true); $addOnData = array('addon_id' => (string) $xml['addon_id'], 'title' => (string) $xml['title'], 'version_string' => (string) $xml['version_string'], 'version_id' => (string) $xml['version_id'], 'install_callback_class' => (string) $xml['install_callback_class'], 'install_callback_method' => (string) $xml['install_callback_method'], 'uninstall_callback_class' => (string) $xml['uninstall_callback_class'], 'uninstall_callback_method' => (string) $xml['uninstall_callback_method'], 'url' => (string) $xml['url']); $version = file_get_contents($path . '/version.txt'); if ($version) { foreach ($addOnData as &$data) { $data = str_replace('{@revision}', $version, $data); } } $addOnData['version_id'] = (int) $addOnData['version_id']; $existingAddOn = $addonModel->verifyAddOnIsInstallable($addOnData, $addonModel->getAddonById($addonId) ? $addonId : false); $db = XenForo_Application::getDb(); XenForo_Db::beginTransaction($db); if ($addOnData['install_callback_class'] && $addOnData['install_callback_method']) { call_user_func(array($addOnData['install_callback_class'], $addOnData['install_callback_method']), $existingAddOn, $addOnData); } $addOnDw = XenForo_DataWriter::create('XenForo_DataWriter_AddOn'); if ($existingAddOn) { $addOnDw->setExistingData($existingAddOn, true); } $addOnDw->bulkSet($addOnData); $addOnDw->save(); $t = abs(microtime(true) - $t); $m = abs(memory_get_usage(true) - $m); $m = $m / 1024 / 1024; $this->printMessage('done (' . number_format($t, 2) . 'sec, ' . number_format($m, 2) . 'mb)'); $this->_importXml($addonId, $path . '/admin_navigation.xml', 'AdminNavigation'); $this->_importXml($addonId, $path . '/admin_permissions.xml', 'Admin', 'importAdminPermissionsAddOnXml'); $this->_importXml($addonId, $path . '/code_events.xml', 'CodeEvent', 'importEventsAddOnXml'); $this->_importXml($addonId, $path . '/code_event_listeners.xml', 'CodeEvent', 'importEventListenersAddOnXml'); $this->_importXml($addonId, $path . '/cron.xml', 'Cron', 'importCronEntriesAddOnXml'); $this->_importXml($addonId, $path . '/email_templates.xml', 'EmailTemplate'); $this->_importXml($addonId, $path . '/options.xml', 'Option'); $this->_importXml($addonId, $path . '/permissions.xml', 'Permission'); $this->_importXml($addonId, $path . '/route_prefixes.xml', 'RoutePrefix', 'importPrefixesAddOnXml'); $this->_importXml($addonId, $path . '/style_properties.xml', 'StyleProperty', 'importStylePropertyXml', array(0, $addonId)); $this->_importXml($addonId, $path . '/admin_style_properties.xml', 'StyleProperty', 'importStylePropertyXml', array(-1, $addonId)); foreach (array('templates/admin', 'templates/master', 'phrases') as $dir) { $this->_removeDirectory(XenForo_Application::getInstance()->getRootDir() . '/' . $dir . '/' . $addonId); } $this->_importXml($addonId, $path . '/templates.xml', 'Template'); $this->_importXml($addonId, $path . '/admin_templates.xml', 'AdminTemplate'); $this->_importXml($addonId, $path . '/phrases.xml', 'Phrase'); // TODO: bbcode XenForo_Db::commit($db); $this->printEmptyLine(); $this->manualRun('rebuild', false, false, array('caches' => 'addon')); }
public function resetLayout($layout) { $db = $this->_getDb(); XenForo_Db::beginTransaction($db); $dw = XenForo_DataWriter::create('EWRporta_DataWriter_Layouts'); $dw->setExistingData($layout); $dw->delete(); XenForo_Db::commit($db); return true; }
public function rebuildUnreadConversationCountForUser($userId) { if (SV_DeadlockAvoidance_DataWriter::registerPostTransactionClosure(function () use($userId) { XenForo_Db::beginTransaction(); parent::rebuildUnreadConversationCountForUser($userId); XenForo_Db::commit(); })) { return; } parent::rebuildUnreadConversationCountForUser($userId); }
public function deleteCategory($category) { $db = $this->_getDb(); XenForo_Db::beginTransaction($db); $dw = XenForo_DataWriter::create('EWRporta_DataWriter_Categories'); $dw->setExistingData($category); $dw->delete(); $db->query("\r\n\t\t\tDELETE FROM EWRporta_catlinks\r\n\t\t\tWHERE category_id = ?\r\n\t\t", $category['category_id']); XenForo_Db::commit($db); return true; }
/** * Imports a smilie XML file. * * @param SimpleXMLElement $document * @param string $smilieGroupId * @param integer $overwriteSmilieId * * @return array List of cache rebuilders to run */ public function importSmiliesXml(SimpleXMLElement $document, $overwrite = 0) { if ($document->getName() != 'smilies') { throw new XenForo_Exception(new XenForo_Phrase('waindigo_provided_file_is_not_valid_smilie_xml_smilieimporter'), true); } $smilies = XenForo_Helper_DevelopmentXml::fixPhpBug50670($document->smilie); $db = $this->_getDb(); /* @var $smilie SimpleXMLElement */ XenForo_Db::beginTransaction($db); foreach ($smilies as $smilie) { $smilieText = XenForo_Helper_DevelopmentXml::processSimpleXmlCdata($smilie->smilie_text); $existing = $this->getSmiliesByText($smilieText); $updateText = array(); foreach ($existing as $text => $existingSmilie) { if ($overwrite) { if (isset($updateText[$existingSmilie['smilie_id']])) { $existingSmilie['smilie_text'] = $updateText[$existingSmilie['smilie_id']]; } $existingSmilie['smilie_text'] = preg_split('/\\R/m', $existingSmilie['smilie_text']); unset($existingSmilie['smilie_text'][array_search($text, $existingSmilie['smilie_text'])]); if (!empty($existingSmilie['smilie_text'])) { $updateText[$existingSmilie['smilie_id']] = implode(PHP_EOL, $existingSmilie['smilie_text']); } else { $dw = XenForo_DataWriter::create('XenForo_DataWriter_Smilie', XenForo_DataWriter::ERROR_SILENT); $dw->setExistingData($existingSmilie['smilie_id']); $dw->delete(); } } else { $smilieText = preg_split('/\\R/m', $smilieText); if (in_array($text, $smilieText)) { unset($smilieText[array_search($text, $smilieText)]); } $smilieText = implode(PHP_EOL, $smilieText); if (!trim($smilieText)) { continue; } } } foreach ($updateText as $smilieId => $updateTextItem) { $dw = XenForo_DataWriter::create('XenForo_DataWriter_Smilie', XenForo_DataWriter::ERROR_SILENT); $dw->setExistingData($smilieId); $dw->set('smilie_text', $updateTextItem); $dw->save(); } if (!trim($smilieText)) { continue; } $dw = XenForo_DataWriter::create('XenForo_DataWriter_Smilie', XenForo_DataWriter::ERROR_SILENT); $spriteParams = array('h' => (string) $smilie['h'], 'w' => (string) $smilie['w'], 'x' => (string) $smilie['x'], 'y' => (string) $smilie['y']); $dw->bulkSet(array('title' => XenForo_Helper_DevelopmentXml::processSimpleXmlCdata($smilie->title), 'image_url' => XenForo_Helper_DevelopmentXml::processSimpleXmlCdata($smilie->image_url), 'smilie_text' => $smilieText, 'sprite_mode' => (string) $smilie['sprite_mode'], 'sprite_params' => $spriteParams)); $dw->save(); } XenForo_Db::commit($db); }
public function deleteUserRecords($userId) { $records = $this->getPurchases(array('user_id' => $userId)); XenForo_Db::beginTransaction(); foreach ($records as $record) { $dw = XenForo_DataWriter::create('bdPaygate_DataWriter_Purchase'); $dw->setExistingData($record, true); $dw->delete(); } XenForo_Db::commit(); return count($records); }
public function stepFriends($start, array $options) { $options = array_merge(array('limit' => 100, 'max' => false), $options); $sDb = $this->_sourceDb; $prefix = $this->_prefix; /* @var $model XenForo_Model_Import */ $model = $this->_importModel; if ($options['max'] === false) { $options['max'] = $sDb->fetchOne(' SELECT MAX(userid) FROM ' . $prefix . 'userlist '); } $friends = $sDb->fetchAll($sDb->limit(' SELECT * FROM ' . $prefix . 'userlist AS userlist WHERE userlist.userid > ' . $sDb->quote($start) . ' AND userlist.type = \'buddy\' AND userlist.friend IN (\'yes\', \'pending\') ORDER BY userlist.userid ', $options['limit'])); if (!$friends) { return true; } $next = 0; $total = 0; XenForo_Db::beginTransaction(); foreach ($friends as $friend) { $next = $friend['userid']; $userId = $model->mapUserId($friend['userid'], 0); $friendUserId = $model->mapUserId($friend['relationid'], 0); if (!$userId || !$friendUserId) { continue; } /* @var $userModel XenForo_Model_User */ $userModel = XenForo_Model::create('XenForo_Model_User'); $friendRecord = $userModel->getFriendRecord($userId, $friendUserId); $dw = XenForo_DataWriter::create('ThemeHouse_Friends_DataWriter_Friend'); if ($friendRecord) { $dw->setExistingData($friendRecord); } else { $dw->set('user_id', $userId); $dw->set('friend_user_id', $friendUserId); $dw->set('message', 'n/a'); } $dw->set('friend_state', $friend['friend'] == 'pending' ? 'pending' : 'confirmed'); $dw->save(); $total++; } XenForo_Db::commit(); $this->_session->incrementStepImportTotal($total); return array($next, $options, $this->_getProgressOutput($next, $options['max'])); }
/** * Updates the given set of user titles. The set is assumed to be all user titles, * as the existing ones are removed before updating. * * @param array $titles [] => [title, minimum_level] * @param boolean $rebuildCache If true, rebuilds the user title cache */ public function updateUserTitleLadder(array $titles, $rebuildCache = true) { $db = $this->_getDb(); XenForo_Db::beginTransaction($db); $db->delete('xf_user_title_ladder'); foreach ($titles as $titleInfo) { if (isset($titleInfo['title'], $titleInfo['minimum_level'])) { $this->insertUserTitleLadderEntry($titleInfo['title'], $titleInfo['minimum_level'], false); } } if ($rebuildCache) { $this->rebuildUserTitleLadderCache(); } XenForo_Db::commit($db); }
public function actionDelete() { $id = $this->_input->filterSingle('tag_id', XenForo_Input::UINT); $tag = $this->_getTagOrError($id); if ($this->isConfirmedPost()) { XenForo_Db::beginTransaction(); $dw = $this->_getTagDataWriter(); $dw->setExistingData($id); $dw->delete(); XenForo_Db::commit(); return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildAdminLink('xentag-tags')); } else { $viewParams = array('tag' => $tag); return $this->responseView('Tinhte_XenTag_ViewAdmin_Tag_Delete', 'tinhte_xentag_tag_delete', $viewParams); } }
public function importListenersXml(SimpleXMLElement $xml, $blockId) { $db = $this->_getDb(); XenForo_Db::beginTransaction($db); $this->deleteListenersByBlock($blockId); $listeners = XenForo_Helper_DevelopmentXml::fixPhpBug50670($xml->listener); foreach ($listeners as $event) { $eventId = (string) $event['event_id']; $dw = XenForo_DataWriter::create('XenForo_DataWriter_CodeEventListener'); $dw->setOption(XenForo_DataWriter_CodeEventListener::OPTION_REBUILD_CACHE, false); $dw->bulkSet(array('event_id' => (string) $event['event_id'], 'execute_order' => (string) $event['execute_order'], 'callback_class' => (string) $event['callback_class'], 'callback_method' => (string) $event['callback_method'], 'active' => (string) $event['active'], 'description' => (string) $event['description'])); $dw->save(); } $this->getModelFromCache('XenForo_Model_CodeEvent')->rebuildEventListenerCache(); XenForo_Db::commit($db); return; }
public function importAdminTemplatesXml(SimpleXMLElement $xml, $blockId) { $existingAdminTemplates = $this->getAdminTemplatesByBlock($blockId); $db = $this->_getDb(); XenForo_Db::beginTransaction($db); foreach ($xml->template as $template) { $templateName = (string) $template['title']; $dw = XenForo_DataWriter::create('XenForo_DataWriter_AdminTemplate'); if (isset($existingAdminTemplates[$templateName])) { $dw->setExistingData($existingAdminTemplates[$templateName], true); } $dw->bulkSet(array('title' => $templateName, 'template' => XenForo_Helper_DevelopmentXml::processSimpleXmlCdata($template))); $dw->save(); } XenForo_Db::commit($db); return; }
public function logCacheByTab($tabId, $userId, $viewParams) { $cacheData = serialize($viewParams); $db = $this->_getDb(); XenForo_Db::beginTransaction($db); $result = $db->query(' INSERT IGNORE INTO xf_brivium_modern_caches (tab_id, user_id, date, params) VALUES (?, ?, ?, ?) ', array($tabId, $userId, $cacheData, XenForo_Application::$time)); if (!$result->rowCount()) { $updateArray = array('params' => $cacheData, 'date' => XenForo_Application::$time); $db->update('xf_brivium_modern_caches', $updateArray, '`tab_id` = ' . $db->quote($tabId) . ' AND `user_id` = ' . $db->quote($userId)); } XenForo_Db::commit($db); }
public function importPhrasesXml(SimpleXMLElement $xml, $blockId) { $existingPhrases = $this->getPhrasesByBlock($blockId); $db = $this->_getDb(); XenForo_Db::beginTransaction($db); $phrases = XenForo_Helper_DevelopmentXml::fixPhpBug50670($xml->phrase); foreach ($phrases as $phrase) { $phraseName = (string) $phrase['title']; $dw = XenForo_DataWriter::create('XenForo_DataWriter_Phrase'); if (isset($existingPhrases[$phraseName])) { $dw->setExistingData($existingPhrases[$phraseName], true); } $dw->bulkSet(array('language_id' => '0', 'title' => $phraseName, 'phrase_text' => (string) $phrase)); $dw->save(); } XenForo_Db::commit($db); return; }
public function expireTempUserChange(array $change) { $userId = $change['user_id']; $actionType = $change['action_type']; $actionModifier = $change['action_modifier']; if ($actionType != 'custom_field') { return parent::expireTempUserChange($change); } /** * * @var XenForo_DataWriter_User $dw */ $dw = XenForo_DataWriter::create('XenForo_DataWriter_User', XenForo_DataWriter::ERROR_SILENT); if (!$dw->setExistingData($userId)) { return false; } $db = $this->_getDb(); XenForo_Db::beginTransaction($db); $res = $db->query("\r\n\t\t\tDELETE FROM xf_user_change_temp\r\n\t\t\tWHERE user_change_temp_id = ?\r\n\t\t", $change['user_change_temp_id']); if (!$res->rowCount()) { // already deleted XenForo_Db::rollback($db); return false; } switch ($actionType) { case 'custom_field': $customFields = @unserialize($dw->get('custom_fields')); $currentValue = isset($customFields[$actionModifier]) ? $customFields[$actionModifier] : ''; // if the field was changed to the current value, revert it // to the most recent new value or the original value if none if ($currentValue === $change['new_value']) { $lastChange = $db->fetchRow("\r\n\t\t\t\t\t\tSELECT *\r\n\t\t\t\t\t\tFROM xf_user_change_temp\r\n\t\t\t\t\t\tWHERE user_id = ?\r\n\t\t\t\t\t\t\tAND action_type = 'custom_field'\r\n\t\t\t\t\t\t\tAND action_modifier = ?\r\n\t\t\t\t\t\tORDER BY create_date DESC\r\n\t\t\t\t\t\tLIMIT 1\r\n\t\t\t\t\t", array($userId, $actionModifier)); $oldValue = $lastChange ? $lastChange['new_value'] : $change['old_value']; $fieldValues[$actionModifier] = $oldValue; $fieldsShown = array_keys($fieldValues); $dw->setCustomFields($fieldValues, $fieldsShown); if ($dw->isChanged('custom_fields')) { $dw->save(); } } } XenForo_Db::commit($db); return true; }