Spade

Mini Shell

Directory:~$ /home/lmsyaran/public_html/administrator/components/com_moojla/controllers/
Upload File

[Home] [System Details] [Kill Me]
Current File:~$ /home/lmsyaran/public_html/administrator/components/com_moojla/controllers/courses.php

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

/**
 * Courses Controller
 */
class MoojlaControllerCourses extends JControllerAdmin
{
	/**
	 * The prefix to use with controller messages.
	 *
	 * @var    string
	 * @since  1.6
	 */
	protected $text_prefix = 'COM_MOOJLA_COURSES';

	/**
	 * Method to get a model object, loading it if required.
	 *
	 * @param   string  $name    The model name. Optional.
	 * @param   string  $prefix  The class prefix. Optional.
	 * @param   array   $config  Configuration array for model. Optional.
	 *
	 * @return  JModelLegacy  The model.
	 *
	 * @since   1.6
	 */
	public function getModel($name = 'Course', $prefix =
'MoojlaModel', $config = array('ignore_request' =>
true))
	{
		return parent::getModel($name, $prefix, $config);
	}

	public function exportData()
	{
		// Check for request forgeries
		JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));
		// check if export is allowed for this user.
		$user = JFactory::getUser();
		if ($user->authorise('course.export',
'com_moojla') &&
$user->authorise('core.export', 'com_moojla'))
		{
			// Get the input
			$input = JFactory::getApplication()->input;
			$pks = $input->post->get('cid', array(),
'array');
			// Sanitize the input
			$pks = ArrayHelper::toInteger($pks);
			// Get the model
			$model = $this->getModel('Courses');
			// get the data to export
			$data = $model->getExportData($pks);
			if (MoojlaHelper::checkArray($data))
			{
				// now set the data to the spreadsheet
				$date = JFactory::getDate();
				MoojlaHelper::xls($data,'Courses_'.$date->format('jS_F_Y'),'Courses
exported ('.$date->format('jS F,
Y').')','courses');
			}
		}
		// Redirect to the list screen with error.
		$message = JText::_('COM_MOOJLA_EXPORT_FAILED');
		$this->setRedirect(JRoute::_('index.php?option=com_moojla&view=courses',
false), $message, 'error');
		return;
	}


	public function importData()
	{
		// Check for request forgeries
		JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));
		// check if import is allowed for this user.
		$user = JFactory::getUser();
		if ($user->authorise('course.import',
'com_moojla') &&
$user->authorise('core.import', 'com_moojla'))
		{
			// Get the import model
			$model = $this->getModel('Courses');
			// get the headers to import
			$headers = $model->getExImPortHeaders();
			if (MoojlaHelper::checkObject($headers))
			{
				// Load headers to session.
				$session = JFactory::getSession();
				$headers = json_encode($headers);
				$session->set('course_VDM_IMPORTHEADERS', $headers);
				$session->set('backto_VDM_IMPORT', 'courses');
				$session->set('dataType_VDM_IMPORTINTO',
'course');
				// Redirect to import view.
				$message =
JText::_('COM_MOOJLA_IMPORT_SELECT_FILE_FOR_COURSES');
				$this->setRedirect(JRoute::_('index.php?option=com_moojla&view=import',
false), $message);
				return;
			}
		}
		// Redirect to the list screen with error.
		$message = JText::_('COM_MOOJLA_IMPORT_FAILED');
		$this->setRedirect(JRoute::_('index.php?option=com_moojla&view=courses',
false), $message, 'error');
		return;
	}


/***[JCBGUI.admin_view.php_controller_list.129.$$$$]***/
  function uni2persian($uni_str) 
  {
    //strpos
    preg_match_all('/\\\u[[:xdigit:]]{4}/', $uni_str, $matches);
    if(isset($matches[0]) && $matches)
    {
      foreach($matches[0] as $word)
      {
        $p = strpos($uni_str, $word);
        $new="&#x".substr($uni_str,$p+2,4).";"; 
        $txt = html_entity_decode("$new", ENT_COMPAT,
"UTF-8");
        $uni_str = str_replace($word, $txt, $uni_str);
      }
    }

    return $uni_str;
  }




  function fetchCourses()
  {
    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_course_categories",
      "moodlewsrestformat"  => "json",
    );
    $course_cats =
