Exemplo n.º 1
0
 /**
  * @todo: docs
  */
 public function get_comments(array $args)
 {
     if ($args['type'] != 1) {
         throw new midgardmvc_exception_notfound("Only CONTENT type supported");
     }
     $cnt = 0;
     $package = new com_meego_package();
     $ocs = new com_meego_ocs_OCSWriter();
     try {
         $package->get_by_id((int) $args['contentid1']);
     } catch (midgard_error_exception $e) {
         $error = true;
         $this->mvc->log(__CLASS__, 'Probably missing package with id:  ' . $args['contentid1'] . '.', 'warning');
         $ocs->writeError('Package not found', 101);
         $ocs->endDocument();
         self::output_xml($ocs);
     }
     $storage = new midgard_query_storage('com_meego_package_ratings');
     $q = new midgard_query_select($storage);
     $qc = new midgard_query_constraint_group('AND');
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('authorguid'), '<>', new midgard_query_value('')));
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('name'), '=', new midgard_query_value($package->name)));
     $q->set_constraint($qc);
     $q->add_order(new midgard_query_property('posted', $storage), SORT_ASC);
     // First run a query of the whole set to get results count
     $q->execute();
     $cnt = $q->get_results_count();
     list($limit, $offset) = $this->limit_and_offset_from_query();
     $q->set_limit($limit);
     $q->set_offset($offset);
     $q->execute();
     $comments = $q->list_objects();
     foreach ($comments as $comment) {
         if ($comment->commentid == 0 && !$this->mvc->configuration->show_ratings_without_comments) {
             // skip the rating if it has no comment and the configuration excludes such ratings
             --$cnt;
         }
     }
     $ocs->writeMeta($cnt);
     $ocs->startElement('data');
     // todo: again this loop..  a bit redundant, but works for now
     foreach ($comments as $comment) {
         if ($comment->commentid == 0 && !$this->mvc->configuration->show_ratings_without_comments) {
             // skip the rating if it has no comment and the configuration excludes such ratings
             continue;
         }
         $this->comment_to_ocs($comment, $ocs);
     }
     $ocs->endElement();
     $ocs->endDocument();
     self::output_xml($ocs);
 }
Exemplo n.º 2
0
 public static function page_by_args(midgard_query_select $q, array $args)
 {
     $q->set_limit(20);
 }
Exemplo n.º 3
0
 /**
  * Returns "dependencies", ie. various UXes (User Experiences)
  *
  * @param array HTTP GET args
  */
 public function get_dependencies(array $args)
 {
     $q = new midgard_query_select(new midgard_query_storage('com_meego_ux'));
     $q->execute();
     $total = $q->get_results_count();
     $query = $this->request->get_query();
     if (array_key_exists('pagesize', $query) && strlen($query['pagesize'])) {
         $this->pagesize = $query['pagesize'];
     }
     $q->set_limit($this->pagesize);
     $page = 0;
     if (array_key_exists('page', $query) && strlen($query['page'])) {
         $page = $query['page'];
     }
     $offset = $page * $this->pagesize;
     $q->set_offset($offset);
     if ($offset > $total) {
         $offset = $total - $this->pagesize;
     }
     // 2nd execute to limit pagesize
     $q->execute();
     $ocs = new com_meego_ocs_OCSWriter();
     $ocs->writeMeta($total, $this->pagesize);
     $ocs->writeDependencies($q->list_objects());
     $ocs->endDocument();
     self::output_xml($ocs);
 }
Exemplo n.º 4
0
 /**
  * Loads a relation object betwenn a base category and a package category
  *
  * @param integer id of the base category
  * @param integer id of the package category
  *
  * @return object relation object
  *
  */
 private function load_relation($basecategory = null, $packagecategory = null, $includedeleted = false)
 {
     $relation = null;
     $storage = new midgard_query_storage('com_meego_package_category_relation');
     $qc = new midgard_query_constraint_group('AND');
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('basecategory'), '=', new midgard_query_value($basecategory)));
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('packagecategory'), '=', new midgard_query_value($packagecategory)));
     $q = new midgard_query_select($storage);
     $q->set_constraint($qc);
     $q->set_limit(1);
     if ($includedeleted) {
         $q->include_deleted(true);
     }
     $q->execute();
     $relations = $q->list_objects();
     if (is_array($relations) && count($relations)) {
         $relation = $relations[0];
     }
     return $relation;
 }
Exemplo n.º 5
0
 /**
  * Show latest apps in repository
  */
 public function get_repository_latest(array $args)
 {
     $this->data['projectname'] = $args['project'];
     $this->data['repository'] = array();
     $storage = new midgard_query_storage('com_meego_repository');
     $qc = new midgard_query_constraint_group('AND');
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('name', $storage), '=', new midgard_query_value($args['repository'])));
     $qc->add_constraint(new midgard_query_constraint(new midgard_query_property('arch', $storage), '=', new midgard_query_value($args['arch'])));
     $q = new midgard_query_select($storage);
     $q->set_constraint($qc);
     $q->execute();
     $repositories = $q->list_objects();
     if (count($repositories) > 0) {
         $this->data['repository'] = $repositories[0];
     } else {
         throw new midgardmvc_exception_notfound("Repository not found");
     }
     $storage = new midgard_query_storage('com_meego_package');
     $q = new midgard_query_select($storage);
     $q->set_constraint(new midgard_query_constraint(new midgard_query_property('repository', $storage), '=', new midgard_query_value($this->data['repository']->id)));
     $q->add_order(new midgard_query_property('metadata.created', $storage), SORT_DESC);
     if (isset($args['amount'])) {
         $q->set_limit((int) $args['amount']);
     }
     $q->execute();
     $packages = $q->list_objects();
     $cnt = 0;
     foreach ($packages as $package) {
         ++$cnt % 2 == 0 ? $package->rawclass = 'even' : ($package->rawclass = 'odd');
         if (empty($package->title)) {
             $package->title = ucfirst($package->name);
         }
         $package->localurl = $this->mvc->dispatcher->generate_url('package_instance', array('package' => $package->name, 'version' => $package->version, 'project' => $args['project'], 'repository' => $this->data['repository']->name, 'arch' => $this->data['repository']->arch), $this->request);
         $this->data['packages'][] = $package;
     }
 }