Llewellyn van der Merwe
f15b67cff1
Resolved gh-146 compiler error on joined db in dinamic get thanks to @mwweb & @ro-ot Resolved gh-147 by adding the sort of fields back into the save method Resolved gh-144 to ensure that the published tab (fields overwriting and adding) option is available again. Resolved gh-145 by moving the subforms to their own tab in dynamic get view Converted all repeatable fields to subform fields in Joomla component view Moved 9 subforms and other fields to their own table and view (decopuling them fom Joomla component view), that means we added 9 more views and tables to JCB Added all the ajax for buttons and display views to Joomla component view Added tmp scripts all across the new areas with subforms to ensure all repeatable fields are converted. Will be removed in v2.7.0 Added synced copy, change state and delete in Joomla components view in relation to all tables linked to it (same as with admin views)
2343 lines
88 KiB
PHP
2343 lines
88 KiB
PHP
<?php
|
|
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
|
__ __ _ _____ _ _ __ __ _ _ _
|
|
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
|
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
|
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
|
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
|
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
|
| |
|
|
|_|
|
|
/-------------------------------------------------------------------------------------------------------------------------------/
|
|
|
|
@version 2.5.9
|
|
@build 26th October, 2017
|
|
@created 30th April, 2015
|
|
@package Component Builder
|
|
@subpackage componentbuilder.php
|
|
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
|
@copyright Copyright (C) 2015. All Rights Reserved
|
|
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
|
|
|
Builds Complex Joomla Components
|
|
|
|
/-----------------------------------------------------------------------------------------------------------------------------*/
|
|
|
|
// No direct access to this file
|
|
defined('_JEXEC') or die('Restricted access');
|
|
|
|
/**
|
|
* Componentbuilder component helper
|
|
*/
|
|
abstract class ComponentbuilderHelper
|
|
{
|
|
|
|
/**
|
|
* The global params
|
|
**/
|
|
protected static $params = false;
|
|
|
|
/*
|
|
* get all component IDs
|
|
*/
|
|
public static function getComponentIDs()
|
|
{
|
|
// Get a db connection.
|
|
$db = JFactory::getDbo();
|
|
// Create a new query object.
|
|
$query = $db->getQuery(true);
|
|
$query->select($db->quoteName(array('id')));
|
|
$query->from($db->quoteName('#__componentbuilder_joomla_component'));
|
|
$query->where($db->quoteName('published') . ' >= 1'); // do not backup trash
|
|
$db->setQuery($query);
|
|
$db->execute();
|
|
if ($db->getNumRows())
|
|
{
|
|
return $db->loadColumn();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* Autoloader
|
|
*/
|
|
public static function autoLoader($type = 'compiler')
|
|
{
|
|
// load the type classes
|
|
if ('smart' !== $type)
|
|
{
|
|
foreach (glob(JPATH_ADMINISTRATOR."/components/com_componentbuilder/helpers/".$type."/*.php") as $autoFile)
|
|
{
|
|
require_once $autoFile;
|
|
}
|
|
}
|
|
// load only if compiler
|
|
if ('compiler' === $type)
|
|
{
|
|
// import the Joomla librarys
|
|
jimport('joomla.filesystem.file');
|
|
jimport('joomla.filesystem.folder');
|
|
jimport('joomla.filesystem.archive');
|
|
jimport('joomla.application.component.modellist');
|
|
// include class to minify js
|
|
require_once JPATH_ADMINISTRATOR.'/components/com_componentbuilder/helpers/js.php';
|
|
}
|
|
// load only if smart
|
|
if ('smart' === $type)
|
|
{
|
|
// import the Joomla libraries
|
|
jimport('joomla.filesystem.file');
|
|
jimport('joomla.filesystem.folder');
|
|
jimport('joomla.filesystem.archive');
|
|
jimport('joomla.application.component.modellist');
|
|
}
|
|
// load this for all
|
|
jimport('joomla.application');
|
|
}
|
|
|
|
/**
|
|
* Remove folders with files
|
|
*
|
|
* @param string $dir The path to folder to remove
|
|
* @param boolean $ignore The folders and files to ignore and not remove
|
|
*
|
|
* @return boolean True in all is removed
|
|
*
|
|
*/
|
|
public static function removeFolder($dir, $ignore = false)
|
|
{
|
|
if (JFolder::exists($dir))
|
|
{
|
|
$it = new RecursiveDirectoryIterator($dir);
|
|
$it = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST);
|
|
foreach ($it as $file)
|
|
{
|
|
if ('.' === $file->getBasename() || '..' === $file->getBasename()) continue;
|
|
if ($file->isDir())
|
|
{
|
|
$keeper = false;
|
|
if (self::checkArray($ignore))
|
|
{
|
|
foreach ($ignore as $keep)
|
|
{
|
|
if (strpos($file->getPathname(), $dir.'/'.$keep) !== false)
|
|
{
|
|
$keeper = true;
|
|
}
|
|
}
|
|
}
|
|
if ($keeper)
|
|
{
|
|
continue;
|
|
}
|
|
JFolder::delete($file->getPathname());
|
|
}
|
|
else
|
|
{
|
|
$keeper = false;
|
|
if (self::checkArray($ignore))
|
|
{
|
|
foreach ($ignore as $keep)
|
|
{
|
|
if (strpos($file->getPathname(), $dir.'/'.$keep) !== false)
|
|
{
|
|
$keeper = true;
|
|
}
|
|
}
|
|
}
|
|
if ($keeper)
|
|
{
|
|
continue;
|
|
}
|
|
JFile::delete($file->getPathname());
|
|
}
|
|
}
|
|
if (!self::checkArray($ignore))
|
|
{
|
|
return JFolder::delete($dir);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* The dynamic builder of views, tables and fields
|
|
**/
|
|
public static function dynamicBuilder(&$data, $type)
|
|
{
|
|
self::autoLoader('extrusion');
|
|
$extruder = new Extrusion($data);
|
|
}
|
|
|
|
/**
|
|
* The zipper method
|
|
**/
|
|
public static function zip($workingDIR, &$filepath)
|
|
{
|
|
// store the current joomla working directory
|
|
$joomla = getcwd();
|
|
|
|
// we are changing the working directory to the component temp folder
|
|
chdir($workingDIR);
|
|
|
|
// the full file path of the zip file
|
|
$filepath = JPath::clean($filepath);
|
|
|
|
// delete an existing zip file (or use an exclusion parameter in JFolder::files()
|
|
JFile::delete($filepath);
|
|
|
|
// get a list of files in the current directory tree
|
|
$files = JFolder::files('.', '', true, true);
|
|
$zipArray = array();
|
|
// setup the zip array
|
|
foreach ($files as $file)
|
|
{
|
|
$tmp = array();
|
|
$tmp['name'] = str_replace('./', '', $file);
|
|
$tmp['data'] = JFile::read($file);
|
|
$tmp['time'] = filemtime($file);
|
|
$zipArray[] = $tmp;
|
|
}
|
|
|
|
// change back to joomla working directory
|
|
chdir($joomla);
|
|
|
|
// get the zip adapter
|
|
$zip = JArchive::getAdapter('zip');
|
|
|
|
//create the zip file
|
|
if ($zip->create($filepath, $zipArray))
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Create file and write data to the file
|
|
**/
|
|
public static function writeFile($path, $data)
|
|
{
|
|
$klaar = false;
|
|
// open the file
|
|
$fh = fopen($path, "w");
|
|
if (!is_resource($fh))
|
|
{
|
|
return $klaar;
|
|
}
|
|
// write to the file
|
|
if (fwrite($fh, $data))
|
|
{
|
|
// has been done
|
|
$klaar = true;
|
|
}
|
|
// close file.
|
|
fclose($fh);
|
|
return $klaar;
|
|
}
|
|
|
|
public static function getFieldOptions($value, $type, $settings = array())
|
|
{
|
|
// Get a db connection.
|
|
$db = JFactory::getDbo();
|
|
|
|
// Create a new query object.
|
|
$query = $db->getQuery(true);
|
|
$query->select($db->quoteName(array('properties', 'short_description', 'description')));
|
|
$query->from($db->quoteName('#__componentbuilder_fieldtype'));
|
|
$query->where($db->quoteName('published') . ' = 1');
|
|
$query->where($db->quoteName($type) . ' = '. $value);
|
|
|
|
// Reset the query using our newly populated query object.
|
|
$db->setQuery($query);
|
|
$db->execute();
|
|
if ($db->getNumRows())
|
|
{
|
|
$result = $db->loadObject();
|
|
$properties = json_decode($result->properties,true);
|
|
$field = array('values' => "<field ", 'values_description' => '<ul>', 'short_description' => $result->short_description, 'description' => $result->description);
|
|
foreach ($properties as $property)
|
|
{
|
|
$field['values_description'] .= '<li><b>'.$property['name'].'</b> '.$property['description'].'</li>';
|
|
if(isset($settings[$property['name']]))
|
|
{
|
|
$field['values'] .= "\n\t".$property['name'].'="'.$settings[$property['name']].'" ';
|
|
}
|
|
else
|
|
{
|
|
$field['values'] .= "\n\t".$property['name'].'="'.$property['example'].'" ';
|
|
}
|
|
}
|
|
$field['values'] .= "\n/>";
|
|
$field['values_description'] .= '</ul>';
|
|
// return found field options
|
|
return $field;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* get the localkey
|
|
**/
|
|
protected static $localkey = false;
|
|
|
|
public static function getLocalKey()
|
|
{
|
|
if (!self::$localkey)
|
|
{
|
|
// get the main key
|
|
self::$localkey = md5(JComponentHelper::getParams('com_componentbuilder')->get('basic_key', 'localKey34fdWEkl'));
|
|
}
|
|
return self::$localkey;
|
|
}
|
|
|
|
/**
|
|
* indent HTML
|
|
*/
|
|
public static function indent($html)
|
|
{
|
|
// load the class
|
|
require_once JPATH_ADMINISTRATOR.'/components/com_componentbuilder/helpers/indenter.php';
|
|
// set new indenter
|
|
$indenter = new Indenter();
|
|
// return indented html
|
|
return $indenter->indent($html);
|
|
}
|
|
|
|
public static function checkFileType($file, $sufix) {
|
|
// now check if the file ends with the sufix
|
|
return $sufix === "" || ($sufix == substr(strrchr($file, "."), -strlen($sufix)));
|
|
}
|
|
|
|
public static function imageInfo($path,$request = 'type')
|
|
{
|
|
// set image
|
|
$image = JPATH_SITE.'/'.$path;
|
|
// check if exists
|
|
if (file_exists($image) && $result = @getimagesize($image))
|
|
{
|
|
// return type request
|
|
switch ($request)
|
|
{
|
|
case 'width':
|
|
return $result[0];
|
|
break;
|
|
case 'height':
|
|
return $result[1];
|
|
break;
|
|
case 'type':
|
|
$extensions = array(
|
|
IMAGETYPE_GIF => "gif",
|
|
IMAGETYPE_JPEG => "jpg",
|
|
IMAGETYPE_PNG => "png",
|
|
IMAGETYPE_SWF => "swf",
|
|
IMAGETYPE_PSD => "psd",
|
|
IMAGETYPE_BMP => "bmp",
|
|
IMAGETYPE_TIFF_II => "tiff",
|
|
IMAGETYPE_TIFF_MM => "tiff",
|
|
IMAGETYPE_JPC => "jpc",
|
|
IMAGETYPE_JP2 => "jp2",
|
|
IMAGETYPE_JPX => "jpx",
|
|
IMAGETYPE_JB2 => "jb2",
|
|
IMAGETYPE_SWC => "swc",
|
|
IMAGETYPE_IFF => "iff",
|
|
IMAGETYPE_WBMP => "wbmp",
|
|
IMAGETYPE_XBM => "xbm",
|
|
IMAGETYPE_ICO => "ico"
|
|
);
|
|
return $extensions[$result[2]];
|
|
break;
|
|
case 'attr':
|
|
return $result[3];
|
|
break;
|
|
case 'all':
|
|
default:
|
|
return $result;
|
|
break;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function getBetween($content,$start,$end)
|
|
{
|
|
$r = explode($start, $content);
|
|
if (isset($r[1]))
|
|
{
|
|
$r = explode($end, $r[1]);
|
|
return $r[0];
|
|
}
|
|
return '';
|
|
}
|
|
|
|
public static function getAllBetween($content,$start,$end)
|
|
{
|
|
$buket = array();
|
|
for ($i = 0; ; $i++)
|
|
{
|
|
$found = self::getBetween($content,$start,$end);
|
|
if (self::checkString($found))
|
|
{
|
|
$buket[] = $found;
|
|
$remove = $start.$found.$end;
|
|
$content = str_replace($remove,'',$content);
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
// safety catch
|
|
if ($i == 500)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
return array_unique($buket);
|
|
}
|
|
|
|
public static function typeField($type,$option = 'default')
|
|
{
|
|
// list of default fields
|
|
// https://docs.joomla.org/Form_field
|
|
$fields = array(
|
|
'default' => array(
|
|
'accesslevel','cachehandler','calendar','captcha','category','checkbox',
|
|
'checkboxes','color','combo','componentlayout','contentlanguage','editor',
|
|
'chromestyle','contenttype','databaseconnection','editors','email','file',
|
|
'filelist','folderlist','groupedlist','hidden','file','headertag','helpsite',
|
|
'imagelist','integer','language','list','media','menu','note','password',
|
|
'plugins','range','radio','repeatable','rules','sessionhandler','spacer','sql','tag',
|
|
'tel','menuitem','modulelayout','meter','moduleorder','moduleposition','moduletag',
|
|
'templatestyle','text','textarea','timezone','url','user','usergroup'
|
|
),
|
|
'text' => array(
|
|
'calendar','color','editor','email','password','tel','text','textarea','url','number','range'
|
|
),
|
|
'list' => array(
|
|
'checkboxes','checkbox','list','radio'
|
|
),
|
|
'dynamic' => array(
|
|
'category','headertag','tag','rules','user','file','filelist','folderlist','imagelist','integer','timezone','media','meter'
|
|
)
|
|
);
|
|
|
|
if (in_array($type,$fields[$option]))
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function getImportScripts($type, $fieldName = false)
|
|
{
|
|
// if field name is pased the convert to type
|
|
if ($fieldName)
|
|
{
|
|
$fieldNames = array(
|
|
'php_import_display' => 'display',
|
|
'php_import_setdata' => 'setdata',
|
|
'php_import_save' => 'save',
|
|
'html_import_view' => 'view',
|
|
'php_import' => 'import',
|
|
'php_import_ext' => 'ext'
|
|
);
|
|
// first check if the field name is found
|
|
if (isset($fieldNames[$type]))
|
|
{
|
|
$type = $fieldNames[$type];
|
|
}
|
|
else
|
|
{
|
|
return '';
|
|
}
|
|
}
|
|
$script = array();
|
|
if ('display' === $type)
|
|
{
|
|
// set the display script
|
|
$script['display'][] = "\tprotected \$headerList;";
|
|
$script['display'][] = "\tprotected \$hasPackage = false;";
|
|
$script['display'][] = "\tprotected \$headers;";
|
|
$script['display'][] = "\tprotected \$hasHeader = 0;";
|
|
$script['display'][] = "\tprotected \$dataType;";
|
|
$script['display'][] = "\n\tpublic function display(\$tpl = null)";
|
|
$script['display'][] = "\t{";
|
|
$script['display'][] = "\t\tif (\$this->getLayout() !== 'modal')";
|
|
$script['display'][] = "\t\t{";
|
|
$script['display'][] = "\t\t\t// Include helper submenu";
|
|
$script['display'][] = "\t\t\t###-#-#-Component###Helper::addSubmenu('import');";
|
|
$script['display'][] = "\t\t}";
|
|
$script['display'][] = "\n\t\t\$paths = new stdClass;";
|
|
$script['display'][] = "\t\t\$paths->first = '';";
|
|
$script['display'][] = "\t\t\$state = \$this->get('state');";
|
|
$script['display'][] = "\n\t\t\$this->paths = &\$paths;";
|
|
$script['display'][] = "\t\t\$this->state = &\$state;";
|
|
$script['display'][] = "\t\t// get global action permissions";
|
|
$script['display'][] = "\t\t\$this->canDo = ###-#-#-Component###Helper::getActions('import');";
|
|
$script['display'][] = "\n\t\t// We don't need toolbar in the modal window.";
|
|
$script['display'][] = "\t\tif (\$this->getLayout() !== 'modal')";
|
|
$script['display'][] = "\t\t{";
|
|
$script['display'][] = "\t\t\t\$this->addToolbar();";
|
|
$script['display'][] = "\t\t\t\$this->sidebar = JHtmlSidebar::render();";
|
|
$script['display'][] = "\t\t}";
|
|
$script['display'][] = "\n\t\t// get the session object";
|
|
$script['display'][] = "\t\t\$session = JFactory::getSession();";
|
|
$script['display'][] = "\t\t// check if it has package";
|
|
$script['display'][] = "\t\t\$this->hasPackage \t= \$session->get('hasPackage', false);";
|
|
$script['display'][] = "\t\t\$this->dataType \t= \$session->get('dataType', false);";
|
|
$script['display'][] = "\t\tif(\$this->hasPackage && \$this->dataType)";
|
|
$script['display'][] = "\t\t{";
|
|
$script['display'][] = "\t\t\t\$this->headerList \t= json_decode(\$session->get(\$this->dataType.'_VDM_IMPORTHEADERS', false),true);";
|
|
$script['display'][] = "\t\t\t\$this->headers \t\t= ###-#-#-Component###Helper::getFileHeaders(\$this->dataType);";
|
|
$script['display'][] = "\t\t\t// clear the data type";
|
|
$script['display'][] = "\t\t\t\$session->clear('dataType');";
|
|
$script['display'][] = "\t\t}";
|
|
$script['display'][] = "\n\t\t// Check for errors.";
|
|
$script['display'][] = "\t\tif (count(\$errors = \$this->get('Errors'))){";
|
|
$script['display'][] = "\t\t\tthrow new Exception(implode(".'"\n", $errors), 500);';
|
|
$script['display'][] = "\t\t}";
|
|
$script['display'][] = "\n\t\t// Display the template";
|
|
$script['display'][] = "\t\tparent::display(\$tpl);";
|
|
$script['display'][] = "\t}";
|
|
}
|
|
elseif ('setdata' === $type)
|
|
{
|
|
// set the setdata script
|
|
$script['setdata'] = array();
|
|
$script['setdata'][] = "\t/**";
|
|
$script['setdata'][] = "\t* Set the data from the spreadsheet to the database";
|
|
$script['setdata'][] = "\t*";
|
|
$script['setdata'][] = "\t* @param string \$package Paths to the uploaded package file";
|
|
$script['setdata'][] = "\t*";
|
|
$script['setdata'][] = "\t* @return boolean false on failure";
|
|
$script['setdata'][] = "\t*";
|
|
$script['setdata'][] = "\t**/";
|
|
$script['setdata'][] = "\tprotected function setData(\$package,\$table,\$target_headers)";
|
|
$script['setdata'][] = "\t{";
|
|
$script['setdata'][] = "\t\tif (###-#-#-Component###Helper::checkArray(\$target_headers))";
|
|
$script['setdata'][] = "\t\t{";
|
|
$script['setdata'][] = "\t\t\t// make sure the file is loaded\t\t";
|
|
$script['setdata'][] = "\t\t\tJLoader::import('PHPExcel', JPATH_COMPONENT_ADMINISTRATOR . '/helpers');";
|
|
$script['setdata'][] = "\t\t\t\$jinput = JFactory::getApplication()->input;";
|
|
$script['setdata'][] = "\t\t\tforeach(\$target_headers as \$header)";
|
|
$script['setdata'][] = "\t\t\t{";
|
|
$script['setdata'][] = "\t\t\t\t\$data['target_headers'][\$header] = \$jinput->getString(\$header, null);";
|
|
$script['setdata'][] = "\t\t\t}";
|
|
$script['setdata'][] = "\t\t\t// set the data";
|
|
$script['setdata'][] = "\t\t\tif(isset(\$package['dir']))";
|
|
$script['setdata'][] = "\t\t\t{";
|
|
$script['setdata'][] = "\t\t\t\t\$inputFileType = PHPExcel_IOFactory::identify(\$package['dir']);";
|
|
$script['setdata'][] = "\t\t\t\t\$excelReader = PHPExcel_IOFactory::createReader(\$inputFileType);";
|
|
$script['setdata'][] = "\t\t\t\t\$excelReader->setReadDataOnly(true);";
|
|
$script['setdata'][] = "\t\t\t\t\$excelObj = \$excelReader->load(\$package['dir']);";
|
|
$script['setdata'][] = "\t\t\t\t\$data['array'] = \$excelObj->getActiveSheet()->toArray(null, true,true,true);";
|
|
$script['setdata'][] = "\t\t\t\t\$excelObj->disconnectWorksheets();";
|
|
$script['setdata'][] = "\t\t\t\tunset(\$excelObj);";
|
|
$script['setdata'][] = "\t\t\t\treturn \$this->save(\$data,\$table);";
|
|
$script['setdata'][] = "\t\t\t}";
|
|
$script['setdata'][] = "\t\t}";
|
|
$script['setdata'][] = "\t\treturn false;";
|
|
$script['setdata'][] = "\t}";
|
|
}
|
|
elseif ('save' === $type)
|
|
{
|
|
$script['save'] = array();
|
|
$script['save'][] = "\t/**";
|
|
$script['save'][] = "\t* Save the data from the file to the database";
|
|
$script['save'][] = "\t*";
|
|
$script['save'][] = "\t* @param string \$package Paths to the uploaded package file";
|
|
$script['save'][] = "\t*";
|
|
$script['save'][] = "\t* @return boolean false on failure";
|
|
$script['save'][] = "\t*";
|
|
$script['save'][] = "\t**/";
|
|
$script['save'][] = "\tprotected function save(\$data,\$table)";
|
|
$script['save'][] = "\t{";
|
|
$script['save'][] = "\t\t// import the data if there is any";
|
|
$script['save'][] = "\t\tif(###-#-#-Component###Helper::checkArray(\$data['array']))";
|
|
$script['save'][] = "\t\t{";
|
|
$script['save'][] = "\t\t\t// get user object";
|
|
$script['save'][] = "\t\t\t\$user \t\t= JFactory::getUser();";
|
|
$script['save'][] = "\t\t\t// remove header if it has headers";
|
|
$script['save'][] = "\t\t\t\$id_key \t= \$data['target_headers']['id'];";
|
|
$script['save'][] = "\t\t\t\$published_key \t= \$data['target_headers']['published'];";
|
|
$script['save'][] = "\t\t\t\$ordering_key \t= \$data['target_headers']['ordering'];";
|
|
$script['save'][] = "\t\t\t// get the first array set";
|
|
$script['save'][] = "\t\t\t\$firstSet = reset(\$data['array']);";
|
|
$script['save'][] = "";
|
|
$script['save'][] = "\t\t\t// check if first array is a header array and remove if true";
|
|
$script['save'][] = "\t\t\tif(\$firstSet[\$id_key] == 'id' || \$firstSet[\$published_key] == 'published' || \$firstSet[\$ordering_key] == 'ordering')";
|
|
$script['save'][] = "\t\t\t{";
|
|
$script['save'][] = "\t\t\t\tarray_shift(\$data['array']);";
|
|
$script['save'][] = "\t\t\t}";
|
|
$script['save'][] = "\t\t\t";
|
|
$script['save'][] = "\t\t\t// make sure there is still values in array and that it was not only headers";
|
|
$script['save'][] = "\t\t\tif(###-#-#-Component###Helper::checkArray(\$data['array']) && \$user->authorise(\$table.'.import', 'com_###-#-#-component###') && \$user->authorise('core.import', 'com_###-#-#-component###'))";
|
|
$script['save'][] = "\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t// set target.";
|
|
$script['save'][] = "\t\t\t\t\$target\t= array_flip(\$data['target_headers']);";
|
|
$script['save'][] = "\t\t\t\t// Get a db connection.";
|
|
$script['save'][] = "\t\t\t\t\$db = JFactory::getDbo();";
|
|
$script['save'][] = "\t\t\t\t// set some defaults";
|
|
$script['save'][] = "\t\t\t\t\$todayDate\t\t= JFactory::getDate()->toSql();";
|
|
$script['save'][] = "\t\t\t\t// get global action permissions";
|
|
$script['save'][] = "\t\t\t\t\$canDo\t\t\t= ###-#-#-Component###Helper::getActions(\$table);";
|
|
$script['save'][] = "\t\t\t\t\$canEdit\t\t= \$canDo->get('core.edit');";
|
|
$script['save'][] = "\t\t\t\t\$canState\t\t= \$canDo->get('core.edit.state');";
|
|
$script['save'][] = "\t\t\t\t\$canCreate\t\t= \$canDo->get('core.create');";
|
|
$script['save'][] = "\t\t\t\t\$hasAlias\t\t= \$this->getAliasesUsed(\$table);";
|
|
$script['save'][] = "\t\t\t\t// prosses the data";
|
|
$script['save'][] = "\t\t\t\tforeach(\$data['array'] as \$row)";
|
|
$script['save'][] = "\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\$found = false;";
|
|
$script['save'][] = "\t\t\t\t\tif (isset(\$row[\$id_key]) && is_numeric(\$row[\$id_key]) && \$row[\$id_key] > 0)";
|
|
$script['save'][] = "\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t// raw items import & update!";
|
|
$script['save'][] = "\t\t\t\t\t\t\$query = \$db->getQuery(true);";
|
|
$script['save'][] = "\t\t\t\t\t\t\$query";
|
|
$script['save'][] = "\t\t\t\t\t\t\t->select('version')";
|
|
$script['save'][] = "\t\t\t\t\t\t\t->from(\$db->quoteName('#__###-#-#-component###_'.\$table))";
|
|
$script['save'][] = "\t\t\t\t\t\t\t->where(\$db->quoteName('id') . ' = '. \$db->quote(\$row[\$id_key]));";
|
|
$script['save'][] = "\t\t\t\t\t\t// Reset the query using our newly populated query object.";
|
|
$script['save'][] = "\t\t\t\t\t\t\$db->setQuery(\$query);";
|
|
$script['save'][] = "\t\t\t\t\t\t\$db->execute();";
|
|
$script['save'][] = "\t\t\t\t\t\t\$found = \$db->getNumRows();";
|
|
$script['save'][] = "\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t";
|
|
$script['save'][] = "\t\t\t\t\tif(\$found && \$canEdit)";
|
|
$script['save'][] = "\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t// update item";
|
|
$script['save'][] = "\t\t\t\t\t\t\$id \t\t= \$row[\$id_key];";
|
|
$script['save'][] = "\t\t\t\t\t\t\$version\t= \$db->loadResult();";
|
|
$script['save'][] = "\t\t\t\t\t\t// reset all buckets";
|
|
$script['save'][] = "\t\t\t\t\t\t\$query \t\t= \$db->getQuery(true);";
|
|
$script['save'][] = "\t\t\t\t\t\t\$fields \t= array();";
|
|
$script['save'][] = "\t\t\t\t\t\t// Fields to update.";
|
|
$script['save'][] = "\t\t\t\t\t\tforeach(\$row as \$key => \$cell)";
|
|
$script['save'][] = "\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// ignore column";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif ('IGNORE' == \$target[\$key])";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// update modified";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif ('modified_by' == \$target[\$key])";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// update modified";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif ('modified' == \$target[\$key])";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// update version";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif ('version' == \$target[\$key])";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$cell = (int) \$version + 1;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// verify publish authority";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif ('published' == \$target[\$key] && !\$canState)";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// set to update array";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif(in_array(\$key, \$data['target_headers']) && is_numeric(\$cell))";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$fields[] = \$db->quoteName(\$target[\$key]) . ' = ' . \$cell;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\telseif(in_array(\$key, \$data['target_headers']) && is_string(\$cell))";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$fields[] = \$db->quoteName(\$target[\$key]) . ' = ' . \$db->quote(\$cell);";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\telseif(in_array(\$key, \$data['target_headers']) && is_null(\$cell))";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t// if import data is null then set empty";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$fields[] = \$db->quoteName(\$target[\$key]) . \" = ''\";";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t// load the defaults";
|
|
$script['save'][] = "\t\t\t\t\t\t\$fields[]\t= \$db->quoteName('modified_by') . ' = ' . \$db->quote(\$user->id);";
|
|
$script['save'][] = "\t\t\t\t\t\t\$fields[]\t= \$db->quoteName('modified') . ' = ' . \$db->quote(\$todayDate);";
|
|
$script['save'][] = "\t\t\t\t\t\t// Conditions for which records should be updated.";
|
|
$script['save'][] = "\t\t\t\t\t\t\$conditions = array(";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\$db->quoteName('id') . ' = ' . \$id";
|
|
$script['save'][] = "\t\t\t\t\t\t);";
|
|
$script['save'][] = "\t\t\t\t\t\t";
|
|
$script['save'][] = "\t\t\t\t\t\t\$query->update(\$db->quoteName('#__###-#-#-component###_'.\$table))->set(\$fields)->where(\$conditions);";
|
|
$script['save'][] = "\t\t\t\t\t\t\$db->setQuery(\$query);";
|
|
$script['save'][] = "\t\t\t\t\t\t\$db->execute();";
|
|
$script['save'][] = "\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\telseif (\$canCreate)";
|
|
$script['save'][] = "\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t// insert item";
|
|
$script['save'][] = "\t\t\t\t\t\t\$query = \$db->getQuery(true);";
|
|
$script['save'][] = "\t\t\t\t\t\t// reset all buckets";
|
|
$script['save'][] = "\t\t\t\t\t\t\$columns \t= array();";
|
|
$script['save'][] = "\t\t\t\t\t\t\$values \t= array();";
|
|
$script['save'][] = "\t\t\t\t\t\t\$version\t= false;";
|
|
$script['save'][] = "\t\t\t\t\t\t// Insert columns. Insert values.";
|
|
$script['save'][] = "\t\t\t\t\t\tforeach(\$row as \$key => \$cell)";
|
|
$script['save'][] = "\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// ignore column";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif ('IGNORE' == \$target[\$key])";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// remove id";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif ('id' == \$target[\$key])";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// update created";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif ('created_by' == \$target[\$key])";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// update created";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif ('created' == \$target[\$key])";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// Make sure the alias is incremented";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif ('alias' == \$target[\$key])";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$cell = \$this->getAlias(\$cell,\$table);";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// update version";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif ('version' == \$target[\$key])";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$cell = 1;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$version = true;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// set to insert array";
|
|
$script['save'][] = "\t\t\t\t\t\t\tif(in_array(\$key, \$data['target_headers']) && is_numeric(\$cell))";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$columns[] \t= \$target[\$key];";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$values[] \t= \$cell;";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\telseif(in_array(\$key, \$data['target_headers']) && is_string(\$cell))";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$columns[] \t= \$target[\$key];";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$values[] \t= \$db->quote(\$cell);";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t\telseif(in_array(\$key, \$data['target_headers']) && is_null(\$cell))";
|
|
$script['save'][] = "\t\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t// if import data is null then set empty";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$columns[] \t= \$target[\$key];";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\t\$values[] \t= \"''\";";
|
|
$script['save'][] = "\t\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t// load the defaults";
|
|
$script['save'][] = "\t\t\t\t\t\t\$columns[] \t= 'created_by';";
|
|
$script['save'][] = "\t\t\t\t\t\t\$values[] \t= \$db->quote(\$user->id);";
|
|
$script['save'][] = "\t\t\t\t\t\t\$columns[] \t= 'created';";
|
|
$script['save'][] = "\t\t\t\t\t\t\$values[] \t= \$db->quote(\$todayDate);";
|
|
$script['save'][] = "\t\t\t\t\t\tif (!\$version)";
|
|
$script['save'][] = "\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\$columns[] \t= 'version';";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\$values[] \t= 1;";
|
|
$script['save'][] = "\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t\t// Prepare the insert query.";
|
|
$script['save'][] = "\t\t\t\t\t\t\$query";
|
|
$script['save'][] = "\t\t\t\t\t\t\t->insert(\$db->quoteName('#__###-#-#-component###_'.\$table))";
|
|
$script['save'][] = "\t\t\t\t\t\t\t->columns(\$db->quoteName(\$columns))";
|
|
$script['save'][] = "\t\t\t\t\t\t\t->values(implode(',', \$values));";
|
|
$script['save'][] = "\t\t\t\t\t\t// Set the query using our newly populated query object and execute it.";
|
|
$script['save'][] = "\t\t\t\t\t\t\$db->setQuery(\$query);";
|
|
$script['save'][] = "\t\t\t\t\t\t\$done = \$db->execute();";
|
|
$script['save'][] = "\t\t\t\t\t\tif (\$done)";
|
|
$script['save'][] = "\t\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\t\t\$aId = \$db->insertid();";
|
|
$script['save'][] = "\t\t\t\t\t\t\t// make sure the access of asset is set";
|
|
$script['save'][] = "\t\t\t\t\t\t\t###-#-#-Component###Helper::setAsset(\$aId,\$table);";
|
|
$script['save'][] = "\t\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t\telse";
|
|
$script['save'][] = "\t\t\t\t\t{";
|
|
$script['save'][] = "\t\t\t\t\t\treturn false;";
|
|
$script['save'][] = "\t\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\t}";
|
|
$script['save'][] = "\t\t\t\treturn true;";
|
|
$script['save'][] = "\t\t\t}";
|
|
$script['save'][] = "\t\t}";
|
|
$script['save'][] = "\t\treturn false;";
|
|
$script['save'][] = "\t}";
|
|
}
|
|
elseif ('view' === $type)
|
|
{
|
|
$script['view'] = array();
|
|
$script['view'][] = "<script type=\"text/javascript\">";
|
|
$script['view'][] = "<?php if (\$this->hasPackage && ###-#-#-Component###Helper::checkArray(\$this->headerList)) : ?>";
|
|
$script['view'][] = "\tJoomla.continueImport = function()";
|
|
$script['view'][] = "\t{";
|
|
$script['view'][] = "\t\tvar form = document.getElementById('adminForm');";
|
|
$script['view'][] = "\t\tvar error = false;";
|
|
$script['view'][] = "\t\tvar therequired = [<?php \$i = 0; foreach(\$this->headerList as \$name => \$title) { echo (\$i != 0)? ', \"vdm_'.\$name.'\"':'\"vdm_'.\$name.'\"'; \$i++; } ?>];";
|
|
$script['view'][] = "\t\tfor(i = 0; i < therequired.length; i++)";
|
|
$script['view'][] = "\t\t{";
|
|
$script['view'][] = "\t\t\tif(jQuery('#'+therequired[i]).val() == \"\" )";
|
|
$script['view'][] = "\t\t\t{";
|
|
$script['view'][] = "\t\t\t\terror = true;";
|
|
$script['view'][] = "\t\t\t\tbreak;";
|
|
$script['view'][] = "\t\t\t}";
|
|
$script['view'][] = "\t\t}";
|
|
$script['view'][] = "\t\t// do field validation";
|
|
$script['view'][] = "\t\tif (error)";
|
|
$script['view'][] = "\t\t{";
|
|
$script['view'][] = "\t\t\talert(\"<?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_MSG_PLEASE_SELECT_ALL_COLUMNS', true); ?>\");";
|
|
$script['view'][] = "\t\t}";
|
|
$script['view'][] = "\t\telse";
|
|
$script['view'][] = "\t\t{";
|
|
$script['view'][] = "\t\t\tjQuery('#loading').css('display', 'block');";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\t\t\tform.gettype.value = 'continue';";
|
|
$script['view'][] = "\t\t\tform.submit();";
|
|
$script['view'][] = "\t\t}";
|
|
$script['view'][] = "\t};";
|
|
$script['view'][] = "<?php else: ?>";
|
|
$script['view'][] = "\tJoomla.submitbutton = function()";
|
|
$script['view'][] = "\t{";
|
|
$script['view'][] = "\t\tvar form = document.getElementById('adminForm');";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\t\t// do field validation";
|
|
$script['view'][] = "\t\tif (form.import_package.value == \"\")";
|
|
$script['view'][] = "\t\t{";
|
|
$script['view'][] = "\t\t\talert(\"<?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_MSG_PLEASE_SELECT_A_FILE', true); ?>\");";
|
|
$script['view'][] = "\t\t}";
|
|
$script['view'][] = "\t\telse";
|
|
$script['view'][] = "\t\t{";
|
|
$script['view'][] = "\t\t\tjQuery('#loading').css('display', 'block');";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\t\t\tform.gettype.value = 'upload';";
|
|
$script['view'][] = "\t\t\tform.submit();";
|
|
$script['view'][] = "\t\t}";
|
|
$script['view'][] = "\t};";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\tJoomla.submitbutton3 = function()";
|
|
$script['view'][] = "\t{";
|
|
$script['view'][] = "\t\tvar form = document.getElementById('adminForm');";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\t\t// do field validation";
|
|
$script['view'][] = "\t\tif (form.import_directory.value == \"\"){";
|
|
$script['view'][] = "\t\t\talert(\"<?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_MSG_PLEASE_SELECT_A_DIRECTORY', true); ?>\");";
|
|
$script['view'][] = "\t\t}";
|
|
$script['view'][] = "\t\telse";
|
|
$script['view'][] = "\t\t{";
|
|
$script['view'][] = "\t\t\tjQuery('#loading').css('display', 'block');";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\t\t\tform.gettype.value = 'folder';";
|
|
$script['view'][] = "\t\t\tform.submit();";
|
|
$script['view'][] = "\t\t}";
|
|
$script['view'][] = "\t};";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\tJoomla.submitbutton4 = function()";
|
|
$script['view'][] = "\t{";
|
|
$script['view'][] = "\t\tvar form = document.getElementById('adminForm');";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\t\t// do field validation";
|
|
$script['view'][] = "\t\tif (form.import_url.value == \"\" || form.import_url.value == \"http://\")";
|
|
$script['view'][] = "\t\t{";
|
|
$script['view'][] = "\t\t\talert(\"<?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_MSG_ENTER_A_URL', true); ?>\");";
|
|
$script['view'][] = "\t\t}";
|
|
$script['view'][] = "\t\telse";
|
|
$script['view'][] = "\t\t{";
|
|
$script['view'][] = "\t\t\tjQuery('#loading').css('display', 'block');";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\t\t\tform.gettype.value = 'url';";
|
|
$script['view'][] = "\t\t\tform.submit();";
|
|
$script['view'][] = "\t\t}";
|
|
$script['view'][] = "\t};";
|
|
$script['view'][] = "<?php endif; ?>";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n// Add spindle-wheel for importations:";
|
|
$script['view'][] = "jQuery(document).ready(function(\$) {";
|
|
$script['view'][] = "\tvar outerDiv = \$('body');";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\t\$('<div id=\"loading\"></div>')";
|
|
$script['view'][] = "\t\t.css(\"background\", \"rgba(255, 255, 255, .8) url('components/com_###-#-#-component###/assets/images/import.gif') 50% 15% no-repeat\")";
|
|
$script['view'][] = "\t\t.css(\"top\", outerDiv.position().top - \$(window).scrollTop())";
|
|
$script['view'][] = "\t\t.css(\"left\", outerDiv.position().left - \$(window).scrollLeft())";
|
|
$script['view'][] = "\t\t.css(\"width\", outerDiv.width())";
|
|
$script['view'][] = "\t\t.css(\"height\", outerDiv.height())";
|
|
$script['view'][] = "\t\t.css(\"position\", \"fixed\")";
|
|
$script['view'][] = "\t\t.css(\"opacity\", \"0.80\")";
|
|
$script['view'][] = "\t\t.css(\"-ms-filter\", \"progid:DXImageTransform.Microsoft.Alpha(Opacity = 80)\")";
|
|
$script['view'][] = "\t\t.css(\"filter\", \"alpha(opacity = 80)\")";
|
|
$script['view'][] = "\t\t.css(\"display\", \"none\")";
|
|
$script['view'][] = "\t\t.appendTo(outerDiv);";
|
|
$script['view'][] = "});";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n</script>";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n<div id=\"installer-import\" class=\"clearfix\">";
|
|
$script['view'][] = "<form enctype=\"multipart/form-data\" action=\"<?php echo JRoute::_('index.php?option=com_###-#-#-component###&view=import_###-#-#-views###');?>\" method=\"post\" name=\"adminForm\" id=\"adminForm\" class=\"form-horizontal form-validate\">";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\t<?php if (!empty( \$this->sidebar)) : ?>";
|
|
$script['view'][] = "\t\t<div id=\"j-sidebar-container\" class=\"span2\">";
|
|
$script['view'][] = "\t\t\t<?php echo \$this->sidebar; ?>";
|
|
$script['view'][] = "\t\t</div>";
|
|
$script['view'][] = "\t\t<div id=\"j-main-container\" class=\"span10\">";
|
|
$script['view'][] = "\t<?php else : ?>";
|
|
$script['view'][] = "\t\t<div id=\"j-main-container\">";
|
|
$script['view'][] = "\t<?php endif;?>";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\t<?php if (\$this->hasPackage && ###-#-#-Component###Helper::checkArray(\$this->headerList) && ###-#-#-Component###Helper::checkArray(\$this->headers)) : ?>";
|
|
$script['view'][] = "\t\t<fieldset class=\"uploadform\">";
|
|
$script['view'][] = "\t\t\t<legend><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_LINK_FILE_TO_TABLE_COLUMNS'); ?></legend>";
|
|
$script['view'][] = "\t\t\t<div class=\"control-group\">";
|
|
$script['view'][] = "\t\t\t\t<label class=\"control-label\" ><h4><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_TABLE_COLUMNS'); ?></h4></label>";
|
|
$script['view'][] = "\t\t\t\t<div class=\"controls\">";
|
|
$script['view'][] = "\t\t\t\t\t<label class=\"control-label\" ><h4><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_FILE_COLUMNS'); ?></h4></label>";
|
|
$script['view'][] = "\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t<?php foreach(\$this->headerList as \$name => \$title): ?>";
|
|
$script['view'][] = "\t\t\t\t<div class=\"control-group\">";
|
|
$script['view'][] = "\t\t\t\t\t<label for=\"<?php echo \$name; ?>\" class=\"control-label\" ><?php echo \$title; ?></label>";
|
|
$script['view'][] = "\t\t\t\t\t<div class=\"controls\">";
|
|
$script['view'][] = "\t\t\t\t\t\t<select name=\"<?php echo \$name; ?>\" id=\"vdm_<?php echo \$name; ?>\" required class=\"required input_box\" >";
|
|
$script['view'][] = "\t\t\t\t\t\t\t<option value=\"\"><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_PLEASE_SELECT_COLUMN'); ?></option>";
|
|
$script['view'][] = "\t\t\t\t\t\t\t<option value=\"IGNORE\"><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_IGNORE_COLUMN'); ?></option>";
|
|
$script['view'][] = "\t\t\t\t\t\t\t<?php foreach(\$this->headers as \$value => \$option): ?>";
|
|
$script['view'][] = "\t\t\t\t\t\t\t\t<?php \$selected = (strtolower(\$option) == strtolower (\$title) || strtolower(\$option) == strtolower(\$name))? 'selected=\"selected\"':''; ?>";
|
|
$script['view'][] = "\t\t\t\t\t\t\t\t<option value=\"<?php echo ###-#-#-Component###Helper::htmlEscape(\$value); ?>\" class=\"required\" <?php echo \$selected ?>><?php echo ###-#-#-Component###Helper::htmlEscape(\$option); ?></option>";
|
|
$script['view'][] = "\t\t\t\t\t\t\t<?php endforeach; ?>";
|
|
$script['view'][] = "\t\t\t\t\t\t</select>";
|
|
$script['view'][] = "\t\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t<?php endforeach; ?>";
|
|
$script['view'][] = "\t\t\t<div class=\"form-actions\">";
|
|
$script['view'][] = "\t\t\t\t<input class=\"btn btn-primary\" type=\"button\" value=\"<?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_CONTINUE'); ?>\" onclick=\"Joomla.continueImport()\" />";
|
|
$script['view'][] = "\t\t\t</div>";
|
|
$script['view'][] = "\t\t</fieldset>";
|
|
$script['view'][] = "\t\t<input type=\"hidden\" name=\"gettype\" value=\"continue\" />";
|
|
$script['view'][] = "\t<?php else: ?>";
|
|
$script['view'][] = "\t\t<?php echo JHtml::_('bootstrap.startTabSet', 'myTab', array('active' => 'upload')); ?>";
|
|
$script['view'][] = "\t\t";
|
|
$script['view'][] = "\t\t<?php echo JHtml::_('bootstrap.addTab', 'myTab', 'upload', JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_FROM_UPLOAD', true)); ?>";
|
|
$script['view'][] = "\t\t\t<fieldset class=\"uploadform\">";
|
|
$script['view'][] = "\t\t\t\t<legend><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_UPDATE_DATA'); ?></legend>";
|
|
$script['view'][] = "\t\t\t\t<div class=\"control-group\">";
|
|
$script['view'][] = "\t\t\t\t\t<label for=\"import_package\" class=\"control-label\"><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_SELECT_FILE'); ?></label>";
|
|
$script['view'][] = "\t\t\t\t\t<div class=\"controls\">";
|
|
$script['view'][] = "\t\t\t\t\t\t<input class=\"input_box\" id=\"import_package\" name=\"import_package\" type=\"file\" size=\"57\" />";
|
|
$script['view'][] = "\t\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t\t<div class=\"form-actions\">";
|
|
$script['view'][] = "\t\t\t\t\t<input class=\"btn btn-primary\" type=\"button\" value=\"<?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_UPLOAD_BOTTON'); ?>\" onclick=\"Joomla.submitbutton()\" /> <small><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_FORMATS_ACCEPTED'); ?> (.csv .xls .ods)</small>";
|
|
$script['view'][] = "\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t</fieldset>";
|
|
$script['view'][] = "\t\t<?php echo JHtml::_('bootstrap.endTab'); ?>";
|
|
$script['view'][] = "\t\t";
|
|
$script['view'][] = "\t\t<?php echo JHtml::_('bootstrap.addTab', 'myTab', 'directory', JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_FROM_DIRECTORY', true)); ?>";
|
|
$script['view'][] = "\t\t\t<fieldset class=\"uploadform\">";
|
|
$script['view'][] = "\t\t\t\t<legend><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_UPDATE_DATA'); ?></legend>";
|
|
$script['view'][] = "\t\t\t\t<div class=\"control-group\">";
|
|
$script['view'][] = "\t\t\t\t\t<label for=\"import_directory\" class=\"control-label\"><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_SELECT_FILE_DIRECTORY'); ?></label>";
|
|
$script['view'][] = "\t\t\t\t\t<div class=\"controls\">";
|
|
$script['view'][] = "\t\t\t\t\t\t<input type=\"text\" id=\"import_directory\" name=\"import_directory\" class=\"span5 input_box\" size=\"70\" value=\"<?php echo \$this->state->get('import.directory'); ?>\" />";
|
|
$script['view'][] = "\t\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t\t<div class=\"form-actions\">";
|
|
$script['view'][] = "\t\t\t\t\t<input type=\"button\" class=\"btn btn-primary\" value=\"<?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_GET_BOTTON'); ?>\" onclick=\"Joomla.submitbutton3()\" /> <small><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_FORMATS_ACCEPTED'); ?> (.csv .xls .ods)</small>";
|
|
$script['view'][] = "\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t\t</fieldset>";
|
|
$script['view'][] = "\t\t<?php echo JHtml::_('bootstrap.endTab'); ?>";
|
|
$script['view'][] = "";
|
|
$script['view'][] = "\n\t\t<?php echo JHtml::_('bootstrap.addTab', 'myTab', 'url', JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_FROM_URL', true)); ?>";
|
|
$script['view'][] = "\t\t\t<fieldset class=\"uploadform\">";
|
|
$script['view'][] = "\t\t\t\t<legend><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_UPDATE_DATA'); ?></legend>";
|
|
$script['view'][] = "\t\t\t\t<div class=\"control-group\">";
|
|
$script['view'][] = "\t\t\t\t\t<label for=\"import_url\" class=\"control-label\"><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_SELECT_FILE_URL'); ?></label>";
|
|
$script['view'][] = "\t\t\t\t\t<div class=\"controls\">";
|
|
$script['view'][] = "\t\t\t\t\t\t<input type=\"text\" id=\"import_url\" name=\"import_url\" class=\"span5 input_box\" size=\"70\" value=\"http://\" />";
|
|
$script['view'][] = "\t\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t\t<div class=\"form-actions\">";
|
|
$script['view'][] = "\t\t\t\t\t<input type=\"button\" class=\"btn btn-primary\" value=\"<?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_GET_BOTTON'); ?>\" onclick=\"Joomla.submitbutton4()\" /> <small><?php echo JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_FORMATS_ACCEPTED'); ?> (.csv .xls .ods)</small>";
|
|
$script['view'][] = "\t\t\t\t</div>";
|
|
$script['view'][] = "\t\t\t</fieldset>";
|
|
$script['view'][] = "\t\t<?php echo JHtml::_('bootstrap.endTab'); ?>";
|
|
$script['view'][] = "\t\t<?php echo JHtml::_('bootstrap.endTabSet'); ?>";
|
|
$script['view'][] = "\t\t<input type=\"hidden\" name=\"gettype\" value=\"upload\" />";
|
|
$script['view'][] = "\t<?php endif; ?>";
|
|
$script['view'][] = "\t<input type=\"hidden\" name=\"task\" value=\"import_###-#-#-views###.import\" />";
|
|
$script['view'][] = "\t<?php echo JHtml::_('form.token'); ?>";
|
|
$script['view'][] = "</form>";
|
|
$script['view'][] = "</div>";
|
|
}
|
|
elseif ('import' === $type)
|
|
{
|
|
$script['import'] = array();
|
|
$script['import'][] = "\t/**";
|
|
$script['import'][] = "\t * Import an spreadsheet from either folder, url or upload.";
|
|
$script['import'][] = "\t *";
|
|
$script['import'][] = "\t * @return boolean result of import";
|
|
$script['import'][] = "\t *";
|
|
$script['import'][] = "\t */";
|
|
$script['import'][] = "\tpublic function import()";
|
|
$script['import'][] = "\t{";
|
|
$script['import'][] = "\t\t\$this->setState('action', 'import');";
|
|
$script['import'][] = "\t\t\$app \t\t= JFactory::getApplication();";
|
|
$script['import'][] = "\t\t\$session \t= JFactory::getSession();";
|
|
$script['import'][] = "\t\t\$package \t= null;";
|
|
$script['import'][] = "\t\t\$continue\t= false;";
|
|
$script['import'][] = "\t\t// get import type";
|
|
$script['import'][] = "\t\t\$this->getType = \$app->input->getString('gettype', NULL);";
|
|
$script['import'][] = "\t\t// get import type";
|
|
$script['import'][] = "\t\t\$this->dataType\t= \$session->get('dataType_VDM_IMPORTINTO', NULL);";
|
|
$script['import'][] = "\n\t\tif (\$package === null)";
|
|
$script['import'][] = "\t\t{";
|
|
$script['import'][] = "\t\t\tswitch (\$this->getType)";
|
|
$script['import'][] = "\t\t\t{";
|
|
$script['import'][] = "\t\t\t\tcase 'folder':";
|
|
$script['import'][] = "\t\t\t\t\t// Remember the 'Import from Directory' path.";
|
|
$script['import'][] = "\t\t\t\t\t\$app->getUserStateFromRequest(\$this->_context . '.import_directory', 'import_directory');";
|
|
$script['import'][] = "\t\t\t\t\t\$package = \$this->_getPackageFromFolder();";
|
|
$script['import'][] = "\t\t\t\t\tbreak;";
|
|
$script['import'][] = "\n\t\t\t\tcase 'upload':";
|
|
$script['import'][] = "\t\t\t\t\t\$package = \$this->_getPackageFromUpload();";
|
|
$script['import'][] = "\t\t\t\t\tbreak;";
|
|
$script['import'][] = "\n\t\t\t\tcase 'url':";
|
|
$script['import'][] = "\t\t\t\t\t\$package = \$this->_getPackageFromUrl();";
|
|
$script['import'][] = "\t\t\t\t\tbreak;";
|
|
$script['import'][] = "\n\t\t\t\tcase 'continue':";
|
|
$script['import'][] = "\t\t\t\t\t\$continue \t= true;";
|
|
$script['import'][] = "\t\t\t\t\t\$package\t= \$session->get('package', null);";
|
|
$script['import'][] = "\t\t\t\t\t\$package\t= json_decode(\$package, true);";
|
|
$script['import'][] = "\t\t\t\t\t// clear session";
|
|
$script['import'][] = "\t\t\t\t\t\$session->clear('package');";
|
|
$script['import'][] = "\t\t\t\t\t\$session->clear('dataType');";
|
|
$script['import'][] = "\t\t\t\t\t\$session->clear('hasPackage');";
|
|
$script['import'][] = "\t\t\t\t\tbreak;";
|
|
$script['import'][] = "\n\t\t\t\tdefault:";
|
|
$script['import'][] = "\t\t\t\t\t\$app->setUserState('com_###-#-#-component###.message', JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_NO_IMPORT_TYPE_FOUND'));";
|
|
$script['import'][] = "\n\t\t\t\t\treturn false;";
|
|
$script['import'][] = "\t\t\t\t\tbreak;";
|
|
$script['import'][] = "\t\t\t}";
|
|
$script['import'][] = "\t\t}";
|
|
$script['import'][] = "\t\t// Was the package valid?";
|
|
$script['import'][] = "\t\tif (!\$package || !\$package['type'])";
|
|
$script['import'][] = "\t\t{";
|
|
$script['import'][] = "\t\t\tif (in_array(\$this->getType, array('upload', 'url')))";
|
|
$script['import'][] = "\t\t\t{";
|
|
$script['import'][] = "\t\t\t\t\$this->remove(\$package['packagename']);";
|
|
$script['import'][] = "\t\t\t}";
|
|
$script['import'][] = "\n\t\t\t\$app->setUserState('com_###-#-#-component###.message', JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_UNABLE_TO_FIND_IMPORT_PACKAGE'));";
|
|
$script['import'][] = "\t\t\treturn false;";
|
|
$script['import'][] = "\t\t}";
|
|
$script['import'][] = "\t\t";
|
|
$script['import'][] = "\t\t// first link data to table headers";
|
|
$script['import'][] = "\t\tif(!\$continue){";
|
|
$script['import'][] = "\t\t\t\$package\t= json_encode(\$package);";
|
|
$script['import'][] = "\t\t\t\$session->set('package', \$package);";
|
|
$script['import'][] = "\t\t\t\$session->set('dataType', \$this->dataType);";
|
|
$script['import'][] = "\t\t\t\$session->set('hasPackage', true);";
|
|
$script['import'][] = "\t\t\treturn true;";
|
|
$script['import'][] = "\t\t}";
|
|
$script['import'][] = "\t\t// set the data";
|
|
$script['import'][] = "\t\t\$headerList = json_decode(\$session->get(\$this->dataType.'_VDM_IMPORTHEADERS', false), true);";
|
|
$script['import'][] = "\t\tif (!\$this->setData(\$package,\$this->dataType,\$headerList))";
|
|
$script['import'][] = "\t\t{";
|
|
$script['import'][] = "\t\t\t// There was an error importing the package";
|
|
$script['import'][] = "\t\t\t\$msg = JTe-#-#-xt::_('COM_###-#-#-COMPONENT###_IMPORT_ERROR');";
|
|
$script['import'][] = "\t\t\t\$back = \$session->get('backto_VDM_IMPORT', NULL);";
|
|
$script['import'][] = "\t\t\tif (\$back)";
|
|
$script['import'][] = "\t\t\t{";
|
|
$script['import'][] = "\t\t\t\t\$app->setUserState('com_###-#-#-component###.redirect_url', 'index.php?option=com_###-#-#-component###&view='.\$back);";
|
|
$script['import'][] = "\t\t\t\t\$session->clear('backto_VDM_IMPORT');";
|
|
$script['import'][] = "\t\t\t}";
|
|
$script['import'][] = "\t\t\t\$result = false;";
|
|
$script['import'][] = "\t\t}";
|
|
$script['import'][] = "\t\telse";
|
|
$script['import'][] = "\t\t{";
|
|
$script['import'][] = "\t\t\t// Package imported sucessfully";
|
|
$script['import'][] = "\t\t\t\$msg = JTe-#-#-xt::sprintf('COM_###-#-#-COMPONENT###_IMPORT_SUCCESS', \$package['packagename']);";
|
|
$script['import'][] = "\t\t\t\$back = \$session->get('backto_VDM_IMPORT', NULL);";
|
|
$script['import'][] = "\t\t\tif (\$back)";
|
|
$script['import'][] = "\t\t\t{";
|
|
$script['import'][] = "\t\t\t \$app->setUserState('com_###-#-#-component###.redirect_url', 'index.php?option=com_###-#-#-component###&view='.\$back);";
|
|
$script['import'][] = "\t\t\t \$session->clear('backto_VDM_IMPORT');";
|
|
$script['import'][] = "\t\t\t}";
|
|
$script['import'][] = "\t\t\t\$result = true;";
|
|
$script['import'][] = "\t\t}";
|
|
$script['import'][] = "\n\t\t// Set some model state values";
|
|
$script['import'][] = "\t\t\$app->enqueueMessage(\$msg);";
|
|
$script['import'][] = "\n\t\t// remove file after import";
|
|
$script['import'][] = "\t\t\$this->remove(\$package['packagename']);";
|
|
$script['import'][] = "\t\t\$session->clear(\$this->getType.'_VDM_IMPORTHEADERS');";
|
|
$script['import'][] = "\t\treturn \$result;";
|
|
$script['import'][] = "\t}";
|
|
}
|
|
elseif ('ext' === $type)
|
|
{
|
|
$script['ext'][] = "\t/**";
|
|
$script['ext'][] = "\t * Check the extension";
|
|
$script['ext'][] = "\t *";
|
|
$script['ext'][] = "\t * @param string \$file Name of the uploaded file";
|
|
$script['ext'][] = "\t *";
|
|
$script['ext'][] = "\t * @return boolean True on success";
|
|
$script['ext'][] = "\t *";
|
|
$script['ext'][] = "\t */";
|
|
$script['ext'][] = "\tprotected function checkExtension(\$file)";
|
|
$script['ext'][] = "\t{";
|
|
$script['ext'][] = "\t\t// check the extention";
|
|
$script['ext'][] = "\t\tswitch(strtolower(pathinfo(\$file, PATHINFO_EXTENSION)))";
|
|
$script['ext'][] = "\t\t{";
|
|
$script['ext'][] = "\t\t\tcase 'xls':";
|
|
$script['ext'][] = "\t\t\tcase 'ods':";
|
|
$script['ext'][] = "\t\t\tcase 'csv':";
|
|
$script['ext'][] = "\t\t\treturn true;";
|
|
$script['ext'][] = "\t\t\tbreak;";
|
|
$script['ext'][] = "\t\t}";
|
|
$script['ext'][] = "\t\treturn false;";
|
|
$script['ext'][] = "\t}";
|
|
}
|
|
// return the needed script
|
|
if (isset($script[$type]))
|
|
{
|
|
return str_replace('-#-#-', '', implode("\n",$script[$type]));
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* set the session defaults if not set
|
|
**/
|
|
protected static function setSessionDefaults()
|
|
{
|
|
// noting for now
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* the Butler
|
|
**/
|
|
public static $session = array();
|
|
|
|
/**
|
|
* the Butler Assistant
|
|
**/
|
|
protected static $localSession = array();
|
|
|
|
/**
|
|
* start a session if not already set, and load with data
|
|
**/
|
|
public static function loadSession()
|
|
{
|
|
if (!isset(self::$session) || !self::checkObject(self::$session))
|
|
{
|
|
self::$session = JFactory::getSession();
|
|
}
|
|
// set the defaults
|
|
self::setSessionDefaults();
|
|
}
|
|
|
|
/**
|
|
* give Session more to keep
|
|
**/
|
|
public static function set($key, $value)
|
|
{
|
|
// set to local memory to speed up program
|
|
self::$localSession[$key] = $value;
|
|
// load to session for later use
|
|
return self::$session->set($key, self::$localSession[$key]);
|
|
}
|
|
|
|
/**
|
|
* get info from Session
|
|
**/
|
|
public static function get($key, $default = null)
|
|
{
|
|
// check if in local memory
|
|
if (!isset(self::$localSession[$key]))
|
|
{
|
|
// set to local memory to speed up program
|
|
self::$localSession[$key] = self::$session->get($key, $default);
|
|
}
|
|
return self::$localSession[$key];
|
|
}
|
|
|
|
|
|
/**
|
|
* check if it is a new hash
|
|
**/
|
|
public static function newHash($hash, $name = 'backup', $type = 'hash', $key = '', $fileType = 'txt')
|
|
{
|
|
// make sure we have a hash
|
|
if (self::checkString($hash))
|
|
{
|
|
// first get the file path
|
|
$path_filename = self::getFilePath('path', $name.$type, $fileType, $key, JPATH_COMPONENT_ADMINISTRATOR);
|
|
// set as read if not already set
|
|
if (($content = @file_get_contents($path_filename)) !== FALSE)
|
|
{
|
|
if ($hash == $content)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
// set the hash
|
|
return self::writeFile($path_filename, $hash);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Get the file path or url
|
|
*
|
|
* @param string $type The (url/path) type to return
|
|
* @param string $target The Params Target name (if set)
|
|
* @param string $fileType The kind of filename to generate (if not set no file name is generated)
|
|
* @param string $key The key to adjust the filename (if not set ignored)
|
|
* @param string $default The default path if not set in Params (fallback path)
|
|
* @param bool $createIfNotSet The switch to create the folder if not found
|
|
*
|
|
* @return string On success the path or url is returned based on the type requested
|
|
*
|
|
*/
|
|
public static function getFilePath($type = 'path', $target = 'filepath', $fileType = null, $key = '', $default = JPATH_SITE . '/images/', $createIfNotSet = true)
|
|
{
|
|
// get the global settings
|
|
if (!self::checkObject(self::$params))
|
|
{
|
|
self::$params = JComponentHelper::getParams('com_componentbuilder');
|
|
}
|
|
$filePath = self::$params->get($target, $default);
|
|
// check the file path (revert to default only of not a hidden file path)
|
|
if ('hiddenfilepath' !== $target && strpos($filePath, JPATH_SITE) === false)
|
|
{
|
|
$filePath = JPATH_SITE . '/images/';
|
|
}
|
|
jimport('joomla.filesystem.folder');
|
|
// create the folder if it does not exist
|
|
if ($createIfNotSet && !JFolder::exists($filePath))
|
|
{
|
|
JFolder::create($filePath);
|
|
}
|
|
// setup the file name
|
|
$fileName = '';
|
|
if (self::checkString($fileType))
|
|
{
|
|
// Get basic key
|
|
$basickey = 'Th!s_iS_n0t_sAfe_buT_b3tter_then_n0thiug';
|
|
if (method_exists(get_called_class(), "getCryptKey"))
|
|
{
|
|
$basickey = self::getCryptKey('basic', $basickey);
|
|
}
|
|
// check the key
|
|
if (self::checkString($key))
|
|
{
|
|
$key = 'vDm';
|
|
}
|
|
// set the name
|
|
$fileName = trim(md5($type.$target.$basickey.$key) . '.' . trim($fileType, '.'));
|
|
}
|
|
// return the url
|
|
if ($type === 'url')
|
|
{
|
|
if (strpos($filePath, JPATH_SITE) !== false)
|
|
{
|
|
$filePath = trim( str_replace( JPATH_SITE, '', $filePath), '/');
|
|
return JURI::root() . $filePath . '/' . $fileName;
|
|
}
|
|
// since the path is behind the root folder of the site, return only the root url (may be used to build the link)
|
|
return JURI::root();
|
|
}
|
|
// sanitize the path
|
|
return '/' . trim( $filePath, '/' ) . '/' . $fileName;
|
|
}
|
|
|
|
public static function jsonToString($value, $sperator = ", ", $table = null)
|
|
{
|
|
// check if string is JSON
|
|
$result = json_decode($value, true);
|
|
if (json_last_error() === JSON_ERROR_NONE)
|
|
{
|
|
// is JSON
|
|
if (self::checkArray($result))
|
|
{
|
|
if (self::checkString($table))
|
|
{
|
|
$names = array();
|
|
foreach ($result as $val)
|
|
{
|
|
if ($name = self::getVar($table, $val, 'id', 'name'))
|
|
{
|
|
$names[] = $name;
|
|
}
|
|
}
|
|
if (self::checkArray($names))
|
|
{
|
|
return (string) implode($sperator,$names);
|
|
}
|
|
}
|
|
return (string) implode($sperator,$result);
|
|
}
|
|
return (string) json_decode($value);
|
|
}
|
|
return $value;
|
|
}
|
|
|
|
/**
|
|
* Load the Component xml manifest.
|
|
**/
|
|
public static function manifest()
|
|
{
|
|
$manifestUrl = JPATH_ADMINISTRATOR."/components/com_componentbuilder/componentbuilder.xml";
|
|
return simplexml_load_file($manifestUrl);
|
|
}
|
|
|
|
/**
|
|
* Load the Contributors details.
|
|
**/
|
|
public static function getContributors()
|
|
{
|
|
// get params
|
|
$params = JComponentHelper::getParams('com_componentbuilder');
|
|
// start contributors array
|
|
$contributors = array();
|
|
// get all Contributors (max 20)
|
|
$searchArray = range('0','20');
|
|
foreach($searchArray as $nr)
|
|
{
|
|
if ((NULL !== $params->get("showContributor".$nr)) && ($params->get("showContributor".$nr) == 2 || $params->get("showContributor".$nr) == 3))
|
|
{
|
|
// set link based of selected option
|
|
if($params->get("useContributor".$nr) == 1)
|
|
{
|
|
$link_front = '<a href="mailto:'.$params->get("emailContributor".$nr).'" target="_blank">';
|
|
$link_back = '</a>';
|
|
}
|
|
elseif($params->get("useContributor".$nr) == 2)
|
|
{
|
|
$link_front = '<a href="'.$params->get("linkContributor".$nr).'" target="_blank">';
|
|
$link_back = '</a>';
|
|
}
|
|
else
|
|
{
|
|
$link_front = '';
|
|
$link_back = '';
|
|
}
|
|
$contributors[$nr]['title'] = self::htmlEscape($params->get("titleContributor".$nr));
|
|
$contributors[$nr]['name'] = $link_front.self::htmlEscape($params->get("nameContributor".$nr)).$link_back;
|
|
}
|
|
}
|
|
return $contributors;
|
|
}
|
|
|
|
/**
|
|
* Load the Component Help URLs.
|
|
**/
|
|
public static function getHelpUrl($view)
|
|
{
|
|
$user = JFactory::getUser();
|
|
$groups = $user->get('groups');
|
|
$db = JFactory::getDbo();
|
|
$query = $db->getQuery(true);
|
|
$query->select(array('a.id','a.groups','a.target','a.type','a.article','a.url'));
|
|
$query->from('#__componentbuilder_help_document AS a');
|
|
$query->where('a.site_view = '.$db->quote($view));
|
|
$query->where('a.location = 2');
|
|
$query->where('a.published = 1');
|
|
$db->setQuery($query);
|
|
$db->execute();
|
|
if($db->getNumRows())
|
|
{
|
|
$helps = $db->loadObjectList();
|
|
if (self::checkArray($helps))
|
|
{
|
|
foreach ($helps as $nr => $help)
|
|
{
|
|
if ($help->target == 1)
|
|
{
|
|
$targetgroups = json_decode($help->groups, true);
|
|
if (!array_intersect($targetgroups, $groups))
|
|
{
|
|
// if user not in those target groups then remove the item
|
|
unset($helps[$nr]);
|
|
continue;
|
|
}
|
|
}
|
|
// set the return type
|
|
switch ($help->type)
|
|
{
|
|
// set joomla article
|
|
case 1:
|
|
return self::loadArticleLink($help->article);
|
|
break;
|
|
// set help text
|
|
case 2:
|
|
return self::loadHelpTextLink($help->id);
|
|
break;
|
|
// set Link
|
|
case 3:
|
|
return $help->url;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Get the Article Link.
|
|
**/
|
|
protected static function loadArticleLink($id)
|
|
{
|
|
return JURI::root().'index.php?option=com_content&view=article&id='.$id.'&tmpl=component&layout=modal';
|
|
}
|
|
|
|
/**
|
|
* Get the Help Text Link.
|
|
**/
|
|
protected static function loadHelpTextLink($id)
|
|
{
|
|
$token = JSession::getFormToken();
|
|
return 'index.php?option=com_componentbuilder&task=help.getText&id=' . (int) $id . '&token=' . $token;
|
|
}
|
|
|
|
/**
|
|
* Get any component's model
|
|
**/
|
|
public static function getModel($name, $path = JPATH_COMPONENT_SITE, $component = 'componentbuilder')
|
|
{
|
|
// full path
|
|
$fullPath = $path . '/models';
|
|
// load the model file
|
|
JModelLegacy::addIncludePath($fullPath);
|
|
// get instance
|
|
$model = JModelLegacy::getInstance( $name, $component.'Model' );
|
|
// if model not found
|
|
if ($model == false)
|
|
{
|
|
require_once $fullPath.'/'.strtolower($name).'.php';
|
|
// build class name
|
|
$class = $prefix.$name;
|
|
// initialize the model
|
|
new $class();
|
|
$model = JModelLegacy::getInstance($name, $prefix);
|
|
}
|
|
return $model;
|
|
}
|
|
|
|
/**
|
|
* Add to asset Table
|
|
*/
|
|
public static function setAsset($id,$table)
|
|
{
|
|
$parent = JTable::getInstance('Asset');
|
|
$parent->loadByName('com_componentbuilder');
|
|
|
|
$parentId = $parent->id;
|
|
$name = 'com_componentbuilder.'.$table.'.'.$id;
|
|
$title = '';
|
|
|
|
$asset = JTable::getInstance('Asset');
|
|
$asset->loadByName($name);
|
|
|
|
// Check for an error.
|
|
$error = $asset->getError();
|
|
|
|
if ($error)
|
|
{
|
|
$this->setError($error);
|
|
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
// Specify how a new or moved node asset is inserted into the tree.
|
|
if ($asset->parent_id != $parentId)
|
|
{
|
|
$asset->setLocation($parentId, 'last-child');
|
|
}
|
|
|
|
// Prepare the asset to be stored.
|
|
$asset->parent_id = $parentId;
|
|
$asset->name = $name;
|
|
$asset->title = $title;
|
|
// get the default asset rules
|
|
$rules = self::getDefaultAssetRules('com_componentbuilder',$table);
|
|
if ($rules instanceof JAccessRules)
|
|
{
|
|
$asset->rules = (string) $rules;
|
|
}
|
|
|
|
if (!$asset->check() || !$asset->store())
|
|
{
|
|
JFactory::getApplication()->enqueueMessage($asset->getError(), 'warning');
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
// Create an asset_id or heal one that is corrupted.
|
|
$object = new stdClass();
|
|
|
|
// Must be a valid primary key value.
|
|
$object->id = $id;
|
|
$object->asset_id = (int) $asset->id;
|
|
|
|
// Update their asset_id to link to the asset table.
|
|
return JFactory::getDbo()->updateObject('#__componentbuilder_'.$table, $object, 'id');
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Gets the default asset Rules for a component/view.
|
|
*/
|
|
protected static function getDefaultAssetRules($component,$view)
|
|
{
|
|
// Need to find the asset id by the name of the component.
|
|
$db = JFactory::getDbo();
|
|
$query = $db->getQuery(true)
|
|
->select($db->quoteName('id'))
|
|
->from($db->quoteName('#__assets'))
|
|
->where($db->quoteName('name') . ' = ' . $db->quote($component));
|
|
$db->setQuery($query);
|
|
$db->execute();
|
|
if ($db->loadRowList())
|
|
{
|
|
// asset alread set so use saved rules
|
|
$assetId = (int) $db->loadResult();
|
|
$result = JAccess::getAssetRules($assetId);
|
|
if ($result instanceof JAccessRules)
|
|
{
|
|
$_result = (string) $result;
|
|
$_result = json_decode($_result);
|
|
foreach ($_result as $name => &$rule)
|
|
{
|
|
$v = explode('.', $name);
|
|
if ($view !== $v[0])
|
|
{
|
|
// remove since it is not part of this view
|
|
unset($_result->$name);
|
|
}
|
|
else
|
|
{
|
|
// clear the value since we inherit
|
|
$rule = array();
|
|
}
|
|
}
|
|
// check if there are any view values remaining
|
|
if (count($_result))
|
|
{
|
|
$_result = json_encode($_result);
|
|
$_result = array($_result);
|
|
// Instantiate and return the JAccessRules object for the asset rules.
|
|
$rules = new JAccessRules($_result);
|
|
|
|
return $rules;
|
|
}
|
|
return $result;
|
|
}
|
|
}
|
|
return JAccess::getAssetRules(0);
|
|
}
|
|
|
|
public static function renderBoolButton()
|
|
{
|
|
$args = func_get_args();
|
|
|
|
// get the radio element
|
|
$button = JFormHelper::loadFieldType('radio');
|
|
|
|
// setup the properties
|
|
$name = self::htmlEscape($args[0]);
|
|
$additional = isset($args[1]) ? (string) $args[1] : '';
|
|
$value = $args[2];
|
|
$yes = isset($args[3]) ? self::htmlEscape($args[3]) : 'JYES';
|
|
$no = isset($args[4]) ? self::htmlEscape($args[4]) : 'JNO';
|
|
|
|
// prepare the xml
|
|
$element = new SimpleXMLElement('<field name="'.$name.'" type="radio" class="btn-group"><option '.$additional.' value="0">'.$no.'</option><option '.$additional.' value="1">'.$yes.'</option></field>');
|
|
|
|
// run
|
|
$button->setup($element, $value);
|
|
|
|
return $button->input;
|
|
|
|
}
|
|
|
|
/**
|
|
* UIKIT Component Classes
|
|
**/
|
|
public static $uk_components = array(
|
|
'data-uk-grid' => array(
|
|
'grid' ),
|
|
'uk-accordion' => array(
|
|
'accordion' ),
|
|
'uk-autocomplete' => array(
|
|
'autocomplete' ),
|
|
'data-uk-datepicker' => array(
|
|
'datepicker' ),
|
|
'uk-form-password' => array(
|
|
'form-password' ),
|
|
'uk-form-select' => array(
|
|
'form-select' ),
|
|
'data-uk-htmleditor' => array(
|
|
'htmleditor' ),
|
|
'data-uk-lightbox' => array(
|
|
'lightbox' ),
|
|
'uk-nestable' => array(
|
|
'nestable' ),
|
|
'UIkit.notify' => array(
|
|
'notify' ),
|
|
'data-uk-parallax' => array(
|
|
'parallax' ),
|
|
'uk-search' => array(
|
|
'search' ),
|
|
'uk-slider' => array(
|
|
'slider' ),
|
|
'uk-slideset' => array(
|
|
'slideset' ),
|
|
'uk-slideshow' => array(
|
|
'slideshow',
|
|
'slideshow-fx' ),
|
|
'uk-sortable' => array(
|
|
'sortable' ),
|
|
'data-uk-sticky' => array(
|
|
'sticky' ),
|
|
'data-uk-timepicker' => array(
|
|
'timepicker' ),
|
|
'data-uk-tooltip' => array(
|
|
'tooltip' ),
|
|
'uk-placeholder' => array(
|
|
'placeholder' ),
|
|
'uk-dotnav' => array(
|
|
'dotnav' ),
|
|
'uk-slidenav' => array(
|
|
'slidenav' ),
|
|
'uk-form' => array(
|
|
'form-advanced' ),
|
|
'uk-progress' => array(
|
|
'progress' ),
|
|
'upload-drop' => array(
|
|
'upload', 'form-file' )
|
|
);
|
|
|
|
/**
|
|
* Add UIKIT Components
|
|
**/
|
|
public static $uikit = false;
|
|
|
|
/**
|
|
* Get UIKIT Components
|
|
**/
|
|
public static function getUikitComp($content,$classes = array())
|
|
{
|
|
if (strpos($content,'class="uk-') !== false)
|
|
{
|
|
// reset
|
|
$temp = array();
|
|
foreach (self::$uk_components as $looking => $add)
|
|
{
|
|
if (strpos($content,$looking) !== false)
|
|
{
|
|
$temp[] = $looking;
|
|
}
|
|
}
|
|
// make sure uikit is loaded to config
|
|
if (strpos($content,'class="uk-') !== false)
|
|
{
|
|
self::$uikit = true;
|
|
}
|
|
// sorter
|
|
if (self::checkArray($temp))
|
|
{
|
|
// merger
|
|
if (self::checkArray($classes))
|
|
{
|
|
$newTemp = array_merge($temp,$classes);
|
|
$temp = array_unique($newTemp);
|
|
}
|
|
return $temp;
|
|
}
|
|
}
|
|
if (self::checkArray($classes))
|
|
{
|
|
return $classes;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function getVar($table, $where = null, $whereString = 'user', $what = 'id', $operator = '=', $main = 'componentbuilder')
|
|
{
|
|
if(!$where)
|
|
{
|
|
$where = JFactory::getUser()->id;
|
|
}
|
|
// Get a db connection.
|
|
$db = JFactory::getDbo();
|
|
// Create a new query object.
|
|
$query = $db->getQuery(true);
|
|
$query->select($db->quoteName(array($what)));
|
|
if (empty($table))
|
|
{
|
|
$query->from($db->quoteName('#__'.$main));
|
|
}
|
|
else
|
|
{
|
|
$query->from($db->quoteName('#__'.$main.'_'.$table));
|
|
}
|
|
if (is_numeric($where))
|
|
{
|
|
$query->where($db->quoteName($whereString) . ' '.$operator.' '.(int) $where);
|
|
}
|
|
elseif (is_string($where))
|
|
{
|
|
$query->where($db->quoteName($whereString) . ' '.$operator.' '. $db->quote((string)$where));
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
$db->setQuery($query);
|
|
$db->execute();
|
|
if ($db->getNumRows())
|
|
{
|
|
return $db->loadResult();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function getVars($table, $where = null, $whereString = 'user', $what = 'id', $operator = 'IN', $main = 'componentbuilder', $unique = true)
|
|
{
|
|
if(!$where)
|
|
{
|
|
$where = JFactory::getUser()->id;
|
|
}
|
|
|
|
if (!self::checkArray($where) && $where > 0)
|
|
{
|
|
$where = array($where);
|
|
}
|
|
|
|
if (self::checkArray($where))
|
|
{
|
|
// prep main <-- why? well if $main='' is empty then $table can be categories or users
|
|
if (self::checkString($main))
|
|
{
|
|
$main = '_'.ltrim($main, '_');
|
|
}
|
|
// Get a db connection.
|
|
$db = JFactory::getDbo();
|
|
// Create a new query object.
|
|
$query = $db->getQuery(true);
|
|
|
|
$query->select($db->quoteName(array($what)));
|
|
if (empty($table))
|
|
{
|
|
$query->from($db->quoteName('#__'.$main));
|
|
}
|
|
else
|
|
{
|
|
$query->from($db->quoteName('#_'.$main.'_'.$table));
|
|
}
|
|
$query->where($db->quoteName($whereString) . ' '.$operator.' (' . implode(',',$where) . ')');
|
|
$db->setQuery($query);
|
|
$db->execute();
|
|
if ($db->getNumRows())
|
|
{
|
|
if ($unique)
|
|
{
|
|
return array_unique($db->loadColumn());
|
|
}
|
|
return $db->loadColumn();
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function isPublished($id,$type)
|
|
{
|
|
if ($type == 'raw')
|
|
{
|
|
$type = 'item';
|
|
}
|
|
$db = JFactory::getDbo();
|
|
$query = $db->getQuery(true);
|
|
$query->select(array('a.published'));
|
|
$query->from('#__componentbuilder_'.$type.' AS a');
|
|
$query->where('a.id = '. (int) $id);
|
|
$query->where('a.published = 1');
|
|
$db->setQuery($query);
|
|
$db->execute();
|
|
$found = $db->getNumRows();
|
|
if($found)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function getGroupName($id)
|
|
{
|
|
$db = JFactory::getDBO();
|
|
$query = $db->getQuery(true);
|
|
$query->select(array('a.title'));
|
|
$query->from('#__usergroups AS a');
|
|
$query->where('a.id = '. (int) $id);
|
|
$db->setQuery($query);
|
|
$db->execute();
|
|
$found = $db->getNumRows();
|
|
if($found)
|
|
{
|
|
return $db->loadResult();
|
|
}
|
|
return $id;
|
|
}
|
|
|
|
/**
|
|
* Get the actions permissions
|
|
**/
|
|
public static function getActions($view,&$record = null,$views = null)
|
|
{
|
|
jimport('joomla.access.access');
|
|
|
|
$user = JFactory::getUser();
|
|
$result = new JObject;
|
|
$view = self::safeString($view);
|
|
if (self::checkString($views))
|
|
{
|
|
$views = self::safeString($views);
|
|
}
|
|
// get all actions from component
|
|
$actions = JAccess::getActions('com_componentbuilder', 'component');
|
|
// set acctions only set in component settiongs
|
|
$componentActions = array('core.admin','core.manage','core.options','core.export');
|
|
// loop the actions and set the permissions
|
|
foreach ($actions as $action)
|
|
{
|
|
// set to use component default
|
|
$fallback = true;
|
|
if (self::checkObject($record) && isset($record->id) && $record->id > 0 && !in_array($action->name,$componentActions))
|
|
{
|
|
// The record has been set. Check the record permissions.
|
|
$permission = $user->authorise($action->name, 'com_componentbuilder.'.$view.'.' . (int) $record->id);
|
|
if (!$permission) // TODO removed && !is_null($permission)
|
|
{
|
|
if ($action->name == 'core.edit' || $action->name == $view.'.edit')
|
|
{
|
|
if ($user->authorise('core.edit.own', 'com_componentbuilder.'.$view.'.' . (int) $record->id))
|
|
{
|
|
// If the owner matches 'me' then allow.
|
|
if (isset($record->created_by) && $record->created_by > 0 && ($record->created_by == $user->id))
|
|
{
|
|
$result->set($action->name, true);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
else
|
|
{
|
|
$result->set($action->name, false);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
}
|
|
elseif ($user->authorise($view.'edit.own', 'com_componentbuilder.'.$view.'.' . (int) $record->id))
|
|
{
|
|
// If the owner matches 'me' then allow.
|
|
if (isset($record->created_by) && $record->created_by > 0 && ($record->created_by == $user->id))
|
|
{
|
|
$result->set($action->name, true);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
else
|
|
{
|
|
$result->set($action->name, false);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
}
|
|
elseif ($user->authorise('core.edit.own', 'com_componentbuilder'))
|
|
{
|
|
// If the owner matches 'me' then allow.
|
|
if (isset($record->created_by) && $record->created_by > 0 && ($record->created_by == $user->id))
|
|
{
|
|
$result->set($action->name, true);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
else
|
|
{
|
|
$result->set($action->name, false);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
}
|
|
elseif ($user->authorise($view.'edit.own', 'com_componentbuilder'))
|
|
{
|
|
// If the owner matches 'me' then allow.
|
|
if (isset($record->created_by) && $record->created_by > 0 && ($record->created_by == $user->id))
|
|
{
|
|
$result->set($action->name, true);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
else
|
|
{
|
|
$result->set($action->name, false);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
elseif (self::checkString($views) && isset($record->catid) && $record->catid > 0)
|
|
{
|
|
// make sure we use the core. action check for the categories
|
|
if (strpos($action->name,$view) !== false && strpos($action->name,'core.') === false ) {
|
|
$coreCheck = explode('.',$action->name);
|
|
$coreCheck[0] = 'core';
|
|
$categoryCheck = implode('.',$coreCheck);
|
|
}
|
|
else
|
|
{
|
|
$categoryCheck = $action->name;
|
|
}
|
|
// The record has a category. Check the category permissions.
|
|
$catpermission = $user->authorise($categoryCheck, 'com_componentbuilder.'.$views.'.category.' . (int) $record->catid);
|
|
if (!$catpermission && !is_null($catpermission))
|
|
{
|
|
if ($action->name == 'core.edit' || $action->name == $view.'.edit')
|
|
{
|
|
if ($user->authorise('core.edit.own', 'com_componentbuilder.'.$views.'.category.' . (int) $record->catid))
|
|
{
|
|
// If the owner matches 'me' then allow.
|
|
if (isset($record->created_by) && $record->created_by > 0 && ($record->created_by == $user->id))
|
|
{
|
|
$result->set($action->name, true);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
else
|
|
{
|
|
$result->set($action->name, false);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
}
|
|
elseif ($user->authorise($view.'edit.own', 'com_componentbuilder.'.$views.'.category.' . (int) $record->catid))
|
|
{
|
|
// If the owner matches 'me' then allow.
|
|
if (isset($record->created_by) && $record->created_by > 0 && ($record->created_by == $user->id))
|
|
{
|
|
$result->set($action->name, true);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
else
|
|
{
|
|
$result->set($action->name, false);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
}
|
|
elseif ($user->authorise('core.edit.own', 'com_componentbuilder'))
|
|
{
|
|
// If the owner matches 'me' then allow.
|
|
if (isset($record->created_by) && $record->created_by > 0 && ($record->created_by == $user->id))
|
|
{
|
|
$result->set($action->name, true);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
else
|
|
{
|
|
$result->set($action->name, false);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
}
|
|
elseif ($user->authorise($view.'edit.own', 'com_componentbuilder'))
|
|
{
|
|
// If the owner matches 'me' then allow.
|
|
if (isset($record->created_by) && $record->created_by > 0 && ($record->created_by == $user->id))
|
|
{
|
|
$result->set($action->name, true);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
else
|
|
{
|
|
$result->set($action->name, false);
|
|
// set not to use component default
|
|
$fallback = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// if allowed then fallback on component global settings
|
|
if ($fallback)
|
|
{
|
|
$result->set($action->name, $user->authorise($action->name, 'com_componentbuilder'));
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
public static function checkJson($string)
|
|
{
|
|
if (self::checkString($string))
|
|
{
|
|
json_decode($string);
|
|
return (json_last_error() === JSON_ERROR_NONE);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function checkObject($object)
|
|
{
|
|
if (isset($object) && is_object($object) && count($object) > 0)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function checkArray($array, $removeEmptyString = false)
|
|
{
|
|
if (isset($array) && is_array($array) && count($array) > 0)
|
|
{
|
|
// also make sure the empty strings are removed
|
|
if ($removeEmptyString)
|
|
{
|
|
foreach ($array as $key => $string)
|
|
{
|
|
if (empty($string))
|
|
{
|
|
unset($array[$key]);
|
|
}
|
|
}
|
|
return self::checkArray($array, false);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function checkString($string)
|
|
{
|
|
if (isset($string) && is_string($string) && strlen($string) > 0)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function mergeArrays($arrays)
|
|
{
|
|
if(self::checkArray($arrays))
|
|
{
|
|
$arrayBuket = array();
|
|
foreach ($arrays as $array)
|
|
{
|
|
if (self::checkArray($array))
|
|
{
|
|
$arrayBuket = array_merge($arrayBuket, $array);
|
|
}
|
|
}
|
|
return $arrayBuket;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// typo sorry!
|
|
public static function sorten($string, $length = 40, $addTip = true)
|
|
{
|
|
return self::shorten($string, $length, $addTip);
|
|
}
|
|
|
|
public static function shorten($string, $length = 40, $addTip = true)
|
|
{
|
|
if (self::checkString($string))
|
|
{
|
|
$initial = strlen($string);
|
|
$words = preg_split('/([\s\n\r]+)/', $string, null, PREG_SPLIT_DELIM_CAPTURE);
|
|
$words_count = count($words);
|
|
|
|
$word_length = 0;
|
|
$last_word = 0;
|
|
for (; $last_word < $words_count; ++$last_word)
|
|
{
|
|
$word_length += strlen($words[$last_word]);
|
|
if ($word_length > $length)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
$newString = implode(array_slice($words, 0, $last_word));
|
|
$final = strlen($newString);
|
|
if ($initial != $final && $addTip)
|
|
{
|
|
$title = self::shorten($string, 400 , false);
|
|
return '<span class="hasTip" title="'.$title.'" style="cursor:help">'.trim($newString).'...</span>';
|
|
}
|
|
elseif ($initial != $final && !$addTip)
|
|
{
|
|
return trim($newString).'...';
|
|
}
|
|
}
|
|
return $string;
|
|
}
|
|
|
|
public static function safeString($string, $type = 'L', $spacer = '_', $replaceNumbers = true)
|
|
{
|
|
if ($replaceNumbers === true)
|
|
{
|
|
// remove all numbers and replace with english text version (works well only up to millions)
|
|
$string = self::replaceNumbers($string);
|
|
}
|
|
// 0nly continue if we have a string
|
|
if (self::checkString($string))
|
|
{
|
|
// create file name without the extention that is safe
|
|
if ($type === 'filename')
|
|
{
|
|
// make sure VDM is not in the string
|
|
$string = str_replace('VDM', 'vDm', $string);
|
|
// Remove anything which isn't a word, whitespace, number
|
|
// or any of the following caracters -_()
|
|
// If you don't need to handle multi-byte characters
|
|
// you can use preg_replace rather than mb_ereg_replace
|
|
// Thanks @Łukasz Rysiak!
|
|
// $string = mb_ereg_replace("([^\w\s\d\-_\(\)])", '', $string);
|
|
$string = preg_replace("([^\w\s\d\-_\(\)])", '', $string);
|
|
// http://stackoverflow.com/a/2021729/1429677
|
|
return preg_replace('/\s+/', ' ', $string);
|
|
}
|
|
// remove all other characters
|
|
$string = trim($string);
|
|
$string = preg_replace('/'.$spacer.'+/', ' ', $string);
|
|
$string = preg_replace('/\s+/', ' ', $string);
|
|
$string = preg_replace("/[^A-Za-z ]/", '', $string);
|
|
// select final adaptations
|
|
if ($type === 'L' || $type === 'strtolower')
|
|
{
|
|
// replace white space with underscore
|
|
$string = preg_replace('/\s+/', $spacer, $string);
|
|
// default is to return lower
|
|
return strtolower($string);
|
|
}
|
|
elseif ($type === 'W')
|
|
{
|
|
// return a string with all first letter of each word uppercase(no undersocre)
|
|
return ucwords(strtolower($string));
|
|
}
|
|
elseif ($type === 'w' || $type === 'word')
|
|
{
|
|
// return a string with all lowercase(no undersocre)
|
|
return strtolower($string);
|
|
}
|
|
elseif ($type === 'Ww' || $type === 'Word')
|
|
{
|
|
// return a string with first letter of the first word uppercase and all the rest lowercase(no undersocre)
|
|
return ucfirst(strtolower($string));
|
|
}
|
|
elseif ($type === 'WW' || $type === 'WORD')
|
|
{
|
|
// return a string with all the uppercase(no undersocre)
|
|
return strtoupper($string);
|
|
}
|
|
elseif ($type === 'U' || $type === 'strtoupper')
|
|
{
|
|
// replace white space with underscore
|
|
$string = preg_replace('/\s+/', $spacer, $string);
|
|
// return all upper
|
|
return strtoupper($string);
|
|
}
|
|
elseif ($type === 'F' || $type === 'ucfirst')
|
|
{
|
|
// replace white space with underscore
|
|
$string = preg_replace('/\s+/', $spacer, $string);
|
|
// return with first caracter to upper
|
|
return ucfirst(strtolower($string));
|
|
}
|
|
elseif ($type === 'cA' || $type === 'cAmel' || $type === 'camelcase')
|
|
{
|
|
// convert all words to first letter uppercase
|
|
$string = ucwords(strtolower($string));
|
|
// remove white space
|
|
$string = preg_replace('/\s+/', '', $string);
|
|
// now return first letter lowercase
|
|
return lcfirst($string);
|
|
}
|
|
// return string
|
|
return $string;
|
|
}
|
|
// not a string
|
|
return '';
|
|
}
|
|
|
|
public static function htmlEscape($var, $charset = 'UTF-8', $shorten = false, $length = 40)
|
|
{
|
|
if (self::checkString($var))
|
|
{
|
|
$filter = new JFilterInput();
|
|
$string = $filter->clean(html_entity_decode(htmlentities($var, ENT_COMPAT, $charset)), 'HTML');
|
|
if ($shorten)
|
|
{
|
|
return self::shorten($string,$length);
|
|
}
|
|
return $string;
|
|
}
|
|
else
|
|
{
|
|
return '';
|
|
}
|
|
}
|
|
|
|
public static function replaceNumbers($string)
|
|
{
|
|
// set numbers array
|
|
$numbers = array();
|
|
// first get all numbers
|
|
preg_match_all('!\d+!', $string, $numbers);
|
|
// check if we have any numbers
|
|
if (isset($numbers[0]) && self::checkArray($numbers[0]))
|
|
{
|
|
foreach ($numbers[0] as $number)
|
|
{
|
|
$searchReplace[$number] = self::numberToString((int)$number);
|
|
}
|
|
// now replace numbers in string
|
|
$string = str_replace(array_keys($searchReplace), array_values($searchReplace),$string);
|
|
// check if we missed any, strange if we did.
|
|
return self::replaceNumbers($string);
|
|
}
|
|
// return the string with no numbers remaining.
|
|
return $string;
|
|
}
|
|
|
|
/**
|
|
* Convert an integer into an English word string
|
|
* Thanks to Tom Nicholson <http://php.net/manual/en/function.strval.php#41988>
|
|
*
|
|
* @input an int
|
|
* @returns a string
|
|
**/
|
|
public static function numberToString($x)
|
|
{
|
|
$nwords = array( "zero", "one", "two", "three", "four", "five", "six", "seven",
|
|
"eight", "nine", "ten", "eleven", "twelve", "thirteen",
|
|
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
|
|
"nineteen", "twenty", 30 => "thirty", 40 => "forty",
|
|
50 => "fifty", 60 => "sixty", 70 => "seventy", 80 => "eighty",
|
|
90 => "ninety" );
|
|
|
|
if(!is_numeric($x))
|
|
{
|
|
$w = $x;
|
|
}
|
|
elseif(fmod($x, 1) != 0)
|
|
{
|
|
$w = $x;
|
|
}
|
|
else
|
|
{
|
|
if($x < 0)
|
|
{
|
|
$w = 'minus ';
|
|
$x = -$x;
|
|
}
|
|
else
|
|
{
|
|
$w = '';
|
|
// ... now $x is a non-negative integer.
|
|
}
|
|
|
|
if($x < 21) // 0 to 20
|
|
{
|
|
$w .= $nwords[$x];
|
|
}
|
|
elseif($x < 100) // 21 to 99
|
|
{
|
|
$w .= $nwords[10 * floor($x/10)];
|
|
$r = fmod($x, 10);
|
|
if($r > 0)
|
|
{
|
|
$w .= ' '. $nwords[$r];
|
|
}
|
|
}
|
|
elseif($x < 1000) // 100 to 999
|
|
{
|
|
$w .= $nwords[floor($x/100)] .' hundred';
|
|
$r = fmod($x, 100);
|
|
if($r > 0)
|
|
{
|
|
$w .= ' and '. self::numberToString($r);
|
|
}
|
|
}
|
|
elseif($x < 1000000) // 1000 to 999999
|
|
{
|
|
$w .= self::numberToString(floor($x/1000)) .' thousand';
|
|
$r = fmod($x, 1000);
|
|
if($r > 0)
|
|
{
|
|
$w .= ' ';
|
|
if($r < 100)
|
|
{
|
|
$w .= 'and ';
|
|
}
|
|
$w .= self::numberToString($r);
|
|
}
|
|
}
|
|
else // millions
|
|
{
|
|
$w .= self::numberToString(floor($x/1000000)) .' million';
|
|
$r = fmod($x, 1000000);
|
|
if($r > 0)
|
|
{
|
|
$w .= ' ';
|
|
if($r < 100)
|
|
{
|
|
$w .= 'and ';
|
|
}
|
|
$w .= self::numberToString($r);
|
|
}
|
|
}
|
|
}
|
|
return $w;
|
|
}
|
|
|
|
/**
|
|
* Random Key
|
|
*
|
|
* @returns a string
|
|
**/
|
|
public static function randomkey($size)
|
|
{
|
|
$bag = "abcefghijknopqrstuwxyzABCDDEFGHIJKLLMMNOPQRSTUVVWXYZabcddefghijkllmmnopqrstuvvwxyzABCEFGHIJKNOPQRSTUWXYZ";
|
|
$key = array();
|
|
$bagsize = strlen($bag) - 1;
|
|
for ($i = 0; $i < $size; $i++)
|
|
{
|
|
$get = rand(0, $bagsize);
|
|
$key[] = $bag[$get];
|
|
}
|
|
return implode($key);
|
|
}
|
|
|
|
public static function getCryptKey($type, $default = null)
|
|
{
|
|
if ('basic' === $type)
|
|
{
|
|
// Get the global params
|
|
$params = JComponentHelper::getParams('com_componentbuilder', true);
|
|
$basic_key = $params->get('basic_key', $default);
|
|
if ($basic_key)
|
|
{
|
|
return $basic_key;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|