/** * given a term (as a string) and a user (as an OppUser object) * an alert is created only if it did not exist * * @param string $term * @param OppUser $user * @return boolean - true if the alert was created, false otherwise * @author Guglielmo Celata */ public static function addAlert($term, $user, $type_filters) { $term_obj = OppAlertTermPeer::fetchOrInsert($term); // fetch object with user_id, term_id, or create a new one $alert = self::retrieveByPK($user->getId(), $term_obj->getId()); if (is_null($alert)) { $alert = new OppAlertUser(); $alert->setOppAlertTerm($term_obj); $alert->setOppUser($user); } // set type filters anew $alert->setTypeFilters($type_filters); $alert->save(); return true; }
public function executeAddAlert() { $this->type_filters_label = OppAlertTermPeer::get_filters_labels($this->type_filters); }
echo array_search($date_filter, $date_filters); ?> <?php } ?> <?php if ($date_filter && $type_filters) { ?> +<?php } ?> <?php if ($type_filters) { ?> <?php echo OppAlertTermPeer::get_filters_labels($type_filters); ?> <?php } ?> </div> <?php } ?> <table class="search-results-table"> <?php $num_item = 0; ?> <?php
/** * fetch and return user alerts data structure * * @param string $user * @param string $max_results * @param string $force_last_alert - date to test as if it was last alerted on... * @return array of hashes ('term' => $term, 'results' => $results) * @author Guglielmo Celata */ public static function getUserAlerts($user, $max_results = 10, $last_alert = null) { // arguments validation if (!$user instanceof OppUser) { throw new Exception("first argument must be of type user"); } // if last alert is not passed, then fetch it, as not to break compatibility if (is_null($last_alert)) { $last_alert = $user->getLastAlertedAt("%Y-%m-%dT%H:%M:%SZ"); } // loop to build static data-structure (self::$user_alerts) $user_alerts = array(); $alert = OppAlertUserPeer::fetchUserAlerts($user); foreach ($alert as $alert) { $alert_term = $alert->getOppAlertTerm()->getTerm(); if ($last_alert) { $fields_constraints = 'created_at_dt:' . sprintf("[%s TO NOW]", $last_alert); } else { $fields_constraints = 'created_at_dt:' . sprintf("[NOW-%dDAYS/SECOND TO NOW]", sfConfig::get('app_alert_default_days_back', 9)); } $type_filters_s = OppAlertTermPeer::get_filters_labels($alert->getTypeFilters()); if (!is_null($type_filters_s) && $type_filters_s != '') { $type_filters = explode("|", $alert->getTypeFilters()); } else { $type_filters = array(); } if (count($type_filters)) { $type_constraints = ""; foreach ($type_filters as $cnt => $type_filter) { $type_constraint = ""; switch ($type_filter) { case 'politici': $type_constraint = "(+sfl_model:OppPolitico)"; break; case 'argomenti': $type_constraint = "(+sfl_model:Tag)"; break; case 'emendamenti': $type_constraint = "(+sfl_model:OppEmendamento)"; break; case 'votazioni': $type_constraint = "(+sfl_model:OppVotazione)"; break; case 'resoconti': $type_constraint = "(+sfl_model:OppResoconto)"; break; case 'disegni': case 'decreti': case 'decrleg': case 'mozioni': case 'interpellanze': case 'interrogazioni': case 'risoluzioni': case 'odg': case 'comunicazionigoverno': case 'audizioni': $type_constraint = "(+sfl_model:(OppAtto OppDocumento) +tipo_atto_s:{$type_filter})"; break; } $type_constraints .= ($cnt > 0 ? ' OR ' : '') . $type_constraint; } if ($type_constraints != "") { $fields_constraints .= $fields_constraints != '' ? " AND ({$type_constraints})" : $type_constraints; } } $alert_results = deppOppSolr::getSfResults($alert_term, 0, $max_results, $fields_constraints, true); $user_alert = array('term' => $alert_term, 'type_filters' => $type_filters_s, 'results' => $alert_results); $user_alerts[] = $user_alert; } return $user_alerts; }
public function executeAddAlert() { // fetch current user profile $opp_user = OppUserPeer::retrieveByPK($this->getUser()->getId()); $this->forward404Unless($opp_user instanceof OppUser); // read term from request parameters $term = $this->getRequestParameter('term'); $this->forward404Unless($term); $term = str_replace("|", "/", $term); // read filter on type of objects $type_filters = $this->getRequestParameter('type_filters', ''); $type_filters_label = OppAlertTermPeer::get_filters_labels($type_filters); // check limitations (for non-adhoc subscribers) if (!$this->getUser()->hasCredential('adhoc')) { $monitored = $opp_user->getNAlerts(); $this->remaining_items = $opp_user->getNMaxMonitoredAlerts() - $monitored; if ($this->remaining_items <= 0) { $this->getUser()->setAttribute('page_before_buy', $this->getRequest()->getReferer()); // costruzione del messaggio flash $this->_build_flash_message('OppAlertUser'); // redirect $this->redirect('@sottoscrizioni_pro'); } } $res = OppAlertUserPeer::addAlert($term, $opp_user, $type_filters); if ($res == false) { $this->setFlash('warning', "stai già monitorando l'espressione <i>{$term}</i>, con questi filtri: {$type_filters_label}"); } else { $this->setFlash('notice', "da questo momento, stai monitorando l'espressione <i>{$term}</i>, con questi filtri: {$type_filters_label}"); } // redirect to the referrer page $this->redirect($this->getRequest()->getReferer()); }
foreach ($alerts as $alert) { ?> <li> <?php $term = $alert->getOppAlertTerm()->getTerm(); ?> <?php echo link_to(image_tag('ico-remove_alert.png'), 'monitoring/delAlert?term=' . str_replace("/", "|", $term), array('title' => 'smetti di ricevere alert su questo termine')); ?> <?php echo $term; if ($alert->getTypeFilters() != '') { ?> :<?php } echo OppAlertTermPeer::get_filters_labels($alert->getTypeFilters()); ?> </li> <?php } ?> </ul> </div> </div> </div> <?php slot('breadcrumbs');