/** * 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[] = '…'; } } 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[] = '…'; } 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'; }