Exemple #1
0
	protected function getInput()
	{
		$this->params = $this->element->attributes();

		$label = $this->get('label');
		$format = $this->get('format');

		$date = JFactory::getDate();

		$tz = new DateTimeZone(JFactory::getApplication()->getCfg('offset'));
		$date->setTimeZone($tz);

		if ($format)
		{
			if (strpos($format, '%') !== false)
			{
				require_once JPATH_PLUGINS . '/system/nnframework/helpers/text.php';
				$format = NNText::dateToDateFormat($format);
			}
			$html = $date->format($format, 1);
		}
		else
		{
			$html = $date->format('', 1);
		}

		if ($label)
		{
			$html = JText::sprintf($label, $html);
		}

		return '<div class="nn_block nn_title">' . $html . '</div>';
	}
 protected function getInput()
 {
     $this->params = $this->element->attributes();
     $label = $this->get('label');
     $format = $this->get('format');
     $date = JFactory::getDate();
     $tz = new DateTimeZone(JFactory::getApplication()->getCfg('offset'));
     $date->setTimeZone($tz);
     if ($format) {
         if (strpos($format, '%') !== false) {
             require_once dirname(__DIR__) . '/helpers/text.php';
             $format = NNText::dateToDateFormat($format);
         }
         $html = $date->format($format, true);
     } else {
         $html = $date->format('', true);
     }
     if ($label) {
         $html = JText::sprintf($label, $html);
     }
     return '</div><div>' . $html;
 }
Exemple #3
0
 public function convertDateToString($string, $extra)
 {
     // Check if string could be a date
     if (strpos($string, '-') == false || preg_match('#[a-z]#i', $string) || !strtotime($string)) {
         return $string;
     }
     if (!$extra) {
         $extra = JText::_('DATE_FORMAT_LC2');
     }
     if (strpos($extra, '%') !== false) {
         $extra = NNText::dateToDateFormat($extra);
     }
     return JHtml::_('date', $string, $extra);
 }
