コード例 #1
0
 /**
  * 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;
 }
コード例 #2
0
 public function executeAddAlert()
 {
     $this->type_filters_label = OppAlertTermPeer::get_filters_labels($this->type_filters);
 }
コード例 #3
0
            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 
コード例 #4
0
 /**
  * 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;
 }
コード例 #5
0
 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&agrave; 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());
 }
コード例 #6
0
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');