/** * Sends the contact form and displays the thanks page. * * @param ContactFormData $formData The form's content. * * @author Christian Schäfer * @version * Version 0.1, 03.06.2006<br /> * Version 0.2, 04.06.2006<br /> * Version 0.3, 21.06.2006 (Now an additional mail is sent to the sender)<br /> * Version 0.4, 09.03.2007<br /> * Version 0.5, 31.03.2007<br /> * Version 0.6, 04.01.2008 (Corrected url generating for non-rewrite urls)<br /> */ public function sendContactForm(ContactFormData $formData) { // set up the mail sender /* @var $mail mailSender */ $mail = $this->getServiceObject(mailSender::class); $mail->init('ContactForm'); /* @var $recipient ContactFormRecipient */ $recipient = $this->getMapper()->loadRecipientById($formData->getRecipientId()); $mail->setRecipient($recipient->getEmailAddress(), $recipient->getName()); $mail->setContent($this->getNotificationText(['sender-name' => $formData->getSenderName(), 'sender-email' => $formData->getSenderEmail(), 'sender-subject' => $formData->getSubject(), 'sender-message' => $formData->getMessage(), 'recipient-name' => $recipient->getName(), 'recipient-email' => $recipient->getEmailAddress()])); $mail->setSubject($formData->getSubject()); // send mail to notify the recipient $mail->sendMail(); $mail->clearRecipients(); $mail->clearCCRecipients(); $mail->clearContent(); $mail->setRecipient($formData->getSenderEmail(), $formData->getSenderName()); $mail->setContent($this->getConfirmationText(['sender-name' => $formData->getSenderName(), 'sender-email' => $formData->getSenderEmail(), 'sender-subject' => $formData->getSubject(), 'sender-message' => $formData->getMessage(), 'recipient-name' => $recipient->getName(), 'recipient-email' => $recipient->getEmailAddress()])); $mail->setSubject($formData->getSubject()); // send mail to notify the sender $mail->sendMail(); // redirect to the thanks page to avoid F5 bugs! $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['contactview' => 'thanks'])); $this->getResponse()->forward($link); }
/** * Implements the abstract transformation function of the BaseDocumentController class. * * @author Christian Achatz * @version * Version 0.1, 02.20.2008<br /> * Version 0.2, 05.01.2008 (language is now published to the java script code)<br /> * Version 0.3, 18.09.2008 (Introduced datadir attribute to be able to operate the module in more than one application)<br /> */ public function transformContent() { // get current data dir or trigger error $dataDir = $this->getDocument()->getAttribute('datadir'); if ($dataDir === null) { throw new InvalidArgumentException('[NewsPagerController::transformContent()] Tag ' . 'attribute "datadir" was not present in the <core:importdesign /> tag ' . 'definition! Please specify a news content directory!'); } // load default news page /* @var $provider NewsPagerProvider */ $provider = $this->getServiceObject(NewsPagerProvider::class); $newsItem = $provider->getNewsByPage($dataDir, 1); // fill place holders $this->setPlaceHolder('NewsLanguage', $this->getLanguage()); $this->setPlaceHolder('NewsCount', $newsItem->getNewsCount()); $this->setPlaceHolder('Headline', $newsItem->getHeadline()); $this->setPlaceHolder('SubHeadline', $newsItem->getSubHeadline()); $this->setPlaceHolder('Content', $newsItem->getContent()); // set news service base url $url = LinkGenerator::generateActionUrl(Url::fromCurrent(), 'APF\\modules\\newspager\\biz', 'Pager'); $this->setPlaceHolder('ActionUrl', $url); $this->setPlaceHolder('DataDir', base64_encode($dataDir)); if ($this->getLanguage() == 'de') { $this->setPlaceHolder('ErrorMsg', 'Es ist ein Fehler beim Aufrufen der News aufgetreten! Bitte versuchen Sie es später wieder.'); } else { $this->setPlaceHolder('ErrorMsg', 'Requesting the next news page failed! Please try again later.'); } }
/** * @return Url A prepared url as prototype for page links (clone it!) */ protected function getUrlPrototype() { $url = Url::fromCurrent(); $keepRequestParams = $this->getDocument()->getAttribute('SMSBaseNavKeepRequestParams'); // keep all parameters (leave url unchanged) if ($keepRequestParams == self::KEEPALLPARAMSKEY) { return $url; } // delete all params if (empty($keepRequestParams)) { return $url->resetQuery(); } // explode comma-seperated list of parameters $keepParams = explode(',', $keepRequestParams); $keepedParams = []; // uugh, this is a bad case which normaly never should happen... // if array is empty, also delete all params if (count($keepParams) < 1) { return $url->resetQuery(); } // save parameters foreach ($keepParams as $keepParam) { $keepedParams[$keepParam] = $url->getQueryParameter($keepParam); } // delete all $url->resetQuery(); // restore saved params $url->setQuery($keepedParams); return $url; }
/** * Checks if current page is decorated with externalURL pageDec and redirects to external URL if applicable. */ public function run() { /** @var $SMSM SMSManager */ $SMSM = $this->getDIServiceObject('APF\\extensions\\apfelsms', 'Manager'); $currentPage = $SMSM->getSite()->getCurrentPage(); if ($currentPage instanceof SMSPageDec) { /** @var $currentPage SMSPageDec */ $decoratorTypes = $currentPage->getDecoratorTypes(); if (in_array(self::DECORATOR_TYPE, $decoratorTypes)) { /** * @var $currentPage SMSExternalUrlPageDec * (included in pageDecs) */ $externalURLString = $currentPage->getExternalURL(); $externalURLObject = Url::fromString($externalURLString); $currentURLObject = Url::fromCurrent(); // protection against infinite redirection loops if ($externalURLObject->getHost() != $currentURLObject->getHost() || $externalURLObject->getPath() != $currentURLObject->getPath()) { header('Location: ' . $externalURLString, true, 301); // HTTP status code 301: moved permanently exit; } } } }
public function transformContent() { $form = $this->getForm('create_entry'); if ($form->isSent() && $form->isValid()) { // Fill domain objects by extracting the values // from the form elements directly. $name = $form->getFormElementByName('name'); $email = $form->getFormElementByName('email'); $website = $form->getFormElementByName('website'); $user = new User(); $user->setName($name->getAttribute('value')); $user->setEmail($email->getAttribute('value')); $user->setWebsite($website->getAttribute('value')); $title = $form->getFormElementByName('title'); $text = $form->getFormElementByName('text'); $entry = new Entry(); $entry->setTitle($title->getAttribute('value')); $entry->setText($text->getContent()); $entry->setEditor($user); // Save the entry using the business component. $this->getGuestbookService()->saveEntry($entry); } // set language dependent button label by using the // language and context information of the current // DOM node. $config = $this->getConfiguration('APF\\modules\\guestbook2009\\pres', 'language.ini'); $buttonLabel = $config->getSection($this->language)->getValue('form.label.button'); $button = $form->getFormElementByName('send'); $button->setAttribute('value', $buttonLabel); // Transform on definition place to render // the content within the surrounding div. $form->transformOnPlace(); // add dynamic link $this->setPlaceHolder('overviewlink', LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['gbview' => 'list']))); }
/** * Generates the comment form. * * @author Christian Achatz * @version * Version 0.1, 28.12.2008<br /> * Version 0.2, 09.10.2008 (Changed captcha image url generation)<br /> * Version 0.3, 13.06.2009 (Removed the captcha handling, introduced the captcha module)<br /> */ private function buildForm() { $form = $this->getForm('AddComment'); $form->setAttribute('action', $this->getRequest()->getRequestUri() . '#comments'); $config = $this->getConfiguration('APF\\modules\\comments', 'language.ini'); $button = $form->getFormElementByName('Save'); $button->setAttribute('value', $config->getSection($this->getLanguage())->getValue('form.button')); $form->transformOnPlace(); $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['coview' => 'listing'])); $this->setPlaceHolder('back', $link); }
public function transformContent() { // invoke the service to check, if the current user may request this page $this->getGuestbookService()->checkAccessAllowed(); // generate the admin menu links to be able to include the module in either page. $editLink = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['gbview' => 'admin', 'adminview' => 'edit'])); $this->setPlaceHolder('editLink', $editLink); $deleteLink = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['gbview' => 'admin', 'adminview' => 'delete'])); $this->setPlaceHolder('deleteLink', $deleteLink); $logoutLink = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['gbview' => 'admin', 'adminview' => 'logout'])); $this->setPlaceHolder('logoutLink', $logoutLink); }
public function transformContent() { /* @var $sessionStore UmgtUserSessionStore */ $sessionStore = $this->getServiceObject(UmgtUserSessionStore::class, [], APFService::SERVICE_TYPE_SESSION_SINGLETON); $appIdent = $this->getContext(); $user = $sessionStore->getUser($appIdent); if ($user === null) { $form = $this->getForm('login'); // generate url ourselves to not include the logout action instruction $form->setAction(LinkGenerator::generateUrl(Url::fromCurrent())); if ($form->isSent() && $form->isValid()) { $username = $form->getFormElementByName('username')->getAttribute('value'); $password = $form->getFormElementByName('password')->getAttribute('value'); try { $user = $this->loadUser($username, $password); if ($user === null) { $form->getFormElementByName('username')->markAsInvalid(); $form->getFormElementByName('username')->appendCssClass(AbstractFormValidator::$DEFAULT_MARKER_CLASS); $form->getFormElementByName('password')->markAsInvalid(); $form->getFormElementByName('password')->appendCssClass(AbstractFormValidator::$DEFAULT_MARKER_CLASS); $form->setPlaceHolder('login-error', $this->getTemplate('login-error')->transformTemplate()); $form->transformOnPlace(); } else { // store user $sessionStore->setUser($appIdent, $user); // create auto-login cookie $rememberMe = $form->getFormElementByName('remember-me'); if ($rememberMe->isChecked()) { $this->createAutoLogin($user); } // redirect to target page $urlProvider = $this->getDIServiceObject('APF\\modules\\usermanagement\\biz', 'LoginRedirectUrlProvider'); /* @var $urlProvider UmgtRedirectUrlProvider */ $this->getResponse()->forward(LinkGenerator::generateUrl(Url::fromString($urlProvider->getRedirectUrl()))); } } catch (Exception $e) { $this->getTemplate('system-error')->transformOnPlace(); $l = Singleton::getInstance(Logger::class); /* @var $l Logger */ $l->logEntry('login', 'Login is not possible due to ' . $e, LogEntry::SEVERITY_ERROR); } } elseif ($form->isSent() && !$form->isValid()) { $form->setPlaceHolder('login-error', $this->getTemplate('login-error')->transformTemplate()); $form->transformOnPlace(); } else { $form->transformOnPlace(); } } else { $this->getTemplate('login-ok')->transformOnPlace(); } }
/** * Checks if link is active (=we are already on the target page) or not. * * @return boolean * * @author Werner Liemberger wpublicmail [at] gmail DOT com * @version * Version 0.1, 30.11.2012<br /> */ public function isActive() { $currentUrl = Url::fromCurrent(true); $targetUrl = Url::fromString($this->getAttribute(self::HREF_ATTRIBUTE_NAME)); // ID#201: re-map and sort query parameters to allow parameter mixing $currentQuery = $currentUrl->getQuery(); ksort($currentQuery); $currentUrl->setQuery($currentQuery); $targetQuery = $targetUrl->getQuery(); ksort($targetQuery); $targetUrl->setQuery($targetQuery); if (substr_count(LinkGenerator::generateUrl($currentUrl), LinkGenerator::generateUrl($targetUrl)) > 0) { return true; } return false; }
/** * Displays the select field using the choose.html template imported into * the desired views. * * @param string $adminView The name of the admin view to display (edit|delete) * * @author Christian Achatz * @version * Version 0.1, 18.05.2009<br /> */ protected function displayEntrySelection($adminView) { // fill the select list $form = $this->getForm('selectentry'); /* @var $select SelectBoxTag */ $select = $form->getFormElementByName('entryid'); $entriesList = $this->getGuestbookService()->loadEntryListForSelection(); foreach ($entriesList as $entry) { /* @var $entry Entry */ $select->addOption($entry->getTitle() . ' (#' . $entry->getId() . ')', $entry->getId()); } // define form action url concerning the view it is rendered in $action = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['gbview' => 'admin', 'adminview' => $adminView])); $form->setAttribute('action', $action); $form->transformOnPlace(); }
public function transform() { $href = $this->getAttribute(self::HREF_ATTRIBUTE_NAME); if ($href === null) { $url = Url::fromCurrent(true); } else { $url = Url::fromString($href); $this->deleteAttribute(self::HREF_ATTRIBUTE_NAME); } $queryOption = $this->getAttribute(self::QUERY_OPTION_ATTRIBUTE_NAME, self::QUERY_OPTION_OVERWRITE); $this->deleteAttribute(self::QUERY_OPTION_ATTRIBUTE_NAME); $parameters = $this->getUrlParameters(); if ($queryOption === self::QUERY_OPTION_MERGE) { $url->mergeQuery($parameters); } else { $url->setQuery($parameters); } return LinkGenerator::generateUrl($url); }
public function transformContent() { $appKey = $this->getAppKey(); $newsManager = $this->getNewsManager(); $Count = $newsManager->getNewsCount($appKey); $NewsList = $newsManager->getNews(0, $Count, 'DESC', $appKey); if (count($NewsList) === 0) { $this->getTemplate('noentry')->transformOnPlace(); return; } $dataArray = []; // retrieve the charset from the registry to guarantee interoperability! $charset = Registry::retrieve('APF\\core', 'Charset'); foreach ($NewsList as &$News) { $dataArray[] = ['Title' => htmlentities($News->getTitle(), ENT_QUOTES, $charset, false), 'Date' => $News->getProperty('CreationTimestamp'), 'LinkEdit' => LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['backendview' => 'edit', 'editnewsid' => (int) $News->getObjectId()])), 'LinkDelete' => LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['backendview' => 'delete', 'deletenewsid' => (int) $News->getObjectId()]))]; } $I = $this->getIterator('newslist'); $I->fillDataContainer($dataArray); $I->transformOnPlace(); }
/** * Checks for 404 and 403 errors and redirects to error pages. * If error page is current page, status code is adjusted. */ public function run() { // check loop counter (to protect against infinite redirect loops) if (!$this->checkLoopsOK()) { header('X-APFelSMS: Infinite redirection loop detected', true, 500); // HTTP status code 500: Server error } /** @var $SMSM SMSManager */ $SMSM = $this->getDIServiceObject('APF\\extensions\\apfelsms', 'Manager'); $SMSS = $SMSM->getSite(); // first, check for exception caused by errors/invalid page id try { $currentPage = $SMSM->getPage($SMSS->getCurrentPageId()); } catch (SMSWrongParameterException $e) { // invalid page id $this->incrementLoopCounter(); $error404URL = $SMSS->get404Page()->getLink(Url::fromCurrent(true)); header('Location: ' . $error404URL, true, 307); // HTTP status code 307: Temporary Redirect exit; } // check access protection if ($currentPage->isAccessProtected()) { // page is access protected $this->incrementLoopCounter(); $error403URL = $SMSS->get403Page()->getLink(Url::fromCurrent(true)); header('Location: ' . $error403URL, true, 307); // HTTP status code 307: Temporary Redirect exit; } // check if 404 error page if ($SMSS->currentIs404Page()) { header('X-APFelSMS: Invalid page id', true, 404); } //check if 403 error page if ($SMSS->currentIs403Page()) { header('X-APFelSMS: Access protected page', true, 403); } // clear loop counter (no redirection done during action run) $this->resetLoopCounter(); }
public function transformContent() { $request = $this->getRequest(); $deleteId = $request->getParameter('deletenewsid'); $deleteYes = (bool) $request->getParameter('deleteyes', false); $newsManager = $this->getNewsManager(); $news = $newsManager->getNewsById((int) $deleteId); if ($news === null) { $this->getTemplate('error')->transformOnPlace(); return; } if ($deleteYes === true) { $newsManager->deleteNews($news); $tpl = $this->getTemplate('success'); $tpl->transformOnPlace(); return; } $tpl = $this->getTemplate('delete'); $tpl->setPlaceHolder('LinkYes', LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['backendview' => 'delete', 'deletenewsid' => (int) $deleteId, 'deleteyes' => 'true']))); $tpl->setPlaceHolder('LinkNo', LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['backendview' => 'list', 'deletenewsid' => null]))); $tpl->transformOnPlace(); }
/** * Checks if current page is decorated with redirect pageDec and redirects if applicable. */ public function run() { /** @var $SMSM SMSManager */ $SMSM = $this->getDIServiceObject('APF\\extensions\\apfelsms', 'Manager'); $currentPage = $SMSM->getSite()->getCurrentPage(); if ($currentPage instanceof SMSPageDec) { /** @var $currentPage SMSPageDec */ $decoratorTypes = $currentPage->getDecoratorTypes(); if (in_array(self::DECORATOR_TYPE, $decoratorTypes)) { /** @var $currentPage SMSRedirectPageDec * (included in pageDecs) */ /** @var $referencedPage SMSPage */ $referencedPage = $currentPage->getReferencedPage(); if ($currentPage->getId() != $referencedPage->getId()) { $referencedPageURL = $referencedPage->getLink(Url::fromCurrent(true)); header('Location: ' . $referencedPageURL, true, 301); // HTTP status code 301: moved permanently exit; } } } }
/** * Builds the html of the pager. * * @param string $appKey * * @return string */ protected function buildPager($appKey) { $newsManager = $this->getNewsManager(); $PageCount = $newsManager->getPageCount($appKey); // we don't need a pager for 0 or 1 pages if ($PageCount <= 1) { return ''; } $Cfg = $this->getConfiguration('APF\\extensions\\news', 'news.ini'); $PageParameter = $Cfg->getSection('Paging')->getValue('PageParameter'); $Page = $newsManager->getPageNumber($appKey); $Links = []; for ($x = 1; $x <= $PageCount; $x++) { $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$PageParameter => $x])); if ($Page === $x) { $Links[] = '<a href="' . $link . '" class="active">' . $x . '</a>'; } else { $Links[] = '<a href="' . $link . '">' . $x . '</a>'; } } $tpl = $this->getTemplate('pager'); $tpl->setPlaceHolder('pages', implode(' | ', $Links)); return $tpl->transformTemplate(); }
public function transformContent() { $gS = $this->getGuestbookService(); $entryList = $gS->loadPagedEntryList(); $tmpl_entry = $this->getTemplate('entry'); $buffer = (string) ''; foreach ($entryList as $entry) { $editor = $entry->getEditor(); $tmpl_entry->setPlaceHolder('name', $editor->getName()); $tmpl_entry->setPlaceHolder('website', $editor->getWebsite()); $tmpl_entry->setPlaceHolder('title', $entry->getTitle()); $tmpl_entry->setPlaceHolder('text', $entry->getText()); $creationTimestamp = $entry->getCreationTimestamp(); $tmpl_entry->setPlaceHolder('time', date('H:i:s', strtotime($creationTimestamp))); $tmpl_entry->setPlaceHolder('date', date('d.m.Y', strtotime($creationTimestamp))); $buffer .= $tmpl_entry->transformTemplate(); } $this->setPlaceHolder('content', $buffer); // add the pager $this->setPlaceHolder('pager', $gS->getPagerOutput()); // add dynamic link $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['gbview' => 'create'])); $this->setPlaceHolder('createlink', $link); }
public function transformContent() { $generalExclusion = ['deleteyes' => null, 'deletenewsid' => null, 'editnewsid' => null]; $this->setPlaceHolder('list', LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery($generalExclusion)->mergeQuery(['backendview' => 'list']))); $this->setPlaceHolder('new', LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery($generalExclusion)->mergeQuery(['backendview' => 'edit']))); }
/** * Generates the tag's output. * * @return string The desired media url * * @author Christian Achatz * @version * Version 0.1, 29.10.2008<br /> * Version 0.2, 01.11.2008<br /> * Version 0.3, 05.11.2008 (Changed action base url generation)<br /> * Version 0.4, 07.11.2008 (Refactored the url generation due to some addressing bugs)<br /> * Version 0.5, 20.06.2010 (Adapted parameter order to support old rewrite rules that do file extension matching for routing exceptions)<br /> * Version 0.6, 09.04.2011 (Refactored to use release 1.14's new link generation concept)<br /> */ public function transform() { // generate action url using the APF's new link generation mechanism since 1.14 return LinkGenerator::generateActionUrl(Url::fromCurrent(), 'APF\\tools\\media', 'streamMedia', ['namespace' => str_replace('\\', '_', $this->getRequiredAttribute('namespace')), 'extension' => $this->getAttribute('extension'), 'filebody' => $this->getAttribute('filebody')]); }
/** * Creates a list of pager pages and returns it. * * @param string[] $addStmtParams list of additional statement params * * @return Page[] List of pages. * * @author Christian Achatz * @version * Version 0.1, 05.08.2006<br /> * Version 0.2, 06.08.2006<br /> * Version 0.3, 14.08.2006 (Added a global configuration for url rewriting)<br /> * Version 0.4, 16.11.2007 (Switched to the FrontcontrollerLinkHandler)<br /> * Version 0.5, 26.04.2008 (Avoid division by zero)<br /> * Version 0.6, 19.01.2009 (Changed the implementation due to refactoring)<br /> * Version 0.7, 10.04.2011 (Switched to LinkGenerator due to new link generation concept in 1.14)<br /> */ private function createPages4PagerDisplay($addStmtParams = []) { /* @var $t BenchmarkTimer */ $t = Singleton::getInstance(BenchmarkTimer::class); $t->start('PagerManager::createPages4PagerDisplay()'); // initialize start params $start = (int) 1; $countPerPage = $this->getCountPerPage(); $currentStart = (int) $this->getRequest()->getParameter($this->pageUrlParameterName, 1) * $countPerPage; // initialize page delimiter params $m = $this->getMapper(); $entriesCount = $m->getEntriesCount($this->statementNamespace, $this->countStatementFile, $this->getStatementParams($addStmtParams), $this->cacheInSession === 'true'); $pageCount = ceil($entriesCount / $countPerPage); // create the page representation objects /* @var $pages PageItem[] */ $pages = []; for ($i = 0; $i < $pageCount; $i++) { // create a new pager page object $pages[$i] = new PageItem(); // generate the link $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$this->pageUrlParameterName => $start])); $pages[$i]->setLink($link); // set the number of the page $pages[$i]->setPage($i + 1); // mark as selected if ($start === $currentStart / $countPerPage) { $pages[$i]->setSelected(true); } // add the entries count $pages[$i]->setEntriesCount($entriesCount); // add the page count $pages[$i]->setPageCount($pageCount); $start++; } $t->stop('PagerManager::createPages4PagerDisplay()'); return $pages; }
/** * Saves a comment. * * @param ArticleComment $articleComment The entry to save. * * @author Christian Schäfer * @version * Version 0.1, 21.08.2007<br /> * Version 0.2, 28.12.2007<br /> * Version 0.3, 02.02.2008<br /> */ public function saveEntry(ArticleComment $articleComment) { /* @var $M ArticleCommentMapper */ $M = $this->getServiceObject(ArticleCommentMapper::class); $articleComment->setCategoryKey($this->categoryKey); $M->saveArticleComment($articleComment); $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery(['coview' => 'listing'])->setAnchor('comments')); $this->getResponse()->forward($link); }
public function transformContent() { // fill document attributes to local variable $document = $this->getDocument(); $pageUrlParameterName = $document->getAttribute('PageUrlParameterName'); $countUrlParameterName = $document->getAttribute('CountUrlParameterName'); $entriesPerPage = $document->getAttribute('EntriesPerPage'); $isDynamicPageSizeActivated = $document->getAttribute('DynamicPageSizeActivated'); $anchorName = $document->getAttribute('AnchorName'); /* @var $pages PageItem[] */ $pages = $document->getAttribute('Pages'); // do not display the pager in case we have no pages if (count($pages) == 0) { return; } $content = $this->getTemplate('content'); $pageCount = (int) 0; $currentPage = (int) 0; $buffer = ''; for ($i = 0; $i < count($pages); $i++) { if ($pages[$i]->isSelected() == true) { $template = $this->getTemplate('Page_Selected_' . $this->getLanguage()); $currentPage = $pages[$i]->getPage(); } else { $template = $this->getTemplate('Page_' . $this->getLanguage()); } if (isset($anchorName)) { $template->setPlaceHolder('Link', $pages[$i]->getLink() . '#' . $anchorName); } else { $template->setPlaceHolder('Link', $pages[$i]->getLink()); } $template->setPlaceHolder('Page', $pages[$i]->getPage()); $buffer .= $template->transformTemplate(); $pageCount = $pages[$i]->getPageCount(); } $content->setPlaceHolder('Content', $buffer); // display previous page link if ($currentPage > 1) { $page = $currentPage - 1; $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$pageUrlParameterName => $page])); $prevActive = $this->getTemplate('PreviousPage_Active_' . $this->getLanguage()); if (isset($anchorName)) { $prevActive->setPlaceHolder('Link', $link . '#' . $anchorName); } else { $prevActive->setPlaceHolder('Link', $link); } $content->setPlaceHolder('PreviousPage', $prevActive->transformTemplate()); } else { $prevInactive = $this->getTemplate('PreviousPage_Inactive'); $content->setPlaceHolder('PreviousPage', $prevInactive->transformTemplate()); } // display first page link if ($currentPage > 2) { $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$pageUrlParameterName => '1'])); $firstActive = $this->getTemplate('FirstPage_Active_' . $this->getLanguage()); if (isset($anchorName)) { $firstActive->setPlaceHolder('Link', $link . '#' . $anchorName); } else { $firstActive->setPlaceHolder('Link', $link); } $content->setPlaceHolder('FirstPage', $firstActive->transformTemplate()); } // display next page link if ($currentPage < $pageCount) { $page = $currentPage + 1; $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$pageUrlParameterName => $page])); $nextActive = $this->getTemplate('NextPage_Active_' . $this->getLanguage()); if (isset($anchorName)) { $nextActive->setPlaceHolder('Link', $link . '#' . $anchorName); } else { $nextActive->setPlaceHolder('Link', $link); } $content->setPlaceHolder('NextPage', $nextActive->transformTemplate()); } else { $nextInactive = $this->getTemplate('NextPage_Inactive'); $content->setPlaceHolder('NextPage', $nextInactive->transformTemplate()); } // display last page link if ($currentPage < $pageCount - 1) { $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$pageUrlParameterName => $pageCount])); $lastActive = $this->getTemplate('LastPage_Active_' . $this->getLanguage()); if (isset($anchorName)) { $lastActive->setPlaceHolder('Link', $link . '#' . $anchorName); } else { $lastActive->setPlaceHolder('Link', $link); } $content->setPlaceHolder('LastPage', $lastActive->transformTemplate()); } // display the dynamic page size bar if ($isDynamicPageSizeActivated == true) { $entriesPerPageConfig = [5, 10, 15, 20]; $entriesPerPage = $this->getRequest()->getParameter($countUrlParameterName, $entriesPerPage); $buffer = (string) ''; foreach ($entriesPerPageConfig as $count) { if ($entriesPerPage == $count) { $template = $this->getTemplate('EntriesPerPage_Active_' . $this->getLanguage()); } else { $template = $this->getTemplate('EntriesPerPage_Inactive_' . $this->getLanguage()); } $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$pageUrlParameterName => '1', $countUrlParameterName => $count])); if (isset($anchorName)) { $template->setPlaceHolder('Link', $link . '#' . $anchorName); } else { $template->setPlaceHolder('Link', $link); } $template->setPlaceHolder('Count', $count); $buffer .= $template->transformTemplate(); } $dynPageSize = $this->getTemplate('DynamicPageSize'); $dynPageSize->setPlaceHolder('EntriesPerPage', $buffer); // display language dependent labels $entriesPerPageTmpl = $this->getTemplate('EntriesPerPage_' . $this->getLanguage()); $dynPageSize->setPlaceHolder('EntriesPerPage_Display', $entriesPerPageTmpl->transformTemplate()); $content->setPlaceHolder('DynamicPageSize', $dynPageSize->transformTemplate()); } $content->transformOnPlace(); }
/** * Builds a Link for the JsCssInclusion FC-action * * @param string $url Optional url. * @param string $namespace Namespace of file * @param string $filename Name of file * @param bool $fcaction Optional. Create link for FC-Action. * @param string $type Filetype * * @return string elements' link. */ protected function buildFrontcontrollerLink($url, $namespace, $filename, $fcaction, $type) { if ($fcaction === null) { $fcaction = true; } if ($fcaction) { $UrlObj = $url === null ? Url::fromCurrent(true) : Url::fromString($url); return LinkGenerator::generateActionUrl($UrlObj, 'APF\\extensions\\htmlheader', 'JsCss', ['path' => str_replace('\\', '_', $namespace), 'type' => $type, 'file' => $filename]); } else { $namespace = str_replace('\\', '/', $namespace); $url .= substr($url, -1, 1) !== '/' ? '/' : ''; return $url . $namespace . '/' . $filename . '.' . $type; } }
/** * Displays the paged comment list. * * @author Christian Achatz * @version * Version 0.1, 22.08.2007<br /> * Version 0.2, 02.09.2007<br /> * Version 0.3, 09.03.2008 (Changed deactivation due to indexation)<br /> * Version 0.4, 12.06.2008 (Removed display limitation quick hack)<br /> * Version 0.5, 30.01.2009 (Replaced the bbCodeParser with the AdvancedBBCodeParser)<br /> */ public function transformContent() { /* @var $m ArticleCommentManager */ $m = $this->getServiceObject(ArticleCommentManager::class, [$this->getCategoryKey()]); // load the entries using the business component $entries = $m->loadEntries(); $buffer = (string) ''; $template = $this->getTemplate('ArticleComment'); // init bb code parser (remove some provider, that we don't need configuration files) /* @var $bP AdvancedBBCodeParser */ $bP = $this->getServiceObject(AdvancedBBCodeParser::class); $bP->removeProvider('standard.font.color'); $bP->removeProvider('standard.font.size'); $i = 1; foreach ($entries as $entry) { /* @var $entry ArticleComment */ $template->setPlaceHolder('Number', $i++); $template->setPlaceHolder('Name', $entry->getName()); $template->setPlaceHolder('Date', \DateTime::createFromFormat('Y-m-d', $entry->getDate())->format('d.m.Y')); $template->setPlaceHolder('Time', $entry->getTime()); $template->setPlaceHolder('Comment', $bP->parseCode($entry->getComment())); $buffer .= $template->transformTemplate(); } // display hint, if no entries are to display if (count($entries) < 1) { $noEntries = $this->getTemplate('NoEntries'); $buffer = $noEntries->transformTemplate(); } // display the list $this->setPlaceHolder('Content', $buffer); // display the pager $this->setPlaceHolder('Pager', $m->getPager('comments')); // get the pager url params from the business component // to be able to delete them from the url. $urlParams = $m->getURLParameter(); // generate the add comment link $this->setPlaceHolder('Link', LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$urlParams['PageName'] => '', $urlParams['CountName'] => '', 'coview' => 'form']))); }
public function testConstructorPlusQueryParameterSetting() { $paramOneName = 'gbview'; $paramOneValue = 'display'; $paramTwoName = 'entryid'; $url = Url::fromCurrent(true)->setQueryParameter($paramOneName, $paramOneValue)->setQueryParameter($paramTwoName, null); $this->assertEquals($paramOneValue, $url->getQueryParameter($paramOneName)); $this->assertEquals(null, $url->getQueryParameter($paramTwoName)); }
public function transform() { $params = ['logout' => 'true']; return LinkGenerator::generateActionUrl(Url::fromCurrent(), 'APF\\modules\\usermanagement\\biz', 'logout', $params); }
/** * Creates the upload link. * * @return string * * @author Werner Liemberger <*****@*****.**> * @version 1.0, 14.3.2011<br> */ public function link() { $scheme = LinkGenerator::cloneLinkScheme(); $scheme->setEncodeAmpersands(false); $link = LinkGenerator::generateActionUrl(Url::fromCurrent(), 'APF\\tools\\form\\multifileupload', 'multifileupload', ['formname' => $this->formName, 'name' => $this->name], $scheme); return $link; }
protected function buildPackageLink($url, $name) { // Generate url if not given $url = $url === null ? Url::fromCurrent(true) : Url::fromString($url); return LinkGenerator::generateActionUrl($url, 'APF\\extensions\\htmlheader', 'JsCss', ['package' => $name . '.' . $this->getTypeIndicator()]); }
public function transformContent() { // fill document attributes to local variable $document = $this->getDocument(); /* @var $config array */ $config = $document->getAttribute('Config'); $dataCount = $document->getAttribute('DataCount'); $anchorName = $document->getAttribute('AnchorName'); $request = $this->getRequest(); $urlParams = [$config['ParameterEntries'] => $config['Entries']]; if ($config['EntriesChangeable'] === true) { $urlParams = [$config['ParameterEntries'] => $request->getParameter($config['Entries'])]; } // Pager leer zurückgeben, falls keine Seiten vorhanden sind. if ($dataCount == 0) { return; } /* @var $t BenchmarkTimer */ $t = Singleton::getInstance(BenchmarkTimer::class); $t->start('ArrayPager'); $content = $this->getTemplate('pager'); // Anzahl der Einträge $integerEntriesCount = $config['Entries']; // Anzahl der Seiten generieren $integerPageCount = ceil($dataCount / $integerEntriesCount); // Aktuelle Seite generieren $integerCurrentPage = intval($request->getParameter($config['ParameterPage'], 1)); // Puffer initialisieren $stringBuffer = ''; for ($integerPage = 1; $integerPage <= $integerPageCount; $integerPage++) { if ($integerPage == $integerCurrentPage) { // Referenz auf Template holen $objectTemplate = $this->getTemplate('Page_Selected'); } else { // Referenz auf Template holen $objectTemplate = $this->getTemplate('Page'); } $stringURL = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$config['ParameterPage'] => $integerPage])); // Pager zusammenbauen if (!empty($anchorName)) { $objectTemplate->setPlaceHolder('URL', $stringURL . '#' . $anchorName); } else { $objectTemplate->setPlaceHolder('URL', $stringURL); } $objectTemplate->setPlaceHolder('Page', $integerPage); // Template transformieren $stringBuffer .= $objectTemplate->transformTemplate(); unset($objectTemplate, $stringURL); } unset($integerPage); // Puffer in Inhalt einsetzen $content->setPlaceHolder('Pager', $stringBuffer); unset($stringBuffer); // VorherigeSeite if ($integerCurrentPage > 1) { // Template vorherige Seite ausgeben $objectTemplatePreviousPage = $this->getTemplate('PreviousPage_Active'); $stringURL = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$config['ParameterPage'] => $integerCurrentPage - 1])); if (!empty($anchorName)) { $objectTemplatePreviousPage->setPlaceHolder('URL', $stringURL . '#' . $anchorName); } else { $objectTemplatePreviousPage->setPlaceHolder('URL', $stringURL); } unset($stringURL); } else { // Template vorherige Seite (inaktiv) ausgeben $objectTemplatePreviousPage = $this->getTemplate('PreviousPage_Inactive'); } $content->setPlaceHolder('PreviousPage', $objectTemplatePreviousPage->transformTemplate()); unset($objectTemplatePreviousPage); // NaechsteSeite if ($integerCurrentPage < $integerPageCount) { $stringURL = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$config['ParameterPage'] => $integerCurrentPage + 1])); $objectTemplateNextPage = $this->getTemplate('NextPage_Active'); if (isset($anchorName) === true) { $objectTemplateNextPage->setPlaceHolder('URL', $stringURL . '#' . $anchorName); } else { $objectTemplateNextPage->setPlaceHolder('URL', $stringURL); } unset($stringURL); } else { $objectTemplateNextPage = $this->getTemplate('NextPage_Inactive'); } $content->setPlaceHolder('NextPage', $objectTemplateNextPage->transformTemplate()); unset($objectTemplateNextPage); if ($config['EntriesChangeable'] === true) { // Einträge / Seite $arrayEntries = explode('|', $config['EntriesPossible']); $stringBuffer = ''; foreach ($arrayEntries as &$integerEntries) { if ($urlParams[$config['ParameterEntries']] == $integerEntries) { $objectTemplateEntries = $this->getTemplate('Entries_Active'); } else { $objectTemplateEntries = $this->getTemplate('Entries_Inactive'); } $stringURL = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery([$config['ParameterPage'] => 1, $config['ParameterEntries'] => $integerEntries])); if (isset($anchorName) === true) { $objectTemplateEntries->setPlaceHolder('URL', $stringURL . '#' . $anchorName); } else { $objectTemplateEntries->setPlaceHolder('URL', $stringURL); } unset($stringURL); // Anzahl einsetzen $objectTemplateEntries->setPlaceHolder('Entries', $integerEntries); // Template in Puffer einsetzen $stringBuffer .= $objectTemplateEntries->transformTemplate(); unset($objectTemplateEntries); } $objectTemplateEntries = $this->getTemplate('Entries'); $objectTemplateEntries->setPlaceHolder('Entries', $stringBuffer); unset($stringBuffer); $content->setPlaceHolder('Entries', $objectTemplateEntries->transformTemplate()); unset($objectTemplateEntries); } $content->transformOnPlace(); $t->stop('ArrayPager'); }
/** * Generate and return HTML code of the captcha tag. * * @author Christian Achatz * @version * Version 0.1, 20.06.2008<br /> * Version 0.2, 05.11.2008 (Changed action base url generation)<br /> * Version 0.3, 07.11.2008 (Fixed the action URL generation. See class MediaInclusionTag for more details.)<br /> * Version 0.4, 19.12.2009 (Added attribute to be able to disable the inline styles to have clean markup)<br /> * Version 0.5, 04.01.2010 (Added clearonformerror attribute)<br /> * Version 0.6, 04.01.2010 (Added the image_id attribute)<br /> */ public function transform() { // check, if the inline style should be disabled $disableInlineStyle = $this->getAttribute('disable_inline'); $disableInlineStyle = $disableInlineStyle === 'true' ? true : false; // create desired media url $captchaUrl = LinkGenerator::generateActionUrl(Url::fromCurrent(), 'APF\\modules\\captcha\\biz', 'showCaptcha', ['name' => $this->textFieldName]); // initialize captcha source $captchaCode = '<div class="captcha"><img src="' . $captchaUrl . '" alt="CAPTCHA" '; if ($disableInlineStyle === false) { $captchaCode .= 'style="float:left;" '; } // add class and style attributes if desired $imgClass = $this->getAttribute('image_class'); if ($imgClass !== null) { $captchaCode .= 'class="' . $imgClass . '" '; } $imgStyle = $this->getAttribute('image_style'); if ($imgStyle !== null) { $captchaCode .= 'style="' . $imgStyle . '" '; } $imgId = $this->getAttribute('image_id'); if ($imgId !== null) { $captchaCode .= 'id="' . $imgId . '" '; } // clear field on form errors $cleanOnError = $this->getAttribute('clearonformerror'); if ($cleanOnError === 'true') { /* @var $parent HtmlFormTag */ $parent = $this->getParentObject(); if (!$parent->isValid()) { $this->textField->setAttribute('value', ''); } } // concatenate the html code and return it if ($disableInlineStyle === true) { return $captchaCode . '/><div>' . $this->textField->transform() . '</div></div>'; } else { return $captchaCode . '/><div style="line-height: 40px; float: left; margin-left: 20px;">' . $this->textField->transform() . '</div><div style="clear: left;"></div></div>'; } }