public function executeManageItem()
 {
     $this->item_model = get_class($this->item);
     switch ($this->item_model) {
         case 'OppPolitico':
             $this->item_type = 'politico';
             break;
         case 'OppAtto':
             $this->item_type = 'atto';
             break;
         case 'Tag':
             $this->item_type = 'argomento';
             break;
     }
     if ($this->item_type == 'atto' || $this->item_type == 'politico') {
         $this->nMonitoringUsers = $this->item->countAllMonitoringUsers();
     } else {
         $this->nMonitoringUsers = count($this->item->getMonitoringUsersPKs());
     }
     if ($this->getUser()->isAuthenticated()) {
         $user = OppUserPeer::retrieveByPK($this->getUser()->getId());
         $this->item_pk = $this->item->getPrimaryKey();
         $this->is_monitoring = $user->isMonitoring($this->item_model, $this->item_pk);
     }
 }
 /**
  * pre-execution: 
  *  - get the request parameters, 
  *  - check if the user has the 'right' to bookmark, 
  *  - prepare variables
  */
 public function preExecute()
 {
     $item_model = $this->getRequestParameter('item_model');
     $item_pk = $this->getRequestParameter('item_pk');
     $this->user_id = deppPropelActAsBookmarkableToolkit::getUserId();
     $user = OppUserPeer::retrieveByPK($this->user_id);
     $this->item = deppPropelActAsBookmarkableToolkit::retrieveBookmarkableObject($item_model, $item_pk);
 }
 /**
  * pre-execution: 
  *  - get the request parameters, 
  *  - check if the user has the 'right' to bookmark, 
  *  - prepare variables
  */
 public function preExecute()
 {
     $item_model = $this->getRequestParameter('item_model');
     $item_pk = $this->getRequestParameter('item_pk');
     $this->user_id = deppPropelActAsBookmarkableToolkit::getUserId();
     $user = OppUserPeer::retrieveByPK($this->user_id);
     $this->item = deppPropelActAsBookmarkableToolkit::retrieveBookmarkableObject($item_model, $item_pk);
     // go to error page if user is not monitoring the object (security)
     $this->forward404Unless($user->isMonitoring($item_model, $item_pk) || $user->isIndirectlyMonitoringAct($item_pk) || $this->item->hasBeenPositivelyBookmarked($this->user_id));
     // an object was bookmarked, clear the acts cache
     $cacheManager = $this->getContext()->getViewCacheManager();
     $user_token = $this->getUser()->getToken();
     if (!is_null($cacheManager)) {
         $cacheManager->remove('monitoring/acts?user_token=' . $user_token);
     }
 }
 public function executeTagsAutocomplete()
 {
     $this->my_str = $this->getRequestParameter('q');
     $limit = $this->getRequestParameter('limit');
     $caller = $this->getRequestParameter('caller');
     // estrazione elementi che iniziano per ...
     $c = new Criteria();
     $c->add(TagPeer::TRIPLE_VALUE, $this->my_str . "%", Criteria::LIKE);
     $opp_user = OppUserPeer::retrieveByPK($this->getUser()->getId());
     // esclusione tag già monitorati se chiamta da addToMonitored
     if ($caller == 'addToMonitored' && $opp_user instanceof OppUser) {
         $c->add(TagPeer::ID, $opp_user->getMonitoredPks('Tag'), Criteria::NOT_IN);
     }
     if (isset($limit)) {
         $c->setLimit($limit);
     }
     $tags_starting = TagPeer::getAll($c, array('is_triple' => true, 'return' => 'value'));
     $tags_ids = array();
     foreach ($tags_starting as $tag) {
         $tags_ids[] = $tag->getId();
     }
     // estrazione elementi che contengono ... (tranne quelli che iniziano per)
     $c = new Criteria();
     $c->add(TagPeer::TRIPLE_VALUE, "%" . $this->my_str . "%", Criteria::LIKE);
     $c1 = $c->getNewCriterion(TagPeer::ID, $tags_ids, Criteria::NOT_IN);
     // esclusione tag già monitorati se chiamata da addToMonitored
     if ($caller == 'addToMonitored' && $opp_user instanceof OppUser) {
         $c2 = $c->getNewCriterion(TagPeer::ID, $opp_user->getMonitoredPks('Tag'), Criteria::NOT_IN);
         $c1->addAnd($c2);
     }
     $c->add($c1);
     if (isset($limit)) {
         $c->setLimit($limit - count($tags_starting));
     }
     $tags_ending = TagPeer::getAll($c, array('is_triple' => true, 'return' => 'value'));
     // costruzione array totale dei tag estratti
     $tags = $tags_starting;
     foreach ($tags_ending as $tag) {
         $tags[] = $tag;
         // $tags_ids []= $tag->getId();
     }
     $this->tags = $tags;
 }
 public function executeUserNews()
 {
     $this->session = $this->getUser();
     // legge sempre i filtri dalla sessione utente
     $filters['tag_id'] = $this->session->getAttribute('tag_id', '0', 'monitoring_filter');
     $filters['act_type_id'] = $this->session->getAttribute('act_type_id', '0', 'monitoring_filter');
     $filters['act_ramo'] = $this->session->getAttribute('act_ramo', '0', 'monitoring_filter');
     $filters['date'] = $this->session->getAttribute('date', '0', 'monitoring_filter');
     $filters['main_all'] = $this->session->getAttribute('main_all', 'main', 'news_filter');
     $token = $this->getRequestParameter('token');
     // se utente non loggato, cerca l'id con il token
     if (!$this->session->isAuthenticated()) {
         $remote_guard_host = sfConfig::get('sf_remote_guard_host', 'op_accesso.openpolis.it');
         $key = sfConfig::get('sf_internal_api_key', 'XXX');
         $api_uri = "http://{$remote_guard_host}/index.php/getUserIdFromToken/{$token}/{$key}";
         $xml = simplexml_load_file($api_uri);
         if ($xml->user instanceof SimpleXMLElement && $xml->user->asXML() != '') {
             $user_id = $xml->user->id;
         } else {
             $this->forward404("Utente non loggato e token non riconosciuto: {$api_uri}");
         }
     } else {
         $user_id = $this->session->getId();
     }
     $user = OppUserPeer::retrieveByPK($user_id);
     // costruisce criterio di fetch delle news relative agli oggetti monitorati, con filtro
     $c = oppNewsPeer::getMyMonitoredItemsNewsWithFiltersCriteria($user, $filters);
     $c->setLimit(50);
     $this->pager = new deppNewsPager('News', 50);
     $this->pager->setCriteria($c);
     $this->pager->setPage($this->getRequestParameter('page', 1));
     $this->pager->init();
     $feed = $this->_make_feed_from_pager('Ultime notizie per te', '@monitoring_news?user_token=' . $this->getUser()->getToken(), $this->pager);
     $this->_send_output($feed);
     return sfView::NONE;
 }
 public function executeSottoscrizionePremiumDemo()
 {
     if ($this->getUser()->hasCredential('premium')) {
         $this->redirect('@homepage');
     }
     // processes the form if posted
     if ($this->getRequest()->getMethod() == sfRequest::POST) {
         $this->redirect_to = $this->getUser()->getAttribute('page_before_buy', '@homepage');
         $user = OppUserPeer::retrieveByPK($this->getUser()->getAttribute('subscriber_id', 0, 'subscriber'));
         // DB Storage for form data
         // with some server-validation
         $premium_form = new OppPremiumDemo();
         $premium_form->setEta($this->getRequestParameter('eta'));
         $attivitas = $this->getRequestParameter('attivita');
         $att = $attivitas[0];
         $premium_form->setAttivita($att);
         if ($this->getRequestParameter('attivita_aut_desc') != '' && $att == 8) {
             $premium_form->setAttivitaAutDesc(strip_tags($this->getRequestParameter('attivita_aut_desc')));
         }
         if ($this->getRequestParameter('attivita_dip_desc') != '' && $att > 8 && $att < 12) {
             $premium_form->setAttivitaDipDesc(strip_tags($this->getRequestParameter('attivita_dip_desc')));
         }
         if ($this->getRequestParameter('attivita_amm_desc') != '' && $att > 11 && $att < 17) {
             $premium_form->setAttivitaAmmDesc(strip_tags($this->getRequestParameter('attivita_amm_desc')));
         }
         $perches = $this->getRequestParameter('perche');
         $perche = $perches[0];
         $premium_form->setPerche($perche);
         if ($this->getRequestParameter('perche_altro_desc') != '' && $perche == 4) {
             $premium_form->setPercheAltroDesc($this->getRequestParameter('perche_altro_desc'));
         }
         $premium_form->setOppUser($user);
         $premium_form->save();
         // richiesta di upgrade della sottoscrizione utente
         $token = $this->getUser()->getToken();
         $opaccesso_key = sfConfig::get('api_opaccesso_key', '--XXX(-:-)XXX--');
         $remote_guard_host = sfConfig::get('sf_remote_guard_host', 'op_accesso.openpolis.it');
         // finezza: se sono in dev, rimane in dev
         if (sfConfig::get('sf_environment') == 'dev') {
             $controller = 'be_dev.php';
         } else {
             $controller = 'index.php';
         }
         $xml = simplexml_load_file("http://{$remote_guard_host}/{$controller}/promoteUserDemo/{$token}/{$opaccesso_key}");
         // show message if something really wrong happens (could not write last_login to db)
         if (!$xml->ok instanceof SimpleXMLElement) {
             sfLogger::getInstance()->info('xxx: user promotion failed: ' . (string) $xml->error);
             $this->error = (string) $xml->error;
             return sfView::ERROR;
         } else {
             // modify monitoring limits
             $user->setNMaxMonitoredItems(sfConfig::get('app_premium_max_items', 10));
             $user->setNMaxMonitoredTags(sfConfig::get('app_premium_max_tags', 5));
             $user->setNMaxMonitoredAlerts(sfConfig::get('app_premium_max_alerts', 3));
             $user->save();
             // add credential to the user
             $this->getUser()->addCredential('premium');
             // set the flash message for the promotion
             $this->setFlash('subscription_promotion', sfConfig::get('app_subscription_civicus_promoted'));
         }
         // clean session variable and redirect
         $this->getUser()->getAttributeHolder()->remove('page_before_buy');
         $this->redirect($this->redirect_to);
     }
 }
 public static function doSelectJoinAll(Criteria $c, $con = null)
 {
     $c = clone $c;
     if ($c->getDbName() == Propel::getDefaultDB()) {
         $c->setDbName(self::DATABASE_NAME);
     }
     sfSimpleBlogPostPeer::addSelectColumns($c);
     $startcol2 = sfSimpleBlogPostPeer::NUM_COLUMNS - sfSimpleBlogPostPeer::NUM_LAZY_LOAD_COLUMNS + 1;
     OppUserPeer::addSelectColumns($c);
     $startcol3 = $startcol2 + OppUserPeer::NUM_COLUMNS;
     $c->addJoin(sfSimpleBlogPostPeer::AUTHOR_ID, OppUserPeer::ID);
     $rs = BasePeer::doSelect($c, $con);
     $results = array();
     while ($rs->next()) {
         $omClass = sfSimpleBlogPostPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj1 = new $cls();
         $obj1->hydrate($rs);
         $omClass = OppUserPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj2 = new $cls();
         $obj2->hydrate($rs, $startcol2);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj2 = $temp_obj1->getOppUser();
             if ($temp_obj2->getPrimaryKey() === $obj2->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj2->addsfSimpleBlogPost($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj2->initsfSimpleBlogPosts();
             $obj2->addsfSimpleBlogPost($obj1);
         }
         $results[] = $obj1;
     }
     return $results;
 }
$object2->unpublishComment($comments[0]['Id']);
$t->ok(call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) == 1 && call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) != $object2->getNbComments() && call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) == $object2->getNbPublicComments(), 'unpublishing works fine (and cache is ok)');
$object2->publishComment($comments[0]['Id']);
$t->ok(call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) == 2 && call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) == $object2->getNbComments() && call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) == $object2->getNbPublicComments(), 'publishing works fine (and cache is ok)');
$t->diag('removal');
$object2->removeComment($comments[0]['Id']);
$t->ok(call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) == 1 && call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) == $object2->getNbComments() && call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) == $object2->getNbPublicComments(), 'removing works fine (and cache is ok)');
$object2->clearComments();
$t->ok(call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) == 0 && call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) == $object2->getNbComments() && call_user_func(array($object2, TEST_CACHE_COUNT_GETTER)) == $object2->getNbPublicComments(), 'clearing all comments fine (and cache is ok)');
// these tests check for comments inserted by authenticated users
$t->diag('comments by authenticated users');
// autenticazione (user_id = 8, è un utenza con mail e website)
// bisogna settare
//  enabled: true
//  name_method, email_method, website_method
$user = OppUserPeer::retrieveByPK(8);
sfContext::getInstance()->getUser()->signIn($user);
$object1 = _create_object();
$object1->setName('oggetto per commento autenticato');
$object1->save();
$object1->addComment('My first comment.');
$comments = $object1->getComments();
$t->ok($comments[0]['AuthorId'] != null && $comments[0]['AuthorName'] != null && $comments[0]['AuthorWebsite'] != null, 'comments by authenticated users have an author_id field');
// logout
sfContext::getInstance()->getUser()->signOut();
// test object creation
function _create_object()
{
    $classname = TEST_CLASS;
    if (!class_exists($classname)) {
        throw new Exception(sprintf('Unknow class "%s"', $classname));
 protected static function _getMyTags()
 {
     // fetch tags I am monitoring
     $opp_user = OppUserPeer::retrieveByPK(sfContext::getInstance()->getUser()->getId());
     return $opp_user->getMonitoredObjects('Tag');
 }
 /**
  * generate a removal community news (a user has un-done something on an object)
  *
  * @return the number of generated news
  * @author Guglielmo Celata
  **/
 public function generateRemovalCommunityNews(BaseObject $object)
 {
     try {
         // fetch the object related to this generator
         $mobj = $this->getRelatedObject($object);
         $n = new CommunityNews();
         $n->setGeneratorModel(get_class($object));
         $n->setGeneratorPrimaryKeys(serialize($this->getPrimaryKeysArray($object)));
         $n->setRelatedModel(get_class($mobj));
         $n->setRelatedId($mobj->getPrimaryKey());
         $n->setType('D');
         // fetch and set of the user name (wiki case and the rest)
         if ($object instanceof nahoWikiRevision) {
             $username = $object->getUserName();
         } else {
             if ($object instanceof sfComment || $object instanceof sfEmendComment) {
                 $username = $object->getAuthorName();
             } else {
                 $user = OppUserPeer::retrieveByPK($object->getUserId());
                 $username = $user->__toString();
             }
         }
         $n->setUsername($username);
         $n->save();
     } catch (Exception $e) {
         throw new deppPropelActAsNewsGeneratorException($e->getMessage());
     }
 }
 /**
  * estrae i tag relativi al top tem
  *
  * @return void
  * @author Guglielmo Celata
  */
 public function executeAjaxTagsForTopTerm()
 {
     $isAjax = $this->getRequest()->isXmlHttpRequest();
     if (!$isAjax) {
         return sfView::noAjax;
     }
     $opp_user = OppUserPeer::retrieveByPK($this->getUser()->getId());
     $top_term_id = $this->getRequestParameter('tt_id');
     $c = new Criteria();
     $c->add(OppTagHasTtPeer::TESEOTT_ID, $top_term_id);
     $c->addJoin(OppTagHasTtPeer::TAG_ID, TagPeer::ID);
     $c->addAscendingOrderByColumn(TagPeer::TRIPLE_VALUE);
     $this->tags = TagPeer::getPopulars($c);
 }
/**
 * fetch today's news regarding objects monitored by the user
 *
 * @param string $user - OppUser object
 * @return void
 * @author Guglielmo Celata
 */
function downgrade($user_id, $user_email)
{
    $start_time = microtime(true);
    $success = true;
    echo pakeColor::colorize(sprintf('Processing user %s...', $user_email), array('fg' => 'red', 'bold' => true));
    # rimozione della credential 'premium'
    # set a NULL della data di scadenza
    # downgrade on op_accesso
    $opaccesso_key = sfConfig::get('api_opaccesso_key', '--XXX(-:-)XXX--');
    $remote_guard_host = sfConfig::get('sf_remote_guard_host', 'op_accesso.openpolis.it');
    if (sfConfig::get('sf_environment') == 'dev') {
        $controller = 'be_dev.php';
    } else {
        $controller = 'index.php';
    }
    $xml = simplexml_load_file("http://{$remote_guard_host}/{$controller}/downgradePremium/{$user_id}/{$opaccesso_key}");
    echo "opaccessokey: {$opaccesso_key}\n";
    $success = false;
    if ($xml->ok) {
        try {
            # rimozione di tutti i monitoraggi attivi
            # set a 5/0 del n. max di item e argomenti monitorabili
            $opp_user = OppUserPeer::retrieveByPK($user_id);
            $opp_user->removeAllMonitoredObjects();
            $opp_user->setNMaxMonitoredItems(5);
            $opp_user->setNMaxMonitoredTags(0);
            $opp_user->save();
            $success = true;
        } catch (Exception $e) {
            $err = $e->getMessage();
        }
    } else {
        if ($xml->error) {
            $err = (string) $xml->error;
        } else {
            $err = "Errore sconosciuto";
        }
    }
    $execution_time = microtime(true) - $start_time;
    if ($success) {
        echo " ok (";
    } else {
        echo " {$err} (";
    }
    echo pakeColor::colorize(sprintf("%f", $execution_time), array('fg' => 'cyan'));
    echo ")\n";
}
/**
* Fetch news and show them, for each users
*/
function run_opp_test_alerts($task, $args, $options)
{
    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;
    }
    $last_alert = null;
    if (array_key_exists('last-alert', $options)) {
        $last_alert = strftime("%Y-%m-%dT%H:%M:%SZ", strtotime($options['last-alert']));
    }
    // create a solr instance to read solr.yml config
    $solr_instance = deppOppSolr::getInstance();
    sfLoader::loadHelpers(array('Partial', 'sfSolr', 'DeppNews'));
    $start_time = microtime(true);
    echo pakeColor::colorize("Hi, there!\n", array('fg' => 'green', 'bold' => true));
    $c = new Criteria();
    $c->add(OppUserPeer::WANTS_OPP_ALERTS, 1);
    $c->add(OppUserPeer::IS_ACTIVE, 1);
    $c->add(OppUserPeer::N_ALERTS, 0, Criteria::GREATER_THAN);
    if (count($args)) {
        $c->add(OppUserPeer::ID, $args, Criteria::IN);
    }
    $users = OppUserPeer::doSelect($c);
    $n_users = count($users);
    echo pakeColor::colorize("{$n_users} users set alerts. Here are the notifications we would send them.\n", array('fg' => 'green'));
    foreach ($users as $cnt => $user) {
        $last_alert = $user->getLastAlertedAt("%Y-%m-%dT%H:%M:%SZ");
        echo "{$cnt}/{$n_users} ";
        opp_test_single_user_alerts($user, $last_alert);
    }
    $total_time = microtime(true) - $start_time;
    echo pakeColor::colorize('All done! ', array('fg' => 'green', 'bold' => true));
    echo 'Processed ';
    echo pakeColor::colorize(count($users), array('fg' => 'cyan'));
    echo ' users in ';
    echo pakeColor::colorize(sprintf("%f", $total_time), array('fg' => 'cyan'));
    echo " seconds\n";
}
 public static function getMyMonitoredItemsNewsCriteria($monitored_objects)
 {
     $opp_user = OppUserPeer::retrieveByPK(sfContext::getInstance()->getUser()->getId());
     return self::getUserMonitoredItemsNewsCriteria($opp_user, $monitored_objects);
 }
/**
* Fetch news and show them, for each users
*/
function run_opp_test_newsletter($task, $args, $options)
{
    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();
        sfLoader::loadHelpers(array('Tag', 'Url', 'DeppNews'));
        sfConfig::set('pake', true);
        error_reporting(E_ALL);
        $loaded = true;
    }
    $date = null;
    if (array_key_exists('date', $options)) {
        $date = $options['date'];
    }
    $start_time = microtime(true);
    echo pakeColor::colorize("Hi, there!\n", array('fg' => 'green', 'bold' => true));
    // fetch utenti attivi che monitorano qualcosa e vogliono le news
    $c = new Criteria();
    $c->add(OppUserPeer::WANTS_OPP_NEWS, 1);
    $c->add(OppUserPeer::IS_ACTIVE, 1);
    $c->addJoin(MonitoringPeer::USER_ID, OppUserPeer::ID);
    if (count($args)) {
        $c->add(OppUserPeer::ID, $args, Criteria::IN);
    }
    $c->addGroupByColumn(OppUserPeer::ID);
    $users = OppUserPeer::doSelect($c);
    $n_users = count($users);
    echo pakeColor::colorize("{$n_users} users are monitoring. Here are the news we would send them.\n", array('fg' => 'green'));
    foreach ($users as $cnt => $user) {
        echo "{$cnt}/{$n_users} ";
        opp_test_single_newsletter($user, $date);
    }
    $total_time = microtime(true) - $start_time;
    echo pakeColor::colorize('All done! ', array('fg' => 'red', 'bold' => true));
    echo 'Processed ';
    echo pakeColor::colorize(count($users), array('fg' => 'cyan'));
    echo ' users in ';
    echo pakeColor::colorize(sprintf("%f", $total_time), array('fg' => 'cyan'));
    echo " seconds\n";
}
Пример #16
0
<?php

if ($sf_flash->has('notice')) {
    ?>
  <div class="flash-messages" style="background-color: #afa">
    <?php 
    echo $sf_flash->get('notice');
    ?>
  </div>
<?php 
}
?>

<?php 
if ($sf_user->isAuthenticated() && ($sf_user->hasCredential('amministratore') || $sf_user->hasCredential('adhoc')) && !OppAlertUserPeer::hasAlert($query, OppUserPeer::retrieveByPK($sf_user->getId()), $type_filters)) {
    ?>
  <h4 style="margin-left: 0.5em">
    <?php 
    echo link_to("avvisami quando questa espressione viene usata alla Camera o al Senato" . ($type_filters != '' ? ", con questi filtri: {$type_filters_label}" : ""), 'monitoring/addAlert?term=' . str_replace("/", "|", $query) . "&type_filters={$type_filters}");
    ?>
  </h4>        
<?php 
}