Your IP : 216.73.216.240


Current Path : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/
Upload File :
Current File : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/TMultiple.php

<?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;
    }
}