Exemple #4
0
 function processArticle($id, $art, $text = '', $type = 'article', $ignores = array(), $first = 0)
 {
     if (!$first) {
         // do second pass
         $text = $this->processArticle($id, $art, $text, $type, $ignores, 1);
     }
     if ($first) {
         // first pass: search for normal tags and tags around tags
         $regex = '#\\{(/?(?:[^\\}]*\\{[^\\}]*\\})*[^\\}]*)\\}#si';
     } else {
         $regex_close = '#\\{/' . $this->params->tags . '\\}#si';
         if (preg_match($regex_close, $text)) {
             return $text;
         }
         // second pass: only search for normal tags
         $regex = '#\\{(/?[^\\{\\}]+)\\}#si';
     }
     if (!preg_match_all($regex, $text, $matches, PREG_SET_ORDER)) {
         return $text;
     }
     $db = JFactory::getDBO();
     $query = $db->getQuery(true);
     $type = $type == 'k2' && !$this->params->dbselects_k2 ? '' : $type;
     $selects = $type == 'k2' ? $this->params->dbselects_k2 : $this->params->dbselects_content;
     if (in_array($id, array('current', 'self', '{id}', '{title}', '{alias}'))) {
         if (isset($art->id)) {
             $id = $art->id;
         } else {
             if (isset($art->link) && preg_match('#&amp;id=([0-9]*)#', $art->link, $match)) {
                 $id = $match['1'];
             } else {
                 if ($this->option == 'com_content' && JFactory::getApplication()->input->get('view') == 'article') {
                     $id = JFactory::getApplication()->input->getInt('id', 0);
                 }
             }
         }
     }
     foreach ($matches as $match) {
         $data = trim($match['1']);
         if (!(strpos($data, 'intro') === false)) {
             $selects[] = 'introtext';
         } else {
             if (!(strpos($data, 'full') === false)) {
                 $selects[] = 'fulltext';
             } else {
                 if (!(strpos($data, 'text') === false)) {
                     $selects[] = 'introtext';
                     $selects[] = 'fulltext';
                 }
             }
         }
     }
     $selects = array_unique($selects);
     $selects = 'a.`' . implode('`, a.`', $selects) . '`';
     $query->select($selects);
     if ($type == 'article') {
         $query->select('CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(":", a.id, a.alias) ELSE a.id END AS slug')->select('CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(":", c.id, c.alias) ELSE c.id END AS catslug')->select('c.parent_id AS parent')->join('LEFT', '#__categories AS c ON c.id = a.catid');
     }
     $query->from('#__content as a');
     $where = 'a.title = ' . $db->quote(NNText::html_entity_decoder($id));
     $where .= ' OR a.alias = ' . $db->quote(NNText::html_entity_decoder($id));
     if (is_numeric($id)) {
         $where .= ' OR a.id = ' . $id;
     }
     $query->where('(' . $where . ')');
     $ignore_language = isset($ignores['ignore_language']) ? $ignores['ignore_language'] : $this->params->ignore_language;
     if (!$ignore_language) {
         $query->where('a.language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ')');
     }
     $ignore_state = isset($ignores['ignore_state']) ? $ignores['ignore_state'] : $this->params->ignore_state;
     if (!$ignore_state) {
         $jnow = JFactory::getDate();
         $now = $jnow->toSQL();
         $nullDate = $db->getNullDate();
         if ($type == 'k2') {
             $query->where('a.published = 1 AND trash = 0');
         } else {
             $query->where('a.state = 1');
         }
         $query->where('( a.publish_up = ' . $db->quote($nullDate) . ' OR a.publish_up <= ' . $db->quote($now) . ' )')->where('( a.publish_down = ' . $db->quote($nullDate) . ' OR a.publish_down >= ' . $db->quote($now) . ' )');
     }
     $ignore_access = isset($ignores['ignore_access']) ? $ignores['ignore_access'] : $this->params->ignore_access;
     if (!$ignore_access) {
         $query->where('a.access IN(' . implode(', ', $this->params->aid) . ')');
     }
     $query->order('a.ordering');
     $db->setQuery($query);
     $article = $db->loadObject();
     if (!$article) {
         return '<!-- ' . JText::_('AA_ACCESS_TO_ARTICLE_DENIED') . ' -->';
     }
     if (isset($article->attribs)) {
         self::addParams($article, json_decode($article->attribs));
     } else {
         if (isset($article->params)) {
             self::addParams($article, json_decode($article->params));
         }
     }
     if (isset($article->images)) {
         self::addParams($article, json_decode($article->images));
     }
     if (isset($article->urls)) {
         self::addParams($article, json_decode($article->urls));
     }
     $ifregex = '#\\{if:([^\\}]+)\\}(.*?)(?:\\{else\\}(.*?))?\\{/if\\}#si';
     if (preg_match_all($ifregex, $text, $ifs, PREG_SET_ORDER) > 0) {
         foreach ($ifs as $if) {
             $eval = trim($if['1']);
             if (preg_match('#(^.*?[><=]\\s*([\'"]))(.*)\\2#si', $eval, $match)) {
                 $eval = str_replace($match['0'], $match['1'] . html_entity_decode($match['3']) . $match['2'], $eval);
             }
             $eval = str_replace('=', '==', $eval);
             $eval = '$pass = ( ( $article->' . $eval . ' ) ? 1 : 0 );';
             $eval = str_replace('$article->!', '!$article->', $eval);
             // trim the text that needs to be checked and replace weird spaces
             $eval = preg_replace('#(\\$article->[a-z0-9-_]*)#', 'trim(str_replace(chr(194) . chr(160), " ", \\1))', $eval);
             $pass = 0;
             eval($eval);
             if (!$pass) {
                 $text = str_replace($if['0'], isset($if['3']) ? $if['3'] : '', $text);
             } else {
                 $text = str_replace($if['0'], $if['2'], $text);
             }
         }
     }
     if (!preg_match_all($regex, $text, $matches, PREG_SET_ORDER)) {
         return $text;
     }
     foreach ($matches as $match) {
         $data = trim($match['1']);
         $ok = 0;
         $str = '';
         $data = explode(':', $data, 2);
         $tag = trim($data['0']);
         $extra = isset($data['1']) ? trim($data['1']) : '';
         if ($tag == '/link') {
             $str = '</a>';
             $ok = 1;
         } else {
             if ($tag == '/div') {
                 $str = '</div>';
                 $ok = 1;
             } else {
                 if ($tag == 'div' || strpos($tag, 'div ') === 0) {
                     if ($tag != 'div') {
                         $extra = str_replace('div ', '', $tag) . ':' . $extra;
                     }
                     $str = '';
                     if ($extra) {
                         $extra = explode('|', $extra);
                         $extras = new stdClass();
                         foreach ($extra as $e) {
                             if (!(strpos($e, ':') === false)) {
                                 list($key, $val) = explode(':', $e, 2);
                                 $extras->{$key} = $val;
                             }
                         }
                         if (isset($extras->class)) {
                             $str .= 'class="' . $extras->class . '"';
                         }
                         $style = array();
                         if (isset($extras->width)) {
                             if (is_numeric($extras->width)) {
                                 $extras->width .= 'px';
                             }
                             $style[] = 'width:' . $extras->width;
                         }
                         if (isset($extras->height)) {
                             if (is_numeric($extras->height)) {
                                 $extras->height .= 'px';
                             }
                             $style[] = 'height:' . $extras->height;
                         }
                         if (isset($extras->align)) {
                             $style[] = 'float:' . $extras->align;
                         } else {
                             if (isset($extras->float)) {
                                 $style[] = 'float:' . $extras->float;
                             }
                         }
                         if (!empty($style)) {
                             $str .= ' style="' . implode(';', $style) . ';"';
                         }
                     }
                     $str = trim('<div ' . trim($str)) . '>';
                     $ok = 1;
                 } else {
                     if ($tag == 'link' || $tag == 'url' || !(strpos($tag, 'readmore') === false)) {
                         if (isset($article->id)) {
                             $slug = 'id=' . $article->slug;
                             if ($article->catid) {
                                 $slug .= '&catid=' . $article->catslug;
                             }
                             $link = 'index.php?option=com_content&view=article&' . $slug;
                             $component = JComponentHelper::getComponent('com_content');
                             $menus = JFactory::getApplication()->getMenu('site');
                             $menuitems = $menus->getItems('component_id', $component->id);
                             $id = 0;
                             if (is_array($menuitems)) {
                                 foreach ($menuitems as $item) {
                                     if (isset($item->query['view']) && $item->query['view'] == 'article' && isset($item->query['id']) && $item->query['id'] == $article->id) {
                                         $id = $item->id;
                                         break;
                                     }
                                 }
                                 if (!$id) {
                                     foreach ($menuitems as $item) {
                                         if (isset($item->query['view']) && in_array($item->query['view'], array('category', 'categories')) && isset($item->query['id']) && $item->query['id'] == $article->catid) {
                                             $id = $item->id;
                                             break;
                                         }
                                     }
                                 }
                                 if (!$id) {
                                     foreach ($menuitems as $item) {
                                         if (isset($item->query['view']) && in_array($item->query['view'], array('category', 'categories')) && isset($item->query['id']) && $item->query['id'] == $article->parent) {
                                             $id = $item->id;
                                             break;
                                         }
                                     }
                                 }
                             }
                             if ($id) {
                                 $link .= '&Itemid=' . $id;
                             }
                             $link = JRoute::_($link);
                             if ($tag == 'link') {
                                 $str = '<a href="' . $link . '">';
                             } else {
                                 if ($tag == 'url') {
                                     $str = $link;
                                 } else {
                                     // load the content language file
                                     $lang = JFactory::getLanguage();
                                     $lang->load('com_content');
                                     $class = 'readmore';
                                     $readmore = '';
                                     if ($extra) {
                                         $extra = explode('|', $extra);
                                         if (trim($extra['0'])) {
                                             $readmore = JText::sprintf(trim($extra['0']), $article->title);
                                             if (!$readmore) {
                                                 $readmore = $extra['0'];
                                             }
                                         }
                                         if (isset($extra['1'])) {
                                             $class = trim($extra['1']);
                                         }
                                     }
                                     if (!$readmore) {
                                         if (isset($article->alternative_readmore) && $article->alternative_readmore) {
                                             $readmore = $article->alternative_readmore;
                                         } else {
                                             if (!$this->params->config->get('show_readmore_title', 0)) {
                                                 $readmore = JText::_('COM_CONTENT_READ_MORE_TITLE');
                                             } else {
                                                 $readmore = JText::_('COM_CONTENT_READ_MORE');
                                             }
                                         }
                                         if ($this->params->config->get('show_readmore_title', 0)) {
                                             $readmore .= JHtml::_('string.truncate', $article->title, $this->params->config->get('readmore_limit'));
                                         }
                                     }
                                     if ($class == 'readmore') {
                                         $str = '<p class="' . $class . '"><a href="' . $link . '">' . $readmore . '</a></p>';
                                     } else {
                                         $str = '<a class="' . $class . '" href="' . $link . '">' . $readmore . '</a>';
                                     }
                                 }
                             }
                             $ok = 1;
                         }
                     } else {
                         if ($tag == 'image-intro' && isset($article->image_intro) || $tag == 'image-fulltext' && isset($article->image_fulltext)) {
                             if ($tag == 'image-intro') {
                                 $class = 'img-intro-' . htmlspecialchars($article->float_intro);
                                 $caption = $article->image_intro_caption ? 'class="caption" title="' . htmlspecialchars($article->image_intro_caption) . '" ' : '';
                                 $src = htmlspecialchars($article->image_intro);
                                 $alt = htmlspecialchars($article->image_intro_alt);
                             } else {
                                 $class = 'img-fulltext-' . htmlspecialchars($article->float_fulltext);
                                 $caption = $article->image_fulltext_caption ? 'class="caption" title="' . htmlspecialchars($article->image_fulltext_caption) . '" ' : '';
                                 $src = htmlspecialchars($article->image_fulltext);
                                 $alt = htmlspecialchars($article->image_fulltext_alt);
                             }
                             $str = '<div class="' . $class . '"><img ' . $caption . 'src="' . $src . '" alt="' . $alt . '"/></div>';
                             $ok = 1;
                         } else {
                             if (strpos($tag, 'text') === 0 || strpos($tag, 'intro') === 0 || strpos($tag, 'full') === 0) {
                                 // TEXT data
                                 $article->text = '';
                                 if (!(strpos($tag, 'intro') === false)) {
                                     if (isset($article->introtext)) {
                                         $article->text = $article->introtext;
                                         $ok = 1;
                                     }
                                 } else {
                                     if (!(strpos($tag, 'full') === false)) {
                                         if (isset($article->fulltext)) {
                                             $article->text = $article->fulltext;
                                             $ok = 1;
                                         }
                                     } else {
                                         if (!(strpos($tag, 'text') === false)) {
                                             if (isset($article->introtext) && isset($article->fulltext)) {
                                                 $article->text = $article->introtext . $article->fulltext;
                                                 $ok = 1;
                                             }
                                         }
                                     }
                                 }
                                 $str = $article->text;
                                 if ($extra) {
                                     $attribs = explode(':', $extra);
                                     $max = 0;
                                     $strip = 0;
                                     $noimages = 0;
                                     foreach ($attribs as $attrib) {
                                         $attrib = trim($attrib);
                                         switch ($attrib) {
                                             case 'strip':
                                                 $strip = 1;
                                                 break;
                                             case 'noimages':
                                                 $noimages = 1;
                                                 break;
                                             default:
                                                 $max = $attrib;
                                                 break;
                                         }
                                     }
                                     $word_limit = !(strpos($max, 'word') === false);
                                     if ($strip) {
                                         // remove pagenavcounter
                                         $str = preg_replace('#(<' . 'div class="pagenavcounter">.*?</div>)#si', ' ', $str);
                                         // remove pagenavbar
                                         $str = preg_replace('#(<' . 'div class="pagenavbar">(<div>.*?</div>)*</div>)#si', ' ', $str);
                                         // remove scripts
                                         $str = preg_replace('#(<' . 'script[^a-z0-9].*?</script>)#si', ' ', $str);
                                         $str = preg_replace('#(<' . 'noscript[^a-z0-9].*?</noscript>)#si', ' ', $str);
                                         // remove other tags
                                         $str = preg_replace('#(<' . '/?[a-z][a-z0-9]?.*?>)#si', ' ', $str);
                                         // remove double whitespace
                                         $str = trim(preg_replace('#\\s+#s', ' ', $str));
                                         if ($max) {
                                             $orig_len = strlen($str);
                                             if ($word_limit) {
                                                 // word limit
                                                 $str = trim(preg_replace('#^(([^\\s]+\\s*){' . (int) $max . '}).*$#s', '\\1', $str));
                                                 if (strlen($str) < $orig_len) {
                                                     if (preg_match('#[^a-z0-9]$#si', $str)) {
                                                         $str .= ' ';
                                                     }
                                                     if ($this->params->use_ellipsis) {
                                                         $str .= '...';
                                                     }
                                                 }
                                             } else {
                                                 // character limit
                                                 $max = (int) $max;
                                                 if ($max < $orig_len) {
                                                     $str = rtrim(substr($str, 0, $max - 3));
                                                     if (preg_match('#[^a-z0-9]$#si', $str)) {
                                                         $str .= ' ';
                                                     }
                                                     if ($this->params->use_ellipsis) {
                                                         $str .= '...';
                                                     }
                                                 }
                                             }
                                         }
                                     } else {
                                         if ($noimages) {
                                             // remove images
                                             $str = preg_replace('#(<p><' . 'img\\s.*?></p>|<' . 'img\\s.*?>)#si', ' ', $str);
                                         }
                                     }
                                     if (!$strip && $max && ($word_limit || (int) $max < strlen($str))) {
                                         $max = (int) $max;
                                         // store pagenavcounter & pagenav (exclude from count)
                                         preg_match('#<' . 'div class="pagenavcounter">.*?</div>#si', $str, $pagenavcounter);
                                         $pagenavcounter = isset($pagenavcounter['0']) ? $pagenavcounter['0'] : '';
                                         if ($pagenavcounter) {
                                             $str = str_replace($pagenavcounter, '<!-- ARTA_PAGENAVCOUNTER -->', $str);
                                         }
                                         preg_match('#<' . 'div class="pagenavbar">(<div>.*?</div>)*</div>#si', $str, $pagenav);
                                         $pagenav = isset($pagenav['0']) ? $pagenav['0'] : '';
                                         if ($pagenav) {
                                             $str = str_replace($pagenav, '<!-- ARTA_PAGENAV -->', $str);
                                         }
                                         // add explode helper strings around tags
                                         $explode_str = '<!-- ARTA_TAG -->';
                                         $str = preg_replace('#(<\\/?[a-z][a-z0-9]?.*?>|<!--.*?-->)#si', $explode_str . '\\1' . $explode_str, $str);
                                         $str_array = explode($explode_str, $str);
                                         $str = array();
                                         $tags = array();
                                         $count = 0;
                                         $is_script = 0;
                                         foreach ($str_array as $i => $str_part) {
                                             if (fmod($i, 2)) {
                                                 // is tag
                                                 $str[] = $str_part;
                                                 preg_match('#^<(\\/?([a-z][a-z0-9]*))#si', $str_part, $tag);
                                                 if (!empty($tag)) {
                                                     if ($tag['1'] == 'script') {
                                                         $is_script = 1;
                                                     }
                                                     if (!$is_script && strpos($str_part, '/>') === false && !in_array($tag['2'], array('area', 'br', 'hr', 'img', 'input', 'param'))) {
                                                         $tags[] = $tag['1'];
                                                     }
                                                     if ($tag['1'] == '/script') {
                                                         $is_script = 0;
                                                     }
                                                 }
                                             } else {
                                                 if ($is_script) {
                                                     $str[] = $str_part;
                                                 } else {
                                                     if ($word_limit) {
                                                         // word limit
                                                         if ($str_part) {
                                                             $words = explode(' ', trim($str_part));
                                                             $word_count = count($words);
                                                             if ($max < $count + $word_count) {
                                                                 $words_part = array();
                                                                 $word_count = 0;
                                                                 foreach ($words as $word) {
                                                                     if ($word) {
                                                                         $word_count++;
                                                                     }
                                                                     if ($max < $count + $word_count) {
                                                                         break;
                                                                     }
                                                                     $words_part[] = $word;
                                                                 }
                                                                 $string = rtrim(implode(' ', $words_part));
                                                                 if (preg_match('#[^a-z0-9]$#si', $string)) {
                                                                     $string .= ' ';
                                                                 }
                                                                 if ($this->params->use_ellipsis) {
                                                                     $string .= '...';
                                                                 }
                                                                 $str[] = $string;
                                                                 break;
                                                             }
                                                             $count += $word_count;
                                                         }
                                                         $str[] = $str_part;
                                                     } else {
                                                         // character limit
                                                         if ($max < $count + strlen($str_part)) {
                                                             // strpart has to be cut off
                                                             $maxlen = $max - $count;
                                                             if ($maxlen < 3) {
                                                                 $string = '';
                                                                 if (preg_match('#[^a-z0-9]$#si', $str_part)) {
                                                                     $string .= ' ';
                                                                 }
                                                                 if ($this->params->use_ellipsis) {
                                                                     $string .= '...';
                                                                 }
                                                                 $str[] = $string;
                                                             } else {
                                                                 $string = rtrim(substr($str_part, 0, $maxlen - 3));
                                                                 if (preg_match('#[^a-z0-9]$#si', $string)) {
                                                                     $string .= ' ';
                                                                 }
                                                                 if ($this->params->use_ellipsis) {
                                                                     $string .= '...';
                                                                 }
                                                                 $str[] = $string;
                                                             }
                                                             break;
                                                         }
                                                         $count += strlen($str_part);
                                                         $str[] = $str_part;
                                                     }
                                                 }
                                             }
                                         }
                                         // revers sort open tags
                                         krsort($tags);
                                         $tags = array_values($tags);
                                         $count = count($tags);
                                         for ($i = 0; $i < 3; $i++) {
                                             foreach ($tags as $ti => $tag) {
                                                 if ($tag['0'] == '/') {
                                                     for ($oi = $ti + 1; $oi < $count; $oi++) {
                                                         $opentag = $tags[$oi];
                                                         if ($opentag == $tag) {
                                                             break;
                                                         }
                                                         if ('/' . $opentag == $tag) {
                                                             unset($tags[$ti]);
                                                             unset($tags[$oi]);
                                                             break;
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                         foreach ($tags as $tag) {
                                             // add closing tag to end of string
                                             if ($tag['0'] != '/') {
                                                 $str[] = '</' . $tag . '>';
                                             }
                                         }
                                         $str = implode('', $str);
                                         $str = str_replace(array('<!-- ARTA_PAGENAVCOUNTER -->', '<!-- ARTA_PAGENAV -->'), array($pagenavcounter, $pagenav), $str);
                                     }
                                 }
                                 // Fix links in pagination to point to the included article instead of the main article
                                 // This doesn't seem to work correctly and causes issues with other links in the article
                                 // So commented out untill I find a better solution
                                 /*if ($art && isset($art->id) && $art->id) {
                                 			$str = str_replace('view=article&amp;id=' . $art->id, 'view=article&amp;id=' . $article->id, $str);
                                 		}*/
                             } else {
                                 if (ctype_alnum(str_replace(array('-', '_'), '', $tag))) {
                                     // Get data from db columns
                                     if (isset($article->{$tag})) {
                                         $str = $article->{$tag};
                                         $ok = 1;
                                     }
                                     if ($ok && !(strpos($str, '-') == false) && !preg_match('#[a-z]#i', $str) && strtotime($str)) {
                                         if (!$extra) {
                                             $extra = JText::_('DATE_FORMAT_LC2');
                                         }
                                         if (!(strpos($extra, '%') === false)) {
                                             $extra = NNText::dateToDateFormat($extra);
                                         }
                                         $str = JHtml::_('date', $str, $extra);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
         if ($ok) {
             $text = str_replace($match['0'], $str, $text);
         }
     }
     return $text;
 }
Exemple #5
0
	static function dateToDateFormat($dateFormat)
	{
		require_once __DIR__ . '/text.php';

		return NNText::dateToDateFormat($dateFormat);
	}