| Current Path : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/ |
| Current File : /home/juvelize/saulnois/tmp/install_695d2cf0b4957/src/TTasks.php |
<?php
/*
* @package Tech Fry Library
* @license https://www.gnu.org/licenses/gpl-3.0.en.html
*/
namespace TechFry\Library;
use Joomla\CMS\Factory;
use TechFry\Library\TDb;
use TechFry\Library\TNotify;
use TechFry\Library\TUser;
use TechFry\Library\TApi;
use TechFry\Library\TDynamic;
class TTasks
{
public $db_table;
public $task;
public $data; // Data filled in form
public $location; // frontend or backend
public $is_new;
public $trigger_point;
/*
email, tfmail, user, usergroup, usercf, article, webhook, runphp, string, date, numeric, database, redirect, message
*/
public function __construct($data, $config = [])
{
$this->location = $config['location'] ?? 'frontend';
$this->is_new = $config['is_new'] ?? 1;
$this->trigger_point = $config['trigger_point'] ?? '';
$this->data = $data;
}
// Method Called from Model
public function execute_tasks()
{
$db = new TDb($this->db_table);
$conditions = array(
array('published', '=', 1),
);
$tasks = $db->get_items(array('order' => 'ordering ASC', 'conditions' => $conditions));
foreach ($tasks as $task)
{
$this->task = $task;
if (!$this->allow_trigger())
{
continue;
}
$action = $task->action_type ?? $task->type;
$function = 'execute_' . $action;
$settings = json_decode($task->params, true)['task_settings'];
if (isset($settings['debug']) && $settings['debug'])
{
$n = new TNotify();
$n->notify_admin('Data', '<pre>' . print_r($this->data, true) . '</pre>', array('to_address' => $settings['debug_email']));
}
$this->$function($settings);
}
return $this->data;
}
// Task 01: Send Email
public function execute_email($task_settings)
{
$notifier = new TNotify();
$notifier->send_email($task_settings, $this->data);
}
// Task 02: Send email using TF Mail
public function execute_tfmail($task_settings)
{
$user_id_field = $task_settings['user_id'];
$user_id = $this->data[$user_id_field];
// $data - user_id, mail_id, replaces
$data = array(
'mail_id' => $task_settings['mail_id'],
'user_id' => $user_id,
'replaces' => json_encode($this->data),
);
$mvc = Factory::getApplication()->bootComponent('com_tfmail')->getMVCFactory();
$model = $mvc->createModel('Queue', 'administrator', ['ignore_request' => true]);
$model->save($data);
}
// Task 03: Modify User Groups
public function execute_usergroup($task_settings)
{
$user_id_field = $task_settings['user_id'];
$user_id = $this->data[$user_id_field] ?? '';
if (!$user_id)
{
$user_id = Factory::getApplication()->getIdentity()->id;
}
$tuser = new TUser();
if ($user_id)
{
$add_groups = $task_settings['add_user_groups'] ?: [];
foreach ($add_groups as $group)
{
$tuser->add_user_to_group($user_id, $group);
}
$remove_groups = $task_settings['remove_user_groups'] ?: [];
foreach ($remove_groups as $group)
{
$tuser->remove_user_from_group($user_id, $group);
}
}
}
// Task 04: Modify User Custom Fields
public function execute_usercf($task_settings)
{
$user_id_field = $task_settings['user_id'];
$user_id = $this->data[$user_id_field] ?? '';
if (!$user_id)
{
$user_id = Factory::getApplication()->getIdentity()->id;
}
$tuser = new TUser();
if ($user_id)
{
$user_cfs[] = $task_settings ?: [];
$tuser->handle_fields($user_cfs, $user_id);
}
}
// Task 05: Webhook Request
public function execute_webhook($task_settings)
{
$headers = [];
if ($task_settings['content_type'])
{
$headers['Content-Type'] = $task_settings['content_type'];
}
if ($task_settings['accept'])
{
$headers['Accept'] = $task_settings['accept'];
}
if ($task_settings['headers'])
{
foreach ($task_settings['headers'] as $header)
{
$key = $header['key'];
$headers[$key] = $header['val'];
}
}
$post_data = [];
if ($task_settings['data'])
{
$dynamic = new TDynamic();
foreach ($task_settings['data'] as $data)
{
$value = $dynamic->replace_fields($data['val'], $this->data);
$keys = explode('.', $data['key']);
$temp =& $post_data;
foreach ($keys as $key)
{
if (!isset($temp[$key]) || !is_array($temp[$key]))
{
$temp[$key] = [];
}
$temp =& $temp[$key];
}
$temp = $value;
}
}
$api = new TApi($task_settings['url'], $headers);
$response = $api->send_request($task_settings['method'], $post_data);
$this->data = json_encode($response, true);
if ($task_settings['debug'])
{
$n = new TNotify();
$n->notify_admin('Webhook Response', print_r($response, true), array('to_address' => $task_settings['debug_email']));
}
}
// Task 06: Create Joomla User
public function execute_user($task_settings)
{
$email_field = $task_settings['email'] ?: 'email';
if (isset($this->data[$email_field]) && $this->data[$email_field])
{
$user_data = array('email' => $this->data[$email_field]);
$name_field = $task_settings['name'];
$username_field = $task_settings['username'];
$pw_field = $task_settings['password'];
$group_field = $task_settings['usergroup'];
if ($name_field)
{
$user_data['name'] = $this->data[$name_field];
}
if ($username_field)
{
$user_data['username'] = $this->data[$username_field];
}
if ($pw_field)
{
$user_data['password'] = $this->data[$pw_field];
}
if ($name_field)
{
$user_data['groups'] = $this->data[$group_field];
}
$customfields = $task_settings['customfields'];
if ($customfields)
{
foreach ($customfields as $customfield)
{
$k = $customfield['cf_name'];
$user_data['com_fields'][$k] = $customfield['cf_value'];
}
}
$profilefields = $task_settings['profilefields'];
if ($profilefields)
{
foreach ($profilefields as $profilefield)
{
$k = $profilefield['pf_name'];
$user_data['profile'][$k] = $profilefield['pf_value'];
}
}
$tuser = new TUser();
$user = $tuser->create_user($user_data);
$this->data['created_by'] = $user->id;
}
}
// Task 07: Create Joomla Article
public function execute_article($task_settings)
{
$title_field = $task_settings['title'] ?: 'title';
if ($task_settings['jcategory'])
{
$catid = $task_settings['jcategory'];
}
else
{
$catid_field = $task_settings['catid'];
$catid = $this->data[$catid_field];
}
$art_data = array(
'title' => $this->data[$title_field],
'catid' => $catid,
'state' => $task_settings['published'],
'access' => $task_settings['access'],
'language' => $task_settings['language'],
);
$dynamic = new TDynamic();
if ($task_settings['introtext'])
{
$art_data['introtext'] = $dynamic->replace_fields($task_settings['introtext'], $this->data);
}
if ($task_settings['fulltext'])
{
$art_data['fulltext'] = $dynamic->replace_fields($task_settings['fulltext'], $this->data);
}
$customfields = $task_settings['customfields'];
if ($customfields)
{
foreach ($customfields as $customfield)
{
$k = $customfield['cf_name'];
$art_data['com_fields'][$k] = $customfield['cf_value'];
}
}
$tarticle = new TArticle();
$article_id = $tarticle->create_article($art_data);
}
// Task 08: Custom PHP Script
public function execute_runphp($task_settings)
{
eval($task_settings['code']);
}
// Task 09: String Function
public function execute_string($task_settings)
{
$settings = json_decode($this->task->params, true);
$action_field = $settings['action_field'];
$save_field = isset($settings['save_field']) && $settings['save_field'] ? $settings['save_field'] : $action_field;
$string = $this->data[$action_field];
$function = $task_settings['str_function'];
$p1 = $task_settings['p1'] ?? '';
$p2 = $task_settings['p2'] ?? '';
$str = new TString($string);
$this->data[$save_field] = $str->process($function, array($p1, $p2));
}
// Task 10: Date Function
public function execute_date($task_settings)
{
$settings = json_decode($this->task->params, true);
$action_field = $settings['action_field'];
$save_field = isset($settings['save_field']) && $settings['save_field'] ? $settings['save_field'] : $action_field;
$date = $this->data[$action_field];
$function = $task_settings['date_function'];
$p1 = $task_settings['p1'] ?? '';
$d = new TDate($date);
$this->data[$save_field] = $d->process($function, $p1);
}
// Task 11: Numeric Function
public function execute_numeric($task_settings)
{
$settings = json_decode($this->task->params, true);
$action_field = $settings['action_field'];
$save_field = isset($settings['save_field']) && $settings['save_field'] ? $settings['save_field'] : $action_field;
$number = $this->data[$action_field];
$function = $task_settings['num_function'];
$p1 = $task_settings['p1'] ?? '';
$n = new TNumeric($number);
$this->data[$save_field] = $n->process($function, $p1);
}
// Task 12: Joomla Database
public function execute_joomla_db($task_settings)
{
// Setting conditions mandatory
if (!isset($task_settings['filter']) || !$task_settings['filter'])
{
return;
}
$function = 'joomla_db_' . $task_settings['sub_action'];
// update_records, delete_records, replace_records
$this->$function($task_settings);
}
// Task 12 A: Update records in database
public function joomla_db_update_records($task_settings)
{
$conditions = $task_settings['filter'];
$db = new TDb($task_settings['table_name']);
if ($task_settings['column_type'] == 'date')
{
// To Do: Add or subtract date based on params
$task_settings['column_value'] = Factory::getDate()->toSql();
}
$sets = array($task_settings['column_name'] => $task_settings['column_value']);
$db->update_records($sets, $conditions);
}
// Task 12 B: Delete record from database
public function joomla_db_delete_records($task_settings)
{
$conditions = $task_settings['filter'];
$db = new TDb($task_settings['table_name']);
$db->delete_items($conditions);
}
// Task 12 C: Replace records
public function joomla_db_replace_records($task_settings)
{
$conditions = $task_settings['filter'];
$db = new TDb($task_settings['table_name']);
$db->replace_column($conditions, $task_settings['column_name'], $task_settings['replace'], $task_settings['replace_with']);
}
// Task 13: Redirect
public function execute_redirect($task_settings)
{
$app = Factory::getApplication();
if ($task_settings['message'])
{
$dynamic = new TDynamic();
$task_settings['message'] = $dynamic->replace_fields($task_settings['message'], $this->data);
$message_type = $task_settings['message_type'];
$app->enqueueMessage($task_settings['message'], $message_type);
}
if ($task_settings['redirct_url'])
{
$app->redirect($task_settings['redirct_url']);
}
}
public function allow_trigger()
{
// Check for conditions
if (isset($this->task->conditions) && $this->task->conditions)
{
$conditions = json_decode($this->task->conditions, true);
}
else
{
return true;
}
foreach ($conditions as $condition)
{
$where_field = $condition['where_field'] ?? '';
$where_operator = $condition['where_operator'] ?? '';
$where_value = $condition['where_value'] ?? null;
if (!array_key_exists($where_field, $this->data))
{
return false;
}
$field_value = $this->data[$where_field];
switch ($where_operator)
{
case '=':
if ($field_value != $where_value) return false;
break;
case '!=':
case '<>':
if ($field_value == $where_value) return false;
break;
case '>':
if ($field_value <= $where_value) return false;
break;
case '<':
if ($field_value >= $where_value) return false;
break;
case '>=':
if ($field_value < $where_value) return false;
break;
case '<=':
if ($field_value > $where_value) return false;
break;
case 'IN':
if (!is_array($where_value)) $where_value = explode(',', $where_value);
if (!in_array($field_value, $where_value)) return false;
break;
case 'NOT IN':
if (!is_array($where_value)) $where_value = explode(',', $where_value);
if (in_array($field_value, $where_value)) return false;
break;
case 'LIKE':
if (stripos($field_value, str_replace('%', '', $where_value)) == false) return false;
break;
case 'NOT LIKE':
if (stripos($field_value, str_replace('%', '', $where_value)) != false) return false;
break;
case 'IS NULL':
if (!is_null($field_value)) return false;
break;
case 'IS NOT NULL':
if (is_null($field_value)) return false;
break;
default:
return false;
}
}
return true;
}
}