/** * @param \Tx_News_Domain_Model_News $newsItem * @param \GeorgRinger\Eventnews\Domain\Model\Dto\Demand $demand * @return mixed */ public function render($newsItem, $demand) { $currentDay = \DateTime::createFromFormat('d-m-Y H:i:s', sprintf('%s-%s-%s 00:00:01', $demand->getDay(), $demand->getMonth(), $demand->getYear())); $found = FALSE; if ($demand->getDay() > 0) { $newsBeginDate = $newsItem->getDatetime()->format('Y-m-d'); $day = date('Y-m-d', $currentDay->getTimestamp()); if ($newsItem->getEventEnd() == 0) { if ($newsBeginDate === $day) { $found = TRUE; } } else { $newsEndDate = $newsItem->getEventEnd(); $newsEndDate->setTime(23, 59, 59); $newsBeginDate = $newsItem->getDatetime(); $newsBeginDate->setTime(0, 0); $currentDay->setTime(0, 0); if ($newsBeginDate <= $currentDay && $newsEndDate >= $currentDay) { $found = TRUE; } } } if ($found) { return $this->renderThenChild(); } else { return $this->renderElseChild(); } }
/** * @test * @return void */ public function previousNeighbourCanBeFound() { $this->news->_setProperty('uid', 106); $fo = $this->mockedViewHelper->_call('getNeighbours', $this->news, '', 'datetime'); $exp = array(0 => array('uid' => 105, 'title' => NULL), 1 => array('uid' => 106, 'title' => NULL)); $this->assertEquals($exp, $fo); }
/** * Test if default file format works * * @test * @return void */ public function viewHelperReturnsCorrectJs() { $newsItem = new Tx_News_Domain_Model_News(); $newsItem->setTitle('fobar'); $language = 'en'; $viewHelper = new Tx_News_ViewHelpers_Social_DisqusViewHelper(); $settingsService = $this->getAccessibleMock('Tx_News_Service_SettingsService'); $settingsService->expects($this->any())->method('getSettings')->will($this->returnValue(array('disqusLocale' => $language))); $viewHelper->injectSettingsService($settingsService); $actualResult = $viewHelper->render($newsItem, 'abcdef', 'http://typo3.org/dummy/fobar.html'); $expectedCode = '<script type="text/javascript"> var disqus_shortname = ' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue('abcdef', TRUE) . '; var disqus_identifier = ' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue('news_' . $newUid, TRUE) . '; var disqus_url = ' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue('http://typo3.org/dummy/fobar.html') . '; var disqus_title = ' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue('fobar', TRUE) . '; var disqus_config = function () { this.language = ' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($language) . '; }; (function() { var dsq = document.createElement("script"); dsq.type = "text/javascript"; dsq.async = true; dsq.src = "http://" + disqus_shortname + ".disqus.com/embed.js"; (document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]).appendChild(dsq); })(); </script>'; $this->assertEquals($expectedCode, $actualResult); }
/** * Add the news uid to a global variable to be able to exclude it later * * @param Tx_News_Domain_Model_News $newsItem current news item * @return void */ public function render(Tx_News_Domain_Model_News $newsItem) { $uid = $newsItem->getUid(); if (empty($GLOBALS['EXT']['news']['alreadyDisplayed'])) { $GLOBALS['EXT']['news']['alreadyDisplayed'] = array(); } $GLOBALS['EXT']['news']['alreadyDisplayed'][$uid] = $uid; }
/** * @test * @return void */ public function thenChildIsCalledWithCorrectArguments() { $_GET['tx_news_pi1']['news'] = '789'; $newsItem = new Tx_News_Domain_Model_News(); $newsItem->_setProperty('uid', 789); $this->viewHelper->expects($this->once())->method('renderThenChild'); $this->viewHelper->render($newsItem); }
/** * Render everything * * @param Tx_News_Domain_Model_News $object current news object * @param string $as name of property which holds the text * @param integer $currentPage Selected page * @param string $token Token used to split the text * @return string */ public function render(Tx_News_Domain_Model_News $object, $as, $currentPage, $token = '###more###') { $parts = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode($token, $object->getBodytext(), TRUE); $numberOfPages = count($parts); if ($numberOfPages === 1) { $result = $parts[0]; } else { $currentPage = (int) $currentPage; if ($currentPage < 1) { $currentPage = 1; } elseif ($currentPage > $numberOfPages) { $currentPage = $numberOfPages; } $tagsToOpen = array(); $tagsToClose = array(); for ($j = 0; $j < $currentPage; $j++) { $chunk = $parts[$j]; while ($chunk = mb_strstr($chunk, '<')) { $tag = $this->extractTag($chunk); $tagStrLen = mb_strlen($tag); if ($this->isOpeningTag($tag)) { if ($j < $currentPage - 1) { $tagsToOpen[] = $tag; } $tagsToClose[] = $tag; } elseif ($this->isClosingTag($tag)) { if ($j < $currentPage - 1) { array_pop($tagsToOpen); } elseif (mb_strpos($parts[$j], $chunk) === 0) { $parts[$j] = mb_substr($parts[$j], $tagStrLen); array_pop($tagsToOpen); } array_pop($tagsToClose); } $chunk = mb_substr($chunk, $tagStrLen); } } $result = join('', $tagsToOpen) . $parts[$currentPage - 1]; while ($tag = array_pop($tagsToClose)) { $result .= $this->getClosingTagByOpeningTag($tag); } } $pages = array(); for ($i = 1; $i <= $numberOfPages; $i++) { $pages[] = array('number' => $i, 'isCurrent' => $i === $currentPage); } $pagination = array('pages' => $pages, 'numberOfPages' => $numberOfPages, 'current' => $currentPage); if ($currentPage < $numberOfPages) { $pagination['nextPage'] = $currentPage + 1; } if ($currentPage > 1) { $pagination['previousPage'] = $currentPage - 1; } $this->templateVariableContainer->add($as, $result); $this->templateVariableContainer->add('pagination', $pagination); return $this->renderChildren(); }
public function render(Tx_News_Domain_Model_News $newsItem) { $vars = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET('tx_news_pi1'); if (isset($vars['news']) && (int) $newsItem->getUid() === (int) $vars['news']) { return $this->renderThenChild(); } else { return $this->renderElseChild(); } }
/** * Add the news uid to a global variable to be able to exclude it later * * @param Tx_News_Domain_Model_News $newsItem current news item * @return void */ public function render(Tx_News_Domain_Model_News $newsItem) { $uid = $newsItem->getUid(); if (empty($GLOBALS['EXT']['news']['alreadyDisplayed'])) { $GLOBALS['EXT']['news']['alreadyDisplayed'] = array(); } $GLOBALS['EXT']['news']['alreadyDisplayed'][$uid] = $uid; // Add localized uid as well $originalUid = (int) $newsItem->_getProperty('_localizedUid'); if ($originalUid > 0) { $GLOBALS['EXT']['news']['alreadyDisplayed'][$originalUid] = $originalUid; } }
/** * Output different objects * * @param Tx_News_Domain_Model_News $newsItem current newsitem * @param string $as output variable * @param string $className custom class which handles the new objects * @param string $extendedTable table which is extended * @return string output */ public function render(Tx_News_Domain_Model_News $newsItem, $as, $className, $extendedTable = 'tx_news_domain_model_news') { $rawRecord = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow('*', $extendedTable, 'uid=' . (int) $newsItem->getUid()); $rawRecord = $GLOBALS['TSFE']->sys_page->getRecordOverlay($extendedTable, $rawRecord, $GLOBALS['TSFE']->sys_language_content, $GLOBALS['TSFE']->sys_language_contentOL); $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); /* @var $dataMapper \TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper */ $dataMapper = $objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Mapper\\DataMapper'); $records = $dataMapper->map($className, array($rawRecord)); $record = array_shift($records); $this->templateVariableContainer->add($as, $record); $output = $this->renderChildren(); $this->templateVariableContainer->remove($as); return $output; }
/** * Test if default file format works * * @test * @return void */ public function viewHelperReturnsCorrectJavaScriptLink() { $viewHelper = new Tx_News_ViewHelpers_Be_MultiEditLinkViewHelper(); $newsItem1 = new Tx_News_Domain_Model_News(); $newsItem1->setTitle('Item 1'); $newsItem1->_setProperty('uid', 3); $newsItem2 = new Tx_News_Domain_Model_News(); $newsItem2->setTitle('Item 2'); $newsItem2->_setProperty('uid', 9); $newsItems = array($newsItem1, $newsItem2); $columns = 'title,description'; $actualResult = $viewHelper->render($newsItems, $columns); $content = 'window.location.href=\'alt_doc.php?returnUrl=\'+T3_THIS_LOCATION+\'&edit[tx_news_domain_model_news][' . '3,9' . ']=edit&columnsOnly=title,description&disHelp=1\';return false;'; $this->assertEquals($content, $actualResult); }
/** * @test * @return void */ public function newsIsAddedToExcludedList() { $viewHelper = new Tx_News_ViewHelpers_ExcludeDisplayedNewsViewHelper(); $this->assertEquals($GLOBALS['EXT']['news']['alreadyDisplayed'], NULL); $newsItem1 = new Tx_News_Domain_Model_News(); $newsItem1->_setProperty('uid', '123'); $viewHelper->render($newsItem1); $this->assertEquals($GLOBALS['EXT']['news']['alreadyDisplayed'], array('123' => '123')); $newsItem1 = new Tx_News_Domain_Model_News(); $newsItem1->_setProperty('uid', '123'); $this->assertEquals($GLOBALS['EXT']['news']['alreadyDisplayed'], array('123' => '123')); $newsItem2 = new Tx_News_Domain_Model_News(); $newsItem2->_setProperty('uid', '12'); $viewHelper->render($newsItem2); $this->assertEquals($GLOBALS['EXT']['news']['alreadyDisplayed'], array('123' => '123', '12' => '12')); }
/** * Test if related links can be set * * @test * @return void */ public function relatedLinksCanBeSet() { $link = new Tx_News_Domain_Model_Link(); $link->setTitle('fo'); $related = new Tx_Extbase_Persistence_ObjectStorage(); $related->attach($link); $this->newsDomainModelInstance->setRelatedLinks($related); $this->assertEquals($related, $this->newsDomainModelInstance->getRelatedLinks()); }
/** * @test */ public function checkPidOfNewsRecordWorks() { $mockedSignalDispatcher = $this->getAccessibleMock('\\TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher', array('dummy')); $mockedController = $this->getAccessibleMock('Tx_News_Controller_NewsController', array('dummy')); $mockedController->_set('signalSlotDispatcher', $mockedSignalDispatcher); $news = new Tx_News_Domain_Model_News(); // No startingpoint $mockedController->_set('settings', array('startingpoint' => '')); $news->setPid(45); $this->assertEquals($news, $mockedController->_call('checkPidOfNewsRecord', $news)); // startingpoint defined $mockedController->_set('settings', array('startingpoint' => '1,2,123,456')); $news->setPid(123); $this->assertEquals($news, $mockedController->_call('checkPidOfNewsRecord', $news)); // startingpoint is different $mockedController->_set('settings', array('startingpoint' => '123,456')); $news->setPid(45); $this->assertEquals(NULL, $mockedController->_call('checkPidOfNewsRecord', $news)); }
/** * Render disqus thread * * @param Tx_News_Domain_Model_News $newsItem news item * @param string $shortName shortname * @param string $link link * @return string */ public function render(Tx_News_Domain_Model_News $newsItem, $shortName, $link) { $tsSettings = $this->pluginSettingsService->getSettings(); $code = '<script type="text/javascript"> var disqus_shortname = ' . t3lib_div::quoteJSvalue($shortName, TRUE) . '; var disqus_identifier = \'news_' . $newsItem->getUid() . '\'; var disqus_url = ' . t3lib_div::quoteJSvalue($link, TRUE) . '; var disqus_title = ' . t3lib_div::quoteJSvalue($newsItem->getTitle(), TRUE) . '; var disqus_config = function () { this.language = ' . t3lib_div::quoteJSvalue($tsSettings['disqusLang']) . '; }; (function() { var dsq = document.createElement("script"); dsq.type = "text/javascript"; dsq.async = true; dsq.src = "http://" + disqus_shortname + ".disqus.com/embed.js"; (document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]).appendChild(dsq); })(); </script>'; return $code; }
/** * @test */ public function falMediaPreviewsAreReturned() { $news = new Tx_News_Domain_Model_News(); $mockedElement1 = $this->getAccessibleMock('Tx_News_Domain_Model_FileReference', array('getProperty')); $mockedElement1->_set('uid', 1); $mockedElement1->_set('showinpreview', TRUE); $mockedElement1->expects($this->any())->method('getProperty')->will($this->returnValue(TRUE)); $mediaItem1 = new Tx_News_Domain_Model_FileReference(); $mediaItem1->_setProperty('originalResource', $mockedElement1); $news->addFalMedia($mediaItem1); $mockedElement2 = $this->getAccessibleMock('Tx_News_Domain_Model_FileReference', array('getProperty')); $mockedElement2->_set('uid', 2); $mockedElement2->_set('showinpreview', TRUE); $mockedElement2->expects($this->any())->method('getProperty')->will($this->returnValue(FALSE)); $mediaItem2 = new Tx_News_Domain_Model_FileReference(); $mediaItem2->_setProperty('originalResource', $mockedElement2); $news->addFalMedia($mediaItem2); $mockedElement3 = $this->getAccessibleMock('Tx_News_Domain_Model_FileReference', array('getProperty')); $mockedElement3->_set('uid', 3); $mockedElement3->_set('showinpreview', TRUE); $mockedElement3->expects($this->any())->method('getProperty')->will($this->returnValue(TRUE)); $mediaItem3 = new Tx_News_Domain_Model_FileReference(); $mediaItem3->_setProperty('originalResource', $mockedElement3); $news->addFalMedia($mediaItem3); $this->assertEquals(2, count($news->getFalMediaPreviews())); $this->assertEquals(1, count($news->getNonFalMediaPreviews())); $this->assertEquals(3, count($news->getFalMedia())); }
/** * Gets detailPid from categories of the given news item. First will be return. * * @param array $settings * @param Tx_News_Domain_Model_News $newsItem * @return int */ protected function getDetailPidFromCategories($settings, $newsItem) { $detailPid = 0; if ($newsItem->getCategories()) { foreach ($newsItem->getCategories() as $category) { if ($detailPid = (int) $category->getSinglePid()) { break; } } } return $detailPid; }
/** * Checks if the news pid could be found in the startingpoint settings of the detail plugin and * if the pid could not be found it return NULL instead of the news object. * * @param Tx_News_Domain_Model_News $news * @return NULL|Tx_News_Domain_Model_News */ protected function checkPidOfNewsRecord(Tx_News_Domain_Model_News $news) { $allowedStoragePages = GeneralUtility::trimExplode(',', Tx_News_Utility_Page::extendPidListByChildren($this->settings['startingpoint'], $this->settings['recursive']), TRUE); if (count($allowedStoragePages) > 0 && !in_array($news->getPid(), $allowedStoragePages)) { $this->signalSlotDispatcher->dispatch(__CLASS__, 'checkPidOfNewsRecordFailedInDetailAction', array('news' => $news, 'newsController' => $this)); $news = NULL; } return $news; }
/** * Get related file if it exists * * @param Tx_News_Domain_Model_News $news * @param string $relatedFile * @return Boolean|Tx_News_Domain_Model_File */ protected function getRelatedFileIfAlreadyExists(Tx_News_Domain_Model_News $news, $relatedFile) { $result = FALSE; $relatedItems = $news->getRelatedFiles(); if ($relatedItems->count() !== 0) { foreach ($relatedItems as $relatedItem) { if ($relatedItem->getFile() == basename($relatedFile) && $this->filesAreEqual(PATH_site . $relatedFile, PATH_site . self::UPLOAD_PATH . $relatedItem->getFile())) { $result = $relatedItem; break; } } } return $result; }
/** * @test * @return void */ public function getDetailPidFromCategoriesReturnsCorrectValue() { $viewHelper = $this->getAccessibleMock('Tx_News_ViewHelpers_LinkViewHelper', array('dummy')); $newsItem = new Tx_News_Domain_Model_News(); $categories = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); $category1 = new Tx_News_Domain_Model_Category(); $categories->attach($category1); $category2 = new Tx_News_Domain_Model_Category(); $category2->setSinglePid('123'); $categories->attach($category2); $category3 = new Tx_News_Domain_Model_Category(); $category3->setSinglePid('456'); $categories->attach($category3); $newsItem->setCategories($categories); $result = $viewHelper->_call('getDetailPidFromCategories', array(), $newsItem); $this->assertEquals(123, $result); }
/** * @param Tx_News_Domain_Model_News $news * @param $pidList * @param $sortField * @return array */ protected function getNeighbours(Tx_News_Domain_Model_News $news, $pidList, $sortField) { $pidList = empty($pidList) ? $news->getPid() : $pidList; $select = 'SELECT tx_news_domain_model_news.uid,tx_news_domain_model_news.title '; $from = 'FROM tx_news_domain_model_news'; $whereClause = 'tx_news_domain_model_news.pid IN(' . $this->databaseConnection->cleanIntList($pidList) . ') ' . $this->getEnableFieldsWhereClauseForTable(); $query = $select . $from . ' WHERE ' . $whereClause . ' && ' . $sortField . ' >= (SELECT MAX(' . $sortField . ') ' . $from . ' WHERE ' . $whereClause . ' AND ' . $sortField . ' < (SELECT ' . $sortField . ' FROM tx_news_domain_model_news WHERE tx_news_domain_model_news.uid = ' . $news->getUid() . ')) ORDER BY ' . $sortField . ' ASC LIMIT 3'; $query2 = $select . $from . ' WHERE ' . $whereClause . ' AND ' . $sortField . '= (SELECT MIN(' . $sortField . ') FROM tx_news_domain_model_news WHERE ' . $whereClause . ' AND ' . $sortField . ' > (SELECT ' . $sortField . ' FROM tx_news_domain_model_news WHERE tx_news_domain_model_news.uid = ' . $news->getUid() . ')) '; $res = $this->databaseConnection->sql_query($query); $out = array(); while ($row = $this->databaseConnection->sql_fetch_assoc($res)) { $out[] = $row; } $this->databaseConnection->sql_free_result($res); if (count($out) === 0) { $res = $this->databaseConnection->sql_query($query2); while ($row = $this->databaseConnection->sql_fetch_assoc($res)) { $out[] = $row; } $this->databaseConnection->sql_free_result($res); return $out; } return $out; }
/** * Get an existing related link object * * @param Tx_News_Domain_Model_News $news * @param string $uri * @return bool|Tx_News_Domain_Model_Link */ protected function getRelatedLinkIfAlreadyExists(Tx_News_Domain_Model_News $news, $uri) { $result = FALSE; $links = $news->getRelatedLinks(); if ($links->count() !== 0) { foreach ($links as $link) { if ($link->getUri() === $uri) { $result = $link; break; } } } return $result; }