Your IP : 216.73.216.240
<?php
/*
* @package Tech Fry Library
* @license https://www.gnu.org/licenses/gpl-3.0.en.html
*/
namespace TechFry\Library;
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
class TMultiple
{
public $template;
public function __construct($template = '')
{
$this->template = $template;
}
// 01. Get Content from Multiple Sources
public function get_content($dynamic = [])
{
if (!$dynamic['multiple_source'])
{
return;
}
$items = array();
switch ($dynamic['multiple_source'])
{
case 'articles' :
$a = new TArticle();
$items = $a->get_articles($dynamic);
break;
case 'categories' :
$c = new TCategory();
$items = $c->get_categories($dynamic);
break;
case 'tags' :
$t = new TTag();
$items = $t->get_tags($dynamic);
break;
case 'menuitems' :
$app = Factory::getApplication();
$sitemenu = $app->getMenu();
$items = $sitemenu->getItems('menutype', $dynamic['menu']);
//print_r($items); // TO DO: Add more properties in menu item object
break;
case 'users' :
$u = new TUser();
$users = $u->get_users_by_group($dynamic['usergroup']);
foreach ($users as $user_id)
{
$items[] = Factory::getUser($user_id);
}
break;
case 'dbtable' :
if ($dynamic['dbtable'])
{
if ($dynamic['order'])
{
$ordering = $dynamic['order'] . ' ' . $dynamic['order_dirn'];
}
else
{
$ordering = '';
}
$conditions = array();
if (isset($dynamic['filter']) && $dynamic['filter'])
{
$filters = (array) $dynamic['filter'];
foreach ($filters as $filter)
{
$conditions[] = array($filter->where_field, $filter->where_operator, $filter->where_value);
}
}
$db = new TDb($dynamic['dbtable']);
$items = $db->get_items(array('conditions' => $conditions, 'order' => $ordering, 'limit' => $dynamic['limit']));
}
break;
case 'files' :
$f = new TFile();
$files = $f->get_files($dynamic['folder']);
foreach ($files as $k => $file)
{
$items[$k] = new \stdClass();
$items[$k]->name = $file;
// TO DO: Add other file properties
}
break;
case 'rss' :
break;
}
$return = array(
'total' => \count($items),
'items' => $items,
);
return $return;
}
// 02. Replace content from Multiple Sources and Multiply
public function replace_content($dynamic_data)
{
// If $template is string, $new_data will be 1D array
// If $template is 1D array or object, $new data will be 2D array
$new_data = [];
$regex = '/{DC\s([a-zA-Z_]+)}/i'; // Example: {DC title}
if (\is_string($this->template))
{
preg_match_all($regex, $this->template, $matches, PREG_SET_ORDER);
foreach ($dynamic_data as $n => $data)
{
$data = (array) $data;
$str = $this->template;
foreach ($matches as $match)
{
$field = trim($match[1]);
$value = $data[$field] ?? '';
$str = str_replace($match[0], $value, $str);
}
$new_data[$n] = $str;
}
return $new_data;
}
foreach ($this->template as $item_part_key => $item_part_value)
{
preg_match_all($regex, $item_part_value, $matches, PREG_SET_ORDER);
foreach ($dynamic_data as $n => $data)
{
$data = (array) $data;
$str = $item_part_value;
foreach ($matches as $match)
{
$field = trim($match[1]);
$value = $data[$field] ?? '';
$str = str_replace($match[0], $value, $str);
}
$new_data[$n][$item_part_key] = $str;
}
}
return $new_data;
}
public function set_template($template)
{
$this->template = $template;
}
}