Spade
Mini Shell
ajax.php000064400000021404151171426670006213 0ustar00<?php
/*----------------------------------------------------------------------------------|
www.vdm.io |----/
Lmskaran
/-------------------------------------------------------------------------------------------------------/
@version 1.0.77
@build 6th April, 2022
@created 22nd July, 2020
@package Moojla
@subpackage ajax.php
@author Lmskaran <http://Lmskaran.com>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
____ _____ _____ __ __ __ __ ___ _____ __ __ ____
_____ _ _ ____ _ _ ____
(_ _)( _ )( _ )( \/ )( ) /__\ / __)( _ )( \/ )( _ \(
_ )( \( )( ___)( \( )(_ _)
.-_)( )(_)( )(_)( ) ( )(__ /(__)\ ( (__ )(_)( ) ( )___/
)(_)( ) ( )__) ) ( )(
\____) (_____)(_____)(_/\/\_)(____)(__)(__) \___)(_____)(_/\/\_)(__)
(_____)(_)\_)(____)(_)\_) (__)
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use Joomla\Utilities\ArrayHelper;
/**
* Moojla Ajax Model
*/
class MoojlaModelAjax extends JModelList
{
protected $app_params;
public function __construct()
{
parent::__construct();
// get params
$this->app_params =
JComponentHelper::getParams('com_moojla');
}
// Used in course
/***[JCBGUI.admin_view.php_ajaxmethod.129.$$$$]***/
public function shop_requirement($shop_name)
{
$shop_integration = $shop_name;
$res= [];
if ($shop_integration == 'hk') {
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('extension_id, enabled, name');
$query->from($db->quoteName('#__extensions'));
$query->where('(' .
$db->quoteName('folder') . '=' .
$db->quote('editors-xtd') . ' and ' .
$db->quoteName('element') . '=' .
$db->quote('hikashopproduct') . ') or (' .
$db->quoteName('folder') . '=' .
$db->quote('system') . ' and ' .
$db->quoteName('element') . '=' .
$db->quote('hikashopproductinsert') . ')');
$db->setQuery($query);
$results = $db->loadObjectList('name');
$required_plugins = ['Hikashop product tag insertion
plugin', 'HikaShop product tag translation plugin'];
foreach ($required_plugins as $required_plugin) {
if ($results[$required_plugin]) {
if ($results[$required_plugin]->enabled == 1)
$res['messages'][]=['message'=>
$results[$required_plugin]->name . ' is installed and
enabled', 'class'=>'success'];
else
$res['messages'][]=['message'=>
$results[$required_plugin]->name . ' is installed but not
enabled', 'class'=>'error'];
} else
$res['messages'][]=['message'=>
$results[$required_plugin]->name . ' is not installed',
'class'=>'error'];
}
$res['component']= 'hikashop';
return $res;
}
}/***[/JCBGUI$$$$]***/
// Used in coursedetail
/***[JCBGUI.site_view.php_ajaxmethod.38.$$$$]***/
public function favorite($courseid)
{
$xml = new SimpleXMLElement('<field name="courseid"
validate="exists" exists_table="#__moojla_course"
exists_column="remoteid" />');
$rule = JFormHelper::loadRuleType('exists');
$validate = $rule->test($xml, $courseid);
if (!$validate)
return false;
$userid= JFactory::getUser()->id;
$db= JFactory::getDbo();
$query= $db->getQuery(true)
->select($db->quoteName('id'))
->from($db->quoteName('#__moojla_favorite','f'))
->where($db->quoteName('userid').'='.$db->quote($userid))
->where($db->quoteName('courseid').'='.$db->quote($courseid));
$db->setQuery($query);
$result= $db->loadResult();
if (!empty($result))
{
$action= -1;
$query= $db->getQuery(true)
->delete($db->quoteName('#__moojla_favorite'))
->where($db->quoteName('userid').'='.$db->quote($userid))
->where($db->quoteName('courseid').'='.$db->quote($courseid));
$db->setQuery($query);
$result= $db->execute();
}
else
{
$action= 1;
$obj= new stdClass();
$obj->userid= $userid;
$obj->courseid= $courseid;
$result= $db->insertObject('#__moojla_favorite',$obj);
}
return $action;
}
public function rate($courseid, $rate)
{
$xml = new SimpleXMLElement('<field name="courseid"
validate="exists" exists_table="#__moojla_course"
exists_column="remoteid" />');
$rule = JFormHelper::loadRuleType('exists');
$validate = $rule->test($xml, $courseid);
if (!$validate)
return false;
$userid= JFactory::getUser()->id;
$db= JFactory::getDbo();
$query= $db->getQuery(true)
->select($db->quoteName('id'))
->from($db->quoteName('#__moojla_rate'))
->where($db->quoteName('userid').'='.$db->quote($userid))
->where($db->quoteName('courseid').'='.$db->quote($courseid));
$db->setQuery($query);
$result= $db->loadResult();
if (empty($result))
{
$obj= new stdClass();
$obj->userid= $userid;
$obj->courseid= $courseid;
$obj->rate= $rate;
$db->insertObject('#__moojla_rate',$obj);
}
else
{
$query = $db->getQuery(true);
$fields = array(
$db->quoteName('rate') . ' = ' .
$db->quote($rate),
);
$conditions = array(
$db->quoteName('userid') . '
='.$db->quote($userid),
$db->quoteName('courseid') . '
='.$db->quote($courseid)
);
$query->update($db->quoteName('#__moojla_rate'))->set($fields)->where($conditions);
$db->setQuery($query);
$db->execute();
}
return true;
}
public function viewActivity($userid, $moduleid)
{
JLoader::register('MoojlaHelper',
JPATH_ADMINISTRATOR.'/components/com_moojla/helpers/moojla.php');
$dataObj = array(
"wsfunction" =>
"moojla_view_module",
"moodlewsrestformat" => "json",
"moduleid" => $moduleid,
"userid" => $userid
);
$result =
json_decode(MoojlaHelper::sendRequestToMoodle($dataObj)->response);
return $result;
}
public function fixMyCourse($userid)
{
$thisuserid = JFactory::getUser()->id;
JLoader::register('MoojlaHelper',
JPATH_ADMINISTRATOR.'/components/com_moojla/helpers/moojla.php');
$mid = MoojlaHelper::joomlaToMoodleID($thisuserid);
$dataObj = array(
"wsfunction" =>
"moojla_get_user_courses",
"moodlewsrestformat" => "json",
"userid" => $mid
);
$results =
json_decode(MoojlaHelper::sendRequestToMoodle($dataObj)->response);
foreach($results as $res)
{
$courseid = $res->id;
$role = $res->role;
JPluginHelper::importPlugin("moojlaevents");
$dispatcher = JEventDispatcher::getInstance();
$dispatch_res1 = $dispatcher->trigger("addEnrolment",
array($courseid, $mid, $role, time()));
$dispatch_res2 = $dispatcher->trigger("addGroupMember",
array($course_id, $mid, $role));
}
return $results;
}
/***[/JCBGUI$$$$]***/
// Used in course_search
/***[JCBGUI.site_view.php_ajaxmethod.41.$$$$]***/
public function Filter($jform, $menuid, $page= 1)
{
$app= JFactory::getApplication();
require 'components/com_moojla/models/course_search.php';
$model= new MoojlaModelCourse_search();
$result= $model->Filter($jform, $menuid, $page);
if (empty($result))
return ['content' => null];
require_once
'components/com_moojla/views/course_search/view.html.php';
$view = new moojlaViewCourse_search;
require_once
JPATH_SITE.'/components/com_moojla/models/coursedetail.php';
$courseDetailModel= new MoojlaModelCoursedetail;
$view->courses= $result;
$view->params= JComponentHelper::getParams('com_moojla');
$view->favorite= $courseDetailModel->getFavorite();
\JPluginHelper::importPlugin('moojlacourse');
$view->dispatcher = JEventDispatcher::getInstance();
require_once
JPATH_ADMINISTRATOR.'/components/com_moojla/models/course.php';
$mmc= new MoojlaModelCourse;
$view->table= $mmc->getTable();
$menuTmpl=
$app->getMenu()->getItem($menuid)->getParams()->get('course_search_tmpl');
if (!$menuTmpl)
{
$tmpl=
JComponentHelper::getParams('com_moojla')->get('course_search_tmpl');
$tmpl= ($tmpl== -1 || !$tmpl)? 'default_card':
preg_replace('/\.php$/','',$tmpl);
}
else
{
$tmpl= $menuTmpl;
$tmpl= preg_replace('/\.php$/','',$tmpl);
}
$view->setLayout($tmpl);
$content= $view->loadTemplate();
return ['content' => $content];
}
/***[/JCBGUI$$$$]***/
}
course.php000064400000102056151171426670006573 0ustar00<?php
/*----------------------------------------------------------------------------------|
www.vdm.io |----/
Lmskaran
/-------------------------------------------------------------------------------------------------------/
@version 1.0.77
@build 6th April, 2022
@created 22nd July, 2020
@package Moojla
@subpackage course.php
@author Lmskaran <http://Lmskaran.com>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
____ _____ _____ __ __ __ __ ___ _____ __ __ ____
_____ _ _ ____ _ _ ____
(_ _)( _ )( _ )( \/ )( ) /__\ / __)( _ )( \/ )( _ \(
_ )( \( )( ___)( \( )(_ _)
.-_)( )(_)( )(_)( ) ( )(__ /(__)\ ( (__ )(_)( ) ( )___/
)(_)( ) ( )__) ) ( )(
\____) (_____)(_____)(_/\/\_)(____)(__)(__) \___)(_____)(_/\/\_)(__)
(_____)(_)\_)(____)(_)\_) (__)
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use Joomla\Registry\Registry;
use Joomla\String\StringHelper;
use Joomla\Utilities\ArrayHelper;
/**
* Moojla Course Model
*/
class MoojlaModelCourse extends JModelAdmin
{
/**
* The tab layout fields array.
*
* @var array
*/
protected $tabLayoutFields = array(
'details' => array(
'left' => array(
'cat_id',
'cat_name',
'currency',
'self_enrolment',
'startdate',
'summary_files',
'teachers'
),
'right' => array(
'cost',
'remoteid',
'guest',
'in_enrol_date',
'enddate',
'summary'
),
'above' => array(
'alias',
'shortname',
'fullname',
'permanent_fields',
'catid'
)
),
'video' => array(
'left' => array(
'useglobalvideo',
'videotype',
'preventdownload',
'addcontrols',
'preloadvideo',
'autoplay',
'muted'
)
),
'moodle_access' => array(
'left' => array(
'availabilityinfolink',
'redirect_after_enrol',
'showlogintab',
'loginurl',
'alterurl',
'enterlbl',
'buylbl'
),
'right' => array(
'cangotomoodle',
'popupbutton',
'showregtab',
'registrationurl',
'loginlbl',
'freeenterlbl',
'enrollbl'
)
),
'audio' => array(
'left' => array(
'useglobalaudio',
'preventdownloadaudio',
'preloadaudio',
'autoplayaudio'
)
),
'templates' => array(
'left' => array(
'course_templatestyle_forcourseconfig'
),
'right' => array(
'course_detail_layout'
)
)
);
/**
* @var string The prefix to use with controller messages.
* @since 1.6
*/
protected $text_prefix = 'COM_MOOJLA';
/**
* The type alias for this content type.
*
* @var string
* @since 3.2
*/
public $typeAlias = 'com_moojla.course';
/**
* Returns a Table object, always creating it
*
* @param type $type The table type to instantiate
* @param string $prefix A prefix for the table class name. Optional.
* @param array $config Configuration array for model. Optional.
*
* @return JTable A database object
*
* @since 1.6
*/
public function getTable($type = 'course', $prefix =
'MoojlaTable', $config = array())
{
// add table path for when model gets used from other component
$this->addTablePath(JPATH_ADMINISTRATOR .
'/components/com_moojla/tables');
// get instance of the table
return JTable::getInstance($type, $prefix, $config);
}
/***[JCBGUI.admin_view.php_model.129.$$$$]***/
public function myDelete($pk){
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('rules',
'id')));
$query->from($db->quoteName('#__assets'));
$query->where($db->quoteName('name') . ' = '
. $db->quote('com_moojla'));
$db->setQuery($query);
$results = $db->loadObjectList();
$acls = json_decode($results[0]->rules);
$deleteAcl = null;
$permission = 'core.delete';
if(!property_exists($acls, $permission))
{
$acls->$permission = new stdClass();
}
$pub = '1';
$acls->$permission->$pub = 1;
$obj = new stdClass();
$obj->id = $results[0]->id;
$obj->rules = json_encode($acls);
JFactory::getDbo()->updateObject('#__assets', $obj,
'id');
$obj = new stdClass();
$obj->id = $pk;
$obj->published = -2;
JFactory::getDbo()->updateObject('#__moojla_course', $obj,
'id'); // trash item
$pks = array($pk);
$res = $this->delete($pks);
$obj = new stdClass();
$obj->id = $results[0]->id;
$obj->rules = $results[0]->rules;
JFactory::getDbo()->updateObject('#__assets', $obj,
'id');
return $res;
}
public function setFieldValue($fieldId, $itemId, $value)
{
JLoader::register('FieldsHelper',
JPATH_ADMINISTRATOR.'/components/com_fields/helpers/fields.php');
JLoader::register('FieldsModelField',
JPATH_ADMINISTRATOR.'/components/com_fields/models/field.php');
$fieldModle = new FieldsModelField;
$field = $fieldModle->getItem($fieldId);
$params = $field->params;
if (is_array($params))
{
$params = new Registry($params);
}
$needsDelete = false;
$needsInsert = false;
$needsUpdate = false;
$oldValue = $fieldModle->getFieldValue($fieldId, $itemId);
$value = (array) $value;
if ($oldValue === null)
{
// No records available, doing normal insert
$needsInsert = true;
}
elseif (count($value) == 1 && count((array) $oldValue) == 1)
{
// Only a single row value update can be done when not empty
$needsUpdate = is_array($value[0]) ? count($value[0]) :
strlen($value[0]);
$needsDelete = !$needsUpdate;
}
else
{
// Multiple values, we need to purge the data and do a new
// insert
$needsDelete = true;
$needsInsert = true;
}
if ($needsDelete)
{
// Deleting the existing record as it is a reset
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->delete($query->qn('#__fields_values'))
->where($query->qn('field_id') . ' = ' .
(int) $fieldId)
->where($query->qn('item_id') . ' = ' .
$query->q($itemId));
$db->setQuery($query)->execute();
}
if ($needsInsert)
{
$newObj = new stdClass;
$newObj->field_id = (int) $fieldId;
$newObj->item_id = $itemId;
foreach ($value as $v)
{
$newObj->value = $v;
$db = JFactory::getDbo();
$db->insertObject('#__fields_values', $newObj);
}
}
if ($needsUpdate)
{
$updateObj = new stdClass;
$updateObj->field_id = (int) $fieldId;
$updateObj->item_id = $itemId;
$updateObj->value = reset($value);
$db = JFactory::getDbo();
$db->updateObject('#__fields_values', $updateObj,
array('field_id', 'item_id'));
}
FieldsHelper::clearFieldsCache();
return true;
}
/***[/JCBGUI$$$$]***/
/**
* Method to get a single record.
*
* @param integer $pk The id of the primary key.
*
* @return mixed Object on success, false on failure.
*
* @since 1.6
*/
public function getItem($pk = null)
{
if ($item = parent::getItem($pk))
{
if (!empty($item->params) && !is_array($item->params))
{
// Convert the params field to an array.
$registry = new Registry;
$registry->loadString($item->params);
$item->params = $registry->toArray();
}
if (!empty($item->metadata))
{
// Convert the metadata field to an array.
$registry = new Registry;
$registry->loadString($item->metadata);
$item->metadata = $registry->toArray();
}
if (!empty($item->permanent_fields))
{
// Convert the permanent_fields field to an array.
$permanent_fields = new Registry;
$permanent_fields->loadString($item->permanent_fields);
$item->permanent_fields = $permanent_fields->toArray();
}
}
return $item;
}
/**
* Method to get the record form.
*
* @param array $data Data for the form.
* @param boolean $loadData True if the form is to load its own data
(default case), false if not.
* @param array $options Optional array of options for the form
creation.
*
* @return mixed A JForm object on success, false on failure
*
* @since 1.6
*/
public function getForm($data = array(), $loadData = true, $options =
array('control' => 'jform'))
{
// set load data option
$options['load_data'] = $loadData;
// check if xpath was set in options
$xpath = false;
if (isset($options['xpath']))
{
$xpath = $options['xpath'];
unset($options['xpath']);
}
// check if clear form was set in options
$clear = false;
if (isset($options['clear']))
{
$clear = $options['clear'];
unset($options['clear']);
}
// Get the form.
$form = $this->loadForm('com_moojla.course',
'course', $options, $clear, $xpath);
if (empty($form))
{
return false;
}
$jinput = JFactory::getApplication()->input;
// The front end calls this model and uses a_id to avoid id clashes so we
need to check for that first.
if ($jinput->get('a_id'))
{
$id = $jinput->get('a_id', 0, 'INT');
}
// The back end uses id so we use that the rest of the time and set it to
0 by default.
else
{
$id = $jinput->get('id', 0, 'INT');
}
$user = JFactory::getUser();
// Check for existing item.
// Modify the form based on Edit State access controls.
if ($id != 0 &&
(!$user->authorise('core.edit.state',
'com_moojla.course.' . (int) $id))
|| ($id == 0 &&
!$user->authorise('core.edit.state', 'com_moojla')))
{
// Disable fields for display.
$form->setFieldAttribute('ordering', 'disabled',
'true');
$form->setFieldAttribute('published', 'disabled',
'true');
// Disable fields while saving.
$form->setFieldAttribute('ordering', 'filter',
'unset');
$form->setFieldAttribute('published', 'filter',
'unset');
}
// If this is a new item insure the greated by is set.
if (0 == $id)
{
// Set the created_by to this user
$form->setValue('created_by', null, $user->id);
}
// Modify the form based on Edit Creaded By access controls.
if (!$user->authorise('core.edit.created_by',
'com_moojla'))
{
// Disable fields for display.
$form->setFieldAttribute('created_by',
'disabled', 'true');
// Disable fields for display.
$form->setFieldAttribute('created_by',
'readonly', 'true');
// Disable fields while saving.
$form->setFieldAttribute('created_by', 'filter',
'unset');
}
// Modify the form based on Edit Creaded Date access controls.
if (!$user->authorise('core.edit.created',
'com_moojla'))
{
// Disable fields for display.
$form->setFieldAttribute('created', 'disabled',
'true');
// Disable fields while saving.
$form->setFieldAttribute('created', 'filter',
'unset');
}
// Only load these values if no id is found
if (0 == $id)
{
// Set redirected view name
$redirectedView = $jinput->get('ref', null,
'STRING');
// Set field name (or fall back to view name)
$redirectedField = $jinput->get('field', $redirectedView,
'STRING');
// Set redirected view id
$redirectedId = $jinput->get('refid', 0, 'INT');
// Set field id (or fall back to redirected view id)
$redirectedValue = $jinput->get('field_id', $redirectedId,
'INT');
if (0 != $redirectedValue && $redirectedField)
{
// Now set the local-redirected field default value
$form->setValue($redirectedField, null, $redirectedValue);
}
}
return $form;
}
/**
* Method to get the script that have to be included on the form
*
* @return string script files
*/
public function getScript()
{
return 'media/com_moojla/js/course.js';
}
/**
* Method to test whether a record can be deleted.
*
* @param object $record A record object.
*
* @return boolean True if allowed to delete the record. Defaults to the
permission set in the component.
*
* @since 1.6
*/
protected function canDelete($record)
{
if (!empty($record->id))
{
if ($record->published != -2)
{
return;
}
$user = JFactory::getUser();
// The record has been set. Check the record permissions.
return $user->authorise('course.delete',
'com_moojla.course.' . (int) $record->id);
}
return false;
}
/**
* Method to test whether a record can have its state edited.
*
* @param object $record A record object.
*
* @return boolean True if allowed to change the state of the record.
Defaults to the permission set in the component.
*
* @since 1.6
*/
protected function canEditState($record)
{
$user = JFactory::getUser();
$recordId = (!empty($record->id)) ? $record->id : 0;
if ($recordId)
{
// The record has been set. Check the record permissions.
$permission = $user->authorise('core.edit.state',
'com_moojla.course.' . (int) $recordId);
if (!$permission && !is_null($permission))
{
return false;
}
}
// In the absense of better information, revert to the component
permissions.
return parent::canEditState($record);
}
/**
* Method override to check if you can edit an existing record.
*
* @param array $data An array of input data.
* @param string $key The name of the key for the primary key.
*
* @return boolean
* @since 2.5
*/
protected function allowEdit($data = array(), $key = 'id')
{
// Check specific edit permission then general edit permission.
$user = JFactory::getUser();
return $user->authorise('course.edit',
'com_moojla.course.'. ((int) isset($data[$key]) ? $data[$key] :
0)) or $user->authorise('course.edit',
'com_moojla');
}
/**
* Prepare and sanitise the table data prior to saving.
*
* @param JTable $table A JTable object.
*
* @return void
*
* @since 1.6
*/
protected function prepareTable($table)
{
$date = JFactory::getDate();
$user = JFactory::getUser();
if (isset($table->name))
{
$table->name = htmlspecialchars_decode($table->name, ENT_QUOTES);
}
if (isset($table->alias) && empty($table->alias))
{
$table->generateAlias();
}
if (empty($table->id))
{
$table->created = $date->toSql();
// set the user
if ($table->created_by == 0 || empty($table->created_by))
{
$table->created_by = $user->id;
}
// Set ordering to the last item if not set
if (empty($table->ordering))
{
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('MAX(ordering)')
->from($db->quoteName('#__moojla_course'));
$db->setQuery($query);
$max = $db->loadResult();
$table->ordering = $max + 1;
}
}
else
{
$table->modified = $date->toSql();
$table->modified_by = $user->id;
}
if (!empty($table->id))
{
// Increment the items version number.
$table->version++;
}
}
/**
* Method to get the data that should be injected in the form.
*
* @return mixed The data for the form.
*
* @since 1.6
*/
protected function loadFormData()
{
// Check the session for previously entered form data.
$data =
JFactory::getApplication()->getUserState('com_moojla.edit.course.data',
array());
if (empty($data))
{
$data = $this->getItem();
// run the perprocess of the data
$this->preprocessData('com_moojla.course', $data);
}
return $data;
}
/**
* Method to get the unique fields of this table.
*
* @return mixed An array of field names, boolean false if none is set.
*
* @since 3.0
*/
protected function getUniqueFields()
{
return array('remoteid');
}
/**
* Method to delete one or more records.
*
* @param array &$pks An array of record primary keys.
*
* @return boolean True if successful, false if an error occurs.
*
* @since 12.2
*/
public function delete(&$pks)
{
/***[JCBGUI.admin_view.php_before_delete.129.$$$$]***/
require_once JPATH_ADMINISTRATOR .
"/components/com_moojla/models/course.php";
require_once JPATH_ADMINISTRATOR .
"/components/com_moojla/models/section.php";
require_once JPATH_ADMINISTRATOR .
"/components/com_moojla/models/module.php";
require_once JPATH_ADMINISTRATOR .
"/components/com_moojla/models/content.php";
foreach($pks as $id)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('remoteid')))
->from($db->quoteName('#__moojla_course'))
->where($db->quoteName('id') . ' = ' .
$id);
$db->setQuery($query);
$courseid = $db->loadResult();
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('id',
'section_id')))
->from($db->quoteName('#__moojla_section'))
->where($db->quoteName('courseid') . ' = '
. $courseid);
$db->setQuery($query);
$moojlasectionids = $db->loadObjectList();
foreach($moojlasectionids as $section)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('id',
'module_id')))
->from($db->quoteName('#__moojla_module'))
->where($db->quoteName('module_section_id') .
' = ' . $section->section_id);
$db->setQuery($query);
$moojlamoduleids = $db->loadObjectList();
foreach($moojlamoduleids as $module)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('id')))
->from($db->quoteName('#__moojla_content'))
->where($db->quoteName('contents_module_id') .
' = ' . $module->module_id);
$db->setQuery($query);
$moojlacontentids = $db->loadObjectList();
foreach($moojlacontentids as $content)
{
$contentIns = new MoojlaModelContent();
$contentIns->myDelete($content->id);
}
$moduleIns = new MoojlaModelModule();
$moduleIns->myDelete($module->id);
}
$sectionIns = new MoojlaModelSection();
$sectionIns->myDelete($section->id);
}
}
/***[/JCBGUI$$$$]***/
if (!parent::delete($pks))
{
return false;
}
return true;
}
/**
* Method to change the published state of one or more records.
*
* @param array &$pks A list of the primary keys to change.
* @param integer $value The value of the published state.
*
* @return boolean True on success.
*
* @since 12.2
*/
public function publish(&$pks, $value = 1)
{
if (!parent::publish($pks, $value))
{
return false;
}
return true;
}
/**
* Method to perform batch operations on an item or a set of items.
*
* @param array $commands An array of commands to perform.
* @param array $pks An array of item ids.
* @param array $contexts An array of item contexts.
*
* @return boolean Returns true on success, false on failure.
*
* @since 12.2
*/
public function batch($commands, $pks, $contexts)
{
// Sanitize ids.
$pks = array_unique($pks);
ArrayHelper::toInteger($pks);
// Remove any values of zero.
if (array_search(0, $pks, true))
{
unset($pks[array_search(0, $pks, true)]);
}
if (empty($pks))
{
$this->setError(JText::_('JGLOBAL_NO_ITEM_SELECTED'));
return false;
}
$done = false;
// Set some needed variables.
$this->user = JFactory::getUser();
$this->table = $this->getTable();
$this->tableClassName = get_class($this->table);
$this->contentType = new JUcmType;
$this->type =
$this->contentType->getTypeByTable($this->tableClassName);
$this->canDo = MoojlaHelper::getActions('course');
$this->batchSet = true;
if (!$this->canDo->get('core.batch'))
{
$this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION'));
return false;
}
if ($this->type == false)
{
$type = new JUcmType;
$this->type = $type->getTypeByAlias($this->typeAlias);
}
$this->tagsObserver =
$this->table->getObserverOfClass('JTableObserverTags');
if (!empty($commands['move_copy']))
{
$cmd = ArrayHelper::getValue($commands, 'move_copy',
'c');
if ($cmd == 'c')
{
$result = $this->batchCopy($commands, $pks, $contexts);
if (is_array($result))
{
foreach ($result as $old => $new)
{
$contexts[$new] = $contexts[$old];
}
$pks = array_values($result);
}
else
{
return false;
}
}
elseif ($cmd == 'm' && !$this->batchMove($commands,
$pks, $contexts))
{
return false;
}
$done = true;
}
if (!$done)
{
$this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION'));
return false;
}
// Clear the cache
$this->cleanCache();
return true;
}
/**
* Batch copy items to a new category or current.
*
* @param integer $values The new values.
* @param array $pks An array of row IDs.
* @param array $contexts An array of item contexts.
*
* @return mixed An array of new IDs on success, boolean false on
failure.
*
* @since 12.2
*/
protected function batchCopy($values, $pks, $contexts)
{
if (empty($this->batchSet))
{
// Set some needed variables.
$this->user = JFactory::getUser();
$this->table = $this->getTable();
$this->tableClassName = get_class($this->table);
$this->canDo = MoojlaHelper::getActions('course');
}
if (!$this->canDo->get('course.create') &&
!$this->canDo->get('course.batch'))
{
return false;
}
// get list of unique fields
$uniqueFields = $this->getUniqueFields();
// remove move_copy from array
unset($values['move_copy']);
// make sure published is set
if (!isset($values['published']))
{
$values['published'] = 0;
}
elseif (isset($values['published']) &&
!$this->canDo->get('core.edit.state'))
{
$values['published'] = 0;
}
if (isset($values['category']) && (int)
$values['category'] > 0 &&
!static::checkCategoryId($values['category']))
{
return false;
}
elseif (isset($values['category']) && (int)
$values['category'] > 0)
{
// move the category value to correct field name
$values['catid'] = $values['category'];
unset($values['category']);
}
elseif (isset($values['category']))
{
unset($values['category']);
}
$newIds = array();
// Parent exists so let's proceed
while (!empty($pks))
{
// Pop the first ID off the stack
$pk = array_shift($pks);
$this->table->reset();
// only allow copy if user may edit this item.
if (!$this->user->authorise('course.edit',
$contexts[$pk]))
{
// Not fatal error
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND',
$pk));
continue;
}
// Check that the row actually exists
if (!$this->table->load($pk))
{
if ($error = $this->table->getError())
{
// Fatal error
$this->setError($error);
return false;
}
else
{
// Not fatal error
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND',
$pk));
continue;
}
}
if (isset($values['catid']))
{
list($this->table->shortname, $this->table->alias) =
$this->generateNewTitle($values['catid'],
$this->table->alias, $this->table->shortname);
}
else
{
list($this->table->shortname, $this->table->alias) =
$this->generateNewTitle($this->table->catid,
$this->table->alias, $this->table->shortname);
}
// insert all set values
if (MoojlaHelper::checkArray($values))
{
foreach ($values as $key => $value)
{
if (strlen($value) > 0 && isset($this->table->$key))
{
$this->table->$key = $value;
}
}
}
// update all unique fields
if (MoojlaHelper::checkArray($uniqueFields))
{
foreach ($uniqueFields as $uniqueField)
{
$this->table->$uniqueField =
$this->generateUnique($uniqueField,$this->table->$uniqueField);
}
}
// Reset the ID because we are making a copy
$this->table->id = 0;
// TODO: Deal with ordering?
// $this->table->ordering = 1;
// Check the row.
if (!$this->table->check())
{
$this->setError($this->table->getError());
return false;
}
if (!empty($this->type))
{
$this->createTagsHelper($this->tagsObserver, $this->type, $pk,
$this->typeAlias, $this->table);
}
// Store the row.
if (!$this->table->store())
{
$this->setError($this->table->getError());
return false;
}
// Get the new item ID
$newId = $this->table->get('id');
// Add the new ID to the array
$newIds[$pk] = $newId;
}
// Clean the cache
$this->cleanCache();
return $newIds;
}
/**
* Batch move items to a new category
*
* @param integer $value The new category ID.
* @param array $pks An array of row IDs.
* @param array $contexts An array of item contexts.
*
* @return boolean True if successful, false otherwise and internal
error is set.
*
* @since 12.2
*/
protected function batchMove($values, $pks, $contexts)
{
if (empty($this->batchSet))
{
// Set some needed variables.
$this->user = JFactory::getUser();
$this->table = $this->getTable();
$this->tableClassName = get_class($this->table);
$this->canDo = MoojlaHelper::getActions('course');
}
if (!$this->canDo->get('course.edit') &&
!$this->canDo->get('course.batch'))
{
$this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT'));
return false;
}
// make sure published only updates if user has the permission.
if (isset($values['published']) &&
!$this->canDo->get('core.edit.state'))
{
unset($values['published']);
}
// remove move_copy from array
unset($values['move_copy']);
if (isset($values['category']) && (int)
$values['category'] > 0 &&
!static::checkCategoryId($values['category']))
{
return false;
}
elseif (isset($values['category']) && (int)
$values['category'] > 0)
{
// move the category value to correct field name
$values['catid'] = $values['category'];
unset($values['category']);
}
elseif (isset($values['category']))
{
unset($values['category']);
}
// Parent exists so we proceed
foreach ($pks as $pk)
{
if (!$this->user->authorise('course.edit',
$contexts[$pk]))
{
$this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT'));
return false;
}
// Check that the row actually exists
if (!$this->table->load($pk))
{
if ($error = $this->table->getError())
{
// Fatal error
$this->setError($error);
return false;
}
else
{
// Not fatal error
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND',
$pk));
continue;
}
}
// insert all set values.
if (MoojlaHelper::checkArray($values))
{
foreach ($values as $key => $value)
{
// Do special action for access.
if ('access' === $key && strlen($value) > 0)
{
$this->table->$key = $value;
}
elseif (strlen($value) > 0 &&
isset($this->table->$key))
{
$this->table->$key = $value;
}
}
}
// Check the row.
if (!$this->table->check())
{
$this->setError($this->table->getError());
return false;
}
if (!empty($this->type))
{
$this->createTagsHelper($this->tagsObserver, $this->type, $pk,
$this->typeAlias, $this->table);
}
// Store the row.
if (!$this->table->store())
{
$this->setError($this->table->getError());
return false;
}
}
// Clean the cache
$this->cleanCache();
return true;
}
/**
* Method to save the form data.
*
* @param array $data The form data.
*
* @return boolean True on success.
*
* @since 1.6
*/
public function save($data)
{
$input = JFactory::getApplication()->input;
$filter = JFilterInput::getInstance();
// set the metadata to the Item Data
if (isset($data['metadata']) &&
isset($data['metadata']['author']))
{
$data['metadata']['author'] =
$filter->clean($data['metadata']['author'],
'TRIM');
$metadata = new JRegistry;
$metadata->loadArray($data['metadata']);
$data['metadata'] = (string) $metadata;
}
// Set the permanent_fields items to data.
if (isset($data['permanent_fields']) &&
is_array($data['permanent_fields']))
{
$permanent_fields = new JRegistry;
$permanent_fields->loadArray($data['permanent_fields']);
$data['permanent_fields'] = (string) $permanent_fields;
}
elseif (!isset($data['permanent_fields']))
{
// Set the empty permanent_fields to data
$data['permanent_fields'] = '';
}
/***[JCBGUI.admin_view.php_save.129.$$$$]***/
$moodleimgurl = $data["summary_files"];
if($moodleimgurl)
{
$olddlpath =
JPATH_ROOT.'/media/com_moojla/images/'.urldecode(basename($moodleimgurl));
$dlpath =
JPATH_ROOT.'/media/com_moojla/images/'.$data["remoteid"].'_'.urldecode(basename($moodleimgurl));
if(!file_exists($dlpath) && !file_exists($olddlpath))
{
$ch = curl_init($moodleimgurl);
$fp = fopen($dlpath, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
$data["summary_files"] = basename($moodleimgurl) ?
'/media/com_moojla/images/'.$data["remoteid"].'_'.basename($moodleimgurl)
: '';
}
else
{
$data["summary_files"] = file_exists($dlpath) ?
'/media/com_moojla/images/'.$data["remoteid"].'_'.basename($moodleimgurl)
: '/media/com_moojla/images/'.basename($moodleimgurl);
}
}
JPluginHelper::importPlugin("notifly");
$dispatcher = JEventDispatcher::getInstance();
$args = array('com_moojla.coursecreated', $data, true);
$dispatcher->trigger("onContentAfterSave", $args);
/***[/JCBGUI$$$$]***/
// Set the Params Items to data
if (isset($data['params']) &&
is_array($data['params']))
{
$params = new JRegistry;
$params->loadArray($data['params']);
$data['params'] = (string) $params;
}
// Alter the shortname for save as copy
if ($input->get('task') === 'save2copy')
{
$origTable = clone $this->getTable();
$origTable->load($input->getInt('id'));
if ($data['shortname'] == $origTable->shortname)
{
list($shortname, $alias) =
$this->generateNewTitle($data['catid'],
$data['alias'], $data['shortname']);
$data['shortname'] = $shortname;
$data['alias'] = $alias;
}
else
{
if ($data['alias'] == $origTable->alias)
{
$data['alias'] = '';
}
}
$data['published'] = 0;
}
// Automatic handling of alias for empty fields
if (in_array($input->get('task'), array('apply',
'save', 'save2new')) && (int)
$input->get('id') == 0)
{
if ($data['alias'] == null || empty($data['alias']))
{
if (JFactory::getConfig()->get('unicodeslugs') == 1)
{
$data['alias'] =
JFilterOutput::stringURLUnicodeSlug($data['shortname']);
}
else
{
$data['alias'] =
JFilterOutput::stringURLSafe($data['shortname']);
}
$table = JTable::getInstance('course',
'moojlaTable');
if ($table->load(array('alias' =>
$data['alias'], 'catid' =>
$data['catid'])) && ($table->id !=
$data['id'] || $data['id'] == 0))
{
$msg = JText::_('COM_MOOJLA_COURSE_SAVE_WARNING');
}
list($shortname, $alias) =
$this->generateNewTitle($data['catid'],
$data['alias'], $data['shortname']);
$data['alias'] = $alias;
if (isset($msg))
{
JFactory::getApplication()->enqueueMessage($msg,
'warning');
}
}
}
// Alter the unique field for save as copy
if ($input->get('task') === 'save2copy')
{
// Automatic handling of other unique fields
$uniqueFields = $this->getUniqueFields();
if (MoojlaHelper::checkArray($uniqueFields))
{
foreach ($uniqueFields as $uniqueField)
{
$data[$uniqueField] =
$this->generateUnique($uniqueField,$data[$uniqueField]);
}
}
}
if (parent::save($data))
{
return true;
}
return false;
}
/**
* Method to generate a unique value.
*
* @param string $field name.
* @param string $value data.
*
* @return string New value.
*
* @since 3.0
*/
protected function generateUnique($field,$value)
{
// set field value unique
$table = $this->getTable();
while ($table->load(array($field => $value)))
{
$value = StringHelper::increment($value);
}
return $value;
}
/**
* Method to change the title/s & alias.
*
* @param string $alias The alias.
* @param string/array $title The title.
*
* @return array/string Contains the modified title/s and/or alias.
*
*/
protected function _generateNewTitle($alias, $title = null)
{
// Alter the title/s & alias
$table = $this->getTable();
while ($table->load(array('alias' => $alias)))
{
// Check if this is an array of titles
if (MoojlaHelper::checkArray($title))
{
foreach($title as $nr => &$_title)
{
$_title = StringHelper::increment($_title);
}
}
// Make sure we have a title
elseif ($title)
{
$title = StringHelper::increment($title);
}
$alias = StringHelper::increment($alias, 'dash');
}
// Check if this is an array of titles
if (MoojlaHelper::checkArray($title))
{
$title[] = $alias;
return $title;
}
// Make sure we have a title
elseif ($title)
{
return array($title, $alias);
}
// We only had an alias
return $alias;
}
}
coursedetail.php000064400000051771151171426670007765 0ustar00<?php
/*----------------------------------------------------------------------------------|
www.vdm.io |----/
Lmskaran
/-------------------------------------------------------------------------------------------------------/
@version 1.0.77
@build 6th April, 2022
@created 22nd July, 2020
@package Moojla
@subpackage coursedetail.php
@author Lmskaran <http://Lmskaran.com>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
____ _____ _____ __ __ __ __ ___ _____ __ __ ____
_____ _ _ ____ _ _ ____
(_ _)( _ )( _ )( \/ )( ) /__\ / __)( _ )( \/ )( _ \(
_ )( \( )( ___)( \( )(_ _)
.-_)( )(_)( )(_)( ) ( )(__ /(__)\ ( (__ )(_)( ) ( )___/
)(_)( ) ( )__) ) ( )(
\____) (_____)(_____)(_/\/\_)(____)(__)(__) \___)(_____)(_/\/\_)(__)
(_____)(_)\_)(____)(_)\_) (__)
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use Joomla\Utilities\ArrayHelper;
/**
* Moojla Coursedetail Model
*/
class MoojlaModelCoursedetail extends JModelItem
{
/**
* Model context string.
*
* @var string
*/
protected $_context = 'com_moojla.coursedetail';
/**
* Model user data.
*
* @var strings
*/
protected $user;
protected $userId;
protected $guest;
protected $groups;
protected $levels;
protected $app;
protected $input;
protected $uikitComp;
/**
* @var object item
*/
protected $item;
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @since 1.6
*
* @return void
*/
protected function populateState()
{
$this->app = JFactory::getApplication();
$this->input = $this->app->input;
// Get the itme main id
$id = $this->input->getInt('id', null);
$this->setState('coursedetail.id', $id);
// Load the parameters.
$params = $this->app->getParams();
$this->setState('params', $params);
parent::populateState();
}
/**
* Method to get article data.
*
* @param integer $pk The id of the article.
*
* @return mixed Menu item data object on success, false on failure.
*/
public function getItem($pk = null)
{
$this->user = JFactory::getUser();
$this->userId = $this->user->get('id');
$this->guest = $this->user->get('guest');
$this->groups = $this->user->get('groups');
$this->authorisedGroups = $this->user->getAuthorisedGroups();
$this->levels = $this->user->getAuthorisedViewLevels();
$this->initSet = true;
$pk = (!empty($pk)) ? $pk : (int)
$this->getState('coursedetail.id');
if ($this->_item === null)
{
$this->_item = array();
}
if (!isset($this->_item[$pk]))
{
try
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Get from #__moojla_course as a
$query->select('a.*');
$query->from($db->quoteName('#__moojla_course',
'a'));
$query->where('a.remoteid = ' . (int) $pk);
// Get where a.published is 1
$query->where('a.published = 1');
// Reset the query using our newly populated query object.
$db->setQuery($query);
// Load the results as a stdClass object.
$data = $db->loadObject();
if (empty($data))
{
$app = JFactory::getApplication();
// If no data is found redirect to default page and show warning.
$app->enqueueMessage(JText::_('COM_MOOJLA_NOT_FOUND_OR_ACCESS_DENIED'),
'warning');
$app->redirect(JURI::root());
return false;
}
// set remoteidCourseidSectionB to the $data object.
$data->remoteidCourseidSectionB =
$this->getRemoteidCourseidSectionAfee_B($data->remoteid);
// set data object to item.
$this->_item[$pk] = $data;
}
catch (Exception $e)
{
if ($e->getCode() == 404)
{
// Need to go thru the error handler to allow Redirect to work.
JError::raiseWarning(404, $e->getMessage());
}
else
{
$this->setError($e);
$this->_item[$pk] = false;
}
}
}
/***[JCBGUI.dynamic_get.php_after_getitem.52.$$$$]***/
$parameter = new JRegistry;
$parameter->loadString($data->attribs, 'JSON');
$attribs = $parameter;
$template = $data->course_templatestyle_forcourseconfig;
$layout = $data->course_detail_layout;
$loginurl = $data->loginurl;
$registrationurl = $data->registrationurl;
$alterurl = $data->alterurl;
$useglobalvideo = $data->useglobalvideo;
$videotype = $data->videotype;
$preventdownload = $data->preventdownload;
$addcontrols = $data->addcontrols;
$preloadvideo = $data->preloadvideo;
$autoplay = $data->autoplay;
$muted = $data->muted;
$useglobalaudio = $data->useglobalaudio;
$preventdownloadaudio = $data->preventdownloadaudio;
$preloadaudio = $data->preloadaudio;
$autoplayaudio = $data->autoplayaudio;
$availabilityinfolink = $data->availabilityinfolink;
$cangotomoodle = $data->cangotomoodle;
$redirect_after_enrol = $data->redirect_after_enrol;
$popupbutton = $data->popupbutton;
$showlogintab = $data->showlogintab;
$showregtab = $data->showregtab;
$enterlbl = $data->enterlbl;
$buylbl = $data->buylbl;
$loginlbl = $data->loginlbl;
$freeenterlbl = $data->freeenterlbl;
$enrollbl = $data->enrollbl;
$params = JComponentHelper::getParams('com_moojla');
$course_detail_ws=
trim($params->get('course_detail_ws'));
$showenrolled= trim($params->get('showenrolled'));
$data->enrolledusercount = -1;
JLoader::register('MoojlaHelper',
JPATH_ADMINISTRATOR.'/components/com_moojla/helpers/moojla.php');
$moodleCourseId = $this->input->get('id', 0,
'integer');
// $id = $this->input->get('id', 0,
'integer');
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('id')))
->from($db->quoteName('#__moojla_course'))
->where($db->quoteName('remoteid') . ' = '
. $db->quote($moodleCourseId));
$db->setQuery($query);
$id = $db->loadResult();
//$moodleCourseId = $db->loadResult();
$price = MoojlaHelper::getCurrentPriceByProductCode($moodleCourseId);
if($course_detail_ws)
{
$dataObj = array(
"wsfunction" => "moojla_get_courses",
"moodlewsrestformat" => "json",
"options" => array(
"ids" => array(
0 => $moodleCourseId
)
)
);
$course =
current(json_decode(MoojlaHelper::sendRequestToMoodle($dataObj)->response));
$data = new stdClass();
$data->id = $id;
$data->enrolledusercount = $showenrolled ?
$course->enrolledusercount : -1;
$data->cat_id = $course->categoryid;
$data->cat_name = $course->categoryname;
$data->cost = $price;
$data->currency = $course->currency;
$data->enddate = $course->enddate;
$data->fullname = $course->fullname;
$data->guest = $course->guest;
$data->in_enrol_date = $course->in_enrol_date;
$data->remoteid = $course->id;
$data->self_enrolment = $course->self_enrolment;
$data->shortname = $course->shortname;
$data->startdate = $course->startdate;
$data->summary = $course->summary;
$data->summary_files = $course->imgurl;
$data->teachers = $course->teachers;
$data->format = $course->format;
$data->templatestyle = $template;
$data->layout = $layout;
$data->loginurl = $loginurl;
$data->registrationurl = $registrationurl;
$data->$alterurl = $alterurl;
$data->useglobalvideo = $useglobalvideo;
$data->videotype = $videotype;
$data->preventdownload = $preventdownload;
$data->addcontrols = $addcontrols;
$data->preloadvideo =$preloadvideo;
$data->autoplay = $autoplay;
$data->muted = $muted;
$data->useglobalaudio = $useglobalaudio;
$data->preventdownloadaudio = $preventdownloadaudio;
$data->preloadaudio = $preloadaudio;
$data->autoplayaudio = $autoplayaudio;
$data->availabilityinfolink = $availabilityinfolink;
$data->cangotomoodle = $cangotomoodle;
$data->redirect_after_enrol = $redirect_after_enrol;
$data->popupbutton = $popupbutton;
$data->showlogintab = $showlogintab;
$data->showregtab = $showregtab;
$data->enterlbl = $enterlbl;
$data->buylbl = $buylbl;
$data->loginlbl = $loginlbl;
$data->freeenterlbl = $freeenterlbl;
$data->enrollbl = $enrollbl;
$this->_item[$pk] = $data;
$dataObj = array(
"wsfunction" =>
"moojla_get_course_contents",
"moodlewsrestformat" => "json",
"courseid" => $moodleCourseId
);
$user = JFactory::getUser();
if (!$user->guest)
{
$db= JFactory::getDbo();
$query= $db->getQuery(true)
->select($db->quoteName('mid'))
->from($db->quoteName('#__moojla_user_map'))
->where($db->quoteName('jid').'='.$db->quote($user->id));
$db->setQuery($query);
$mid= $db->loadResult();
$dataObj['userid'] = $mid;
}
$sections =
json_decode(MoojlaHelper::sendRequestToMoodle($dataObj)->response);
foreach($sections as $ind => $section)
{
if($section->uservisible == true && $section->visible
== 1)
{
MoojlaHelper::changeObjectKey($section, "id",
"section_id");
MoojlaHelper::changeObjectKey($section, "modules",
"section_idModule_section_idModuleC");
if(!property_exists($section, "description"))
$section->description = "";
if($section->section_idModule_section_idModuleC)
{
foreach($section->section_idModule_section_idModuleC as
$module)
{
MoojlaHelper::changeObjectKey($module, "id",
"module_id");
MoojlaHelper::changeObjectKey($module, "contents",
"module_idContents_module_idContentD");
if(!property_exists($module, "description"))
$module->description = "";
if(!property_exists($module, "url"))
$module->url = "";
if($module->module_idContents_module_idContentD)
{
foreach($module->module_idContents_module_idContentD as
$content)
{
if(!property_exists($content, "file"))
$content->file = "";
}
}
}
}
}
else
{
unset($sections[$ind]);
}
}
$this->_item[$pk]->remoteidCourseidSectionB = $sections;
}
$dataObj = array(
"wsfunction" =>
"moojla_get_course_custom_fields_data",
"moodlewsrestformat" => "json",
"courseid" => $moodleCourseId
);
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select(array('a.*', 'b.name AS
fieldName', 'b.title AS fieldTitle'));
$query->from($db->quoteName('#__moojla_course_field_mapper',
'a'));
$query->join('INNER',
$db->quoteName('#__fields', 'b') . ' ON '
. $db->quoteName('a.coursefield') . ' = ' .
$db->quoteName('b.id'));
$query->where($db->quoteName('a.published') . ' =
1' );
$query->where($db->quoteName('b.context') . ' =
"com_moojla.course"' );
$db->setQuery($query);
$coursecustomfieldsmapp = $db->loadObjectList();
$mapper = array();
foreach($coursecustomfieldsmapp as $cm)
{
$mapper[substr($cm->mcoursefields, 3)] = array('name'
=> $cm->fieldName, 'title' => $cm->fieldTitle,
'img' => $cm->field_icon) ;
}
// $coursecustomfields =
json_decode(MoojlaHelper::sendRequestToMoodle($dataObj)->response);
// if(is_array($coursecustomfields))
// {
// foreach($coursecustomfields as $cc)
// {
// if(isset($mapper[$cc->shortname]))
// {
// $mapper[$cc->shortname]['value'] = $cc->value;
// }
// }
// }
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select(array('fv.value', 'f.title',
'f.name', 'fm.field_icon as img'))
->from($db->quoteName('#__fields_values',
'fv'))
->join('INNER', $db->quoteName('#__fields',
'f') . ' ON ' .
$db->quoteName('fv.field_id') . ' = ' .
$db->quoteName('f.id'))
->join('INNER',
$db->quoteName('#__moojla_course_field_mapper',
'fm') . ' ON ' . $db->quoteName('f.id') .
' = ' . $db->quoteName('fm.coursefield'))
->where($db->quoteName('fv.item_id') . ' =
' . $db->quote($id));
$db->setQuery($query);
$mapper = $db->loadAssocList();
$this->_item[$pk]->fieldMapper = $mapper;
$this->_item[$pk]->attribs= $attribs;
/***[/JCBGUI$$$$]***/
return $this->_item[$pk];
}
/**
* Method to get an array of Section Objects.
*
* @return mixed An array of Section Objects on success, false on
failure.
*
*/
public function getRemoteidCourseidSectionAfee_B($remoteid)
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Get from #__moojla_section as b
$query->select($db->quoteName(
array('b.id','b.courseid','b.section_id','b.name','b.visible','b.uservisible','b.summary','b.published','b.created_by','b.modified_by','b.created','b.modified','b.hits'),
array('id','courseid','section_id','name','visible','uservisible','summary','published','created_by','modified_by','created','modified','hits')));
$query->from($db->quoteName('#__moojla_section',
'b'));
$query->where('b.courseid = ' . $db->quote($remoteid));
// Reset the query using our newly populated query object.
$db->setQuery($query);
$db->execute();
// check if there was data returned
if ($db->getNumRows())
{
// Load the JEvent Dispatcher
JPluginHelper::importPlugin('content');
$this->_dispatcher = JEventDispatcher::getInstance();
$items = $db->loadObjectList();
// Convert the parameter fields into objects.
foreach ($items as $nr => &$item)
{
// Check if item has params, or pass whole item.
$params = (isset($item->params) &&
MoojlaHelper::checkJson($item->params)) ? json_decode($item->params)
: $item;
// Make sure the content prepare plugins fire on summary
$_summary = new stdClass();
$_summary->text =& $item->summary; // value must be in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (summary) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.coursedetail.summary', &$_summary,
&$params, 0));
// set section_idModule_section_idModuleC to the $item object.
$item->section_idModule_section_idModuleC =
$this->getSection_idModule_section_idModuleAfee_C($item->section_id);
}
return $items;
}
return false;
}
/**
* Method to get an array of Module Objects.
*
* @return mixed An array of Module Objects on success, false on failure.
*
*/
public function getSection_idModule_section_idModuleAfee_C($section_id)
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Get from #__moojla_module as c
$query->select($db->quoteName(
array('c.id','c.module_section_id','c.module_id','c.visible','c.uservisible','c.name','c.modname','c.url','c.description','c.modicon','c.published','c.created_by','c.modified_by','c.created','c.modified','c.hits'),
array('id','module_section_id','module_id','visible','uservisible','name','modname','url','description','modicon','published','created_by','modified_by','created','modified','hits')));
$query->from($db->quoteName('#__moojla_module',
'c'));
$query->where('c.module_section_id = ' .
$db->quote($section_id));
// Reset the query using our newly populated query object.
$db->setQuery($query);
$db->execute();
// check if there was data returned
if ($db->getNumRows())
{
// Load the JEvent Dispatcher
JPluginHelper::importPlugin('content');
$this->_dispatcher = JEventDispatcher::getInstance();
$items = $db->loadObjectList();
// Convert the parameter fields into objects.
foreach ($items as $nr => &$item)
{
// Check if item has params, or pass whole item.
$params = (isset($item->params) &&
MoojlaHelper::checkJson($item->params)) ? json_decode($item->params)
: $item;
// Make sure the content prepare plugins fire on modicon
$_modicon = new stdClass();
$_modicon->text =& $item->modicon; // value must be in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (modicon) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.coursedetail.modicon', &$_modicon,
&$params, 0));
// Make sure the content prepare plugins fire on description
$_description = new stdClass();
$_description->text =& $item->description; // value must be
in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (description) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.coursedetail.description', &$_description,
&$params, 0));
// set module_idContents_module_idContentD to the $item object.
$item->module_idContents_module_idContentD =
$this->getModule_idContents_module_idContentAfee_D($item->module_id);
}
return $items;
}
return false;
}
/**
* Method to get an array of Content Objects.
*
* @return mixed An array of Content Objects on success, false on
failure.
*
*/
public function getModule_idContents_module_idContentAfee_D($module_id)
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Get from #__moojla_content as d
$query->select($db->quoteName(
array('d.id','d.contents_module_id','d.fileurl','d.filesize','d.mimetype','d.type','d.filename','d.file','d.published','d.created_by','d.modified_by','d.created','d.modified','d.hits'),
array('id','contents_module_id','fileurl','filesize','mimetype','type','filename','file','published','created_by','modified_by','created','modified','hits')));
$query->from($db->quoteName('#__moojla_content',
'd'));
$query->where('d.contents_module_id = ' .
$db->quote($module_id));
// Reset the query using our newly populated query object.
$db->setQuery($query);
$db->execute();
// check if there was data returned
if ($db->getNumRows())
{
// Load the JEvent Dispatcher
JPluginHelper::importPlugin('content');
$this->_dispatcher = JEventDispatcher::getInstance();
return $db->loadObjectList();
}
return false;
}
/***[JCBGUI.site_view.php_model.38.$$$$]***/
public function getFavorite()
{
$user= JFactory::getUser();
if ($user->guest)
return [];
$userid= $user->id;
$db= JFactory::getDbo();
$query= $db->getQuery(true)
->select($db->quoteName('courseid'))
->from($db->quoteName('#__moojla_favorite','f'))
->where($db->quoteName('userid').'='.$db->quote($userid));
$db->setQuery($query);
$result= $db->loadObjectList('courseid');
return $result;
}
public function getRate()
{
$user= JFactory::getUser();
if ($user->guest)
return ['rate' => null, 'average' =>
null];
$userid= $user->id;
$db= JFactory::getDbo();
$query= $db->getQuery(true)
// courseid==remoteid
->select('(sum(rate)/count(*)) as average, count(*) as
totalRate, courseid')
->from($db->quoteName('#__moojla_rate'))
->group('courseid');
$db->setQuery($query);
$average= $db->loadObjectList('courseid');
$query= $db->getQuery(true)
->select('courseid, rate')
->from($db->quoteName('#__moojla_rate'))
->where($db->quoteName('userid').'='.$db->quote($userid));
$db->setQuery($query);
$rate= $db->loadObjectList();
return compact('rate','average');
}
public function updateHits($id = 0)
{
if ((int) $id <= 0)
return;
$app = JFactory::getApplication();
$hits = $app->getUserState('com_moojla.hits', array());
if (!in_array($id, $hits))
{
$db = $this->getDbo();
$query = $db->getQuery(true)
->update($db->quoteName('#__moojla_course'))
->set($db->qn('hits') . ' = (' .
$db->qn('hits') . ' + 1)')
->where($db->qn('id') . ' = ' .
$db->q((int) $id));
$db->setQuery($query)->execute();
$hits[] = $id;
$app->setUserState('com_moojla.hits', $hits);
if
($this->state->get('params')->get('logging',
0))
{
$referer =
$app->input->server->get('HTTP_REFERER', '',
'string');
$userAgent =
$app->input->server->get('HTTP_USER_AGENT',
'', 'string');
$address =
$app->input->server->get('REMOTE_ADDR', '',
'string');
$visited = JFactory::getDate()->toSql();
JModelLegacy::getInstance('Log',
'MoojlaModel')->log(
$id,
$referer,
$userAgent,
$address,
$visited
);
}
}
}
/***[/JCBGUI$$$$]***/
}
courselist.php000064400000015475151171426670007477 0ustar00<?php
/*----------------------------------------------------------------------------------|
www.vdm.io |----/
Lmskaran
/-------------------------------------------------------------------------------------------------------/
@version 1.0.77
@build 6th April, 2022
@created 22nd July, 2020
@package Moojla
@subpackage courselist.php
@author Lmskaran <http://Lmskaran.com>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
____ _____ _____ __ __ __ __ ___ _____ __ __ ____
_____ _ _ ____ _ _ ____
(_ _)( _ )( _ )( \/ )( ) /__\ / __)( _ )( \/ )( _ \(
_ )( \( )( ___)( \( )(_ _)
.-_)( )(_)( )(_)( ) ( )(__ /(__)\ ( (__ )(_)( ) ( )___/
)(_)( ) ( )__) ) ( )(
\____) (_____)(_____)(_/\/\_)(____)(__)(__) \___)(_____)(_/\/\_)(__)
(_____)(_)\_)(____)(_)\_) (__)
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use Joomla\Utilities\ArrayHelper;
/**
* Moojla Model for Courselist
*/
class MoojlaModelCourselist extends JModelList
{
/**
* Model user data.
*
* @var strings
*/
protected $user;
protected $userId;
protected $guest;
protected $groups;
protected $levels;
protected $app;
protected $input;
protected $uikitComp;
/**
* Method to build an SQL query to load the list data.
*
* @return string An SQL query
*/
protected function getListQuery()
{
// Get the current user for authorisation checks
$this->user = JFactory::getUser();
$this->userId = $this->user->get('id');
$this->guest = $this->user->get('guest');
$this->groups = $this->user->get('groups');
$this->authorisedGroups = $this->user->getAuthorisedGroups();
$this->levels = $this->user->getAuthorisedViewLevels();
$this->app = JFactory::getApplication();
$this->input = $this->app->input;
$this->initSet = true;
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Get from #__moojla_course as a
$query->select($db->quoteName(
array('a.id','a.asset_id','a.cat_id','a.cat_name','a.currency','a.self_enrolment','a.startdate','a.summary_files','a.teachers','a.cost','a.remoteid','a.guest','a.in_enrol_date','a.enddate','a.summary','a.shortname','a.fullname','a.permanent_fields','a.published','a.created_by','a.modified_by','a.created','a.modified','a.version','a.hits','a.ordering'),
array('id','asset_id','cat_id','cat_name','currency','self_enrolment','startdate','summary_files','teachers','cost','remoteid','guest','in_enrol_date','enddate','summary','shortname','fullname','permanent_fields','published','created_by','modified_by','created','modified','version','hits','ordering')));
$query->from($db->quoteName('#__moojla_course',
'a'));
// Get where a.published is 1
$query->where('a.published = 1');
// return the query object
return $query;
}
/**
* Method to get an array of data items.
*
* @return mixed An array of data items on success, false on failure.
*/
public function getItems()
{
$user = JFactory::getUser();
// load parent items
$items = parent::getItems();
// Get the global params
$globalParams = JComponentHelper::getParams('com_moojla',
true);
// Insure all item fields are adapted where needed.
if (MoojlaHelper::checkArray($items))
{
// Load the JEvent Dispatcher
JPluginHelper::importPlugin('content');
$this->_dispatcher = JEventDispatcher::getInstance();
foreach ($items as $nr => &$item)
{
// Always create a slug for sef URL's
$item->slug = (isset($item->alias) &&
isset($item->id)) ? $item->id.':'.$item->alias :
$item->id;
// Check if we can decode permanent_fields
if (MoojlaHelper::checkJson($item->permanent_fields))
{
// Decode permanent_fields
$item->permanent_fields = json_decode($item->permanent_fields,
true);
}
// Check if item has params, or pass whole item.
$params = (isset($item->params) &&
MoojlaHelper::checkJson($item->params)) ? json_decode($item->params)
: $item;
// Make sure the content prepare plugins fire on teachers
$_teachers = new stdClass();
$_teachers->text =& $item->teachers; // value must be in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (teachers) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.courselist.teachers', &$_teachers,
&$params, 0));
// Make sure the content prepare plugins fire on summary_files
$_summary_files = new stdClass();
$_summary_files->text =& $item->summary_files; // value must
be in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (summary_files) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.courselist.summary_files',
&$_summary_files, &$params, 0));
// Make sure the content prepare plugins fire on summary
$_summary = new stdClass();
$_summary->text =& $item->summary; // value must be in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (summary) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.courselist.summary', &$_summary,
&$params, 0));
}
}
/***[JCBGUI.dynamic_get.php_after_getitems.56.$$$$]***/
$mycourses =
$this->state->get('parameters.menu')->get('mycourses');
$moodle_course_category =
$this->state->get('parameters.menu')->get('moodle_course_category');
if($mycourses)
{
require_once JPATH_ADMINISTRATOR .
"/components/com_moojla/models/course.php";
JLoader::register('MoojlaHelper',
JPATH_ADMINISTRATOR.'/components/com_moojla/helpers/moojla.php');
$user = JFactory::getUser();
$dataObj = array(
"wsfunction" =>
"moojla_get_user_courses",
"moodlewsrestformat" => "json",
"userid" =>
MoojlaHelper::joomlaToMoodleID($user->id)
);
$coursesReq = MoojlaHelper::sendRequestToMoodle($dataObj);
$courses = json_decode($coursesReq->response);
$ids = array();
if(is_array($courses))
{
foreach($courses as $course)
{
$ids[] = (int)($course->id);
}
}
foreach($items as $index => $item)
{
if(!in_array((int)$item->remoteid, $ids))
unset($items[$index]);
}
}
else if($moodle_course_category)
{
foreach($items as $index => $item)
{
if((int)$item->cat_id != $moodle_course_category)
unset($items[$index]);
}
}/***[/JCBGUI$$$$]***/
// return items
return $items;
}
}
courses.php000064400000013255151171426700006752 0ustar00<?php
/*----------------------------------------------------------------------------------|
www.vdm.io |----/
Lmskaran
/-------------------------------------------------------------------------------------------------------/
@version 1.0.77
@build 6th April, 2022
@created 22nd July, 2020
@package Moojla
@subpackage courses.php
@author Lmskaran <http://Lmskaran.com>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
____ _____ _____ __ __ __ __ ___ _____ __ __ ____
_____ _ _ ____ _ _ ____
(_ _)( _ )( _ )( \/ )( ) /__\ / __)( _ )( \/ )( _ \(
_ )( \( )( ___)( \( )(_ _)
.-_)( )(_)( )(_)( ) ( )(__ /(__)\ ( (__ )(_)( ) ( )___/
)(_)( ) ( )__) ) ( )(
\____) (_____)(_____)(_/\/\_)(____)(__)(__) \___)(_____)(_/\/\_)(__)
(_____)(_)\_)(____)(_)\_) (__)
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use Joomla\Utilities\ArrayHelper;
/**
* Moojla Model for Courses
*/
class MoojlaModelCourses extends JModelList
{
/**
* Model user data.
*
* @var strings
*/
protected $user;
protected $userId;
protected $guest;
protected $groups;
protected $levels;
protected $app;
protected $input;
protected $uikitComp;
/**
* Method to build an SQL query to load the list data.
*
* @return string An SQL query
*/
protected function getListQuery()
{
// Get the current user for authorisation checks
$this->user = JFactory::getUser();
$this->userId = $this->user->get('id');
$this->guest = $this->user->get('guest');
$this->groups = $this->user->get('groups');
$this->authorisedGroups = $this->user->getAuthorisedGroups();
$this->levels = $this->user->getAuthorisedViewLevels();
$this->app = JFactory::getApplication();
$this->input = $this->app->input;
$this->initSet = true;
// Make sure all records load, since no pagination allowed.
$this->setState('list.limit', 0);
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Get from #__moojla_course as a
$query->select($db->quoteName(
array('a.id','a.cat_id','a.cat_name','a.catid','a.currency','a.startdate','a.summary_files','a.teachers','a.cost','a.remoteid','a.guest','a.in_enrol_date','a.enddate','a.summary','a.shortname','a.fullname'),
array('id','cat_id','cat_name','catid','currency','startdate','summary_files','teachers','cost','remoteid','guest','in_enrol_date','enddate','summary','shortname','fullname')));
$query->from($db->quoteName('#__moojla_course',
'a'));
// Get from #__moojla_category_map as b
$query->select($db->quoteName(
array('b.id','b.jcatid','b.mcatid'),
array('category_map_id','category_map_jcatid','category_map_mcatid')));
$query->join('INNER',
($db->quoteName('#__moojla_category_map', 'b')) .
' ON (' . $db->quoteName('a.catid') . ' =
' . $db->quoteName('b.jcatid') . ')');
// Check if JFactory::getApplication()->input->get('cid')
is a string or numeric value.
$checkValue =
JFactory::getApplication()->input->get('cid');
if (isset($checkValue) && MoojlaHelper::checkString($checkValue))
{
$query->where('b.mcatid = ' . $db->quote($checkValue));
}
elseif (is_numeric($checkValue))
{
$query->where('b.mcatid = ' . $checkValue);
}
// Get where a.published is 1
$query->where('a.published = 1');
// return the query object
return $query;
}
/**
* Method to get an array of data items.
*
* @return mixed An array of data items on success, false on failure.
*/
public function getItems()
{
$user = JFactory::getUser();
// load parent items
$items = parent::getItems();
// Get the global params
$globalParams = JComponentHelper::getParams('com_moojla',
true);
// Insure all item fields are adapted where needed.
if (MoojlaHelper::checkArray($items))
{
// Load the JEvent Dispatcher
JPluginHelper::importPlugin('content');
$this->_dispatcher = JEventDispatcher::getInstance();
foreach ($items as $nr => &$item)
{
// Always create a slug for sef URL's
$item->slug = (isset($item->alias) &&
isset($item->id)) ? $item->id.':'.$item->alias :
$item->id;
// Check if item has params, or pass whole item.
$params = (isset($item->params) &&
MoojlaHelper::checkJson($item->params)) ? json_decode($item->params)
: $item;
// Make sure the content prepare plugins fire on teachers
$_teachers = new stdClass();
$_teachers->text =& $item->teachers; // value must be in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (teachers) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.courses.teachers', &$_teachers,
&$params, 0));
// Make sure the content prepare plugins fire on summary_files
$_summary_files = new stdClass();
$_summary_files->text =& $item->summary_files; // value must
be in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (summary_files) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.courses.summary_files', &$_summary_files,
&$params, 0));
// Make sure the content prepare plugins fire on summary
$_summary = new stdClass();
$_summary->text =& $item->summary; // value must be in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (summary) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.courses.summary', &$_summary, &$params,
0));
}
}
// return items
return $items;
}
}
course_search.php000064400000035467151171426700010125 0ustar00<?php
/*----------------------------------------------------------------------------------|
www.vdm.io |----/
Lmskaran
/-------------------------------------------------------------------------------------------------------/
@version 1.0.77
@build 6th April, 2022
@created 22nd July, 2020
@package Moojla
@subpackage course_search.php
@author Lmskaran <http://Lmskaran.com>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
____ _____ _____ __ __ __ __ ___ _____ __ __ ____
_____ _ _ ____ _ _ ____
(_ _)( _ )( _ )( \/ )( ) /__\ / __)( _ )( \/ )( _ \(
_ )( \( )( ___)( \( )(_ _)
.-_)( )(_)( )(_)( ) ( )(__ /(__)\ ( (__ )(_)( ) ( )___/
)(_)( ) ( )__) ) ( )(
\____) (_____)(_____)(_/\/\_)(____)(__)(__) \___)(_____)(_/\/\_)(__)
(_____)(_)\_)(____)(_)\_) (__)
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use Joomla\Utilities\ArrayHelper;
/**
* Moojla Model for Course_search
*/
class MoojlaModelCourse_search extends JModelList
{
/**
* Model user data.
*
* @var strings
*/
protected $user;
protected $userId;
protected $guest;
protected $groups;
protected $levels;
protected $app;
protected $input;
protected $uikitComp;
/**
* Method to build an SQL query to load the list data.
*
* @return string An SQL query
*/
protected function getListQuery()
{
// Get the current user for authorisation checks
$this->user = JFactory::getUser();
$this->userId = $this->user->get('id');
$this->guest = $this->user->get('guest');
$this->groups = $this->user->get('groups');
$this->authorisedGroups = $this->user->getAuthorisedGroups();
$this->levels = $this->user->getAuthorisedViewLevels();
$this->app = JFactory::getApplication();
$this->input = $this->app->input;
$this->initSet = true;
// Make sure all records load, since no pagination allowed.
$this->setState('list.limit', 0);
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Get data
/***[JCBGUI.dynamic_get.php_custom_get.59.$$$$]***/
$query->select('*, max(cost) as maxCost')
->from($db->quoteName('#__moojla_course','mc'));
/***[/JCBGUI$$$$]***/
// return the query object
return $query;
}
/**
* Method to get an array of data items.
*
* @return mixed An array of data items on success, false on failure.
*/
public function getItems()
{
$user = JFactory::getUser();
// load parent items
$items = parent::getItems();
// Get the global params
$globalParams = JComponentHelper::getParams('com_moojla',
true);
// Insure all item fields are adapted where needed.
if (MoojlaHelper::checkArray($items))
{
foreach ($items as $nr => &$item)
{
// Always create a slug for sef URL's
$item->slug = (isset($item->alias) &&
isset($item->id)) ? $item->id.':'.$item->alias :
$item->id;
}
}
/***[JCBGUI.dynamic_get.php_after_getitems.59.$$$$]***/
$this->preFilter();
$items['tag']= isset($this->items['tag'])?
$this->items['tag']: [];
$items['category']= isset($this->items['category'])?
$this->items['category']: [];
$items['teacher']= isset($this->items['teacher'])?
$this->items['teacher']: [];
$items['widget']= isset($this->items['widget'])?
$this->items['widget']: [];
$items['courses']= $this->getCourses();
$items['showmycourse']=
$this->items['showmycourse'];
$items['showsearchsidebar']=
$this->items['showsearchsidebar'];
$items['searchinmycourse']=
$this->items['searchinmycourse'];
$items['cs_display_cost']=
$this->items['cs_display_cost'];
$items['jform']= $this->items['jform'];
/***[/JCBGUI$$$$]***/
// return items
return $items;
}
/***[JCBGUI.site_view.php_model.41.$$$$]***/
public function get_courses_by_remoteid($remoteids=[])
{
if (empty($remoteids))
return [];
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('mc.id as id, shortname, remoteid, cat_name,
catid, cost, summary_files, summary, fullname, attribs');
$query->from($db->quoteName('#__moojla_course',
'mc'));
$query->where($db->quoteName('remoteid').'IN
('.implode(',',$remoteids).')');
$db->setQuery($query);
$result = $db->loadObjectList('remoteid');
return $result;
}
public function getTag($remoteid= null)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('tagname, tagid')
->from($db->quoteName('#__moojla_tag',
'mt'))
->where($db->quoteName('isstandard') . '=
1')
->group('tagid');
if ($remoteid)
{
$query->join('inner',$db->quoteName('#__moojla_tag_instance',
'mti').' on
'.$db->quoteName('mt.tagid').'='.$db->quoteName('mti.moodletag'));
$query->where($db->quoteName('mti.moojlacourse').'=
'. $remoteid);
}
$db->setQuery($query);
$result = $db->loadObjectList('tagid');
return $result;
}
public function getCategory($remoteid= null)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('*')
->from($db->quoteName('#__moojla_course',
'mc'))
->join('inner',
$db->quoteName('#__categories', 'c') .
'on' . $db->quoteName('mc.catid') . '=' .
$db->quoteName('c.id'));
if ($remoteid)
{
$query->where($db->quoteName('mc.remoteid').'= '.
$remoteid);
}
$db->setQuery($query);
$result = $db->loadObjectList('catid');
return $result;
}
public function getTeacher()
{
$params =
JFactory::getApplication()->getParams('com_moojla');
$role = $params->get('role');
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('mid, name, role')
->from($db->quoteName('#__moojla_enrolment',
'e'))
->join('inner',
$db->quoteName('#__moojla_user_map', 'um') .
'on ' . $db->quoteName('e.jid') . '=' .
$db->quoteName('um.jid'))
->join('inner',
$db->quoteName('#__users', 'u') . 'on ' .
$db->quoteName('u.id') . '=' .
$db->quoteName('e.jid'))
->where($db->quoteName('role') . '='
. $db->quote($role))
->group($db->quoteName('mid'));
$db->setQuery($query);
$result = $db->loadObjectList('mid');
return $result;
}
public function getCourses()
{
$app= JFactory::getApplication();
$menuid=
$app->getMenu()->getActive()->get('id');
$jform= array(
'tag' =>
(array)$app->input->get('tag'),
'category' =>
(array)$app->input->get('category'),
'mid' =>
(array)$app->input->get('muser')
);
$this->items['jform']= $jform;
return $this->Filter($jform, $menuid);
}
public function preFilter()
{
$app = JFactory::getApplication();
$menuitem = $app->getMenu()->getActive();
$params = $menuitem->getParams();
$widgets = (array)$params->get('widget');
$this->items['widget'] = $widgets;
foreach ((array)$widgets as $widget) {
if (in_array($widget, ['category', 'tag',
'teacher'])) {
$widget_action = $params->get($widget .
'_widget');
$widget_ids = $params->get($widget);
$widget_ids = $widget_ids ? $widget_ids : [0];
$function = 'get' . $widget;
switch ($widget_action) {
case 'all':
$result = $this->$function();
$this->items[$widget] = $result;
break;
case 'include':
$function2 = 'action_' . $widget_action;
$result = $this->$function();
$result = array_intersect_key($result,
array_flip($widget_ids));
$this->items[$widget] = $result;
break;
case 'exclude':
$function2 = 'action_' . $widget_action;
$result = $this->$function();
$result = array_diff_key($result,
array_flip($widget_ids));
$this->items[$widget] = $result;
break;
}
}
}
}
public function doExclude(&$query, $table, $column, $keys)
{
$column= $table.'.'.$column;
$query->where('('.$column.' NOT IN
('.implode(',',$keys).') or '.$column.' is
null )');
}
public function doInclude(&$query, $table, $column, $keys)
{
$column= $table.'.'.$column;
$query->where('('.$column.' IN
('.implode(',',$keys).') or '.$column.' is
null )');
}
public function Filter($jform=[], $menuid= null,$page= 1)
{
$app= JFactory::getApplication();
$db= JFactory::getDbo();
$query= $db->getQuery(true);
if (!empty($menuid))
{
$menuparams=
$app->getMenu()->getItem($menuid)->getParams();
$this->items['showmycourse']=
$menuparams->get('showmycourse',0);
$this->items['showsearchsidebar']=
$menuparams->get('showsearchsidebar',1);
$this->items['searchinmycourse']=
$menuparams->get('searchinmycourse', 1);
$this->items['cs_display_cost']=
$menuparams->get('cs_display_cost', 1);
$widgets= (array)$menuparams->get('widget');
$filtered_widgets= [
'category' => array('table'=>
'mc', 'column'=> 'catid'),
'tag' => array('table'=>
'mti', 'column'=> 'moodletag'),
'teacher' => array('table'=>
'um', 'column'=> 'mid')
];
$flag= true;
if($this->items['showmycourse'] ||
!empty($jform['searchinmycourse']))
{
$userid= JFactory::getUser()->id;
if ($userid)
{
$query2= $db->getQuery(true)
->select('mid')
->from($db->quoteName('#__moojla_user_map','um'))
->where($db->quoteName('um.jid').'='.$db->quote($userid));
$db->setQuery($query2);
$mid= $db->loadResult();
$query->join('left',$db->quoteName('#__moojla_enrolment','es').'on'.$db->quoteName('mc.remoteid').'='.$db->quoteName('es.moojlacourse'));
$query->join('left',$db->quoteName('#__moojla_user_map','ums').'on'.$db->quoteName('es.jid').'='.$db->quoteName('ums.jid'));
//$query->where($db->quoteName('es.role').'=
5');
$query->where($db->quoteName('ums.mid').'='.$db->quote($mid));
}
else
{
$flag= false;
}
}
if (!$flag)
return [];
foreach ($filtered_widgets as $key=> $filtered_widget)
{
$widget_action= $key . '_widget';
$widget_action = $menuparams->get($widget_action);
$widget_ids = $menuparams->get($key);
$widget_ids = $widget_ids ? $widget_ids : [0];
if (in_array($key, $widgets))
{
switch ($widget_action) {
case 'all':
break;
case 'include':
$this->doInclude($query,$filtered_widget['table'],$filtered_widget['column'],$widget_ids);
break;
case 'exclude':
$this->doExclude($query,$filtered_widget['table'],$filtered_widget['column'],$widget_ids);
break;
}
}
}
$result_of_results=
$menuparams->get('number_of_results',12);
$limit= $result_of_results;
}
$query->select('mc.id as id, shortname, remoteid,
cat_name, catid, cost, summary_files, summary, fullname, attribs')
->from($db->quoteName('#__moojla_course','mc'))
->join('left',$db->quoteName('#__moojla_tag_instance','mti').'on'.$db->quoteName('mc.remoteid').'='.$db->quoteName('mti.moojlacourse'))
->join('left',$db->quoteName('#__moojla_tag','mt').'on'.$db->quoteName('mti.moodletag').'='.$db->quoteName('mt.tagid'))
->join('left',$db->quoteName('#__moojla_enrolment','e').'on'.$db->quoteName('mc.remoteid').'='.$db->quoteName('e.moojlacourse'))
->join('left',$db->quoteName('#__moojla_user_map','um').'on'.$db->quoteName('e.jid').'='.$db->quoteName('um.jid'))
->join('left',$db->quoteName('#__users','u').'on'.$db->quoteName('e.jid').'='.$db->quoteName('u.id'))
->join('left',$db->quoteName('#__categories','c').'on'.$db->quoteName('mc.catid').'='.$db->quoteName('c.id'));
if (!empty($jform['text']))
{
$like= $db->quote('%'.str_replace('
','%',trim($jform['text'])).'%');
$query->where('('.$db->quoteName('mc.shortname').'
like '.$like.' OR '.
$db->quoteName('mc.fullname').' like
'.$like.')');
}
if (!empty($jform['category']))
{
$query->where($db->quoteName('mc.catid').'
IN
('.implode(',',$jform['category']).')');
}
if (!empty($jform['tag']))
{
$query->where($db->quoteName('mti.moodletag').' IN
('.implode(',',$jform['tag']).')');
}
if (!empty($jform['mid']))
{
$query->where($db->quoteName('um.mid').'
IN ('.implode(',',$jform['mid']).')');
$query->where($db->quoteName('e.role').'=
3');
}
if (!empty($jform['minRange']))
{
$query->where($db->quoteName('mc.cost').'
>= '. $db->quote($jform['minRange']));
$query->where($db->quoteName('mc.cost').'
<= '. $db->quote($jform['maxRange']));
}
$query->where($db->quoteName('mc.published').'=1');
if (empty($jform['sort']))
$jform['sort']= 'remoteid__desc';
list($sort_by, $order)=
explode('__',$jform['sort']);
$query->order('mc.'.$sort_by.' '.$order);
$query->group('remoteid');
if (isset($jform['limit']))
$limit= $jform['limit'];
if (!empty($limit))
{
$offset= ($page- 1) * $limit;
$query->setLimit($limit, $offset);
}
$db->setQuery($query);
$result= $db->loadObjectList('remoteid');
return $result;
}/***[/JCBGUI$$$$]***/
}
forms/course.js000064400000002023151171426700007531
0ustar00/*----------------------------------------------------------------------------------|
www.vdm.io |----/
Lmskaran
/-------------------------------------------------------------------------------------------------------/
@version 1.0.77
@build 6th April, 2022
@created 22nd July, 2020
@package Moojla
@subpackage course.js
@author Lmskaran <http://Lmskaran.com>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
____ _____ _____ __ __ __ __ ___ _____ __ __ ____
_____ _ _ ____ _ _ ____
(_ _)( _ )( _ )( \/ )( ) /__\ / __)( _ )( \/ )( _ \(
_ )( \( )( ___)( \( )(_ _)
.-_)( )(_)( )(_)( ) ( )(__ /(__)\ ( (__ )(_)( ) ( )___/
)(_)( ) ( )__) ) ( )(
\____) (_____)(_____)(_/\/\_)(____)(__)(__) \___)(_____)(_/\/\_)(__)
(_____)(_)\_)(____)(_)\_) (__)
/------------------------------------------------------------------------------------------------------*/
forms/course.xml000064400000104614151171426700007726 0ustar00<?xml
version="1.0" encoding="utf-8"?>
<form
addrulepath="/administrator/components/com_moojla/models/rules"
addfieldpath="/administrator/components/com_moojla/models/fields"
>
<fieldset name="details">
<!-- Default Fields.-->
<!-- Id Field. Type: Text (joomla)-->
<field name="id"
type="text"
class="readonly"
readonly="true"
label="JGLOBAL_FIELD_ID_LABEL"
description="JGLOBAL_FIELD_ID_DESC"
size="10"
default="0" />
<!-- Date Created Field. Type: Calendar (joomla)-->
<field name="created"
type="calendar"
label="COM_MOOJLA_COURSE_CREATED_DATE_LABEL"
description="COM_MOOJLA_COURSE_CREATED_DATE_DESC"
size="22"
format="%Y-%m-%d %H:%M:%S"
filter="user_utc" />
<!-- User Created Field. Type: User (joomla)-->
<field name="created_by"
type="user"
label="COM_MOOJLA_COURSE_CREATED_BY_LABEL"
description="COM_MOOJLA_COURSE_CREATED_BY_DESC" />
<!-- Published Field. Type: List (joomla)-->
<field name="published"
type="list"
label="JSTATUS">
<option
value="1">JPUBLISHED</option>
<option
value="0">JUNPUBLISHED</option>
<option
value="2">JARCHIVED</option>
<option
value="-2">JTRASHED</option>
</field>
<!-- Date Modified Field. Type: Calendar (joomla)-->
<field name="modified"
type="calendar"
class="readonly"
label="COM_MOOJLA_COURSE_MODIFIED_DATE_LABEL"
description="COM_MOOJLA_COURSE_MODIFIED_DATE_DESC"
size="22"
readonly="true"
format="%Y-%m-%d %H:%M:%S"
filter="user_utc" />
<!-- User Modified Field. Type: User (joomla)-->
<field name="modified_by"
type="user"
label="COM_MOOJLA_COURSE_MODIFIED_BY_LABEL"
description="COM_MOOJLA_COURSE_MODIFIED_BY_DESC"
class="readonly"
readonly="true"
filter="unset" />
<!-- Ordering Field. Type: Numbers (joomla)-->
<field name="ordering"
type="number"
class="inputbox validate-ordering"
label="COM_MOOJLA_COURSE_ORDERING_LABEL"
description=""
default="0"
size="6"
required="false" />
<!-- Version Field. Type: Text (joomla)-->
<field name="version"
type="text"
class="readonly"
label="COM_MOOJLA_COURSE_VERSION_LABEL"
description="COM_MOOJLA_COURSE_VERSION_DESC"
size="6"
readonly="true"
filter="unset" />
<!-- Metakey Field. Type: Textarea (joomla)-->
<field name="metakey"
type="textarea"
label="JFIELD_META_KEYWORDS_LABEL"
description="JFIELD_META_KEYWORDS_DESC"
rows="3"
cols="30" />
<!-- Metadesc Field. Type: Textarea (joomla)-->
<field name="metadesc"
type="textarea"
label="JFIELD_META_DESCRIPTION_LABEL"
description="JFIELD_META_DESCRIPTION_DESC"
rows="3"
cols="30" />
<!-- Was added due to Permissions JS needing a Title
field-->
<!-- Let us know at gh-629 should this change-->
<!--
https://github.com/vdm-io/Joomla-Component-Builder/issues/629#issuecomment-750117235-->
<field name="title"
type="hidden"
default="moojla course" />
<!-- Dynamic Fields.-->
<!-- Shortname Field. Type: Text. (joomla)-->
<field type="text"
name="shortname"
label="COM_MOOJLA_COURSE_SHORTNAME_LABEL"
size="10"
maxlength="50"
default=""
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="STRING"
message="COM_MOOJLA_COURSE_SHORTNAME_MESSAGE"
autocomplete="on" />
<!-- Fullname Field. Type: Text. (joomla)-->
<field type="text"
name="fullname"
label="COM_MOOJLA_COURSE_FULLNAME_LABEL"
size="10"
maxlength="50"
default=""
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="STRING"
message="COM_MOOJLA_COURSE_FULLNAME_MESSAGE"
hint="COM_MOOJLA_COURSE_FULLNAME_HINT"
autocomplete="on" />
<!-- Catid Field. Type: Category. (joomla)-->
<field type="category"
name="catid"
label="COM_MOOJLA_COURSE_CATID_LABEL"
extension="com_moojla.course"
required="false"
show_root="true"
default="0"
description="COM_MOOJLA_COURSE_CATID_DESCRIPTION"
class="inputbox" />
<!-- Addcontrols Field. Type: Radio. (joomla)-->
<field type="radio"
name="addcontrols"
label="COM_MOOJLA_COURSE_ADDCONTROLS_LABEL"
description="COM_MOOJLA_COURSE_ADDCONTROLS_DESCRIPTION"
class="btn-group btn-group-yesno"
default="1"
showon="useglobalvideo:0">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
</field>
<!-- Showregtab Field. Type: Radio. (joomla)-->
<field type="radio"
name="showregtab"
label="COM_MOOJLA_COURSE_SHOWREGTAB_LABEL"
description="COM_MOOJLA_COURSE_SHOWREGTAB_DESCRIPTION"
class="btn-group btn-group-yesno"
default="2"
showon="popupbutton:1">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
<option
value="2">COM_MOOJLA_COURSE_INHERIT</option>
</field>
<!-- Startdate Field. Type: Calendar. (joomla)-->
<field type="calendar"
name="startdate"
label="COM_MOOJLA_COURSE_STARTDATE_LABEL"
default="NOW"
format="%Y-%m-%d" />
<!-- Enterlbl Field. Type: Text. (joomla)-->
<field type="text"
name="enterlbl"
label="COM_MOOJLA_COURSE_ENTERLBL_LABEL"
size="20"
maxlength="50"
default=""
description="COM_MOOJLA_COURSE_ENTERLBL_DESCRIPTION"
class="text_area"
filter="STRING"
message="COM_MOOJLA_COURSE_ENTERLBL_MESSAGE"
hint="COM_MOOJLA_COURSE_ENTERLBL_HINT"
autocomplete="off" />
<!-- Cangotomoodle Field. Type: Radio. (joomla)-->
<field type="radio"
name="cangotomoodle"
label="COM_MOOJLA_COURSE_CANGOTOMOODLE_LABEL"
description="COM_MOOJLA_COURSE_CANGOTOMOODLE_DESCRIPTION"
class="btn-group btn-group-yesno"
default="2">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
<option
value="2">COM_MOOJLA_COURSE_DEFAULT</option>
</field>
<!-- Preloadaudio Field. Type: Radio. (joomla)-->
<field type="radio"
name="preloadaudio"
label="COM_MOOJLA_COURSE_PRELOADAUDIO_LABEL"
description="COM_MOOJLA_COURSE_PRELOADAUDIO_DESCRIPTION"
class="btn-group btn-group-yesno"
default="0"
showon="useglobalaudio:0">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
</field>
<!-- Loginurl Field. Type: Text. (joomla)-->
<field type="text"
name="loginurl"
label="COM_MOOJLA_COURSE_LOGINURL_LABEL"
size="256"
maxlength="256"
default=""
description="COM_MOOJLA_COURSE_LOGINURL_DESCRIPTION"
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="STRING"
message="COM_MOOJLA_COURSE_LOGINURL_MESSAGE"
hint="COM_MOOJLA_COURSE_LOGINURL_HINT"
autocomplete="on"
showon="showlogintab:1" />
<!-- In_enrol_date Field. Type: Text. (joomla)-->
<field type="text"
name="in_enrol_date"
label="COM_MOOJLA_COURSE_IN_ENROL_DATE_LABEL"
size="10"
maxlength="50"
default=""
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="STRING"
message="COM_MOOJLA_COURSE_IN_ENROL_DATE_MESSAGE"
autocomplete="on" />
<!-- Enddate Field. Type: Calendar. (joomla)-->
<field type="calendar"
name="enddate"
label="COM_MOOJLA_COURSE_ENDDATE_LABEL"
default="NOW"
format="%Y-%m-%d %H:%M"
filter="user_utc"
showtime="true" />
<!-- Remoteid Field. Type: Text. (joomla)-->
<field type="text"
name="remoteid"
label="COM_MOOJLA_COURSE_REMOTEID_LABEL"
size="10"
maxlength="50"
default=""
description="COM_MOOJLA_COURSE_REMOTEID_DESCRIPTION"
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="STRING"
message="COM_MOOJLA_COURSE_REMOTEID_MESSAGE"
autocomplete="on" />
<!-- Guest Field. Type: Text. (joomla)-->
<field type="text"
name="guest"
label="COM_MOOJLA_COURSE_GUEST_LABEL"
size="10"
maxlength="50"
default="0"
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="INT"
message="COM_MOOJLA_COURSE_GUEST_MESSAGE"
autocomplete="on" />
<!-- Cost Field. Type: Text. (joomla)-->
<field type="text"
name="cost"
label="COM_MOOJLA_COURSE_COST_LABEL"
size="10"
maxlength="50"
default="0"
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="INT"
message="COM_MOOJLA_COURSE_COST_MESSAGE"
hint="COM_MOOJLA_COURSE_COST_HINT"
autocomplete="on" />
<!-- Teachers Field. Type: Editor. (joomla)-->
<field type="editor"
name="teachers"
label="COM_MOOJLA_COURSE_TEACHERS_LABEL"
default=""
buttons="no"
editor="codemirror|none"
filter="safehtml" />
<!-- Summary_files Field. Type: Editor. (joomla)-->
<field type="editor"
name="summary_files"
label="COM_MOOJLA_COURSE_SUMMARY_FILES_LABEL"
default=""
buttons="no"
editor="codemirror|none"
filter="safehtml" />
<!-- Autoplay Field. Type: Radio. (joomla)-->
<field type="radio"
name="autoplay"
label="COM_MOOJLA_COURSE_AUTOPLAY_LABEL"
description="COM_MOOJLA_COURSE_AUTOPLAY_DESCRIPTION"
class="btn-group btn-group-yesno"
default="0"
showon="useglobalvideo:0">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
</field>
<!-- Summary Field. Type: Editor. (joomla)-->
<field type="editor"
name="summary"
label="COM_MOOJLA_COURSE_SUMMARY_LABEL"
default=""
buttons="no"
editor="tinymce|none"
filter="safehtml" />
<!-- Useglobalaudio Field. Type: Radio. (joomla)-->
<field type="radio"
name="useglobalaudio"
label="COM_MOOJLA_COURSE_USEGLOBALAUDIO_LABEL"
description="COM_MOOJLA_COURSE_USEGLOBALAUDIO_DESCRIPTION"
class="btn-group btn-group-yesno"
default="1">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
</field>
<!-- Alias Field. Type: Text. (joomla)-->
<field type="text"
name="alias"
label="COM_MOOJLA_COURSE_ALIAS_LABEL"
description="JFIELD_ALIAS_DESC"
filter="STRING"
hint="COM_MOOJLA_COURSE_ALIAS_HINT" />
<!-- Cat_name Field. Type: Text. (joomla)-->
<field type="text"
name="cat_name"
label="COM_MOOJLA_COURSE_CAT_NAME_LABEL"
size="10"
maxlength="50"
default=""
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="STRING"
message="COM_MOOJLA_COURSE_CAT_NAME_MESSAGE"
hint="COM_MOOJLA_COURSE_CAT_NAME_HINT"
autocomplete="on"
showon="cat_:" />
<!-- Currency Field. Type: Text. (joomla)-->
<field type="text"
name="currency"
label="COM_MOOJLA_COURSE_CURRENCY_LABEL"
size="10"
maxlength="50"
default="IRT"
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="STRING"
message="COM_MOOJLA_COURSE_CURRENCY_MESSAGE"
autocomplete="on" />
<!-- Alterurl Field. Type: Text. (joomla)-->
<field type="text"
name="alterurl"
label="COM_MOOJLA_COURSE_ALTERURL_LABEL"
size="256"
maxlength="256"
default=""
description="COM_MOOJLA_COURSE_ALTERURL_DESCRIPTION"
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="STRING"
message="COM_MOOJLA_COURSE_ALTERURL_MESSAGE"
hint="COM_MOOJLA_COURSE_ALTERURL_HINT"
autocomplete="on"
showon="popupbutton:0" />
<!-- Loginlbl Field. Type: Text. (joomla)-->
<field type="text"
name="loginlbl"
label="COM_MOOJLA_COURSE_LOGINLBL_LABEL"
size="20"
maxlength="50"
default=""
description="COM_MOOJLA_COURSE_LOGINLBL_DESCRIPTION"
class="text_area"
filter="STRING"
message="COM_MOOJLA_COURSE_LOGINLBL_MESSAGE"
hint="COM_MOOJLA_COURSE_LOGINLBL_HINT"
autocomplete="off" />
<!-- Buylbl Field. Type: Text. (joomla)-->
<field type="text"
name="buylbl"
label="COM_MOOJLA_COURSE_BUYLBL_LABEL"
size="20"
maxlength="50"
default=""
description="COM_MOOJLA_COURSE_BUYLBL_DESCRIPTION"
class="text_area"
filter="STRING"
message="COM_MOOJLA_COURSE_BUYLBL_MESSAGE"
hint="COM_MOOJLA_COURSE_BUYLBL_HINT"
autocomplete="off" />
<!-- Enrollbl Field. Type: Text. (joomla)-->
<field type="text"
name="enrollbl"
label="COM_MOOJLA_COURSE_ENROLLBL_LABEL"
size="20"
maxlength="50"
default=""
description="COM_MOOJLA_COURSE_ENROLLBL_DESCRIPTION"
class="text_area"
filter="STRING"
message="COM_MOOJLA_COURSE_ENROLLBL_MESSAGE"
hint="COM_MOOJLA_COURSE_ENROLLBL_HINT"
autocomplete="off" />
<!-- Popupbutton Field. Type: Radio. (joomla)-->
<field type="radio"
name="popupbutton"
label="COM_MOOJLA_COURSE_POPUPBUTTON_LABEL"
description="COM_MOOJLA_COURSE_POPUPBUTTON_DESCRIPTION"
class="btn-group btn-group-yesno"
default="2"
readonly="false"
disabled="false">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
<option
value="2">COM_MOOJLA_COURSE_DEFAULT</option>
</field>
<!-- Videotype Field. Type: Radio. (joomla)-->
<field type="radio"
name="videotype"
label="COM_MOOJLA_COURSE_VIDEOTYPE_LABEL"
description="COM_MOOJLA_COURSE_VIDEOTYPE_DESCRIPTION"
class="btn-group btn-group-yesno"
default="1"
showon="useglobalvideo:0">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_MODAL</option>
<option
value="2">COM_MOOJLA_COURSE_EMBED</option>
<option
value="3">COM_MOOJLA_COURSE_SCROLL_TO_TOP</option>
</field>
<!-- Registrationurl Field. Type: Text. (joomla)-->
<field type="text"
name="registrationurl"
label="COM_MOOJLA_COURSE_REGISTRATIONURL_LABEL"
size="256"
maxlength="256"
default=""
description="COM_MOOJLA_COURSE_REGISTRATIONURL_DESCRIPTION"
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="STRING"
message="COM_MOOJLA_COURSE_REGISTRATIONURL_MESSAGE"
hint="COM_MOOJLA_COURSE_REGISTRATIONURL_HINT"
autocomplete="on"
showon="showregtab:1" />
<!-- Self_enrolment Field. Type: Text. (joomla)-->
<field type="text"
name="self_enrolment"
label="COM_MOOJLA_COURSE_SELF_ENROLMENT_LABEL"
size="10"
maxlength="50"
default=""
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="STRING"
message="COM_MOOJLA_COURSE_SELF_ENROLMENT_MESSAGE"
autocomplete="on" />
<!-- Freeenterlbl Field. Type: Text. (joomla)-->
<field type="text"
name="freeenterlbl"
label="COM_MOOJLA_COURSE_FREEENTERLBL_LABEL"
size="20"
maxlength="50"
default=""
description="COM_MOOJLA_COURSE_FREEENTERLBL_DESCRIPTION"
class="text_area"
filter="STRING"
message="COM_MOOJLA_COURSE_FREEENTERLBL_MESSAGE"
hint="COM_MOOJLA_COURSE_FREEENTERLBL_HINT"
autocomplete="off" />
<!-- Permanent_fields Field. Type: Sql. (joomla)-->
<field type="sql"
name="permanent_fields"
label="COM_MOOJLA_COURSE_PERMANENT_FIELDS_LABEL"
query="DESC `#__moojla_course`"
default=""
description="COM_MOOJLA_COURSE_PERMANENT_FIELDS_DESCRIPTION"
key_field="Field"
value_field="Field"
multiple="true" />
<!-- Useglobalvideo Field. Type: Radio. (joomla)-->
<field type="radio"
name="useglobalvideo"
label="COM_MOOJLA_COURSE_USEGLOBALVIDEO_LABEL"
description="COM_MOOJLA_COURSE_USEGLOBALVIDEO_DESCRIPTION"
class="btn-group btn-group-yesno"
default="1">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
</field>
<!-- Course_templatestyle_forcourseconfig Field. Type:
Customtemplatestyle. (custom)-->
<field type="customtemplatestyle"
name="course_templatestyle_forcourseconfig"
label="COM_MOOJLA_COURSE_COURSE_TEMPLATESTYLE_FORCOURSECONFIG_LABEL"
description="COM_MOOJLA_COURSE_COURSE_TEMPLATESTYLE_FORCOURSECONFIG_DESCRIPTION"
message="COM_MOOJLA_COURSE_COURSE_TEMPLATESTYLE_FORCOURSECONFIG_MESSAGE"
class="list_class"
multiple="false"
default="0"
button="false" />
<!-- Preventdownload Field. Type: Radio. (joomla)-->
<field type="radio"
name="preventdownload"
label="COM_MOOJLA_COURSE_PREVENTDOWNLOAD_LABEL"
description="COM_MOOJLA_COURSE_PREVENTDOWNLOAD_DESCRIPTION"
class="btn-group btn-group-yesno"
default="0"
showon="useglobalvideo:0">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
</field>
<!-- Course_detail_layout Field. Type: Filelist.
(joomla)-->
<field type="filelist"
name="course_detail_layout"
label="COM_MOOJLA_COURSE_COURSE_DETAIL_LAYOUT_LABEL"
directory="components/com_moojla/views/coursedetail/tmpl/"
default=""
description="COM_MOOJLA_COURSE_COURSE_DETAIL_LAYOUT_DESCRIPTION"
filter="^[^_]*\.php$"
hide_none="ture"
hide_default="true" />
<!-- Preloadvideo Field. Type: Radio. (joomla)-->
<field type="radio"
name="preloadvideo"
label="COM_MOOJLA_COURSE_PRELOADVIDEO_LABEL"
description="COM_MOOJLA_COURSE_PRELOADVIDEO_DESCRIPTION"
class="btn-group btn-group-yesno"
default="0"
showon="useglobalvideo:0">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
</field>
<!-- Availabilityinfolink Field. Type: Radio.
(joomla)-->
<field type="radio"
name="availabilityinfolink"
label="COM_MOOJLA_COURSE_AVAILABILITYINFOLINK_LABEL"
description="COM_MOOJLA_COURSE_AVAILABILITYINFOLINK_DESCRIPTION"
class="btn-group btn-group-yesno"
default="2"
readonly="false"
disabled="false">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_ENABLE</option>
<option
value="0">COM_MOOJLA_COURSE_DISABLE</option>
<option
value="2">COM_MOOJLA_COURSE_DEFAULT</option>
</field>
<!-- Muted Field. Type: Radio. (joomla)-->
<field type="radio"
name="muted"
label="COM_MOOJLA_COURSE_MUTED_LABEL"
description="COM_MOOJLA_COURSE_MUTED_DESCRIPTION"
class="btn-group btn-group-yesno"
default="0"
showon="useglobalvideo:0">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
</field>
<!-- Redirect_after_enrol Field. Type: Radio.
(joomla)-->
<field type="radio"
name="redirect_after_enrol"
label="COM_MOOJLA_COURSE_REDIRECT_AFTER_ENROL_LABEL"
description="COM_MOOJLA_COURSE_REDIRECT_AFTER_ENROL_DESCRIPTION"
class="btn-group btn-group-yesno"
default="2">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
<option
value="2">COM_MOOJLA_COURSE_DEFAULT</option>
</field>
<!-- Preventdownloadaudio Field. Type: Radio.
(joomla)-->
<field type="radio"
name="preventdownloadaudio"
label="COM_MOOJLA_COURSE_PREVENTDOWNLOADAUDIO_LABEL"
description="COM_MOOJLA_COURSE_PREVENTDOWNLOADAUDIO_DESCRIPTION"
class="btn-group btn-group-yesno"
default="0"
showon="useglobalaudio:0">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
</field>
<!-- Showlogintab Field. Type: Radio. (joomla)-->
<field type="radio"
name="showlogintab"
label="COM_MOOJLA_COURSE_SHOWLOGINTAB_LABEL"
description="COM_MOOJLA_COURSE_SHOWLOGINTAB_DESCRIPTION"
class="btn-group btn-group-yesno"
default="2"
showon="popupbutton:1">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
<option
value="2">COM_MOOJLA_COURSE_INHERIT</option>
</field>
<!-- Autoplayaudio Field. Type: Radio. (joomla)-->
<field type="radio"
name="autoplayaudio"
label="COM_MOOJLA_COURSE_AUTOPLAYAUDIO_LABEL"
description="COM_MOOJLA_COURSE_AUTOPLAYAUDIO_DESCRIPTION"
class="btn-group btn-group-yesno"
default="0"
showon="useglobalaudio:0">
<!-- Option Set.-->
<option
value="1">COM_MOOJLA_COURSE_YES</option>
<option
value="0">COM_MOOJLA_COURSE_NO</option>
</field>
<!-- Cat_id Field. Type: Text. (joomla)-->
<field type="text"
name="cat_id"
label="COM_MOOJLA_COURSE_CAT_ID_LABEL"
size="10"
maxlength="50"
default=""
class="text_area"
readonly="false"
disabled="false"
required="false"
filter="INT"
message="COM_MOOJLA_COURSE_CAT_ID_MESSAGE"
autocomplete="on"
showon="cat_:" />
<!-- Metadata Fields-->
<fields name="metadata"
label="JGLOBAL_FIELDSET_METADATA_OPTIONS">
<fieldset name="vdmmetadata"
label="JGLOBAL_FIELDSET_METADATA_OPTIONS">
<!-- Robots Field. Type: List
(joomla)-->
<field name="robots"
type="list"
label="JFIELD_METADATA_ROBOTS_LABEL"
description="JFIELD_METADATA_ROBOTS_DESC">
<option
value="">JGLOBAL_USE_GLOBAL</option>
<option value="index,
follow">JGLOBAL_INDEX_FOLLOW</option>
<option value="noindex,
follow">JGLOBAL_NOINDEX_FOLLOW</option>
<option value="index,
nofollow">JGLOBAL_INDEX_NOFOLLOW</option>
<option value="noindex,
nofollow">JGLOBAL_NOINDEX_NOFOLLOW</option>
</field>
<!-- Author Field. Type: Text
(joomla)-->
<field name="author"
type="text"
label="JAUTHOR"
description="JFIELD_METADATA_AUTHOR_DESC"
size="20" />
<!-- Rights Field. Type: Textarea
(joomla)-->
<field name="rights"
type="textarea"
label="JFIELD_META_RIGHTS_LABEL"
description="JFIELD_META_RIGHTS_DESC"
required="false"
filter="string"
cols="30"
rows="2" />
</fieldset>
</fields>
</fieldset>
<!-- Access Control Fields. -->
<fieldset name="accesscontrol">
<!-- Asset Id Field. Type: Hidden (joomla) -->
<field
name="asset_id"
type="hidden"
filter="unset"
/>
<!-- Rules Field. Type: Rules (joomla) -->
<field
name="rules"
type="rules"
label="Permissions in relation to this course"
translate_label="false"
filter="rules"
validate="rules"
class="inputbox"
component="com_moojla"
section="course"
/>
</fieldset>
</form>forms/index.html000064400000000054151171426700007672
0ustar00<html><body
bgcolor="#FFFFFF"></body></html>index.html000064400000000054151171426700006544
0ustar00<html><body
bgcolor="#FFFFFF"></body></html>teacherdetail.php000064400000032770151171426700010070
0ustar00<?php
/*----------------------------------------------------------------------------------|
www.vdm.io |----/
Lmskaran
/-------------------------------------------------------------------------------------------------------/
@version 1.0.77
@build 6th April, 2022
@created 22nd July, 2020
@package Moojla
@subpackage teacherdetail.php
@author Lmskaran <http://Lmskaran.com>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later -
http://www.gnu.org/licenses/gpl-2.0.html
____ _____ _____ __ __ __ __ ___ _____ __ __ ____
_____ _ _ ____ _ _ ____
(_ _)( _ )( _ )( \/ )( ) /__\ / __)( _ )( \/ )( _ \(
_ )( \( )( ___)( \( )(_ _)
.-_)( )(_)( )(_)( ) ( )(__ /(__)\ ( (__ )(_)( ) ( )___/
)(_)( ) ( )__) ) ( )(
\____) (_____)(_____)(_/\/\_)(____)(__)(__) \___)(_____)(_/\/\_)(__)
(_____)(_)\_)(____)(_)\_) (__)
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use Joomla\Utilities\ArrayHelper;
/**
* Moojla Teacherdetail Model
*/
class MoojlaModelTeacherdetail extends JModelItem
{
/**
* Model context string.
*
* @var string
*/
protected $_context = 'com_moojla.teacherdetail';
/**
* Model user data.
*
* @var strings
*/
protected $user;
protected $userId;
protected $guest;
protected $groups;
protected $levels;
protected $app;
protected $input;
protected $uikitComp;
/**
* @var object item
*/
protected $item;
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @since 1.6
*
* @return void
*/
protected function populateState()
{
$this->app = JFactory::getApplication();
$this->input = $this->app->input;
// Get the itme main id
$id = $this->input->getInt('id', null);
$this->setState('teacherdetail.id', $id);
// Load the parameters.
$params = $this->app->getParams();
$this->setState('params', $params);
parent::populateState();
}
/**
* Method to get article data.
*
* @param integer $pk The id of the article.
*
* @return mixed Menu item data object on success, false on failure.
*/
public function getItem($pk = null)
{
$this->user = JFactory::getUser();
$this->userId = $this->user->get('id');
$this->guest = $this->user->get('guest');
$this->groups = $this->user->get('groups');
$this->authorisedGroups = $this->user->getAuthorisedGroups();
$this->levels = $this->user->getAuthorisedViewLevels();
$this->initSet = true;
$pk = (!empty($pk)) ? $pk : (int)
$this->getState('teacherdetail.id');
if ($this->_item === null)
{
$this->_item = array();
}
if (!isset($this->_item[$pk]))
{
try
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Get from #__moojla_user_map as a
$query->select($db->quoteName(
array('a.id','a.asset_id','a.jid','a.userimage','a.mid','a.published','a.hits'),
array('id','asset_id','jid','userimage','mid','published','hits')));
$query->from($db->quoteName('#__moojla_user_map',
'a'));
// Get from #__users as b
$query->select($db->quoteName(
array('b.id','b.name','b.username','b.email','b.password','b.block','b.registerDate','b.lastvisitDate','b.params'),
array('users_id','users_name','users_username','users_email','users_password','users_block','users_registerDate','users_lastvisitDate','users_params')));
$query->join('INNER',
($db->quoteName('#__users', 'b')) . ' ON
(' . $db->quoteName('a.jid') . ' = ' .
$db->quoteName('b.id') . ')');
$query->where('a.mid = ' . (int) $pk);
// Get where a.published is 1
$query->where('a.published = 1');
// Reset the query using our newly populated query object.
$db->setQuery($query);
// Load the results as a stdClass object.
$data = $db->loadObject();
if (empty($data))
{
$app = JFactory::getApplication();
// If no data is found redirect to default page and show warning.
$app->enqueueMessage(JText::_('COM_MOOJLA_NOT_FOUND_OR_ACCESS_DENIED'),
'warning');
$app->redirect(JURI::root());
return false;
}
// Load the JEvent Dispatcher
JPluginHelper::importPlugin('content');
$this->_dispatcher = JEventDispatcher::getInstance();
// set data object to item.
$this->_item[$pk] = $data;
}
catch (Exception $e)
{
if ($e->getCode() == 404)
{
// Need to go thru the error handler to allow Redirect to work.
JError::raiseWarning(404, $e->getMessage());
}
else
{
$this->setError($e);
$this->_item[$pk] = false;
}
}
}
/***[JCBGUI.dynamic_get.php_after_getitem.54.$$$$]***/
$input = $this->app->input;
$moodleid = $input->get('id', 0);
$this->_item[$pk]->cv = "";
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('muserfields',
'juserfields')));
$query->from($db->quoteName('#__moojla_user_field_map'));
$query->where($db->quoteName('iscv') . ' = 1
');
$query->where($db->quoteName('published') . ' = 1
');
$db->setQuery($query);
$cv_field = $db->loadAssocList();
if(is_array($cv_field))
$cv_field = current($cv_field);
if($cv_field)
{
$prefix = substr($cv_field['juserfields'], 0, 2);
switch($prefix)
{
case 'sj':
$thisuser = JFactory::getUser($data->jid);
$field = substr($cv_field['juserfields'], 3);
$cv = $thisuser->$field;
break;
case 'jf':
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select('fv.value')
->from($db->quoteName('#__fields',
'f'))
->join('INNER',
$db->quoteName('#__fields_values', 'fv') . ' ON
' . $db->quoteName('f.id') . ' = ' .
$db->quoteName('fv.field_id'))
->where($db->quoteName('fv.item_id') . ' =
' . $db->quote($data->jid));
$db->setQuery($query);
$cv = $db->loadResult();
break;
case 'cb':
$field = substr($cv_field['juserfields'], 3);
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName($field));
$query->from($db->quoteName('#__comprofiler'));
$query->where($db->quoteName('user_id') . '
= ' . $db->quote($data->jid));
$db->setQuery($query);
$cv = $db->loadResult();
break;
}
if(isset($cv))
$this->_item[$pk]->cv = $cv;
}
/***[/JCBGUI$$$$]***/
return $this->_item[$pk];
}
/**
* Custom Method
*
* @return mixed An array of objects on success, false on failure.
*
*/
public function getCourses()
{
if (!isset($this->initSet) || !$this->initSet)
{
$this->user = JFactory::getUser();
$this->userId = $this->user->get('id');
$this->guest = $this->user->get('guest');
$this->groups = $this->user->get('groups');
$this->authorisedGroups = $this->user->getAuthorisedGroups();
$this->levels = $this->user->getAuthorisedViewLevels();
$this->initSet = true;
}
// Get the global params
$globalParams = JComponentHelper::getParams('com_moojla',
true);
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Get from #__moojla_course as a
$query->select($db->quoteName(
array('a.id','a.asset_id','a.cat_id','a.cat_name','a.currency','a.self_enrolment','a.startdate','a.summary_files','a.teachers','a.cost','a.remoteid','a.guest','a.in_enrol_date','a.enddate','a.summary','a.shortname','a.fullname','a.permanent_fields','a.catid','a.course_templatestyle_forcourseconfig','a.course_detail_layout','a.loginurl','a.registrationurl','a.published','a.hits'),
array('id','asset_id','cat_id','cat_name','currency','self_enrolment','startdate','imgurl','teachers','cost','remoteid','guest','in_enrol_date','enddate','summary','shortname','fullname','permanent_fields','catid','course_templatestyle_forcourseconfig','course_detail_layout','loginurl','registrationurl','published','hits')));
$query->from($db->quoteName('#__moojla_course',
'a'));
// Get from #__moojla_enrolment as b
$query->select($db->quoteName(
array('b.id','b.asset_id','b.moojlacourse','b.jid','b.role','b.published','b.hits'),
array('enrolment_id','enrolment_asset_id','enrolment_moojlacourse','enrolment_jid','enrolment_role','enrolment_published','enrolment_hits')));
$query->join('INNER',
($db->quoteName('#__moojla_enrolment', 'b')) .
' ON (' . $db->quoteName('a.remoteid') . ' =
' . $db->quoteName('b.moojlacourse') . ')');
// Get from #__moojla_user_map as c
$query->select($db->quoteName(
array('c.id','c.asset_id','c.jid','c.userimage','c.mid','c.published','c.hits'),
array('user_map_id','user_map_asset_id','user_map_jid','user_map_userimage','user_map_mid','user_map_published','user_map_hits')));
$query->join('INNER',
($db->quoteName('#__moojla_user_map', 'c')) . '
ON (' . $db->quoteName('b.jid') . ' = ' .
$db->quoteName('c.jid') . ')');
// Get where a.published is 1
$query->where('a.published = 1');
// Get where b.published is 1
$query->where('b.published = 1');
// Get where b.role is 3
$query->where('b.role = 3');
// Get where c.mid is $this->input->get('id')
$query->where('c.mid = ' .
$db->quote($this->input->get('id')));
// Reset the query using our newly populated query object.
$db->setQuery($query);
$items = $db->loadObjectList();
/***[JCBGUI.dynamic_get.php_after_getitems.58.$$$$]***/
$result = new stdClass;
$result->courses = $items;
return $result;
/**************** with ws in older version of moojla
$teacherid = (int) $this->input->get('id');
$pk = $teacherid;
require_once JPATH_ADMINISTRATOR .
"/components/com_moojla/models/course.php";
JLoader::register('MoojlaHelper',
JPATH_ADMINISTRATOR.'/components/com_moojla/helpers/moojla.php');
$user = JFactory::getUser();
$dataObj = array(
"wsfunction" =>
"moojla_get_courses_of_teacher",
"moodlewsrestformat" => "json",
"userid" => $teacherid
);
$coursesReq = MoojlaHelper::sendRequestToMoodle($dataObj);
$courses = json_decode($coursesReq->response);
$this->_item[$pk] = $courses;
foreach($this->_item[$pk]->courses as $index => $course)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*');
$query->from($db->quoteName('#__moojla_course'));
$query->where($db->quoteName('remoteid') . ' =
' . $db->quote($course->id));
$db->setQuery($query);
$c = $db->loadObjectList();
if($c)
{
$c = $c[0];
$this->_item[$pk]->courses[$index]->id = $c->id;
$this->_item[$pk]->courses[$index]->enddate =
$c->enddate;
$this->_item[$pk]->courses[$index]->startdate =
$c->startdate;
$this->_item[$pk]->courses[$index]->fullname =
$c->fullname;
$this->_item[$pk]->courses[$index]->shortname =
$c->shortname;
$this->_item[$pk]->courses[$index]->imgurl =
$c->summary_files;
$this->_item[$pk]->courses[$index]->summary =
$c->summary;
$this->_item[$pk]->courses[$index]->visible =
$c->published;
$this->_item[$pk]->courses[$index]->url =
JRoute::_('index.php?option=com_moojla&view=coursedetail&id='.$c->remoteid);
}
}
return $this->_item[$pk];
*//***[/JCBGUI$$$$]***/
if (empty($items))
{
return false;
}
// Insure all item fields are adapted where needed.
if (MoojlaHelper::checkArray($items))
{
// Load the JEvent Dispatcher
JPluginHelper::importPlugin('content');
$this->_dispatcher = JEventDispatcher::getInstance();
foreach ($items as $nr => &$item)
{
// Always create a slug for sef URL's
$item->slug = (isset($item->alias) &&
isset($item->id)) ? $item->id.':'.$item->alias :
$item->id;
// Check if we can decode permanent_fields
if (MoojlaHelper::checkJson($item->permanent_fields))
{
// Decode permanent_fields
$item->permanent_fields = json_decode($item->permanent_fields,
true);
}
// Check if item has params, or pass whole item.
$params = (isset($item->params) &&
MoojlaHelper::checkJson($item->params)) ? json_decode($item->params)
: $item;
// Make sure the content prepare plugins fire on teachers
$_teachers = new stdClass();
$_teachers->text =& $item->teachers; // value must be in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (teachers) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.teacherdetail.teachers', &$_teachers,
&$params, 0));
// Make sure the content prepare plugins fire on imgurl
$_imgurl = new stdClass();
$_imgurl->text =& $item->imgurl; // value must be in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (imgurl) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.teacherdetail.imgurl', &$_imgurl,
&$params, 0));
// Make sure the content prepare plugins fire on summary
$_summary = new stdClass();
$_summary->text =& $item->summary; // value must be in text
// Since all values are now in text (Joomla Limitation), we also add
the field name (summary) to context
$this->_dispatcher->trigger("onContentPrepare",
array('com_moojla.teacherdetail.summary', &$_summary,
&$params, 0));
}
}
// return items
return $items;
}
}