/**
  * 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;
             }
         }
     }
 }
예제 #2
0
 /**
  * Returns a link including the desired params and some standard parts.
  *
  * @param string[] $linkParams the desired link params.
  * @param string $baseURL the desired base url.
  *
  * @return string The generated link.
  *
  * @author Christian Achatz
  * @version
  * Version 0.1, 26.12.2008<br />
  */
 protected function generateLink($linkParams, $baseURL = null)
 {
     if ($baseURL === null) {
         $baseURL = $this->getRequest()->getRequestUri();
     }
     return LinkGenerator::generateUrl(Url::fromString($baseURL)->mergeQuery($linkParams));
 }
예제 #3
0
 /**
  * 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 &lt;core:importdesign /&gt; 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.');
     }
 }
예제 #4
0
 /**
  * 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);
 }
예제 #5
0
 /**
  * @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;
 }
 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 formatLink(Url $url)
 {
     $page = $url->getQueryParameter(self::$pageParamName);
     if (!empty($page)) {
         $oldPath = $url->getPath();
         ////
         // get path without filename
         if (substr($oldPath, -1, 1) == '/') {
             // path don't contains filename
             $path = $oldPath;
         } else {
             if ($lastDelimiterPos = strrpos($oldPath, '/')) {
                 // any path (with folder) given
                 $path = substr($oldPath, 0, $lastDelimiterPos + 1);
                 // omit filename, include last delimiter
             } else {
                 $path = '/';
             }
         }
         ////
         // omit page param "folder" at last position
         $paramLength = strlen(self::$pageParamName . '/');
         if (substr($path, -1 * $paramLength) == self::$pageParamName . '/') {
             $pathLength = strlen($path);
             $path = substr($path, 0, $pathLength - $paramLength);
         }
         // put page parameter at end of path
         $path .= self::$pageParamName . '/' . $page;
         $url->setPath($path);
         $url->setQueryParameter(self::$pageParamName, null);
     }
     return parent::formatLink($url);
 }
예제 #10
0
 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();
     }
 }
예제 #11
0
 /**
  * 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();
 }
예제 #13
0
 public function run()
 {
     $logout = $this->getInput()->getParameter('logout', 'false');
     if ($logout === 'true') {
         $sessionStore = $this->getServiceObject(UmgtUserSessionStore::class, [], APFService::SERVICE_TYPE_SESSION_SINGLETON);
         /* @var $sessionStore UmgtUserSessionStore */
         $sessionStore->logout($this->getContext());
         // delete cookie to avoid re-log-in effects after clicking on log-out
         $cookie = new Cookie(UmgtAutoLoginAction::AUTO_LOGIN_COOKIE_NAME);
         $response = $this->getResponse();
         $response->setCookie($cookie->delete());
         // redirect to target page
         $urlProvider = $this->getDIServiceObject('APF\\modules\\usermanagement\\biz', 'LogoutRedirectUrlProvider');
         /* @var $urlProvider UmgtRedirectUrlProvider */
         $response->forward(LinkGenerator::generateUrl(Url::fromString($urlProvider->getRedirectUrl())));
     }
 }
예제 #14
0
 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);
 }
예제 #15
0
 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();
 }
예제 #17
0
 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();
 }
예제 #18
0
 /**
  * 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;
             }
         }
     }
 }
예제 #19
0
 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);
 }
예제 #20
0
 /**
  * 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('&nbsp;&nbsp;|&nbsp;&nbsp;', $Links));
     return $tpl->transformTemplate();
 }
예제 #21
0
 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');
 }
예제 #22
0
 /**
  * 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')]);
 }
예제 #23
0
 /**
  * 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);
 }
예제 #24
0
 /**
  * @param Url $url
  *
  * @return string
  */
 public function getLink(Url $url)
 {
     $url->mergeQuery($this->getRequestParams());
     $parent = $this->getOuterParent();
     return $parent->getLink($url);
 }
 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'])));
 }
예제 #26
0
 /**
  *  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'])));
 }
예제 #27
0
 /**
  * @param Url $url
  *
  * @return Url
  */
 public function setPageRequestParamInURL(Url $url)
 {
     /** @var $SMSM SMSManager */
     $SMSM = $this->getDIServiceObject('APF\\extensions\\apfelsms', 'Manager');
     $pageRequestParam = $SMSM->getPageRequestParamName();
     $url->setQueryParameter($pageRequestParam, $this->getId());
     return $url;
 }
예제 #28
0
 public function transform()
 {
     $params = ['logout' => 'true'];
     return LinkGenerator::generateActionUrl(Url::fromCurrent(), 'APF\\modules\\usermanagement\\biz', 'logout', $params);
 }
예제 #29
0
 /**
  * Receives information and configures node.
  *
  * @param string $target The refresh target.
  * @param string $time The time to wait until to reload the page.
  * @param array $additionalParameters Optional. Array of url parameters.
  */
 public function __construct($target, $time, array $additionalParameters = [])
 {
     $this->setAttribute('http-equiv', 'refresh');
     $link = LinkGenerator::generateUrl(Url::fromString($target)->mergeQuery($additionalParameters));
     $this->setAttribute('content', $time . ';URL=' . $link);
 }
예제 #30
0
 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()]);
 }