public function executeSioccupadi() { $options = array('limit' => 20, 'sort_by_relevance' => true); // estrazione tag, tipo firma, tipo atto // questo dovrebbe andare in TagPeer, ma romperebbe la neutralità del plugin $c = new Criteria(); $c->addJoin(OppCaricaHasAttoPeer::ATTO_ID, OppAttoPeer::ID); $c->addJoin(TaggingPeer::TAGGABLE_ID, OppAttoPeer::ID); $c->addJoin(TagPeer::ID, TaggingPeer::TAG_ID); $c->add(OppCaricaHasAttoPeer::CARICA_ID, $this->carica->getId()); $c->add(TaggingPeer::TAGGABLE_MODEL, 'OppAtto'); $c->clearSelectColumns(); $c->addSelectColumn(TagPeer::TRIPLE_VALUE); $c->addSelectColumn(OppCaricaHasAttoPeer::TIPO); $c->addSelectColumn(OppAttoPeer::TIPO_ATTO_ID); // costruzione array associativo dei tag $tags = array(); $rs = TagPeer::doSelectRS($c); while ($rs->next()) { $value = $rs->getString(1); $tipo = $rs->getString(2); $tipo_atto_id = $rs->getInt(3); if (!array_key_exists($value, $tags)) { $tags[$value] = 0; } $tags[$value] += OppCaricaHasAttoPeer::get_fattore_firma($tipo) * OppAttoPeer::get_fattore_tipo_atto($tipo_atto_id); } // ordinamento per rilevanza, prima dello slice arsort($tags); // slice dell'array, se specificata l'opzione limit if (isset($options['limit']) && count($tags) > $options['limit']) { $this->n_remaining_tags = count($tags) - $options['limit']; $tags = array_slice($tags, 0, $options['limit'], true); } // ordinamento per triple_value, in caso sort_by_relevance non sia specificato if (!isset($options['sort_by_relevance']) || true !== $options['sort_by_relevance']) { krsort($tags); } $this->tags = $tags; }
public function executeSenatorisioccupanodi() { $options = array('limit' => 10, 'sort_by_relevance' => true); //$options = array('sort_by_relevance' => true); // estrazione cariche, tipo firma, tipo atto $c = new Criteria(); $c->addJoin(OppCaricaPeer::ID, OppCaricaHasAttoPeer::CARICA_ID); $c->addJoin(OppCaricaHasAttoPeer::ATTO_ID, OppAttoPeer::ID); $c->addJoin(TaggingPeer::TAGGABLE_ID, OppAttoPeer::ID); $c->add(OppCaricaPeer::TIPO_CARICA_ID, array(4, 5), Criteria::IN); $c->add(OppCaricaPeer::DATA_FINE, NULL); $c->add(TaggingPeer::TAG_ID, $this->tag->getId()); $c->add(TaggingPeer::TAGGABLE_MODEL, 'OppAtto'); $c->clearSelectColumns(); $c->addSelectColumn(OppCaricaPeer::ID); $c->addSelectColumn(OppCaricaHasAttoPeer::TIPO); $c->addSelectColumn(OppAttoPeer::TIPO_ATTO_ID); // costruzione array associativo dei politici $politici = array(); $rs = OppCaricaPeer::doSelectRS($c); while ($rs->next()) { $carica_id = $rs->getInt(1); $tipo = $rs->getString(2); $tipo_atto_id = $rs->getInt(3); if (!array_key_exists($carica_id, $politici)) { $politici[$carica_id] = 0; } $politici[$carica_id] += OppCaricaHasAttoPeer::get_nuovo_fattore_firma($tipo) * OppAttoPeer::get_fattore_tipo_atto($tipo_atto_id); } // ordinamento per rilevanza, prima dello slice arsort($politici); // slice dell'array, se specificata l'opzione limit $this->n_remaining_politici = 0; if (isset($options['limit']) && count($politici) > $options['limit']) { $this->n_remaining_politici = count($politici) - $options['limit']; $politici = array_slice($politici, 0, $options['limit'], true); } // ordinamento per triple_value, in caso sort_by_relevance non sia specificato if (!isset($options['sort_by_relevance']) || true !== $options['sort_by_relevance']) { krsort($politici); } $this->politici = $politici; }