public function process(array $documents, &$context) { $franchiseIds = []; $franchiseIds[] = self::mediaToKey($context->media); foreach ($context->relationData as $relation) { if ($relation['media'] != $context->media->media) { continue; } if ($relation['type'] == MediaRelation::Character) { continue; } if (BanHelper::isFranchiseCouplingBanned($relation['media'], $relation['mal_id'], $context->media->media, $context->media->mal_id)) { continue; } $franchiseIds[] = self::mediaToKey($relation); } foreach (R::findAll('media', 'media||mal_id IN (' . R::genSlots($franchiseIds) . ')', $franchiseIds) as $relatedMedia) { $franchiseIds[] = $relatedMedia->franchise; } $franchiseId = reset($franchiseIds); $media =& $context->media; $media->franchise = $franchiseId; R::store($media); $query = 'UPDATE media SET franchise = ? WHERE franchise IN (' . R::genSlots($franchiseIds) . ')'; R::exec($query, array_merge([$franchiseId], $franchiseIds)); }
public static function preWork(&$controllerContext, &$viewContext) { $controllerContext->cache->setPrefix($controllerContext->userName); if (BanHelper::getUserBanState($controllerContext->userName) == BanHelper::USER_BAN_TOTAL) { $controllerContext->cache->bypass(true); $viewContext->userName = $controllerContext->userName; $viewContext->viewName = 'error-user-blocked'; $viewContext->meta->title = 'User blocked — ' . Config::$title; return; } $module = $controllerContext->module; HttpHeadersHelper::setCurrentHeader('Content-Type', $module::getContentType()); $viewContext->media = $controllerContext->media; $viewContext->module = $controllerContext->module; $viewContext->meta->noIndex = true; $viewContext->contentType = $module::getContentType(); if ($viewContext->contentType != 'text/html') { $viewContext->layoutName = 'layout-raw'; } Database::selectUser($controllerContext->userName); $user = R::findOne('user', 'LOWER(name) = LOWER(?)', [$controllerContext->userName]); if (empty($user)) { if (!isset($_GET['referral']) || $_GET['referral'] !== 'search') { $controllerContext->cache->bypass(true); $viewContext->userName = $controllerContext->userName; $viewContext->viewName = 'error-user-not-found'; $viewContext->meta->title = 'User not found — ' . Config::$title; return; } $queue = new Queue(Config::$userQueuePath); $queueItem = new QueueItem(strtolower($controllerContext->userName)); $queue->enqueue($queueItem); $viewContext->queuePosition = $queue->seek($queueItem); $controllerContext->cache->bypass(true); //try to load cache, if it exists $url = $controllerContext->url; if ($controllerContext->cache->exists($url)) { $controllerContext->cache->load($url); flush(); $viewContext->layoutName = null; $viewContext->viewName = null; return; } $viewContext->userName = $controllerContext->userName; $viewContext->viewName = 'error-user-enqueued'; $viewContext->meta->title = 'User enqueued — ' . Config::$title; return; } $viewContext->user = $user; $viewContext->meta->styles[] = '/media/css/menu.css'; $viewContext->updateWait = Config::$userQueueMinWait; $module = $controllerContext->module; $module::preWork($controllerContext, $viewContext); }
public static function doInit() { $list = TextHelper::loadSimpleList(Config::$bannedUsersListPath); foreach ($list as $line) { $tmp = strpos($line, "\t") === false ? [$line, self::USER_BAN_TOTAL] : explode("\t", $line); list($userName, $banType) = $tmp; self::$bannedUsers[strtolower($userName)] = $banType; } self::$bannedGenres = TextHelper::loadSimpleList(Config::$bannedGenresListPath); self::$bannedCreators = TextHelper::loadSimpleList(Config::$bannedCreatorsListPath); self::$bannedGenresForRecs = TextHelper::loadSimpleList(Config::$bannedGenresForRecsListPath); self::$bannedFranchiseCoupling = TextHelper::loadJson(Config::$bannedFranchiseCouplingListPath, true); }
public static function work(&$controllerContext, &$viewContext) { $queue = new Queue(Config::$userQueuePath); $queueItem = new QueueItem(strtolower($controllerContext->userName)); $user = R::findOne('user', 'LOWER(name) = LOWER(?)', [$controllerContext->userName]); $profileAge = time() - strtotime($user->processed); $banned = BanHelper::getUserBanState($controllerContext->userName) != BanHelper::USER_BAN_NONE; if ($profileAge > Config::$userQueueMinWait and !$banned && Config::$enqueueEnabled) { $queue->enqueue($queueItem); } $j['user'] = $controllerContext->userName; $j['pos'] = $queue->seek($queueItem); $viewContext->layoutName = 'layout-json'; $viewContext->json = $j; }
private static function filterBannedGenres($selectedEntries) { Model_MixedUserMedia::attachGenres($selectedEntries); $finalEntries = []; foreach ($selectedEntries as $key => $entry) { $add = true; foreach ($entry->genres as $genre) { if (BanHelper::isGenreBannedForRecs($entry->media, $genre->mal_id)) { $add = false; break; } } if ($add) { $finalEntries[$key] = $entry; } } return $finalEntries; }
public static function work(&$controllerContext, &$viewContext) { try { if (empty($_POST['sender'])) { throw new Exception('No sender specified'); } $sender = $_POST['sender']; if (empty($_POST['action'])) { throw new Exception('No action specified'); } $action = $_POST['action']; if (empty($_POST['model-ids'])) { throw new Exception('No model ids specified'); } $modelIds = array_map('trim', preg_split('/[,;]/', $_POST['model-ids'])); $chosenMedia = []; $chosenUsers = []; switch ($sender) { case 'media': $chosenMedia = self::getChosenMedia($modelIds); break; case 'user': $chosenUsers = self::getChosenUsers($modelIds); break; default: throw new Exception('Unknown sender: ' . $sender); } if ($action == 'refresh') { $num = 0; $startTime = microtime(true); $mediaProcessors = [Media::Anime => new AnimeProcessor(), Media::Manga => new MangaProcessor()]; $userProcessor = new UserProcessor(); foreach ($chosenMedia as $media => $ids) { foreach ($ids as $id) { $mediaProcessors[$media]->process($id); ++$num; } } foreach ($chosenUsers as $user) { $userProcessor->process($user); ++$num; } $viewContext->messageType = 'info'; $viewContext->message = sprintf('Successfully processed %d entities in %.02fs', $num, microtime(true) - $startTime); } elseif ($action == 'wipe-cache') { $deleted = 0; foreach ($chosenUsers as $userName) { $cache = new Cache(); $cache->setPrefix($userName); foreach ($cache->getAllFiles() as $path) { $deleted++; unlink($path); } } $viewContext->messageType = 'info'; $viewContext->message = 'Deleted ' . $deleted . ' files'; } elseif ($action == 'unban' or $action == 'soft-ban' or $action == 'hard-ban') { switch ($action) { case 'unban': $banState = BanHelper::USER_BAN_NONE; break; case 'soft-ban': $banState = BanHelper::USER_BAN_QUEUE_ONLY; break; case 'hard-ban': $banState = BanHelper::USER_BAN_TOTAL; break; default: throw new Exception('Wrong ban state'); } $changed = 0; foreach ($chosenUsers as $userName) { BanHelper::setUserBanState($userName, $banState); ++$changed; } $viewContext->messageType = 'info'; $viewContext->message = sprintf('Successfully updated %d users', $changed); } elseif ($action == 'reset-franchise') { $num = 0; foreach ($chosenMedia as $media => $ids) { $query = 'UPDATE media SET franchise = NULL WHERE media = ? AND mal_id IN (' . R::genSlots($ids) . ')'; R::exec($query, array_merge([$media], $ids)); $num += count($ids); } $viewContext->messageType = 'info'; $viewContext->message = sprintf('Successfully reset franchise for %d entities. Don\'t forget to refresh them now!', $num); } elseif ($action == 'remove') { $num = 0; foreach ($chosenMedia as $media => $ids) { $query = 'DELETE FROM media WHERE media = ? AND mal_id IN (' . R::genSlots($ids) . ')'; R::exec($query, array_merge([$media], $ids)); $num += count($ids); } $viewContext->messageType = 'info'; $viewContext->message = sprintf('Successfully removed %d entities.', $num); } else { throw new Exception('Unknown action: ' . $action); } } catch (Exception $e) { $viewContext->messageType = 'error'; $viewContext->message = $e->getMessage(); } $viewContext->viewName = 'admin-index'; $viewContext->meta->title = 'Admin — ' . Config::$title; WebMediaHelper::addCustom($viewContext); }
public static function attachCreators(array &$entries) { $tblName = self::createTemporaryTable($entries); switch (reset($entries)->media) { case Media::Anime: $table = 'animeproducer'; break; case Media::Manga: $table = 'mangaauthor'; break; default: throw new BadMediaException(); } $query = 'SELECT * FROM ' . $table . ' mc INNER JOIN ' . $tblName . ' ON mc.media_id = ' . $tblName . '.media_id'; $rows = R::getAll($query); self::dropTemporaryTable($tblName); $data = ReflectionHelper::arraysToClasses($rows); $map = []; foreach ($entries as $entry) { $entry->creators = []; $map[$entry->media_id] = $entry; } foreach ($data as $row) { if (!isset($map[$row->media_id])) { continue; } if (BanHelper::isCreatorBanned($map[$row->media_id]->media, $row->mal_id)) { continue; } $map[$row->media_id]->creators[] = $row; } }