/** * Check and remove news related to non-existing objects */ function run_opp_news_clean($task, $args) { static $loaded; // load application context if (!$loaded) { define('SF_ROOT_DIR', sfConfig::get('sf_root_dir')); define('SF_APP', 'fe'); define('SF_ENVIRONMENT', 'task'); define('SF_DEBUG', true); require_once SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'apps' . DIRECTORY_SEPARATOR . SF_APP . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php'; sfContext::getInstance(); sfConfig::set('pake', true); error_reporting(E_ALL); $loaded = true; } $start_time = microtime(true); $c = new Criteria(); $c->clearSelectColumns(); $c->addSelectColumn(NewsPeer::ID); $c->addSelectColumn(NewsPeer::RELATED_MONITORABLE_MODEL); $c->addSelectColumn(NewsPeer::RELATED_MONITORABLE_ID); $n_news = NewsPeer::doCount($c); $rs = NewsPeer::doSelectRS($c); $k = 0; $newsids_to_remove = array(); $removed_news = 0; while ($rs->next()) { $news = array(); $news['id'] = $rs->getInt(1); $news['rel_model'] = $rs->getString(2); $news['rel_id'] = $rs->getInt(3); if (opp_check_single_news($news)) { $newsids_to_remove[] = $news['id']; $removed_news++; } $k++; if ($k % 100 == 0) { print "."; } if ($k > 0 && $k % 1000 == 0) { $rem = count($newsids_to_remove); NewsPeer::doDelete($newsids_to_remove); print "processed: {$k}/{$n_news} removed: {$rem} ({$removed_news})\n"; $newsids_to_remove = array(); } } $total_time = microtime(true) - $start_time; echo pakeColor::colorize('All done! ', array('fg' => 'red', 'bold' => true)); echo 'Processed '; echo pakeColor::colorize(count($n_news), array('fg' => 'cyan')); echo ' news in '; echo pakeColor::colorize(sprintf("%f", $total_time), array('fg' => 'cyan')); echo " seconds\n"; }
/** * build and return criteria to fetch all news related to items monitored by a user, * filtered with a given filter * * @param string $user * @param hash $filters * @return Propel Criteria * @author Guglielmo Celata */ public static function getMyMonitoredItemsNewsWithFiltersCriteria($user, $filters) { // fetch degli oggetti monitorati (se c'è il filtro sui tag, fetch solo di quelli associati a questo tag) if ($filters['tag_id'] != '0') { $filter_criteria = new Criteria(); $filter_criteria->add(TagPeer::ID, $filters['tag_id']); $monitored_objects = $user->getMonitoredObjects('Tag', $filter_criteria); } else { $monitored_objects = $user->getMonitoredObjects(); } // criterio di selezione delle news dagli oggetti monitorati $c = self::getMyMonitoredItemsNewsCriteria($monitored_objects); // eliminazione delle notizie relative agli oggetti bookmarkati negativamente (bloccati) $blocked_items_ids = sfBookmarkingPeer::getAllNegativelyBookmarkedIds($user->getId()); if (array_key_exists('OppAtto', $blocked_items_ids) && count($blocked_items_ids['OppAtto'])) { $blocked_news_ids = array(); $bc = new Criteria(); $bc->add(NewsPeer::RELATED_MONITORABLE_MODEL, 'OppAtto'); $bc->add(NewsPeer::RELATED_MONITORABLE_ID, $blocked_items_ids['OppAtto'], Criteria::IN); $bc->clearSelectColumns(); $bc->addSelectColumn(NewsPeer::ID); $rs = NewsPeer::doSelectRS($bc); while ($rs->next()) { array_push($blocked_news_ids, $rs->getInt(1)); } $c0 = $c->getNewCriterion(NewsPeer::ID, $blocked_news_ids, Criteria::NOT_IN); $c->addAnd($c0); } // le news di gruppo non sono considerate, perché ridondanti (#247) $c->add(NewsPeer::GENERATOR_PRIMARY_KEYS, null, Criteria::ISNOTNULL); // aggiunta filtri su tipi di atto, ramo e data if ($filters['act_type_id'] != '0') { $c->add(NewsPeer::TIPO_ATTO_ID, $filters['act_type_id']); } if ($filters['act_ramo'] != '0') { $c->add(NewsPeer::RAMO_VOTAZIONE, $filters['act_ramo']); } if ($filters['date'] != '0') { if ($filters['date'] == 'W') { $c->add(NewsPeer::CREATED_AT, date('Y-m-d H:i', strtotime('-1 week')), Criteria::GREATER_THAN); } elseif ($filters['date'] == 'M') { $c->add(NewsPeer::CREATED_AT, date('Y-m-d H:i', strtotime('-1 month')), Criteria::GREATER_THAN); } } if ($filters['main_all'] == 'main') { $c->add(NewsPeer::PRIORITY, 2, Criteria::LESS_EQUAL); } return $c; }
public static function doSelect(Criteria $criteria, $con = null) { return NewsPeer::populateObjects(NewsPeer::doSelectRS($criteria, $con)); }