first commit
This commit is contained in:
539
modules/mod_jt_contentslider/Helper/JTContentSliderHelper.php
Normal file
539
modules/mod_jt_contentslider/Helper/JTContentSliderHelper.php
Normal file
@@ -0,0 +1,539 @@
|
||||
<?php
|
||||
/**
|
||||
* @package mod_jt_contentslider
|
||||
* @copyright Copyright (C) 2007 - 2021 http://www.joomlatema.net, Inc. All rights reserved.
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
|
||||
* @author JoomlaTema.Net
|
||||
* @link http://www.joomlatema.net
|
||||
***/
|
||||
|
||||
namespace Joomla\Module\JTContentSlider\Site\Helper;
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
use Joomla\CMS\Access\Access;
|
||||
use Joomla\CMS\Component\ComponentHelper;
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\Component\Content\Site\Model\ArticlesModel;
|
||||
use Joomla\Registry\Registry;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
|
||||
use Joomla\CMS\Date\Date;
|
||||
use Joomla\CMS\Filesystem\File;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
use Joomla\CMS\Image\Image;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
|
||||
\JLoader::register('ContentHelperRoute', JPATH_SITE . '/components/com_content/helpers/route.php');
|
||||
|
||||
|
||||
const IMAGE_HANDLERS = [
|
||||
IMAGETYPE_JPEG => [
|
||||
'load' => 'imagecreatefromjpeg',
|
||||
'save' => 'imagejpeg',
|
||||
'quality' => 100
|
||||
],
|
||||
IMAGETYPE_PNG => [
|
||||
'load' => 'imagecreatefrompng',
|
||||
'save' => 'imagepng',
|
||||
'quality' => 0
|
||||
],
|
||||
IMAGETYPE_GIF => [
|
||||
'load' => 'imagecreatefromgif',
|
||||
'save' => 'imagegif'
|
||||
]
|
||||
];
|
||||
|
||||
class ThumbImage
|
||||
{
|
||||
function resize_crop_image($max_width, $max_height, $source_file, $dst_dir, $quality = 80){
|
||||
$imgsize = getimagesize($source_file);
|
||||
$width = $imgsize[0];
|
||||
$height = $imgsize[1];
|
||||
$mime = $imgsize['mime'];
|
||||
|
||||
switch($mime){
|
||||
case 'image/gif':
|
||||
$image_create = "imagecreatefromgif";
|
||||
$image = "imagegif";
|
||||
break;
|
||||
|
||||
case 'image/png':
|
||||
$image_create = "imagecreatefrompng";
|
||||
$image = "imagepng";
|
||||
$quality = 7;
|
||||
break;
|
||||
|
||||
case 'image/jpeg':
|
||||
$image_create = "imagecreatefromjpeg";
|
||||
$image = "imagejpeg";
|
||||
$quality = 80;
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
/////////////////////////////////*******************///////////////////
|
||||
if ($max_height == null) {
|
||||
|
||||
// get width to height ratio
|
||||
$ratio = $width / $height;
|
||||
|
||||
// if is portrait
|
||||
// use ratio to scale height to fit in square
|
||||
if ($width > $height) {
|
||||
$max_height = floor($max_width / $ratio);
|
||||
}
|
||||
// if is landscape
|
||||
// use ratio to scale width to fit in square
|
||||
else {
|
||||
$max_height = $max_width;
|
||||
$max_width = floor($max_width * $ratio);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////**************************////////////////////////
|
||||
|
||||
$dst_img = imagecreatetruecolor($max_width, $max_height);
|
||||
$src_img = $image_create($source_file);
|
||||
|
||||
|
||||
$width_new = $height * $max_width / $max_height;
|
||||
$height_new = $width * $max_height / $max_width;
|
||||
//if the new width is greater than the actual width of the image, then the height is too large and the rest cut off, or vice versa
|
||||
if($width_new > $width){
|
||||
//cut point by height
|
||||
$h_point = (($height - $height_new) / 2);
|
||||
//copy image
|
||||
imagecopyresampled($dst_img, $src_img, 0, 0, 0, $h_point, $max_width, $max_height, $width, $height_new);
|
||||
}else{
|
||||
//cut point by width
|
||||
$w_point = (($width - $width_new) / 2);
|
||||
imagecopyresampled($dst_img, $src_img, 0, 0, $w_point, 0, $max_width, $max_height, $width_new, $height);
|
||||
}
|
||||
|
||||
if ($image = "imagegif"){
|
||||
$image($dst_img, $dst_dir);}
|
||||
else{
|
||||
$image($dst_img, $dst_dir, $quality);
|
||||
}
|
||||
if($dst_img)imagedestroy($dst_img);
|
||||
if($src_img)imagedestroy($src_img);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $src - a valid file location
|
||||
* @param $dest - a valid file target
|
||||
* @param $targetWidth - desired output width
|
||||
* @param $targetHeight - desired output height or null
|
||||
*/
|
||||
function createThumbnail($src, $dest, $targetWidth, $targetHeight) {
|
||||
|
||||
// 1. Load the image from the given $src
|
||||
// - see if the file actually exists
|
||||
// - check if it's of a valid image type
|
||||
// - load the image resource
|
||||
|
||||
// get the type of the image
|
||||
// we need the type to determine the correct loader
|
||||
$type = exif_imagetype($src);
|
||||
|
||||
// if no valid type or no handler found -> exit
|
||||
if (!$type || !IMAGE_HANDLERS[$type]) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// load the image with the correct loader
|
||||
$image = call_user_func(IMAGE_HANDLERS[$type]['load'], $src);
|
||||
|
||||
// no image found at supplied location -> exit
|
||||
if (!$image) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
// 2. Create a thumbnail and resize the loaded $image
|
||||
// - get the image dimensions
|
||||
// - define the output size appropriately
|
||||
// - create a thumbnail based on that size
|
||||
// - set alpha transparency for GIFs and PNGs
|
||||
// - draw the final thumbnail
|
||||
|
||||
// get original image width and height
|
||||
$width = imagesx($image);
|
||||
$height = imagesy($image);
|
||||
|
||||
// maintain aspect ratio when no height set
|
||||
if ($targetHeight == null) {
|
||||
|
||||
// get width to height ratio
|
||||
$ratio = $width / $height;
|
||||
|
||||
// if is portrait
|
||||
// use ratio to scale height to fit in square
|
||||
if ($width > $height) {
|
||||
$targetHeight = floor($targetWidth / $ratio);
|
||||
}
|
||||
// if is landscape
|
||||
// use ratio to scale width to fit in square
|
||||
else {
|
||||
$targetHeight = $targetWidth;
|
||||
$targetWidth = floor($targetWidth * $ratio);
|
||||
}
|
||||
}
|
||||
|
||||
// create duplicate image based on calculated target size
|
||||
$thumbnail = imagecreatetruecolor($targetWidth, $targetHeight);
|
||||
|
||||
// set transparency options for GIFs and PNGs
|
||||
if ($type == IMAGETYPE_GIF || $type == IMAGETYPE_PNG) {
|
||||
|
||||
// make image transparent
|
||||
imagecolortransparent(
|
||||
$thumbnail,
|
||||
imagecolorallocate($thumbnail, 0, 0, 0)
|
||||
);
|
||||
|
||||
// additional settings for PNGs
|
||||
if ($type == IMAGETYPE_PNG) {
|
||||
imagealphablending($thumbnail, false);
|
||||
imagesavealpha($thumbnail, true);
|
||||
}
|
||||
}
|
||||
|
||||
// copy entire source image to duplicate image and resize
|
||||
imagecopyresampled(
|
||||
$thumbnail,
|
||||
$image,
|
||||
0, 0, 0, 0,
|
||||
$targetWidth, $targetHeight,
|
||||
$width, $height
|
||||
);
|
||||
|
||||
|
||||
// 3. Save the $thumbnail to disk
|
||||
// - call the correct save method
|
||||
// - set the correct quality level
|
||||
|
||||
// save the duplicate version of the image to disk
|
||||
|
||||
if ($type == IMAGETYPE_GIF) {
|
||||
return call_user_func(
|
||||
IMAGE_HANDLERS[$type]['save'],
|
||||
$thumbnail,
|
||||
$dest
|
||||
);
|
||||
}
|
||||
else {
|
||||
return call_user_func(
|
||||
IMAGE_HANDLERS[$type]['save'],
|
||||
$thumbnail,
|
||||
$dest,
|
||||
IMAGE_HANDLERS[$type]['quality']
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
abstract class JTContentSliderHelper
|
||||
{
|
||||
/**
|
||||
* Retrieve a list of article
|
||||
*
|
||||
* @param Registry $params The module parameters.
|
||||
* @param ArticlesModel $model The model.
|
||||
*
|
||||
* @return mixed
|
||||
*
|
||||
* @since 1.6
|
||||
*/
|
||||
public static function getList(Registry $params, ArticlesModel $model)
|
||||
{
|
||||
// Get the Dbo and User object
|
||||
$db = Factory::getDbo();
|
||||
$user = Factory::getUser();
|
||||
|
||||
// Set application parameters in model
|
||||
$app = Factory::getApplication();
|
||||
$appParams = $app->getParams();
|
||||
$model->setState('params', $appParams);
|
||||
|
||||
// Set the filters based on the module params
|
||||
$model->setState('list.start', (int) $params->get('num_intro_skip', 0));
|
||||
$model->setState('list.limit', (int) $params->get('count', 5));
|
||||
$model->setState('filter.published', 1);
|
||||
|
||||
// This module does not use tags data
|
||||
$model->setState('load_tags', false);
|
||||
|
||||
// Access filter
|
||||
$access = !ComponentHelper::getParams('com_content')->get('show_noauth');
|
||||
$authorised = Access::getAuthorisedViewLevels($user->get('id'));
|
||||
$model->setState('filter.access', $access);
|
||||
|
||||
// Category filter
|
||||
$model->setState('filter.category_id', $params->get('catid', array()));
|
||||
|
||||
// User filter
|
||||
$userId = $user->get('id');
|
||||
|
||||
switch ($params->get('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 'created_by' :
|
||||
$model->setState('filter.author_id', $params->get('author', array()));
|
||||
break;
|
||||
|
||||
case '0' :
|
||||
break;
|
||||
|
||||
default:
|
||||
$model->setState('filter.author_id', (int) $params->get('user_id'));
|
||||
break;
|
||||
}
|
||||
|
||||
// Filter by language
|
||||
$model->setState('filter.language', $app->getLanguageFilter());
|
||||
|
||||
// Featured switch
|
||||
$featured = $params->get('show_featured', '');
|
||||
|
||||
if ($featured === '')
|
||||
{
|
||||
$model->setState('filter.featured', 'show');
|
||||
}
|
||||
elseif ($featured)
|
||||
{
|
||||
$model->setState('filter.featured', 'only');
|
||||
}
|
||||
else
|
||||
{
|
||||
$model->setState('filter.featured', 'hide');
|
||||
}
|
||||
|
||||
// Set ordering
|
||||
$order_map = array(
|
||||
'a.created' => 'a.created',
|
||||
'a.publish_up' => 'a.publish_up',
|
||||
'a.ordering'=> 'a.ordering',
|
||||
'fp.ordering' => 'fp.ordering',
|
||||
'a.hits' => 'a.hits',
|
||||
'a.title' => 'a.title',
|
||||
'a.id' => 'a.id',
|
||||
'a.alias' => 'a.alias',
|
||||
'modified' => 'a.modified',
|
||||
'a.publish_down' => 'a.publish_down',
|
||||
'rating_count' => 'rating_count',
|
||||
|
||||
'random' => $db->getQuery(true)->Rand(),
|
||||
);
|
||||
|
||||
$ordering = ArrayHelper::getValue($order_map, $params->get('ordering'), 'a.publish_up');
|
||||
$dir = 'DESC';
|
||||
|
||||
$model->setState('list.ordering', $ordering);
|
||||
$model->setState('list.direction', $params->get('article_ordering_direction', 'ASC'));
|
||||
|
||||
$items = $model->getItems();
|
||||
|
||||
foreach ($items as &$item)
|
||||
{
|
||||
$item->slug = $item->id . ':' . $item->alias;
|
||||
|
||||
if ($access || in_array($item->access, $authorised))
|
||||
{
|
||||
// We know that user has the privilege to view the article
|
||||
$item->link = Route::_(\ContentHelperRoute::getArticleRoute($item->slug, $item->catid, $item->language));
|
||||
}
|
||||
else
|
||||
{
|
||||
$item->link = Route::_('index.php?option=com_users&view=login');
|
||||
}
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
public static function getDate($show_date, $show_date_type, $created_date, $custom_date_format)
|
||||
{
|
||||
$date = new Date($created_date);
|
||||
if($show_date==1)
|
||||
{
|
||||
switch($show_date_type) {
|
||||
case 1:
|
||||
echo "<span class=\"jtc_introdate\">";
|
||||
echo HTMLHelper::_('date', $date, Text::_('l, d F Y H:i'));
|
||||
echo "<br/></span>";
|
||||
break;
|
||||
case 2:
|
||||
echo "<span class=\"jtc_introdate\">";
|
||||
echo HTMLHelper::_('date', $date, Text::_('d F Y'));
|
||||
echo "<br/></span>";
|
||||
break;
|
||||
case 3:
|
||||
echo "<span class=\"jtc_introdate\">";
|
||||
echo HTMLHelper::_('date', $date, Text::_('H:i'));
|
||||
echo "<br/></span>";
|
||||
break;
|
||||
case 4:
|
||||
echo "<span class=\"jtc_introdate\">";
|
||||
echo HTMLHelper::_('date', $date, Text::_('D, M jS Y'));
|
||||
echo "<br/></span>";
|
||||
break;
|
||||
case 5:
|
||||
echo "<span class=\"jtc_introdate\">";
|
||||
echo HTMLHelper::_('date', $date, Text::_('l, F jS Y H:i'));
|
||||
echo "<br/></span>";
|
||||
break;
|
||||
case 6:
|
||||
echo "<span class=\"jtc_introdate\">";
|
||||
echo HTMLHelper::_('date', $date, Text::_($custom_date_format));
|
||||
echo "<br/></span>";
|
||||
break;
|
||||
default:
|
||||
echo "<span class=\"jtc_introdate\">";
|
||||
echo HTMLHelper::_('date', $date, Text::_('l, d F Y'));
|
||||
echo "<br/></span>";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function getOrgImage($item_id, $article_images,$title,$introtext,$modulebase) {
|
||||
$thumb_name = str_replace([':', '\\', '/', '*', '\'', '"'], '', str_replace(' ', '_', strtolower($item_id)) );
|
||||
if ($article_images) {
|
||||
// Thumbnail is not exist
|
||||
$images = json_decode($article_images);
|
||||
// Find Article's Image
|
||||
if (!empty($images->image_intro) ) {
|
||||
$orig_image = strstr($images->image_intro, '#', true);
|
||||
// Added JCE PRO support
|
||||
if ($orig_image == NULL) {
|
||||
$orig_image = $images->image_intro;
|
||||
}
|
||||
} elseif (empty($images->image_intro) && !empty($images->image_fulltext) ) {
|
||||
$orig_image = strstr($images->image_fulltext, '#', true);
|
||||
// Added JCE PRO support
|
||||
if ($orig_image == NULL) {
|
||||
$orig_image = $images->image_fulltext;
|
||||
}
|
||||
} else {
|
||||
// Find first image in the article
|
||||
$html = $introtext;
|
||||
$pattern = '/<img .*?src="([^"]+)"/si';
|
||||
|
||||
if ( preg_match($pattern, $html, $match) ) {
|
||||
$orig_image = $match[1];
|
||||
} else {
|
||||
$orig_image = "";
|
||||
}
|
||||
}
|
||||
|
||||
// Replace %20 character for image's name with space
|
||||
$orig_image = str_replace('%20', ' ', $orig_image);
|
||||
|
||||
if(strpos($orig_image, 'http') !== false) {
|
||||
$orig_image = "";
|
||||
}
|
||||
|
||||
// If article contains an image then generate a thumbnail
|
||||
if($orig_image != ""){
|
||||
$orig_image = $orig_image;
|
||||
}
|
||||
else {
|
||||
$orig_image =Uri::root().'/modules/'.$modulebase.'/tmpl/assets/images/default.jpg';
|
||||
}
|
||||
return $orig_image;
|
||||
}
|
||||
}
|
||||
/////////////////////////////////////////
|
||||
public static function getCaption($item_id, $article_images,$introtext,$use_caption) {
|
||||
//$thumb_name = str_replace([':', '\\', '/', '*', '\'', '"'], '', str_replace(' ', '_', strtolower($item_id)) );
|
||||
$caption='';
|
||||
if ( $article_images && $use_caption) {
|
||||
// Thumbnail is not exist
|
||||
$images = json_decode($article_images);
|
||||
// Find Article's Image
|
||||
if (!empty($images->image_intro) ) {
|
||||
$caption = $images->image_intro_caption;
|
||||
if(!$caption){
|
||||
$caption = $images->image_fulltext_caption;
|
||||
}
|
||||
|
||||
}
|
||||
return $caption;
|
||||
}
|
||||
}
|
||||
public static function getThumbnail($item_id, $article_images, $thumb_folder, $show_default_thumb, $thumb_width,$thumb_height,$title,$introtext,$modulebase) {
|
||||
$thumb_name = str_replace([':', '\\', '/', '*', '\'', '"'], '', str_replace(' ', '_', strtolower($item_id)) );
|
||||
$thumb_name = md5($thumb_width.$thumb_height).'_'. $thumb_name;
|
||||
if (!File::exists(JPATH_BASE.$thumb_folder.$thumb_name.'.jpg')) {
|
||||
// Thumbnail is not exist
|
||||
$images = json_decode($article_images);
|
||||
// Find Article's Image
|
||||
if (!empty($images->image_intro) ) {
|
||||
$orig_image = strstr($images->image_intro, '#', true);
|
||||
// Added JCE PRO support
|
||||
if ($orig_image == NULL) {
|
||||
$orig_image = $images->image_intro;
|
||||
}
|
||||
} elseif (empty($images->image_intro) && !empty($images->image_fulltext) ) {
|
||||
$orig_image = strstr($images->image_fulltext, '#', true);
|
||||
// Added JCE PRO support
|
||||
if ($orig_image == NULL) {
|
||||
$orig_image = $images->image_fulltext;
|
||||
}
|
||||
} else {
|
||||
// Find first image in the article
|
||||
$html = $introtext;
|
||||
$pattern = '/<img .*?src="([^"]+)"/si';
|
||||
|
||||
if ( preg_match($pattern, $html, $match) ) {
|
||||
$orig_image = $match[1];
|
||||
} else {
|
||||
$orig_image = "";
|
||||
}
|
||||
}
|
||||
|
||||
// Replace %20 character for image's name with space
|
||||
$orig_image = str_replace('%20', ' ', $orig_image);
|
||||
|
||||
if(strpos($orig_image, 'http') !== false) {
|
||||
$orig_image = "";
|
||||
}
|
||||
|
||||
// If article contains an image then generate a thumbnail
|
||||
if($orig_image != ""){
|
||||
$thumb_img=new ThumbImage($orig_image);
|
||||
//$thumb_img->createThumbnail($orig_image,JPATH_BASE.$thumb_folder.$thumb_name.'.jpg',$thumb_width,$thumb_height);
|
||||
|
||||
$thumb_img->resize_crop_image($thumb_width,$thumb_height,$orig_image,JPATH_BASE.$thumb_folder.$thumb_name.'.jpg',100);
|
||||
|
||||
|
||||
$thumb_img = '<img class="jtcs-image" src="'.Uri::root().$thumb_folder.$thumb_name.'.jpg" alt="'.$title.'"width="'.$thumb_width.'"/>';
|
||||
|
||||
} else {
|
||||
|
||||
// If article doesn't have any image then use default image or leave it empty
|
||||
if($show_default_thumb){
|
||||
$thumb_img = '<img class="jtcs-image" src="'.Uri::root().'/modules/'.$modulebase.'/tmpl/assets/images/default.jpg" style="width:'.$thumb_width.'px;" alt="'.$title.'" />';
|
||||
} else {
|
||||
$thumb_img="";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Thumbnail is exists
|
||||
$thumb_img = '<img class="jtcs-image" src="'.Uri::root().$thumb_folder.$thumb_name.'.jpg" width="'.$thumb_width.'" alt="'.$title.'" />';
|
||||
}
|
||||
return $thumb_img;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user