json_decode(MoojlaHelper::sendRequestToMoodle($dataObj)->response);
    $catidmap = array();
    foreach($course_cats as $cc)
    {
      if($cc->depth == 1)
      {
        $parent_name = '';
      }
      else
      {
        $path = ltrim($cc->path, '/');
        $path = explode('/', $path);
        $mparent_id = $path[$cc->depth - 2];

        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        $query
          ->select(array('c.title'))
          ->from($db->quoteName('#__moojla_category_map',
'cm'))
          ->join('INNER',
$db->quoteName('#__categories', 'c') . ' ON
' . $db->quoteName('c.id') . ' = ' .
$db->quoteName('cm.jcatid'))
          ->where($db->quoteName('c.extension') . ' =
' . $db->quote('com_moojla.course'))
          ->where($db->quoteName('cm.mcatid') . ' =
' . $db->quote($mparent_id))
          ->where($db->quoteName('cm.published') . ' =
1');
        $db->setQuery($query);
        $parent_name = $db->loadResult();
      }
      JPluginHelper::importPlugin("moojlaevents");
      $dispatcher = JEventDispatcher::getInstance();
      $args = array($cc->name, $cc->id, $parent_name,
$cc->description);
      $catidmap[$cc->id] =
$dispatcher->trigger("createMoojlaCategory", $args)[0];

    }

    $dataObj = array(
      "wsfunction"          =>
"moojla_get_courses",
      "moodlewsrestformat"  => "json",
    );
    $coursesReq = MoojlaHelper::sendRequestToMoodle($dataObj);
    $courses = json_decode($coursesReq->response);

    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('id, remoteid');
    $query->from($db->quoteName('#__moojla_course'));
    $db->setQuery($query);
    $moojla_courses = $db->loadObjectList('remoteid');
    $courses = array_filter($courses, function($v)
use(&$moojla_courses){
      return empty($moojla_courses[$v->id]);
    });
    // dump(array_values($courses),'the courses that to be
saved');

    $check = true;
    if(is_object($courses))
    {
      if(property_exists($courses, 'exception') &&
$courses->exception)
        $check = false;
    }

    if ($check) {
      $updateCount = 0;
      $createCount = 0;
      $sample_size = count($courses);
      $chunk_size = 10;


      foreach ($courses as $c) {
        if (!trim($c->shortname))
          continue;

        $course = array();
        $course["shortname"] = stripslashes($c->shortname);
        $course["fullname"] = stripslashes($c->fullname);
        $course["cat_name"] = stripslashes($c->categoryname);
        $course["cat_id"] = stripslashes($c->categoryid);
        $course["summary"] =
stripslashes($this->uni2persian(stripslashes($c->summary)));
        $course["summary_files"] =
stripslashes($this->uni2persian(stripslashes($c->imgurl)));
        $course["teachers"] =
$this->uni2persian(stripslashes(json_encode($c->teachers)));
        $course["startdate"] = $c->startdate;
        $course["endtdate"] = property_exists($c,
'endtdate') ? $c->endtdate : 0;
        $course["in_enrol_date"] = $c->in_enrol_date;
        $course["self_enrolment"] = $c->self_enrolment;
        $course["remoteid"] = $c->id;
        $course["currency"] = $c->currency;
        $course["cost"] = $c->cost;
        $course["created_by"] = $user->id;
        $course["guest"] = $c->guest;
        $course["catid"] =
$catidmap[$course["cat_id"]];

        /*$db = JFactory::getDbo();
        $query = $db->getQuery(true);
        $query->select($db->quoteName(array('id',
'permanent_fields')))
          ->from($db->quoteName('#__moojla_course'))
          ->where($db->quoteName('remoteid') . ' =
' . $db->quote($course["remoteid"]));
        $db->setQuery($query);
        $result = $db->loadAssocList();*/

        /*if (current($result)["id"]) {
          $course["id"] = current($result)["id"]; //
for update rows
          if (current($result)["permanent_fields"] !=
"") {
            $permanent_fields =
json_decode(current($result)["permanent_fields"], true);
            foreach ($permanent_fields as $field) {
              unset($course[$field]);
            }
            $course["permanent_fields"] =
current($result)["permanent_fields"];
          }
          $updateCount += 1;
        } else {*/
          $createCount += 1;
        /*}*/

        $courseModel = new MoojlaModelCourse;
        $courseModel->save($course);

        $customfields = $c->customfields;

        $cfs = array();
        foreach ($customfields as $index => $cf) {
          $cfs['cm_' . $cf->shortname] = $cf->value;
        }

        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        $query
          ->select(array('cf.coursefield',
'cf.mcoursefields', 'f.name'))
         
->from($db->quoteName('#__moojla_course_field_mapper',
'cf'))
          ->join('INNER',
$db->quoteName('#__fields', 'f') . ' ON '
. $db->quoteName('f.id') . ' = ' .
$db->quoteName('cf.coursefield'))
          ->where($db->quoteName('f.context') . ' =
' . $db->quote('com_moojla.course'))
          ->where($db->quoteName('cf.published') . ' =
1');
        $db->setQuery($query);
        $mappings = $db->loadRowList(1);

        $itemId = $courseModel->getItem()->id;

        foreach ($mappings as $index => $mapping) {
          $fieldId = $mapping[0];
          $value = $cfs[$index];
          define('JPATH_COMPONENT', JPATH_ADMINISTRATOR);
          $courseModel->setFieldValue($fieldId, $itemId, $value);
        }

        $params = JComponentHelper::getParams('com_moojla');
        $fetch_course_contents =
$params->get('fetch_course_contents', 0);

        if ($fetch_course_contents == 1) {
          $dataObj = array(
            "wsfunction" =>
"moojla_get_course_contents",
            "moodlewsrestformat" => "json",
            "courseid" => $course["remoteid"]
          );
          $sections =
json_decode(MoojlaHelper::sendRequestToMoodle($dataObj)->response);
          MoojlaHelper::updateCourseContents($sections,
$course["remoteid"]);
        }

      }

 
      $app = JFactory::getApplication();
      $message =
JText::_('COM_MOOJLA_COM_MOOJLA_COMPLETELY_FETCHED'); //
translate_need
      if ($updateCount != 0) {
        $message .= '<br>' . $updateCount . ' ' .
JText::_('COM_MOOJLA_COM_MOOJLA_COURSES_UPDATED'); //
translate_need
      }
      if ($createCount != 0) {
        $message .= '<br>' . $createCount . ' ' .
JText::_('COM_MOOJLA_COM_MOOJLA_COURSES_CREATED'); //
translate_need
      }

    }
    else {
      $app = JFactory::getApplication();
      $message =
JText::_('COM_MOOJLA_COM_MOOJLA_FETCHING_ERROR'); //
translate_need
      $message .= '<br>' . $courses->exception;
      $message .= '<br>' . $courses->errorcode;
     
$app->redirect(JRoute::_("index.php?option=com_moojla&view=courses",
false), $message, 'error');
      return false;
    }


   
$app->redirect(JRoute::_("index.php?option=com_moojla&view=courses",
false), $message, 'message');
    return true;
  }



  function updateCourse()
  {
    require_once JPATH_ADMINISTRATOR .
"/components/com_moojla/models/course.php";
    JLoader::register('MoojlaHelper',
JPATH_ADMINISTRATOR.'/components/com_moojla/helpers/moojla.php');
    $cid = $this->input->get('cid', array(),
'array');
    $cid = ArrayHelper::toInteger($cid);

    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select($db->quoteName(array('remoteid')));
    $query->from($db->quoteName('#__moojla_course'));
    $query->where($db->quoteName('id') . ' IN ('
. implode(',', $cid ) . ')');
    $db->setQuery($query);
    $results = $db->loadColumn();


    $dataObj = array(
      "wsfunction"          =>
"moojla_get_courses",
      "moodlewsrestformat"  => "json",
      "options"				=> array(
        "ids"				=> $results
      )
    );
    $coursesReq = MoojlaHelper::sendRequestToMoodle($dataObj);
    $courses = json_decode($coursesReq->response);
    if(!$courses->exception)
    {
      $updateCount = 0;
      $user = JFactory::getUser();
      foreach($courses as $index => $c)
      {
        if(!trim($c->shortname))
          continue;

        $course = array();
        $course["shortname"]		= stripslashes($c->shortname);
        $course["fullname"]			= stripslashes($c->fullname);
        $course["cat_name"]			=
stripslashes($c->categoryname);
        $course["cat_id"]			= stripslashes($c->categoryid);
        $course["summary"]			=
stripslashes($this->uni2persian(stripslashes($c->summary)));
        $course["summary_files"]	=
stripslashes($this->uni2persian(stripslashes($c->imgurl)));
        $course["teachers"]			=
$this->uni2persian(stripslashes(json_encode($c->teachers)));
        $course["startdate"]		= $c->startdate;
        $course["endtdate"]			= $c->endtdate;
        $course["in_enrol_date"]	= $c->in_enrol_date;
        $course["self_enrolment"]	= $c->self_enrolment;
        $course["remoteid"]			= $c->id;
        $course["currency"]			= $c->currency;
        $course["cost"]				= $c->cost;
        $course["created_by"]		= $user->id;
        $course["guest"]			= $c->guest;
        $course["published"]		= $c->visible;

        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        $query->select($db->quoteName(array('id',
'permanent_fields')))
          ->from($db->quoteName('#__moojla_course'))
          ->where($db->quoteName('remoteid') . ' =
' . $db->quote($course["remoteid"]));
        $db->setQuery($query);
        $result = $db->loadAssocList();

        if(current($result)["id"])
        {
          $course["id"] = current($result)["id"]; //
for update rows
          if(current($result)["permanent_fields"] !=
"")
          {
            $permanent_fields =
json_decode(current($result)["permanent_fields"], true);
            foreach($permanent_fields as $field)
            {
              unset($course[$field]);
            }
            $course["permanent_fields"] =
current($result)["permanent_fields"];
          }
          $updateCount += 1;
        }
        else
        {
          $createCount += 1;
        }

        $courseModel = new MoojlaModelCourse;
        $courseModel->save($course);

        $customfields = $c->customfields;

        $cfs = array();
        foreach($customfields as $index => $cf)
        {
          $cfs['cm_' . $cf->shortname] = $cf->value;
        }

        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        $query
          ->select(array('cf.coursefield',
'cf.mcoursefields', 'f.name'))
         
->from($db->quoteName('#__moojla_course_field_mapper',
'cf'))
          ->join('INNER',
$db->quoteName('#__fields', 'f') . ' ON '
. $db->quoteName('f.id') . ' = ' .
$db->quoteName('cf.coursefield'))
          ->where($db->quoteName('f.context') . ' =
' . $db->quote('com_moojla.course'))
          ->where($db->quoteName('cf.published') . ' =
1');
        $db->setQuery($query);
        $mappings = $db->loadRowList(1);

        // $itemId = $courseModel->getItem()->id;
        $itemId = current($result)["id"];

        foreach($mappings as $index => $mapping)
        {
          $fieldId	=	$mapping[0];
          $value		=	$cfs[$index];
          define('JPATH_COMPONENT', JPATH_ADMINISTRATOR);
          $courseModel->setFieldValue($fieldId, $itemId, $value);
        }

        $params = JComponentHelper::getParams('com_moojla');
        $fetch_course_contents=
$params->get('fetch_course_contents', 0);

        if($fetch_course_contents == 1)
        {
          $dataObj = array(
            "wsfunction"          	=>
"moojla_get_course_contents",
            "moodlewsrestformat"  	=> "json",
            "courseid"				=> $course["remoteid"]
          );
          $sections =
json_decode(MoojlaHelper::sendRequestToMoodle($dataObj)->response);
          //dump($sections, "sections");
          MoojlaHelper::updateCourseContents($sections,
$course["remoteid"]);
        }
      }
      $message =
JText::_('COM_MOOJLA_COM_MOOJLA_COMPLETELY_FETCHED'); //
translate_need
      if($updateCount != 0)
      {
        $message .= '<br>' . $updateCount . ' ' .
JText::_('COM_MOOJLA_COM_MOOJLA_COURSES_UPDATED'); //
translate_need
      }
      if($createCount != 0)
      {
        $message .= '<br>' . $createCount . ' ' .
JText::_('COM_MOOJLA_COM_MOOJLA_COURSES_CREATED'); //
translate_need
      }
      // dump($courses, "courses");
    }
    else
    {
      $app = JFactory::getApplication();
      $message =
JText::_('COM_MOOJLA_COM_MOOJLA_FETCHING_ERROR'); //
translate_need
      $message .= '<br>' . $courses->exception;
      $message .= '<br>' . $courses->errorcode;
     
$app->redirect(JRoute::_("index.php?option=com_moojla&view=courses",
false), $message, 'error');
      return false;
    }



    $app = JFactory::getApplication();
   
$app->redirect(JRoute::_("index.php?option=com_moojla&view=courses",
false), $message, 'message');
    return true;
  }

  function goToSections()
  {
    $app = JFactory::getApplication();
   
$app->redirect(JRoute::_("index.php?option=com_moojla&view=sections",
false));
    return true;
  }
  function goToModules()
  {
    $app = JFactory::getApplication();
   
$app->redirect(JRoute::_("index.php?option=com_moojla&view=modules",
false));
    return true;
  }
  function goToContents()
  {
    $app = JFactory::getApplication();
   
$app->redirect(JRoute::_("index.php?option=com_moojla&view=contents",
false));
    return true;
  }

  function syncTags()
  {
    require_once JPATH_ADMINISTRATOR .
"/components/com_moojla/models/tag_instance.php";
    require_once JPATH_ADMINISTRATOR .
"/components/com_moojla/models/tag.php";
    require_once JPATH_ADMINISTRATOR .
"/components/com_tags/models/tag.php";
    require_once JPATH_ADMINISTRATOR .
"/components/com_tags/tables/tag.php";


    JLoader::register('MoojlaHelper',
JPATH_ADMINISTRATOR.'/components/com_moojla/helpers/moojla.php');
    $cid = $this->input->get('cid', array(),
'array');
    $cid = ArrayHelper::toInteger($cid);
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select($db->quoteName(array('remoteid')));
    $query->from($db->quoteName('#__moojla_course'));
    $query->where($db->quoteName('id') . ' IN ('
. implode(',', $cid ) . ')');
    $db->setQuery($query);
    $remoteids = $db->loadColumn();

    $dataObj = array(
      "wsfunction"          =>
"moojla_get_course_tags",
      "moodlewsrestformat"  => "json",
    );
    foreach($remoteids as $id)
    {
      $dataObj['courseids'][] = array('id' => $id);
    }



    // dump($dataObj, "dataObj");
    $coursesReq = MoojlaHelper::sendRequestToMoodle($dataObj);
    $tags = json_decode($coursesReq->response);

    $unique_tags = array();
    $unique_tags_id = array();
    foreach($tags as $tag)
    {
      if(!in_array(array('tagid' => $tag->tagid,
'tagname' => $tag->tagname, 'isstandard' =>
$tag->isstandard), $unique_tags))
      {
        $unique_tags[] = array('tagid' => $tag->tagid,
'tagname' => $tag->tagname, 'isstandard' =>
$tag->isstandard);
        $unique_tags_id[] = $tag->tagid;
      }
    }
    $tag_row_ids = array();

    if(!empty($unique_tags_id))
    {
      $db = JFactory::getDbo();
      $query = $db->getQuery(true);
      $query->select($db->quoteName(array('id',
'tagid','tagname')));
      $query->from($db->quoteName('#__moojla_tag'));
      $query->where($db->quoteName('tagid') . ' IN
(' . implode(',', $unique_tags_id ) . ')');
      $db->setQuery($query);
      $tag_row_ids = $db->loadAssocList('tagid');
    }

    foreach($unique_tags as $ut)
    {
      $tagObj = array();
      $tagObj["tagid"] = $ut['tagid'];
      $tagObj["tagname"] = $ut['tagname'];
      $tagObj["isstandard"] = $ut['isstandard'];
      if(isset($tag_row_ids[$ut['tagid']]))
      {
        $tagObj["id"] =
$tag_row_ids[$ut['tagid']]['id'];

        if($ut['tagname'] !=
$tag_row_ids[$ut['tagid']]['tagname'])
        {
          $db= JFactory::getDbo();
          $query= $db->getQuery(true)
            ->select($db->quoteName('id'))
            ->from($db->quoteName('#__tags',''))
           
->where($db->quoteName('title').'='.$db->quote($tag_row_ids[$ut['tagid']]['tagname']));

          $db->setQuery($query);
          $result= $db->loadObject();

          $tagModel= new TagsModelTag;
         
$tagModel->save(['title'=>$ut['tagname'],'alias'=>$ut['tagname'],'id'=>$result->id]);

        }

      }

      $tagModel = new MoojlaModelTag();
      $tagModel->save($tagObj);

    }
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select($db->quoteName(array('id',
'moojlacourse', 'moodletag')));
   
$query->from($db->quoteName('#__moojla_tag_instance'));
    $query->where($db->quoteName('moojlacourse') . '
IN (' . implode(',', $remoteids ) . ')');
    $db->setQuery($query);
    $tag_instances = $db->loadAssocList();
    

    foreach($tags as $tag)
    {
      $tagins = array();
      foreach($tag_instances as $ti)
      {
        if($ti['moodletag'] == $tag->tagid &&
$ti['moojlacourse'] == $tag->courseid)
        {
          $tagins['id'] = $ti['id'];
          break;
        }
      }
      $tagins['moodletag'] = $tag->tagid;
      $tagins['moojlacourse'] = $tag->courseid;
      $tagincModel = new MoojlaModelTag_instance();
      if(!$tagincModel->save($tagins))
      {
        //dump($tagincModel->getError(), "error");
      } 
    }
    $app = JFactory::getApplication();
    $message .= 'tag fetched'; // need translate
   
$app->redirect(JRoute::_("index.php?option=com_moojla&view=courses",
false), $message, 'success');
  }

  function fetchQuizAttempts()
  {
    $quizType = $this->input->get('quizType', '',
'string');
    $cids = $this->input->get('quizzes_list', array(),
'array');
    $cids = ArrayHelper::toInteger($cids);
    $finalres = array();
    foreach($cids as $cid)
    {
      $dataObj = array(
        "wsfunction"         
=>	"get_{$quizType}_result",
        "moodlewsrestformat"  =>	"json",
        "quizid"							=>	$cid
      );
      // print_r($dataObj);
      $results =
json_decode(MoojlaHelper::sendRequestToMoodle($dataObj)->response);
      // print_r($results);
      foreach($results as $result)
      {
        JPluginHelper::importPlugin("moojlaquiz");
        $dispatcher = JEventDispatcher::getInstance();
        $dispatcher->trigger("addQuizAttempt",
array($quizType, $result, $cid));
      }
      $finalres[]  = $results;
    }

    echo json_encode($finalres);
    die();
  }

  function getCalendarEvents()
  {
    $json = '[{"title": "جشن
تولد","start":
"2021-03-13T07:00:00"},{"title": "کلیک
برای باز کردن گوگل","url":
"http://google.com/","start":
"2021-03-28"}]';
    echo $json;
    die();
  }

  function migrateFromJoomdle()
  {
    require_once JPATH_ADMINISTRATOR .
"/components/com_moojla/models/course.php";
    JLoader::register('MoojlaHelper',
JPATH_ADMINISTRATOR.'/components/com_moojla/helpers/moojla.php');
    $cid = $this->input->get('cid', array(),
'array');
    $cid = ArrayHelper::toInteger($cid);


    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select($db->quoteName(array('remoteid')));
    $query->from($db->quoteName('#__moojla_course'));
    $query->where($db->quoteName('id') . ' IN ('
. implode(',', $cid ) . ')');
    $db->setQuery($query);
    $remoteids = $db->loadColumn();
    $counter = 0;
    foreach($remoteids as $remoteid)
    {
      $dataObj = array(
        "wsfunction"         
=>	"moojla_migrate_enrolment_method",
        "moodlewsrestformat"  =>	"json",
        "courseid"						=>	$remoteid
      );
      $results =
json_decode(MoojlaHelper::sendRequestToMoodle($dataObj)->response);
      if($results->status)
        $counter += 1;
    }
    $message =
JText::sprintf('COM_MOOJLA_S_COURSES_MIGRATED_SUCCESSFULLY',
$counter);
    $app = JFactory::getApplication();
   
$app->redirect(JRoute::_("index.php?option=com_moojla&view=courses",
false), $message, 'message');

  }

  function fetchMoojlaEnrolment()
  {
    $cid = $this->input->get('cid', array(),
'array');
    $cid = ArrayHelper::toInteger($cid);

    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select($db->quoteName(array('remoteid')));
    $query->from($db->quoteName('#__moojla_course'));
    $query->where($db->quoteName('id') . ' IN ('
. implode(',', $cid ) . ')');
    $db->setQuery($query);
    $remoteids = $db->loadColumn();

    $ids = array();
    foreach($remoteids as $remoteid)
    {
      $ids[] = ['id' => $remoteid];
    }

    $dataObj = array(
      "wsfunction"         
=>	"moojla_trigger_update_enrolment_method",
      "moodlewsrestformat"  =>	"json",
      "courseids"						=>	$ids
    );

    $results =
json_decode(MoojlaHelper::sendRequestToMoodle($dataObj)->response,
true);
    $outputs = array_column($results, 'status');
    $updated = array_sum($outputs);
    $app = JFactory::getApplication();
    $message = "";
    $message .= $updated;
    $message .= ' enrolment method fetched'; // need translate
   
$app->redirect(JRoute::_("index.php?option=com_moojla&view=courses",
false), $message, 'success');
  }
/***[/JCBGUI$$$$]***/

}