| Current Path : /home/smartconb/www/armencom33/plugins/system/falangquickjump/ |
| Current File : /home/smartconb/www/armencom33/plugins/system/falangquickjump/falangquickjump.php |
<?php
/**
* @package Falang for Joomla!
* @author Stéphane Bouey <stephane.bouey@faboba.com> - http://www.faboba.com
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
* @copyright Copyright (C) 2010-2023. Faboba.com All rights reserved.
*/
// No direct access to this file
defined('_JEXEC') or die;
use Joomla\CMS\Language\LanguageHelper;
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\CMS\Factory;
use Joomla\CMS\Filesystem\File;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Toolbar\Toolbar;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Toolbar\Button\CustomButton;
use Joomla\CMS\Toolbar\ToolbarFactoryInterface;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\HTML\Helpers\Grid;
//Global definitions use for front
if( !defined('DS') ) {
define( 'DS', DIRECTORY_SEPARATOR );
}
if (File::exists(JPATH_SITE.'/components/com_falang/helpers/defines.php')){
require_once( JPATH_SITE.'/components/com_falang/helpers/defines.php' );
}
if (File::exists(JPATH_SITE.'/components/com_falang/helpers/falang.class.php')) {
require_once( JPATH_SITE.'/components/com_falang/helpers/falang.class.php' );
}
class plgSystemFalangquickjump extends CMSPlugin
{
/**
* Application object.
*
* @var \Joomla\CMS\Application\CMSApplication
* @since 3.7.0
*/
protected $app;
public function __construct(& $subject, $config)
{
parent::__construct($subject, $config);
$this->loadLanguage();
}
//sbou4
/*
* Add display modal windows
* */
public function onAfterRender(){
if ($this->app->isClient('site')) {return true;}
//test if falang plugin is enabled.
$falang_driver = PluginHelper::isEnabled('system', 'falangdriver');
if (!$falang_driver){return;}
$input = $this->app->input;
$option = $input->get('option', null, 'cmd');
$view = $input->get('view', 'default', 'cmd');
$task = $input->get('task', null, 'cmd');
//fix ArticleAnywhere Problem FalangManager not defined
$rl_qp = $input->get('rl_qp',null,'cmd');
if (isset($rl_qp)){return;}
jimport('joomla.application.component.helper');
$params = ComponentHelper::getParams('com_falang');
//get supported component <form></form>
$component = $this->loadComponent();
if (!isset($component)){
return;
}
if (!is_null($view) || is_null($task)) {
if (is_null($view)) {
$view = 'default';
}
//$view = $jd->getView($option, $view);
} elseif (!is_null($task)) {
//$view = $jd->getViewByTask($option, $task);
}
//display only on view $taksk is null
if (is_null($task)) {
$supported_views = explode(',', $component[3]);
if (!in_array($view, $supported_views)) {
return;
}
}
if (isset($view)) {
$this->addQuickModalWindows();
}
return true;
}
/*
* Add quickmodal before body
* */
public function addQuickModalWindows(){
$app = Factory::getApplication();
$quickModal = '<div id="quickModal" class="joomla-modal modal fade" role="dialog" tabindex="-1">';
$quickModal .= ' <div class="modal-dialog modal-lg jviewport-width90 " role="document">';
$quickModal .= ' <div class="modal-content">';
$quickModal .= ' <div class="modal-header">';
$quickModal .= ' <h3 class="modal-title">'.Text::_('PLG_SYSTEM_FALANGQUICKJUMP_TRANSLATE_TITLE').'</h3>';
$quickModal .= ' <button class="btn-close novalidate" type="button" data-bs-dismiss="modal" aria-label="'.Text::_('JCLOSE').'" >';
$quickModal .= ' </button>';
$quickModal .= ' </div>';
$quickModal .= ' <div class="modal-body modal-body jviewport-height90">';
$quickModal .= ' <iframe></iframe>';
$quickModal .=' </div>';
$quickModal .= ' </div>';
$quickModal .= ' </div>';
$quickModal .= '</div>';
$app->appendBody($quickModal);
}
public function onAfterRoute()
{
if ($this->app->isClient('administrator')) {
//check if the compnent is removed (not the package)
if (!File::exists(JPATH_ADMINISTRATOR . '/components/com_falang/classes/FalangManager.class.php')) {
return;
};
require_once( JPATH_ADMINISTRATOR."/components/com_falang/classes/FalangManager.class.php");
$falangManager = FalangManager::getInstance();
$input = $this->app->input;
$option = $input->get('option', null, 'cmd');
$view = $input->get('view', 'default', 'cmd');
$task = $input->get('task', null, 'cmd');
jimport('joomla.application.component.helper');
$params = ComponentHelper::getParams('com_falang');
//get supported component <form></form>
$component = $this->loadComponent();
if (!isset($component)){
return;
}
if (!is_null($view) || is_null($task)) {
if (is_null($view)) {
$view = 'default';
}
//$view = $jd->getView($option, $view);
} elseif (!is_null($task)) {
//$view = $jd->getViewByTask($option, $task);
}
//display only on view $taksk is null
if (is_null($task)) {
$supported_views = explode(',', $component[3]);
if (!in_array($view, $supported_views)) {
return;
}
}
if (isset($view)) {
// Intercept the grid.id HTML Field to insert translation status
if ($params->get('show_list', true)) {
$this->addGridHtml();
HTMLHelper::register('Grid.id', array($this, 'gridIdHook'));
}
if ($params->get('show_form',true)) {
$this->addToolbar();
}
}
}
}
/*
* @since 4.0.7 load jquery only on backend
*
* */
public function onBeforeRender(){
$app = Factory::getApplication();
if ($app->isClient('administrator'))
{
HTMLHelper::_('jquery.framework');
}
Text::script('LIB_FALANG_TRANSLATION');
//Text::script('JSTATUS');
//Text::script('JGLOBAL_TITLE');
}
public function addGridHtml(){
//need to load the language here to be used (joomla 4.0 dev-8 don't work in the constructor)
$this->loadLanguage();
//$this->app->getDocument();//don't work here
Factory::getDocument()->addStyleSheet(URI::root().'administrator/components/com_falang/assets/css/falang.css', array('version' => 'auto', 'relative' => false));
Factory::getDocument()->addScript(URI::root().'plugins/system/falangquickjump/assets/falangqj.js', array('version' => 'auto', 'relative' => false));
//HTMLHELPER don't work here because $this->app->getDocument();//don't work here
//HTMLHelper::_('script', 'plugins/system/falangquickjump/assets/falangqj.js', array('version' => 'auto', 'relative' => false));
//HTMLHelper::_('stylesheet', 'administrator/components/com_falang/assets/css/falang.css', array('version' => 'auto', 'relative' => false));
}
public function gridIdHook() {
//force loading of JHtmlGrid
//sbou5
// if (!class_exists('JHtmlGrid')) {
// //@include_once(JPATH_LIBRARIES.'/joomla/html/html/grid.php');
// }
$row = func_get_arg(0);
$id = func_get_arg(1);
$vars = func_get_args();
//sbou5
$res = call_user_func_array('Joomla\CMS\HTML\Helpers\Grid::id', $vars);
$ext = Factory::getApplication()->input->get('option', '', 'cmd');
//get table by component
$component = $this->loadComponent();
$table = $component[1];
$result = array();
//$languages = $jd->getLanguages();
//on peut mutualiser
$falangManager = FalangManager::getInstance();
$languages = $this->getLanguages();
foreach($languages as $language) {
//get Falang Object info
$contentElement = $falangManager->getContentElement($component[1]);
JLoader::import( 'models.ContentObject',FALANG_ADMINPATH);
$actContentObject = new ContentObject( $language->lang_id, $contentElement );
$loaded = $actContentObject->loadFromContentID( $id );
if (!$loaded){
$result['hide'] = 'true';
continue;
}
$result['status'][$language->sef] = $actContentObject->state . '|' .$actContentObject->published;
//free and paid mmust be on 1 line
/* >>> [FREE] >>> */$result['link-'.$language->sef] = 'index.php?option=com_falang&task=translate.editfree&tmpl=component&direct=1';/* <<< [FREE] <<< */
}
// create array
if ($row == 0) {
$table = new stdClass;
if ($component[0] != 'com_k2') {
$table->tableselector = ".table";
} else {
$table->tableselector = ".adminlist";
}
if (false) {
}
$first = 'var jFalangTable = '.json_encode($table).', falang = {}; ';
} else {
$first = '';
}
$res .= '<script>'.$first.'falang['.$row.']='.json_encode($result).';</script>';
return $res;
}
/**
* Adds the translation toolbar button to the toolbar based on the
* given parameters.
*
*/
public function addToolbar() {
//check if we are in backend
$app = Factory::getApplication();
if (!$app->isClient('administrator')) {return;}
$falangManager = FalangManager::getInstance();
$input = $app->input;
$option = $input->get('option', false, 'cmd');
$view = $input->get('view', false, 'cmd');
$task = $input->get('task', false, 'cmd');
$layout = $input->get('layout', 'default', 'string');
if (!$option || (!$view && !$task) || !$layout) {
return;
}
$mapping = $this->loadComponent();
if (!isset($mapping)){
return;
}
//GET KEY FROM CONTENT ELEMENT
$id = $input->get($mapping[2], 0, 'int');
if (empty($id)) {
return;
}
//Fix for joomla 3.5
if (is_array($id)){$id = $id[0];}
//Load ToolBar
//sbou5
//TODO le ToolbarFactory ne marche pas
//$bar = Factory::getContainer()->get(ToolbarFactoryInterface::class)->createToolbar();//not working ????
if( version_compare(JVERSION, '5.0') >= 0 ) {
$bar = Factory::getDocument()->getToolbar();
} else {
$bar = ToolBar::getInstance();
}
//Load Language
$languages = $this->getLanguages();
// @deprecated used for Joomla 2.5
//TODO use library ?
$bar->addButtonPath(JPATH_PLUGINS.'/system/falangquickjump/toolbar/button/');
require_once JPATH_PLUGINS.'/system/falangquickjump/toolbar/button/itrpopup.php';
$buttontype = 'itrPopup';
$width = '95%';
$height = '99%';
//Add Stylesheet for button icons
$document = Factory::getDocument();
$document->addStyleSheet(URI::root().'administrator/components/com_falang/assets/css/falang.css', array('version' => 'auto', 'relative' => false));
//Add button by language
foreach ($languages as $language) {
//get Falang Object info
$contentElement = $falangManager->getContentElement($mapping[1]);
JLoader::import( 'models.ContentObject',FALANG_ADMINPATH);
$actContentObject = new ContentObject( $language->lang_id, $contentElement );
$loaded = $actContentObject->loadFromContentID( $id );
//hide quickicon button if speicific language is set to the item
if (!$loaded){
continue;
}
$class="quickmodal ";
//-1 not exist, 0 old , 1 uptodate
switch($actContentObject->state) {
case 1:
$class .= "uptodate";
break;
case 0:
$class .= "old";
break;
case -1:
$class .= "notexist";
break;
default :
$class .= "notexist";
break;
}
$publish = (isset($actContentObject->published) && $actContentObject->published == 1 )?" icon-publish":" icon-unpublish";
//free and paid mmust be on 1 line
/* >>> [FREE] >>> */$url = 'index.php?option=com_falang&task=translate.editfree&tmpl=component&direct=1';/* <<< [FREE] <<< */
//$newButton = new JToolbarButtonItrPopup('falang-quicktranslate-'.$language->lang_id,$language->title,$option);
$options = array();
$options['name'] = 'falang-quicktranslate-'.$language->lang_id;
$options['title'] = $language->title;
$options['url'] = $url;
$options['flag'] = $language->image;
$options['modalWidth'] = 95;
$options['bodyHeight'] = 80;//bodyHeigh 80 max due to the <90
$options['publish'] = $publish;
$options['class'] = $class;
$newButton = new JToolbarButtonItrPopup('falang-quicktranslate-'.$language->lang_id,$language->title,$options);
$bar->appendButton($newButton);
}
}
public function loadComponent () {
$mapping=null;
$input = Factory::getApplication()->input;
$option = $input->get('option', false, 'cmd');
$view = $input->get('view', 'default', 'cmd');
//load content element quickjump if exist first
$falangManager = FalangManager::getInstance();
$contentElmentName = str_replace('com_','',$option);
$contentElement = $falangManager->getContentElement($contentElmentName);
if (isset($contentElement)){
$quickjumps = $contentElement->getQuickjumps();
}
//load supported component
// $contentElements = $falangManager->getContentElements();
// $value = array();
// foreach ($contentElements as $contentElement) {
// $form = $contentElement->_xmlFile->getElementsByTagName('component')->item(0);
// if (isset($form)){$value[]= trim($form->textContent);}
// }
$params = ComponentHelper::getParams('com_falang');
//Add quickjump from content element to the last element , so they can be overrided.
$component_list = $params->get('component_list');
$value = explode("\r\n",$component_list);
if (isset($quickjumps)){
$value = array_merge($value,$quickjumps);
}
$components =$value;
$mapping=null;
foreach ($components as $component){
//if empty line go to next
if (empty($component)){continue;}
$map = explode("#",$component);
$mapviews = explode(',',$map[3]);
$mpvcnt = count($mapviews);
$proceed = false;
if (count($map)>=3 && trim($map[0])==$option){
for($xx=0; $xx<$mpvcnt; $xx++){if($mapviews[$xx] == $view){$proceed = true;}}
if($proceed == true){
if (count($map)>3 && (count($map)-3)%2==0){
$matched=true;
for ($p=0;$p<(count($map)-3)/2;$p++){
//sbou5
//$testParam = JRequest::getVar( trim($map[3+$p*2]), '');
$testParam = $input->getString( trim($map[3+$p*2]), '');
if ((strpos(trim($map[4+$p*2]),"!")!==false && strpos(trim($map[4+$p*2]),"!")==0)){
if ($testParam == substr(trim($map[4+$p*2]),1)){
$matched=false;
break;
}
}
else {
if ($testParam != trim($map[4+$p*2])){
$matched=false;
break;
}
}
}
if ($matched) {
$mapping=$map;
break;
}
}
else {
$mapping=$map;
break;
}
}
}
}
return $mapping;
}
public function getLanguages(){
$languages = LanguageHelper::getLanguages();
$default_site_language = ComponentHelper::getParams('com_languages')->get("site","en-GB");
//remove default language based on falang params
$params = ComponentHelper::getParams('com_falang');
$showDefaultLanguageAdmin = $params->get("showDefaultLanguageAdmin", false);
if (!$showDefaultLanguageAdmin){
foreach ($languages as $key=>$language) {
if ($language->lang_code == $default_site_language){
unset($languages[$key]);
}
}
}
return $languages;
}
}