123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- <?php
- class TripalWebServiceCollection extends TripalWebServiceResource {
-
- protected $members;
-
- protected $doPaging;
-
- protected $totalItems;
-
- protected $itemsPerPage;
-
- protected $page;
-
- protected $params;
-
- public function __construct($service_path, $params) {
- parent::__construct($service_path);
-
- $this->params = $params;
- $this->members = array();
-
- $this->addContextItem('Collection', 'hydra:Collection');
- $this->addContextItem('totalItems', 'hydra:totalItems');
- $this->addContextItem('member', 'hydra:member');
- parent::setType('Collection');
-
-
- $this->totalItems = 0;
- $this->itemsPerPage = 25;
- $this->doPaging = FALSE;
- }
-
- public function initPager($totalItems, $itemsPerPage, $page) {
- $this->doPaging = TRUE;
- $this->totalItems = $totalItems;
- $this->itemsPerPage = $itemsPerPage;
- $this->page = $page;
- }
-
- public function addMember($member) {
-
- if (!is_a($member, 'TripalWebServiceResource')) {
- throw new Exception("Cannot add a new member to this resource collection as it is not a TripalWebServiceResource.");
- }
- $this->members[] = $member;
- }
-
- public function setType($type) {
-
-
- parent::setType($type);
- }
-
- public function getData() {
- $data = $this->data;
- $data['totalItems'] = 0;
- if ($this->doPaging == TRUE) {
-
- $saved_params = '';
- foreach ($this->params as $pkey => $pval) {
- if (in_array($pkey, array('page', 'limit', 'first', 'last', 'next', 'prev'))) {
- continue;
- }
- $saved_params .= '&' . $pkey . '=' . $pval;
- }
- $data['totalItems'] = $this->totalItems;
- $total_pages = ceil($this->totalItems / $this->itemsPerPage);
- $page = $this->page;
- $limit = $this->itemsPerPage;
- if ($this->totalItems > 0) {
- $data['view'] = array(
- '@id' => $this->service_path . '?' . implode('&', array_merge(array("page=$page", "limit=$limit"))) . $saved_params,
- '@type' => 'PartialCollectionView',
- 'first' => $this->service_path . '?' . implode('&', array_merge(array("page=1", "limit=$limit"))) . $saved_params,
- 'last' => $this->service_path . '?' . implode('&', array_merge(array("page=$total_pages", "limit=$limit"))) . $saved_params,
- );
- $prev = $page - 1;
- $next = $page + 1;
- if ($prev > 0) {
- $data['view']['previous'] = $this->service_path .'?' . implode('&', array("page=$prev", "limit=$limit")) . $saved_params;
- }
- if ($next < $total_pages) {
- $data['view']['next'] = $this->service_path . '?' . implode('&', array("page=$next", "limit=$limit")) . $saved_params;
- }
- }
- }
- else {
- $data['totalItems'] = count($this->members);
- }
- $member_data = array();
- foreach ($this->members as $key => $member) {
- $member_data[] = $member->getData();
- }
- $data['member'] = $member_data;
-
- return $data;
- }
-
- public function getContext() {
- if ($this->doPaging == TRUE) {
- $this->addContextItem('view', 'hydra:PartialCollectionView');
- }
- $context = $this->context;
- foreach ($this->members as $key => $member) {
- $citems = $member->getContext();
- foreach ($citems as $key => $val) {
- $context[$key] = $val;
- }
- }
- return $context;
- }
- }
|