Esempio n. 1
0
 /**
  * Returns pagination links for the current URL with $count and $limit items.
  *
  * @param $count the total number of items
  * @param $limit the number of items per page
  */
 public static function get($count, $limit = null, $itemsOnPage = null, $page = null, $listName = null, $otherParams = array())
 {
     if (null != $limit) {
         self::$_options['default_limit'] = $limit;
     }
     if (Erfurt_Store::COUNT_NOT_SUPPORTED == $count) {
         self::$_options['show_first_last'] = false;
         //self::$_options['max_page_links']  = 0;
     }
     // get URL with params p (page number) and limit (not used atm)
     $paramsToKeep = array_merge($otherParams, array('p', 'limit', 'r', 'm'));
     self::$_url = new OntoWiki_Url(array(), $paramsToKeep);
     self::$_url->setParam("list", $listName);
     $limit = isset(self::$_url->limit) ? self::$_url->limit : self::$_options['default_limit'];
     if ($limit == 0) {
         // means no limit
         // no pager needed
         return "";
     }
     $page = isset(self::$_url->{self::$_options['page_param']}) ? self::$_url->{self::$_options['page_param']} : ($page != null ? $page : 1);
     // self::$_url->limit = $limit;
     $pagerLinks = array();
     // translation helper
     $translate = OntoWiki::getInstance()->translate;
     // pagination necessary
     if ($count > $limit || $count == Erfurt_Store::COUNT_NOT_SUPPORTED) {
         // previous page exists
         if ($page > 1) {
             if (self::$_options['show_first_last']) {
                 self::$_url->{self::$_options['page_param']} = 1;
                 self::$_url->limit = $limit;
                 $pagerLinks[] = sprintf('<a class="minibutton" href="%s">%s</a>', self::$_url, self::$firstHtml . $translate->_('First'));
             }
             self::$_url->{self::$_options['page_param']} = $page - 1;
             self::$_url->limit = $limit;
             $pagerLinks[] = sprintf('<a class="minibutton" href="%s">%s</a>', self::$_url, self::$prevHtml . $translate->_('Previous'));
         } else {
             if (self::$_options['show_first_last']) {
                 $pagerLinks[] = sprintf('<a class="disabled minibutton">%s</a>', self::$firstHtml . $translate->_('First'));
             }
             $pagerLinks[] = sprintf('<a class="disabled minibutton">%s</a>', self::$prevHtml . $translate->_('Previous'));
         }
         // individual page links
         if ($count != null) {
             if (self::$_options['show_first_last']) {
                 $maxLinksAsym = floor(self::$_options['max_page_links'] / 2);
                 $offset = 0;
             } else {
                 // first and last links are disabled, so always show first and last individual page
                 $maxLinksAsym = floor((self::$_options['max_page_links'] - 2) / 2);
                 self::$_url->{self::$_options['page_param']} = 1;
                 self::$_url->limit = $limit;
                 if ($page == 1) {
                     $pagerLinks[] = '<a class="selected minibutton">1</a>';
                 } else {
                     $pagerLinks[] = '<a class="minibutton" href="' . self::$_url . '">1</a>';
                 }
                 $offset = 1;
                 // if there is a gap, show dots
                 if ($page - $maxLinksAsym > 2) {
                     $pagerLinks[] = '&hellip;';
                 }
             }
             if ($count === Erfurt_Store::COUNT_NOT_SUPPORTED) {
                 for ($i = max(1 + $offset, $page - $maxLinksAsym); $i <= $page; ++$i) {
                     self::$_url->{self::$_options['page_param']} = $i;
                     self::$_url->limit = $limit;
                     if ($page == $i) {
                         $pagerLinks[] = '<a class="selected minibutton">' . $i . '</a>';
                     } else {
                         $pagerLinks[] = '<a class="minibutton" href="' . self::$_url . '">' . $i . '</a>';
                     }
                 }
             } else {
                 $forLoopTest = min(ceil($count / $limit) - $offset, $page + $maxLinksAsym);
                 for ($i = max(1 + $offset, $page - $maxLinksAsym); $i <= $forLoopTest; ++$i) {
                     self::$_url->{self::$_options['page_param']} = $i;
                     self::$_url->limit = $limit;
                     if ($page == $i) {
                         $pagerLinks[] = '<a class="selected minibutton">' . $i . '</a>';
                     } else {
                         $pagerLinks[] = '<a class="minibutton" href="' . self::$_url . '">' . $i . '</a>';
                     }
                 }
             }
             if (!self::$_options['show_first_last'] && $count !== Erfurt_Store::COUNT_NOT_SUPPORTED) {
                 self::$_url->{self::$_options['page_param']} = (int) ceil($count / $limit);
                 self::$_url->limit = $limit;
                 if (self::$_url->{self::$_options['page_param']} - $page > 2) {
                     $pagerLinks[] = '&hellip;';
                 }
                 if ($page == self::$_url->{self::$_options['page_param']}) {
                     $pagerLinks[] = '<a class="selected minibutton">' . self::$_url->{self::$_options['page_param']} . '</a>';
                 } else {
                     $pagerLinks[] = '<a class="minibutton" href="' . self::$_url . '">' . self::$_url->{self::$_options['page_param']} . '</a>';
                 }
             }
         }
         // next page exists
         if ($count > $page * $limit || $count == Erfurt_Store::COUNT_NOT_SUPPORTED && $itemsOnPage === $limit) {
             self::$_url->{self::$_options['page_param']} = $page + 1;
             self::$_url->limit = $limit;
             $pagerLinks[] = sprintf('<a class="minibutton" href="%s">%s</a>', self::$_url, $translate->_('Next') . self::$nextHtml);
             if (self::$_options['show_first_last']) {
                 self::$_url->{self::$_options['page_param']} = (int) ceil($count / $limit);
                 self::$_url->limit = $limit;
                 $pagerLinks[] = sprintf('<a class="minibutton" href="%s">%s</a>', self::$_url, $translate->_('Last') . self::$lastHtml);
             }
         } else {
             $pagerLinks[] = sprintf('<a class="disabled minibutton">%s</a>', $translate->_('Next') . self::$nextHtml);
             if (self::$_options['show_first_last']) {
                 $pagerLinks[] = sprintf('<a class="disabled minibutton">%s</a>', $translate->_('Last') . self::$lastHtml);
             }
         }
         $ret = '<ul>';
         foreach ($pagerLinks as $link) {
             $ret .= '<li>' . $link . '</li>';
         }
         $ret .= '</ul>';
         return $ret;
     }
 }
 /**
  *  Listing history for selected Resource
  */
 public function listAction()
 {
     $model = $this->_owApp->selectedModel;
     $translate = $this->_owApp->translate;
     $store = $this->_erfurt->getStore();
     $resource = $this->_owApp->selectedResource;
     $ac = $this->_erfurt->getAc();
     $params = $this->_request->getParams();
     $limit = 20;
     $rUriEncoded = urlencode((string) $resource);
     $mUriEncoded = urlencode((string) $model);
     $feedUrl = $this->_config->urlBase . "history/feed?r={$rUriEncoded}&mUriEncoded";
     $this->view->headLink()->appendAlternate($feedUrl, 'application/atom+xml', 'History Feed');
     // redirecting to home if no model/resource is selected
     if (empty($model) || empty($this->_owApp->selectedResource) && empty($params['r']) && $this->_owApp->lastRoute !== 'instances') {
         $this->_abort('No model/resource selected.', OntoWiki_Message::ERROR);
     }
     // getting page (from and for paging)
     if (!empty($params['page']) && (int) $params['page'] > 0) {
         $page = (int) $params['page'];
     } else {
         $page = 1;
     }
     // enabling versioning
     $versioning = $this->_erfurt->getVersioning();
     $versioning->setLimit($limit);
     if (!$versioning->isVersioningEnabled()) {
         $this->_abort('Versioning/History is currently disabled', null, false);
     }
     $singleResource = true;
     // setting if class or instances
     if ($this->_owApp->lastRoute === 'instances') {
         // setting default title
         $title = $resource->getTitle() ? $resource->getTitle() : OntoWiki_Utils::contractNamespace($resource->getIri());
         $windowTitle = $translate->_('Versions for elements of the list');
         $listHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('List');
         $listName = "instances";
         if ($listHelper->listExists($listName)) {
             $list = $listHelper->getList($listName);
             $list->setStore($store);
         } else {
             $this->_owApp->appendMessage(new OntoWiki_Message('something went wrong with the list of instances', OntoWiki_Message::ERROR));
         }
         $query = clone $list->getResourceQuery();
         $query->setLimit(0);
         $query->setOffset(0);
         //echo htmlentities($query);
         $results = $model->sparqlQuery($query);
         $resourceVar = $list->getResourceVar()->getName();
         $resources = array();
         foreach ($results as $result) {
             $resources[] = $result[$resourceVar];
         }
         //var_dump($resources);
         $historyArray = $versioning->getHistoryForResourceList($resources, (string) $this->_owApp->selectedModel, $page);
         //var_dump($historyArray);
         $singleResource = false;
     } else {
         // setting default title
         $title = $resource->getTitle() ? $resource->getTitle() : OntoWiki_Utils::contractNamespace($resource->getIri());
         $windowTitle = sprintf($translate->_('Versions for %1$s'), $title);
         $historyArray = $versioning->getHistoryForResource((string) $resource, (string) $this->_owApp->selectedModel, $page);
     }
     $historyArrayCount = count($historyArray);
     if ($historyArrayCount === $limit + 1) {
         $count = $page * $limit + 1;
         unset($historyArray[$limit]);
     } else {
         $count = ($page - 1) * $limit + $historyArrayCount;
     }
     $idArray = array();
     $userArray = $this->_erfurt->getUsers();
     $titleHelper = new OntoWiki_Model_TitleHelper();
     // Load IDs for rollback and Username Labels for view
     foreach ($historyArray as $key => $entry) {
         $idArray[] = (int) $entry['id'];
         if (!$singleResource) {
             $historyArray[$key]['url'] = $this->_config->urlBase . "view?r=" . urlencode($entry['resource']);
             $titleHelper->addResource($entry['resource']);
         }
         if ($entry['useruri'] == $this->_erfurt->getConfig()->ac->user->anonymousUser) {
             $userArray[$entry['useruri']] = 'Anonymous';
         } else {
             if ($entry['useruri'] == $this->_erfurt->getConfig()->ac->user->superAdmin) {
                 $userArray[$entry['useruri']] = 'SuperAdmin';
             } else {
                 if (is_array($userArray[$entry['useruri']])) {
                     if (isset($userArray[$entry['useruri']]['userName'])) {
                         $userArray[$entry['useruri']] = $userArray[$entry['useruri']]['userName'];
                     } else {
                         $titleHelper->addResource($entry['useruri']);
                         $userArray[$entry['useruri']] = $titleHelper->getTitle($entry['useruri']);
                     }
                 }
             }
         }
     }
     $this->view->userArray = $userArray;
     $this->view->idArray = $idArray;
     $this->view->historyArray = $historyArray;
     $this->view->singleResource = $singleResource;
     $this->view->titleHelper = $titleHelper;
     if (empty($historyArray)) {
         $this->_owApp->appendMessage(new OntoWiki_Message('No history for the selected resource(s).', OntoWiki_Message::INFO));
     }
     if ($this->_erfurt->getAc()->isActionAllowed('Rollback')) {
         $this->view->rollbackAllowed = true;
         // adding submit button for rollback-action
         $toolbar = $this->_owApp->toolbar;
         $toolbar->appendButton(OntoWiki_Toolbar::SUBMIT, array('name' => $translate->_('Rollback changes'), 'id' => 'history-rollback'));
         $this->view->placeholder('main.window.toolbar')->set($toolbar);
     } else {
         $this->view->rollbackAllowed = false;
     }
     // paging
     $statusBar = $this->view->placeholder('main.window.statusbar');
     // the normal page_param p collides with the generic-list param p
     OntoWiki_Pager::setOptions(array('page_param' => 'page'));
     $statusBar->append(OntoWiki_Pager::get($count, $limit));
     // setting view variables
     $url = new OntoWiki_Url(array('controller' => 'history', 'action' => 'rollback'));
     $this->view->placeholder('main.window.title')->set($windowTitle);
     $this->view->formActionUrl = (string) $url;
     $this->view->formMethod = 'post';
     // $this->view->formName      = 'instancelist';
     $this->view->formName = 'history-rollback';
     $this->view->formEncoding = 'multipart/form-data';
 }