joomla_test/modules/mod_roktabs/helper.php
2020-01-02 22:20:31 +07:00

572 lines
18 KiB
PHP

<?php
/**
* @version $Id: helper.php 6824 2013-01-28 06:14:09Z btowles $
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2013 RocketTheme, LLC
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
*
*/
// no direct access
defined('_JEXEC') or die('Restricted access');
require_once (JPath::clean(JPATH_SITE . '/components/com_content/models/articles.php'));
require_once (JPath::clean(JPATH_SITE . '/components/com_content/helpers/route.php'));
if (file_exists(JPath::clean(JPATH_SITE . '/libraries/joomla/html/html/content.php'))) require_once (JPath::clean(JPATH_SITE . '/libraries/joomla/html/html/content.php'));
if (class_exists('JModelLegacy')) JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_content/models', 'ContentModel');
class modRokTabsHelper
{
function getList($params)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$user = JFactory::getUser();
$userId = (int)$user->get('id');
$jnow = JFactory::getDate();
$now = $db->Quote($jnow->toSql());
$null = $db->Quote($db->getNullDate());
$count = $params->get('count', 4);
$catid = $params->get('catid');
$show_front = $params->get('show_front', 1);
$aid = $user->get('aid', 0);
$content_type = $params->get('content_type', 'joomla');
$ordering = $params->get('itemsOrdering');
$cid = $params->get('category_id', NULL);
$user_id = $params->get('user_id');
$text_length = intval($params->get('preview_count', 200));
$tags_option = $params->get('strip_tags', 'a,i,br,img');
$thumb_size = $params->get('thumb_width', 90);
$show_thumbnails = $params->get('show_thumbnails', 1);
$thumbnail_link = $params->get('thumbnail_link', 1);
$params->set('tabs_count', $count);
// content specific stuff
if ($content_type == 'joomla') {
// start Joomla specific
jimport('joomla.application.component.model');
// Get an instance of the generic articles model
if (class_exists('JModelLegacy')) {
$model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));
} else {
$model = JModel::getInstance('Articles', 'ContentModel', array('ignore_request' => true));
}
// Set application parameters in model
$appParams = JFactory::getApplication()->getParams();
$model->setState('params', $appParams);
// Set the filters based on the module params
$model->setState('list.start', 0);
$model->setState('list.limit', $count);
$model->setState('filter.published', 1);
// Access filter
$access = !JComponentHelper::getParams('com_content')->get('show_noauth');
$authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id'));
$model->setState('filter.access', $access);
// Category filter
$model->setState('filter.category_id', $catid);
// User filter
$userId = JFactory::getUser()->get('id');
switch ($user_id) {
case 'by_me':
$model->setState('filter.author_id', (int)$userId);
break;
case 'not_me':
$model->setState('filter.author_id', $userId);
$model->setState('filter.author_id.include', false);
break;
case 0:
break;
default:
$model->setState('filter.author_id', $user_id);
break;
}
// Featured switch
switch ($show_front) {
case 1:
$model->setState('filter.featured', 'show');
break;
case 0:
$model->setState('filter.featured', 'hide');
break;
default:
$model->setState('filter.featured', 'only');
break;
}
// ordering
switch ($ordering) {
case 'date' :
$orderby = 'a.created ASC';
break;
case 'rdate' :
$orderby = 'a.created DESC';
break;
case 'alpha' :
$orderby = 'a.title';
break;
case 'ralpha' :
$orderby = 'a.title DESC';
break;
case 'order':
if ($show_front == '2') $orderby = 'a.featured_ordering'; else
$orderby = 'a.ordering';
break;
case 'random' :
$orderby = 'RAND()';
break;
default :
$orderby = 'a.id DESC';
break;
}
$ordering = explode(' ', $orderby);
$model->setState('list.ordering', $ordering[0]);
$model->setState('list.direction', isset($ordering[1]) ? $ordering[1] : null);
$rows = $model->getItems();
// end Joomla specific
} else {
// start K2 specific
require_once(JPATH_SITE . '/components/com_k2/models/itemlist.php');
require_once(JPATH_SITE . '/components/com_k2/helpers/route.php');
require_once(JPATH_SITE . '/components/com_k2/helpers/utilities.php');
//Initialize Variables
$k2_category = $params->get('k2_category', array());
$k2_children = $params->get('k2_children', 0);
$k2_ordering = $params->get('k2_ordering', 'a.title');
$k2_featured = $params->get('k2_featured', 1);
$k2_image_size = $params->get('k2_image_size', 'M');
$query = "SELECT a.*, c.name AS categoryname,c.id AS categoryid, c.alias AS categoryalias, c.params AS categoryparams";
$query .= " FROM #__k2_items as a LEFT JOIN #__k2_categories c ON c.id = a.catid";
$query .= " WHERE a.published = 1 AND a.access IN(" . implode(',', $user->authorisedLevels()) . ") AND a.trash = 0 AND c.published = 1 AND c.access IN(" . implode(',', $user->authorisedLevels()) . ") AND c.trash = 0";
//User Filter
switch ($user_id) {
case 'by_me':
$query .= ' AND (a.created_by = ' . (int)$userId . ' OR a.modified_by = ' . (int)$userId . ')';
break;
case 'not_me':
$query .= ' AND (a.created_by <> ' . (int)$userId . ' AND a.modified_by <> ' . (int)$userId . ')';
break;
}
$query .= " AND ( a.publish_up = " . $null . " OR a.publish_up <= " . $now . " )";
$query .= " AND ( a.publish_down = " . $null . " OR a.publish_down >= " . $now . " )";
if (!is_null($k2_category)) {
if (is_array($k2_category)) {
if ($k2_children) {
require_once (JPATH_SITE . '/components/com_k2/models/itemlist.php');
$categories = K2ModelItemlist::getCategoryTree($k2_category);
$sql = @implode(',', $categories);
$query .= " AND a.catid IN ({$sql})";
} else {
JArrayHelper::toInteger($k2_category);
$query .= " AND a.catid IN(" . implode(',', $k2_category) . ")";
}
} else {
if ($k2_children) {
require_once (JPATH_SITE . '/components/com_k2/models/itemlist.php');
$categories = K2ModelItemlist::getCategoryTree($k2_category);
$sql = @implode(',', $categories);
$query .= " AND a.catid IN ({$sql})";
} else {
$query .= " AND a.catid=" . (int)$k2_category;
}
}
}
if ($k2_featured == '0') $query .= " AND a.featured != 1";
if ($k2_featured == '2') $query .= " AND a.featured = 1";
if ($app->getLanguageFilter()) {
$languageTag = JFactory::getLanguage()->getTag();
$query .= " AND c.language IN (" . $db->Quote($languageTag) . ", " . $db->Quote('*') . ") AND a.language IN (" . $db->Quote($languageTag) . ", " . $db->Quote('*') . ")";
}
// ordering
switch ($k2_ordering) {
case 'date' :
$orderby = 'a.created ASC';
break;
case 'rdate' :
$orderby = 'a.created DESC';
break;
case 'alpha' :
$orderby = 'a.title';
break;
case 'ralpha' :
$orderby = 'a.title DESC';
break;
case 'order':
if ($k2_featured == '2') $orderby = 'a.featured_ordering'; else
$orderby = 'a.ordering';
break;
case 'random' :
$orderby = 'RAND()';
break;
default :
$orderby = 'a.id DESC';
break;
}
$query .= " ORDER BY " . $orderby;
$db->setQuery($query, 0, $count);
$rows = $db->loadObjectList();
}
// Process the prepare content plugins
JPluginHelper::importPlugin('content');
$i = 0;
$lists = array();
foreach ($rows as $row) {
$user = JFactory::getUser();
$dispatcher = JDispatcher::getInstance();
$results = @$dispatcher->trigger('onContentPrepare', array('com_content.article', & $row, & $params, 0));
$text = JHtml::_('content.prepare', $row->introtext);
$lists[$i] = new stdClass();
$lists[$i]->id = $row->id;
$lists[$i]->created = $row->created;
$lists[$i]->modified = $row->modified;
if ($content_type == 'joomla') {
$link = JRoute::_(ContentHelperRoute::getArticleRoute($row->id, $row->catid));
$readmore_register = false;
$images = self::getImages($row->introtext, $thumb_size);
} else {
$link = JRoute::_(K2HelperRoute::getItemRoute($row->id, $row->catid));
$readmore_register = false;
$images = self::getK2Images($row->id, $k2_image_size, $thumb_size);
}
$lists[$i]->link = $link;
$lists[$i]->readmore_register = $readmore_register;
if ($images) {
$lists[$i]->image = $images->image;
$lists[$i]->thumb = $images->thumb;
$lists[$i]->thumbSizes = $images->thumbSizes;
} else {
$lists[$i]->image = '';
$lists[$i]->thumb = '';
$lists[$i]->thumbSizes = '';
}
$lists[$i]->title = htmlspecialchars($row->title);
$thumb = '';
if ($content_type == 'k2') {
if ($show_thumbnails && $images->thumb) {
if ($thumbnail_link) {
$thumb .= '<a href="' . $link . '">';
}
$thumb .= '<img src="' . $images->thumb . '" alt="' . htmlspecialchars($row->title) . '" style="float:left; padding:5px;" />';
if ($thumbnail_link) {
$thumb .= '</a>';
}
}
}
$lists[$i]->introtext = $thumb;
$lists[$i]->introtext .= self::prepareContent($text, $text_length, $params->get('show_readmore'), $tags_option);
if ($params->get('show_readmore')) {
ob_start();
?>
<a href="<?php echo $lists[$i]->link; ?>" class="readon"><span>
<?php if ($lists[$i]->readmore_register) :
echo JText::_('Register to read more...'); elseif ($readmore = $params->get('readmore')) :
echo $readmore; else :
echo JText::sprintf('Read more...');
endif; ?></span></a>
<?php
$readmore_html = ob_get_clean();
$lists[$i]->introtext .= $readmore_html;
}
$i++;
}
return $lists;
}
private static function getK2Images($id, $image_size, $thumb_size = 70)
{
$images = new stdClass();
$images->image = false;
$images->thumb = false;
$images->thumbSizes = array('width' => $thumb_size, 'height' => 'auto');
$current_size = intval($thumb_size);
if (file_exists(JPATH_SITE . '/media/k2/items/cache/' . md5("Image" . $id) . '_' . $image_size . '.jpg')) {
$image_path = 'media/k2/items/cache/' . md5("Image" . $id) . '_' . $image_size . '.jpg';
$images->image = JURI::Root(true) . '/' . $image_path;
// create a thumb filename
$file_div = strrpos($image_path, '.');
$thumb_ext = substr($image_path, $file_div);
$thumb_prev = substr($image_path, 0, $file_div);
$thumb_path = $thumb_prev . "_thumb" . $thumb_ext;
// check to see if this file exists, if so we don't need to create it
if (function_exists("gd_info")) {
// file doens't exist, so create it and save it
if (!class_exists("Thumbnail")) include_once('thumbnail.inc.php');
if (file_exists($thumb_path)) {
$existing_thumb = new Thumbnail($thumb_path);
$current_size = $existing_thumb->getCurrentWidth();
$images->thumbSizes = $existing_thumb->currentDimensions;
}
if (!file_exists($thumb_path) || $current_size != $thumb_size) {
$thumb = new Thumbnail($image_path);
if ($thumb->error) {
echo "ROKSTORIES ERROR: " . $thumb->errmsg . ": " . $image_path;
return false;
}
$thumb->resize($thumb_size);
if (!is_writable(dirname($thumb_path))) {
$thumb->destruct();
return false;
}
$thumb->save($thumb_path);
$images->thumbSizes = $thumb->currentDimensions;
$thumb->destruct();
}
}
$images->thumb = $thumb_path;
}
return $images;
}
private static function getImages($text, $thumb_size = 70)
{
preg_match("/\<img.+?src=\"(.+?)\".+?\/>/", $text, $matches);
$images = new stdClass();
$images->image = false;
$images->thumb = false;
$images->thumbSizes = array('width' => $thumb_size, 'height' => 'auto');
$paths = array();
if (isset($matches[1])) {
$image_path = $matches[1];
//joomla 1.5 only
$full_url = JURI::base();
//remove any protocol/site info from the image path
$parsed_url = parse_url($full_url);
$paths[] = $full_url;
if (isset($parsed_url['path']) && $parsed_url['path'] != "/") $paths[] = $parsed_url['path'];
foreach ($paths as $path) {
if (strpos($image_path, $path) === 0) {
$image_path = substr($image_path, strpos($image_path, $path) + strlen($path));
}
}
// remove any / that begins the path
if (substr($image_path, 0, 1) == '/') $image_path = substr($image_path, 1);
//if after removing the uri, still has protocol then the image
//is remote and we don't support thumbs for external images
if (strpos($image_path, 'http://') !== false || strpos($image_path, 'https://') !== false
) {
return false;
}
$images->image = JURI::Root(True) . "/" . $image_path;
// create a thumb filename
$file_div = strrpos($image_path, '.');
$thumb_ext = substr($image_path, $file_div);
$thumb_prev = substr($image_path, 0, $file_div);
$thumb_path = $thumb_prev . "_thumb" . $thumb_ext;
// check to see if this file exists, if so we don't need to create it
if (function_exists("gd_info")) {
// file doens't exist, so create it and save it
if (!class_exists("Thumbnail")) include_once('thumbnail.inc.php');
if (file_exists($thumb_path)) {
$existing_thumb = new Thumbnail($thumb_path);
$current_size = $existing_thumb->getCurrentWidth();
$images->thumbSizes = $existing_thumb->currentDimensions;
} else {
$thumb = new Thumbnail($image_path);
if ($thumb->error) {
echo "ROKSTORIES ERROR: " . $thumb->errmsg . ": " . $image_path;
return false;
}
$thumb->resize($thumb_size);
if (!is_writable(dirname($thumb_path))) {
$thumb->destruct();
return false;
}
$thumb->save($thumb_path);
$images->thumbSizes = $thumb->currentDimensions;
$thumb->destruct();
}
}
$images->thumb = $thumb_path;
}
return $images;
}
public static function write_tabs($tabs, $tabs_position, &$list, $tabs_title, $tabs_incremental, $tabs_hideh6, $params = null)
{
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
$app = JFactory::getApplication();
if (empty($params)) {
$params = new JForm("");
}
$tabs_prefixed = $params->get('tabs_prefixed', 0);
$navscrolling = $params->get('navscrolling', 1);
$tabs_hideh6 = $params->get('tabs_hideh6', 1);
$tabs_title = $params->get('tabs_title', 'content'); // content | h6 | incremental
$tabs_showicons = $params->get('tabs_showicons', 0);
$tabs_iconpath = $params->get('tabs_iconpath', '__module__/images');
$tabs_icon = $params->get('tabs_icon');
$tabs_iconside = $params->get('tabs_iconside', 'left');
// replace template token
$tabs_iconpath = str_replace('__template__', 'templates/' . $app->getTemplate(), $tabs_iconpath);
$tabs_iconpath = str_replace('__module__', 'modules/mod_roktabs', $tabs_iconpath);
$tabs_icons = explode(',', $tabs_icon);
$iconpath = JPATH_SITE . '/' . $tabs_iconpath;
$iconpath_exists = JFolder::exists($iconpath);
if ($tabs_position == 'hidden') $tabstyle = 'style="display: none;"'; else $tabstyle = '';
$return = '';
$return .= "<div class='roktabs-links" . (!$navscrolling ? ' roktabs-links-noscroll' : '') . "' $tabstyle>\n";
$return .= "<ul class='roktabs-$tabs_position'>\n";
$tabs = intval($tabs);
if ($tabs == 0 || $tabs > count($list)) $tabs = count($list);
for ($i = 0; $i < $tabs; $i++) {
if ($list[$i]->introtext != '') {
$class = '';
if (!$i) $class = 'first active';
if ($i == $tabs - 1) $class = 'last';
switch ($tabs_title) {
case 'incremental':
if (strlen($tabs_incremental) > 0) $title = $tabs_incremental . '' . ($i + 1); else $title = $tabs_incremental . '' . ($i + 1);
break;
case 'h6':
$regex = '/<h6(?:.+)?>(.+?)<\/h6>/is';
preg_match($regex, $list[$i]->introtext, $matches);
if (count($matches) && strlen($matches[1]) > 0) {
$title = $matches[1];
if ($tabs_hideh6 == "1") {
$list[$i]->introtext = str_replace($matches[0], '', $list[$i]->introtext);
}
break;
}
default:
$title = $list[$i]->title;
}
$icon = '';
if ($tabs_showicons == 1 && $iconpath_exists && isset($tabs_icons[$i]) && $tabs_icon[$i] != '__none__') {
$thisicon = $tabs_icons[$i];
$thisiconpath = $iconpath . '/' . $thisicon;
if (JFile::exists($thisiconpath)) {
$thisiconuri = JURI::root(true) . "/" . $tabs_iconpath . "/" . $thisicon;
$icon = '<img src="' . $thisiconuri . '" class="tab-icon" alt="' . $list[$i]->title . '" />';
}
}
// set icons on the correct side
if ($tabs_iconside == 'left') {
$title = $icon . $title;
$class .= ' icon-left';
} else {
$title = $title . $icon;
$class .= ' icon-right';
}
if ($tabs_prefixed) $return .= "<li class=\"$class\"><span class=\"tabnumber\"><span class=\"tabnumber2\">" . ($i + 1) . "</span></span><span>$title</span></li>\n"; else $return .= "<li class=\"$class\"><span>$title</span></li>\n";
}
}
$return .= "</ul>\n";
$return .= "</div>\n";
return $return;
}
public static function _getJSVersion()
{
return "";
}
private static function prepareContent($text, $length = 200, $show_readmore = false, $tags_option)
{
$tags = explode(",", $tags_option);
$strip_tags = array();
for ($i = 0; $i < count($tags); $i++) {
$strip_tags[$i] = '<' . trim($tags[$i]) . '>';
}
$tags = implode(',', $strip_tags);
// strips tags won't remove the actual jscript
$text = preg_replace("'<script[^>]*>.*?</script>'si", "", $text);
$text = preg_replace('/{.+?}/', '', $text);
$text = strip_tags($text, $tags);
// cut off text at word boundary if required
if (strlen($text) > $length) {
//$text = substr($text, 0, strpos($text, ' ', $length)) . "..." ;
}
return $text;
}
}