/** * Update title and metadata for videos with titles not in normalized NFC form * * @param stdClass $video * @param DatabaseMysql $db * @param bool $test * @param bool $verbose */ protected static function updateVideo($video, DatabaseMysql $db, $test, $verbose) { $originalName = $video->img_name; // image.img_name & video_info.video_title $name = \UtfNormal::toNFC($originalName); if ($name == $originalName) { echo "No change detected. Skipped conversion for: {$originalName}\n"; return; } // This is also required because PHP unserialize fails otherwise $metadata = self::getNormalizedMetadata($video); $affectedImage = 'NOT'; $affectedVideoInfo = 'NOT'; if (!$test) { $sql = new WikiaSQL(); $sql->UPDATE('image')->SET('img_name', $name)->SET('img_metadata', $metadata)->WHERE('img_name')->EQUAL_TO($originalName)->run($db); $affectedImage = $db->affectedRows() ? '' : 'NOT'; $sql = new WikiaSQL(); $sql->UPDATE('video_info')->SET('video_title', $name)->WHERE('video_title')->EQUAL_TO($originalName)->run($db); $affectedVideoInfo = $db->affectedRows() ? '' : 'NOT'; } echo "image {$affectedImage} updated, " . "video_info {$affectedVideoInfo} updated " . "for: {$originalName} img_sha1: {$video->img_sha1}\n"; if ($verbose) { echo "\tNew title: {$name}" . "\n\tNew metadata: {$metadata}\n"; } }
/** * Fetches user ids from statsDB from last period determined by prepareTimeCondition function * @param DatabaseBase $oStatsDBr * @param string $sStartDate e.g. 2014-12-31 * @return array of user ids */ private function getListOfUsersIdsEdited(DatabaseBase $oStatsDBr, $sStartDate) { // Get user edits $oWikiaSQL = new WikiaSQL(); $oWikiaSQL->SELECT()->DISTINCT('user_id')->FROM('rollup_wiki_user_events')->WHERE('time_id')->GREATER_THAN($sStartDate)->AND_('period_id')->EQUAL_TO(DataMartService::PERIOD_ID_DAILY)->AND_('user_id')->NOT_EQUAL_TO(0); $aUsersIdsDidEdit = $oWikiaSQL->runLoop($oStatsDBr, function (&$aUsersIdsDidEdit, $oUsersIdsDidEdit) { $aUsersIdsDidEdit[] = $oUsersIdsDidEdit->user_id; }); return $aUsersIdsDidEdit; }
/** * Fetches user edits from statsDB from last period determined by prepareTimeCondition function * e.g. result * [ 12345 => [ 177 => 5 ] ]; It means user 12345 made 5 edits on 177 wiki * @param DatabaseBase $oStatsDBr * @param string $sStartDate e.g. 2014-12-31 * @param boolean|ResultWrapper $oUsersListResult * @return array of number of edits with merged key consisted of user_id and wiki_id * e.g. * [ * '12345@177' => 3, * '15432@177' => 2 * ] * Means user 12345 edited 3 times on 177 wikia and user 15432 edited 2 times on 177 wikia */ private function getUserEdits(DatabaseBase $oStatsDBr, $sStartDate) { // Get user edits $oWikiaSQL = new WikiaSQL(); $oWikiaSQL->SELECT('user_id')->FIELD('wiki_id')->FIELD('sum( edits ) + sum( creates )')->AS_('editcount')->FROM('rollup_wiki_user_events')->WHERE('time_id')->GREATER_THAN($sStartDate)->AND_('period_id')->EQUAL_TO(DataMartService::PERIOD_ID_DAILY)->AND_('user_id')->NOT_EQUAL_TO(0)->GROUP_BY('wiki_id')->GROUP_BY('user_id'); $aUsersEditsData = $oWikiaSQL->runLoop($oStatsDBr, function (&$aUserResult, $oUserEditCountWikiResult) { $sMergedKey = $this->mergeKey($oUserEditCountWikiResult->user_id, $oUserEditCountWikiResult->wiki_id); $aUserResult[$sMergedKey] = intval($oUserEditCountWikiResult->editcount); }); return $aUsersEditsData; }