/**
  * @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());
 }
Example #13
0
 /**
  * @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;
    }
Example #15
0
 /**
  * @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()));
 }
Example #16
0
 /**
  * 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;
 }
Example #17
0
 /**
  * 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;
 }
Example #19
0
 /**
  * @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;
 }