forked from joomla/Component-Builder
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)
240 lines
6.3 KiB
PHP
240 lines
6.3 KiB
PHP
<?php
|
|
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
|
__ __ _ _____ _ _ __ __ _ _ _
|
|
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
|
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
|
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
|
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
|
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
|
| |
|
|
|_|
|
|
/-------------------------------------------------------------------------------------------------------------------------------/
|
|
|
|
@version 2.5.9
|
|
@build 26th October, 2017
|
|
@created 30th April, 2015
|
|
@package Component Builder
|
|
@subpackage router.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');
|
|
|
|
/**
|
|
* Routing class from com_componentbuilder
|
|
*
|
|
* @since 3.3
|
|
*/
|
|
class ComponentbuilderRouter extends JComponentRouterBase
|
|
{
|
|
/**
|
|
* Build the route for the com_componentbuilder component
|
|
*
|
|
* @param array &$query An array of URL arguments
|
|
*
|
|
* @return array The URL arguments to use to assemble the subsequent URL.
|
|
*
|
|
* @since 3.3
|
|
*/
|
|
public function build(&$query)
|
|
{
|
|
$segments = array();
|
|
|
|
// Get a menu item based on Itemid or currently active
|
|
$params = JComponentHelper::getParams('com_componentbuilder');
|
|
|
|
if (empty($query['Itemid']))
|
|
{
|
|
$menuItem = $this->menu->getActive();
|
|
}
|
|
else
|
|
{
|
|
$menuItem = $this->menu->getItem($query['Itemid']);
|
|
}
|
|
|
|
$mView = (empty($menuItem->query['view'])) ? null : $menuItem->query['view'];
|
|
$mId = (empty($menuItem->query['id'])) ? null : $menuItem->query['id'];
|
|
|
|
if (isset($query['view']))
|
|
{
|
|
$view = $query['view'];
|
|
|
|
if (empty($query['Itemid']))
|
|
{
|
|
$segments[] = $query['view'];
|
|
}
|
|
|
|
unset($query['view']);
|
|
}
|
|
|
|
// Are we dealing with a item that is attached to a menu item?
|
|
if (isset($view) && ($mView == $view) and (isset($query['id'])) and ($mId == (int) $query['id']))
|
|
{
|
|
unset($query['view']);
|
|
unset($query['catid']);
|
|
unset($query['id']);
|
|
return $segments;
|
|
}
|
|
|
|
if (isset($view) && isset($query['id']) && ($view === 'api'))
|
|
{
|
|
if ($mId != (int) $query['id'] || $mView != $view)
|
|
{
|
|
if (($view === 'api'))
|
|
{
|
|
$segments[] = $view;
|
|
$id = explode(':', $query['id']);
|
|
if (count($id) == 2)
|
|
{
|
|
$segments[] = $id[1];
|
|
}
|
|
else
|
|
{
|
|
$segments[] = $id[0];
|
|
}
|
|
}
|
|
}
|
|
unset($query['id']);
|
|
}
|
|
|
|
$total = count($segments);
|
|
|
|
for ($i = 0; $i < $total; $i++)
|
|
{
|
|
$segments[$i] = str_replace(':', '-', $segments[$i]);
|
|
}
|
|
|
|
return $segments;
|
|
|
|
}
|
|
|
|
/**
|
|
* Parse the segments of a URL.
|
|
*
|
|
* @param array &$segments The segments of the URL to parse.
|
|
*
|
|
* @return array The URL attributes to be used by the application.
|
|
*
|
|
* @since 3.3
|
|
*/
|
|
public function parse(&$segments)
|
|
{
|
|
$count = count($segments);
|
|
$vars = array();
|
|
|
|
//Handle View and Identifier
|
|
switch($segments[0])
|
|
{
|
|
case 'api':
|
|
$vars['view'] = 'api';
|
|
if (is_numeric($segments[$count-1]))
|
|
{
|
|
$vars['id'] = (int) $segments[$count-1];
|
|
}
|
|
elseif ($segments[$count-1])
|
|
{
|
|
$id = $this->getVar('joomla_component', $segments[$count-1], 'alias', 'id');
|
|
if($id)
|
|
{
|
|
$vars['id'] = $id;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
return $vars;
|
|
}
|
|
|
|
protected function getVar($table, $where = null, $whereString = null, $what = null, $category = false, $operator = '=', $main = 'componentbuilder')
|
|
{
|
|
if(!$where || !$what || !$whereString)
|
|
{
|
|
return false;
|
|
}
|
|
// Get a db connection.
|
|
$db = JFactory::getDbo();
|
|
// Create a new query object.
|
|
$query = $db->getQuery(true);
|
|
|
|
$query->select($db->quoteName(array($what)));
|
|
if ('categories' == $table || 'category' == $table || $category)
|
|
{
|
|
$getTable = '#__categories';
|
|
$query->from($db->quoteName($getTable));
|
|
}
|
|
else
|
|
{
|
|
// we must check if the table exist (TODO not ideal)
|
|
$tables = $db->getTableList();
|
|
$app = JFactory::getApplication();
|
|
$prefix = $app->get('dbprefix');
|
|
$check = $prefix.$main.'_'.$table;
|
|
if (in_array($check, $tables))
|
|
{
|
|
$getTable = '#__'.$main.'_'.$table;
|
|
$query->from($db->quoteName($getTable));
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
if (is_numeric($where))
|
|
{
|
|
return false;
|
|
}
|
|
elseif ($this->checkString($where))
|
|
{
|
|
// we must first check if this table has the column
|
|
$columns = $db->getTableColumns($getTable);
|
|
if (isset($columns[$whereString]))
|
|
{
|
|
$query->where($db->quoteName($whereString) . ' '.$operator.' '. $db->quote((string)$where));
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
$db->setQuery($query);
|
|
$db->execute();
|
|
if ($db->getNumRows())
|
|
{
|
|
return $db->loadResult();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
protected function checkString($string)
|
|
{
|
|
if (isset($string) && is_string($string) && strlen($string) > 0)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function ComponentbuilderBuildRoute(&$query)
|
|
{
|
|
$router = new ComponentbuilderRouter;
|
|
|
|
return $router->build($query);
|
|
}
|
|
|
|
function ComponentbuilderParseRoute($segments)
|
|
{
|
|
$router = new ContentRouter;
|
|
|
|
return $router->parse($segments);
|
|
} |