/** * @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); }
public static function page_by_args(midgard_query_select $q, array $args) { $q->set_limit(20); }
/** * 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); }
/** * 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; }
/** * 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; } }