diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql b/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql index 76a45210..adebb349 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql @@ -8,7 +8,7 @@ INSERT IGNORE INTO `niveau01` (`id`, `label`, `siren`) VALUES (-100, 'DRAAF', '130007107'); INSERT IGNORE INTO `user` (`id`, `niveau01_id`, `username`, `firstname`, `lastname`, `password`, `email`, `avatar`, `role`,`siren`,`authlevel`) VALUES -(-100, -100, 'admin', 'Administrateur', 'draaf', '{SSHA}9d5GfmZGEHAUq0E4rrULoubrbYBrUL0F +(-100, -100, 'admin', 'Administrateur', 'draaf', '{SSHA}AI3soJCege5aUkKULnotDIMTBrJowKYU ', 'admin@ldapbundle.ac-arno.fr', 'admin.jpg', 'ROLE_ADMIN', '130007107', 'simple'); diff --git a/src/ninegate-1.0/src/Cadoles/CronBundle/Command/InitDataCommand.php b/src/ninegate-1.0/src/Cadoles/CronBundle/Command/InitDataCommand.php index 51d5ed4e..78850123 100644 --- a/src/ninegate-1.0/src/Cadoles/CronBundle/Command/InitDataCommand.php +++ b/src/ninegate-1.0/src/Cadoles/CronBundle/Command/InitDataCommand.php @@ -149,7 +149,7 @@ class InitDataCommand extends ContainerAwareCommand $nextdate=$entity->getSubmitdate(); $nextdate->setTime(1,0); $entity->setCommand("Portal:GetLimesurvey"); - $entity->setDescription("Récupération des sondages Limesurvey "); + $entity->setDescription("Récupération des sondages Limesurvey"); $entity->setId(1010); $entity->setStatut(2); $entity->setRepeatcall(0); @@ -162,6 +162,27 @@ class InitDataCommand extends ContainerAwareCommand $this->entityManager->remove($entity); } + // Job de récupération des cours Moodle + // Toute les 6h + $activate_widmoodle = $this->getContainer()->getParameter('activate_widmoodle'); + $entity = $this->entityManager->getRepository('CadolesCronBundle:Cron')->find(1020); + if(!$entity&&$activate_widmoodle) { + $entity = new Cron; + $nextdate=$entity->getSubmitdate(); + $nextdate->setTime(1,0); + $entity->setCommand("Portal:GetMoodle"); + $entity->setDescription("Récupération des cours Moodle "); + $entity->setId(1020); + $entity->setStatut(2); + $entity->setRepeatcall(0); + $entity->setRepeatexec(0); + $entity->setRepeatinterval(21600); + $entity->setNextexecdate($nextdate); + $this->entityManager->persist($entity); + } + elseif($entity&&!$activate_widmoodle) { + $this->entityManager->remove($entity); + } $this->entityManager->flush(); } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/GetLimesurveyCommand.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/GetLimesurveyCommand.php index 8e358d57..e1379ad1 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/GetLimesurveyCommand.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/GetLimesurveyCommand.php @@ -351,7 +351,6 @@ class GetLimesurveyCommand extends Command ->setHelp('Synchronize Limesurvey') ->addArgument('cronid', InputArgument::OPTIONAL, 'ID Cron Job') ->addArgument('lastchance', InputArgument::OPTIONAL, 'Lastchance to run the cron') - ->addArgument('idcalendar', InputArgument::OPTIONAL, 'ID Calendar to synchronize') ; } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/GetMoodleCommand.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/GetMoodleCommand.php new file mode 100644 index 00000000..13ebc678 --- /dev/null +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/GetMoodleCommand.php @@ -0,0 +1,764 @@ +error = 'cURL module must be enabled!'; + trigger_error($this->error, E_USER_ERROR); + return false; + } + // the options of curl should be init here. + $this->resetopt(); + if (!empty($options['debug'])) { + $this->debug = true; + } + if(!empty($options['cookie'])) { + if($options['cookie'] === true) { + $this->cookie = 'curl_cookie.txt'; + } else { + $this->cookie = $options['cookie']; + } + } + if (!empty($options['cache'])) { + if (class_exists('curl_cache')) { + $this->cache = new curl_cache(); + } + } + } + /** + * Resets the CURL options that have already been set + */ + public function resetopt(){ + $this->options = array(); + $this->options['CURLOPT_USERAGENT'] = 'MoodleBot/1.0'; + // True to include the header in the output + $this->options['CURLOPT_HEADER'] = 0; + // True to Exclude the body from the output + $this->options['CURLOPT_NOBODY'] = 0; + // TRUE to follow any "Location: " header that the server + // sends as part of the HTTP header (note this is recursive, + // PHP will follow as many "Location: " headers that it is sent, + // unless CURLOPT_MAXREDIRS is set). + //$this->options['CURLOPT_FOLLOWLOCATION'] = 1; + $this->options['CURLOPT_MAXREDIRS'] = 10; + $this->options['CURLOPT_ENCODING'] = ''; + // TRUE to return the transfer as a string of the return + // value of curl_exec() instead of outputting it out directly. + $this->options['CURLOPT_RETURNTRANSFER'] = 1; + $this->options['CURLOPT_BINARYTRANSFER'] = 0; + $this->options['CURLOPT_SSL_VERIFYPEER'] = 0; + $this->options['CURLOPT_SSL_VERIFYHOST'] = 2; + $this->options['CURLOPT_CONNECTTIMEOUT'] = 30; + } + /** + * Reset Cookie + */ + public function resetcookie() { + if (!empty($this->cookie)) { + if (is_file($this->cookie)) { + $fp = fopen($this->cookie, 'w'); + if (!empty($fp)) { + fwrite($fp, ''); + fclose($fp); + } + } + } + } + /** + * Set curl options + * + * @param array $options If array is null, this function will + * reset the options to default value. + * + */ + public function setopt($options = array()) { + if (is_array($options)) { + foreach($options as $name => $val){ + if (stripos($name, 'CURLOPT_') === false) { + $name = strtoupper('CURLOPT_'.$name); + } + $this->options[$name] = $val; + } + } + } + /** + * Reset http method + * + */ + public function cleanopt(){ + unset($this->options['CURLOPT_HTTPGET']); + unset($this->options['CURLOPT_POST']); + unset($this->options['CURLOPT_POSTFIELDS']); + unset($this->options['CURLOPT_PUT']); + unset($this->options['CURLOPT_INFILE']); + unset($this->options['CURLOPT_INFILESIZE']); + unset($this->options['CURLOPT_CUSTOMREQUEST']); + } + /** + * Set HTTP Request Header + * + * @param array $headers + * + */ + public function setHeader($header) { + if (is_array($header)){ + foreach ($header as $v) { + $this->setHeader($v); + } + } else { + $this->header[] = $header; + } + } + /** + * Set HTTP Response Header + * + */ + public function getResponse(){ + return $this->response; + } + /** + * private callback function + * Formatting HTTP Response Header + * + * @param mixed $ch Apparently not used + * @param string $header + * @return int The strlen of the header + */ + private function formatHeader($ch, $header) + { + $this->count++; + if (strlen($header) > 2) { + list($key, $value) = explode(" ", rtrim($header, "\r\n"), 2); + $key = rtrim($key, ':'); + if (!empty($this->response[$key])) { + if (is_array($this->response[$key])){ + $this->response[$key][] = $value; + } else { + $tmp = $this->response[$key]; + $this->response[$key] = array(); + $this->response[$key][] = $tmp; + $this->response[$key][] = $value; + } + } else { + $this->response[$key] = $value; + } + } + return strlen($header); + } + /** + * Set options for individual curl instance + * + * @param object $curl A curl handle + * @param array $options + * @return object The curl handle + */ + private function apply_opt($curl, $options) { + // Clean up + $this->cleanopt(); + // set cookie + if (!empty($this->cookie) || !empty($options['cookie'])) { + $this->setopt(array('cookiejar'=>$this->cookie, + 'cookiefile'=>$this->cookie + )); + } + // set proxy + if (!empty($this->proxy) || !empty($options['proxy'])) { + $this->setopt($this->proxy); + } + $this->setopt($options); + // reset before set options + curl_setopt($curl, CURLOPT_HEADERFUNCTION, array(&$this,'formatHeader')); + // set headers + if (empty($this->header)){ + $this->setHeader(array( + 'User-Agent: MoodleBot/1.0', + 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', + 'Connection: keep-alive' + )); + } + curl_setopt($curl, CURLOPT_HTTPHEADER, $this->header); + if ($this->debug){ + echo '

Options

'; + var_dump($this->options); + echo '

Header

'; + var_dump($this->header); + } + // set options + foreach($this->options as $name => $val) { + if (is_string($name)) { + $name = constant(strtoupper($name)); + } + curl_setopt($curl, $name, $val); + } + return $curl; + } + /** + * Download multiple files in parallel + * + * Calls {@link multi()} with specific download headers + * + * + * $c = new curl; + * $c->download(array( + * array('url'=>'http://localhost/', 'file'=>fopen('a', 'wb')), + * array('url'=>'http://localhost/20/', 'file'=>fopen('b', 'wb')) + * )); + * + * + * @param array $requests An array of files to request + * @param array $options An array of options to set + * @return array An array of results + */ + public function download($requests, $options = array()) { + $options['CURLOPT_BINARYTRANSFER'] = 1; + $options['RETURNTRANSFER'] = false; + return $this->multi($requests, $options); + } + /* + * Mulit HTTP Requests + * This function could run multi-requests in parallel. + * + * @param array $requests An array of files to request + * @param array $options An array of options to set + * @return array An array of results + */ + protected function multi($requests, $options = array()) { + $count = count($requests); + $handles = array(); + $results = array(); + $main = curl_multi_init(); + for ($i = 0; $i < $count; $i++) { + $url = $requests[$i]; + foreach($url as $n=>$v){ + $options[$n] = $url[$n]; + } + $handles[$i] = curl_init($url['url']); + $this->apply_opt($handles[$i], $options); + curl_multi_add_handle($main, $handles[$i]); + } + $running = 0; + do { + curl_multi_exec($main, $running); + } while($running > 0); + for ($i = 0; $i < $count; $i++) { + if (!empty($options['CURLOPT_RETURNTRANSFER'])) { + $results[] = true; + } else { + $results[] = curl_multi_getcontent($handles[$i]); + } + curl_multi_remove_handle($main, $handles[$i]); + } + curl_multi_close($main); + return $results; + } + /** + * Single HTTP Request + * + * @param string $url The URL to request + * @param array $options + * @return bool + */ + protected function request($url, $options = array()){ + // create curl instance + $curl = curl_init($url); + $options['url'] = $url; + $this->apply_opt($curl, $options); + if ($this->cache && $ret = $this->cache->get($this->options)) { + return $ret; + } else { + $ret = curl_exec($curl); + if ($this->cache) { + $this->cache->set($this->options, $ret); + } + } + $this->info = curl_getinfo($curl); + $this->error = curl_error($curl); + if ($this->debug){ + echo '

Return Data

'; + var_dump($ret); + echo '

Info

'; + var_dump($this->info); + echo '

Error

'; + var_dump($this->error); + } + curl_close($curl); + if (empty($this->error)){ + return $ret; + } else { + return $this->error; + // exception is not ajax friendly + //throw new moodle_exception($this->error, 'curl'); + } + } + /** + * HTTP HEAD method + * + * @see request() + * + * @param string $url + * @param array $options + * @return bool + */ + public function head($url, $options = array()){ + $options['CURLOPT_HTTPGET'] = 0; + $options['CURLOPT_HEADER'] = 1; + $options['CURLOPT_NOBODY'] = 1; + return $this->request($url, $options); + } + + /** + * Recursive function formating an array in POST parameter + * @param array $arraydata - the array that we are going to format and add into &$data array + * @param string $currentdata - a row of the final postdata array at instant T + * when finish, it's assign to $data under this format: name[keyname][][]...[]='value' + * @param array $data - the final data array containing all POST parameters : 1 row = 1 parameter + */ + function format_array_postdata_for_curlcall($arraydata, $currentdata, &$data) { + foreach ($arraydata as $k=>$v) { + $newcurrentdata = $currentdata; + if (is_object($v)) { + $v = (array) $v; + } + if (is_array($v)) { //the value is an array, call the function recursively + $newcurrentdata = $newcurrentdata.'['.urlencode($k).']'; + $this->format_array_postdata_for_curlcall($v, $newcurrentdata, $data); + } else { //add the POST parameter to the $data array + $data[] = $newcurrentdata.'['.urlencode($k).']='.urlencode($v); + } + } + } + /** + * Transform a PHP array into POST parameter + * (see the recursive function format_array_postdata_for_curlcall) + * @param array $postdata + * @return array containing all POST parameters (1 row = 1 POST parameter) + */ + function format_postdata_for_curlcall($postdata) { + if (is_object($postdata)) { + $postdata = (array) $postdata; + } + $data = array(); + foreach ($postdata as $k=>$v) { + if (is_object($v)) { + $v = (array) $v; + } + if (is_array($v)) { + $currentdata = urlencode($k); + $this->format_array_postdata_for_curlcall($v, $currentdata, $data); + } else { + $data[] = urlencode($k).'='.urlencode($v); + } + } + $convertedpostdata = implode('&', $data); + return $convertedpostdata; + } + /** + * HTTP POST method + * + * @param string $url + * @param array|string $params + * @param array $options + * @return bool + */ + public function post($url, $params = '', $options = array()){ + $options['CURLOPT_POST'] = 1; + if (is_array($params)) { + $params = $this->format_postdata_for_curlcall($params); + } + $options['CURLOPT_POSTFIELDS'] = $params; + return $this->request($url, $options); + } + /** + * HTTP GET method + * + * @param string $url + * @param array $params + * @param array $options + * @return bool + */ + public function get($url, $params = array(), $options = array()){ + $options['CURLOPT_HTTPGET'] = 1; + if (!empty($params)){ + $url .= (stripos($url, '?') !== false) ? '&' : '?'; + $url .= http_build_query($params, '', '&'); + } + return $this->request($url, $options); + } + /** + * HTTP PUT method + * + * @param string $url + * @param array $params + * @param array $options + * @return bool + */ + public function put($url, $params = array(), $options = array()){ + $file = $params['file']; + if (!is_file($file)){ + return null; + } + $fp = fopen($file, 'r'); + $size = filesize($file); + $options['CURLOPT_PUT'] = 1; + $options['CURLOPT_INFILESIZE'] = $size; + $options['CURLOPT_INFILE'] = $fp; + if (!isset($this->options['CURLOPT_USERPWD'])){ + $this->setopt(array('CURLOPT_USERPWD'=>'anonymous: noreply@moodle.org')); + } + $ret = $this->request($url, $options); + fclose($fp); + return $ret; + } + /** + * HTTP DELETE method + * + * @param string $url + * @param array $params + * @param array $options + * @return bool + */ + public function delete($url, $param = array(), $options = array()){ + $options['CURLOPT_CUSTOMREQUEST'] = 'DELETE'; + if (!isset($options['CURLOPT_USERPWD'])) { + $options['CURLOPT_USERPWD'] = 'anonymous: noreply@moodle.org'; + } + $ret = $this->request($url, $options); + return $ret; + } + /** + * HTTP TRACE method + * + * @param string $url + * @param array $options + * @return bool + */ + public function trace($url, $options = array()){ + $options['CURLOPT_CUSTOMREQUEST'] = 'TRACE'; + $ret = $this->request($url, $options); + return $ret; + } + /** + * HTTP OPTIONS method + * + * @param string $url + * @param array $options + * @return bool + */ + public function options($url, $options = array()){ + $options['CURLOPT_CUSTOMREQUEST'] = 'OPTIONS'; + $ret = $this->request($url, $options); + return $ret; + } + public function get_info() { + return $this->info; + } +} +/** + * This class is used by cURL class, use case: + * + * + * + * $c = new curl(array('cache'=>true), 'module_cache'=>'repository'); + * $ret = $c->get('http://www.google.com'); + * + * + * @package core + * @subpackage file + * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class curl_cache { + /** @var string */ + public $dir = ''; + /** + * + * @param string @module which module is using curl_cache + * + */ + function __construct() { + $this->dir = '/tmp/'; + if (!file_exists($this->dir)) { + mkdir($this->dir, 0700, true); + } + $this->ttl = 1200; + } + /** + * Get cached value + * + * @param mixed $param + * @return bool|string + */ + public function get($param){ + $this->cleanup($this->ttl); + $filename = 'u_'.md5(serialize($param)); + if(file_exists($this->dir.$filename)) { + $lasttime = filemtime($this->dir.$filename); + if(time()-$lasttime > $this->ttl) + { + return false; + } else { + $fp = fopen($this->dir.$filename, 'r'); + $size = filesize($this->dir.$filename); + $content = fread($fp, $size); + return unserialize($content); + } + } + return false; + } + /** + * Set cache value + * + * @param mixed $param + * @param mixed $val + */ + public function set($param, $val){ + $filename = 'u_'.md5(serialize($param)); + $fp = fopen($this->dir.$filename, 'w'); + fwrite($fp, serialize($val)); + fclose($fp); + } + /** + * Remove cache files + * + * @param int $expire The number os seconds before expiry + */ + public function cleanup($expire){ + if($dir = opendir($this->dir)){ + while (false !== ($file = readdir($dir))) { + if(!is_dir($file) && $file != '.' && $file != '..') { + $lasttime = @filemtime($this->dir.$file); + if(time() - $lasttime > $expire){ + @unlink($this->dir.$file); + } + } + } + } + } + /** + * delete current user's cache file + * + */ + public function refresh(){ + if($dir = opendir($this->dir)){ + while (false !== ($file = readdir($dir))) { + if(!is_dir($file) && $file != '.' && $file != '..') { + if(strpos($file, 'u_')!==false){ + @unlink($this->dir.$file); + } + } + } + } + } +} + +class GetMoodleCommand extends Command +{ + private $container; + private $em; + private $output; + private $filesystem; + private $rootlog; + private $widmoodle_url; + + private function format_array_postdata_for_curlcall($arraydata, $currentdata, &$data) { + foreach ($arraydata as $k=>$v) { + $newcurrentdata = $currentdata; + if (is_object($v)) { + $v = (array) $v; + } + if (is_array($v)) { //the value is an array, call the function recursively + $newcurrentdata = $newcurrentdata.'['.urlencode($k).']'; + $this->format_array_postdata_for_curlcall($v, $newcurrentdata, $data); + } else { //add the POST parameter to the $data array + $data[] = $newcurrentdata.'['.urlencode($k).']='.urlencode($v); + } + } + } + + private function format_postdata_for_curlcall($postdata) { + if (is_object($postdata)) { + $postdata = (array) $postdata; + } + $data = array(); + foreach ($postdata as $k=>$v) { + if (is_object($v)) { + $v = (array) $v; + } + if (is_array($v)) { + $currentdata = urlencode($k); + $this->format_array_postdata_for_curlcall($v, $currentdata, $data); + } else { + $data[] = urlencode($k).'='.urlencode($v); + } + } + $convertedpostdata = implode('&', $data); + return $convertedpostdata; + } + + private function moodleAPI($client, $functionname,$params) { + $url=$this->widmoodle_url."&wsfunction=".$functionname."&moodlewsrestformat=json"; + $output = $client->post($url, $params); + + return json_decode($output); + } + + protected function configure() + { + $this + ->setName('Portal:GetMoodle') + ->setDescription('Get Datas from Moodle') + ->setHelp('Synchronize Moodle') + ->addArgument('cronid', InputArgument::OPTIONAL, 'ID Cron Job') + ->addArgument('lastchance', InputArgument::OPTIONAL, 'Lastchance to run the cron') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->container = $this->getApplication()->getKernel()->getContainer(); + $this->em = $this->container->get('doctrine')->getEntityManager(); + $this->output = $output; + $this->filesystem = new Filesystem(); + $this->moodlefile = $this->container->get('kernel')->getRootDir()."/../uploads/moodle"; + $this->rootlog = $this->container->get('kernel')->getRootDir()."/../var/logs/"; + $alias = $this->container->getParameter('alias'); + + $activate_widmoodle = $this->container->getParameter('activate_widmoodle'); + if(!$activate_widmoodle) { + $this->writeln('Widget Moodle désactivé'); + return 1; + } + + $PROXYactivate = $this->em->getRepository("CadolesCoreBundle:Config")->findOneBy(["id"=>"PROXYactivate"])->getValue(); + $PROXYserver = $this->em->getRepository("CadolesCoreBundle:Config")->findOneBy(["id"=>"PROXYserver"])->getValue(); + $PROXYport = $this->em->getRepository("CadolesCoreBundle:Config")->findOneBy(["id"=>"PROXYport"])->getValue(); + + $this->writelnred(''); + $this->writelnred('== Portal:GetMoodle'); + $this->writelnred('=========================================================================================================='); + + $now=new \DateTime('now'); + $fgdebug = false; + + // Filesystem + $fs = new Filesystem(); + + // On supprime les potentiels yml.new restant + $fs->remove($this->moodlefile.'-new'); + + + // Instance Moodle + $weburl=$this->container->getParameter('weburl'); + $widmoodle_apikey = $this->container->getParameter('widmoodle_apikey'); + $this->widmoodle_url = $this->container->getParameter('widmoodle_url')."/webservice/rest/server.php?wstoken=$widmoodle_apikey"; + if(stripos($this->widmoodle_url,"/moodle")==0) { + $this->writeln("URL = ".$this->widmoodle_url); + $weburl=$this->container->getParameter('weburl'); + $this->widmoodle_url="https://".$weburl.$this->widmoodle_url; + $PROXYactivate=false; + } + if(stripos($this->widmoodle_url,"https://".$weburl)===0) $PROXYactivate=false; + if(stripos($this->widmoodle_url,"http://".$weburl)===0) $PROXYactivate=false; + + $client= new curl(); + + // Pour chaque cours + $courses=$this->moodleAPI($client,"core_course_get_courses",[]); + foreach($courses as $course) { + + // Si le cours est visible + if($course->visible) { + /* + $capbs=["mod/lesson:grade","mod/feedback:receivemail"]; + $coursecapabilities[] = array('courseid'=> $course->id, 'capabilities' => $capbs); + $eleves=$this->moodleAPI($client,"core_enrol_get_enrolled_users_with_capability",["coursecapabilities"=>$coursecapabilities]); + */ + + // Pour chaque eleve du cours + $eleves=$this->moodleAPI($client,"core_enrol_get_enrolled_users",["courseid"=>$course->id]); + foreach($eleves as $eleve) { + $student=false; + $teacher=false; + foreach($eleve->roles as $role ) { + if($role->shortname=="student") $student=true; + if($role->shortname=="editingteacher") $teacher=true; + } + + $user = $this->em->getRepository('CadolesCoreBundle:User')->findOneBy(["username"=>$eleve->username]); + if($user) { + $url=$this->container->getParameter('widmoodle_url')."/course/view.php?id=".$course->id; + + $string ='"'.$course->id.'": {'; + $string.='"title": '.json_encode($course->fullname).','; + $string.='"url": "'.$url.'",'; + $string.='"date": "'.$course->startdate.'",'; + $string.='"description": '.json_encode($course->summary); + $string.='},'; + + if($student) + $this->filesystem->appendToFile($this->moodlefile.'-new/'.$user->getId().'/invitation.json', $string."\n"); + elseif($teacher) + $this->filesystem->appendToFile($this->moodlefile.'-new/'.$user->getId().'/course.json', $string."\n"); + } + } + } + } + + // On supprime les encours pour le remplacer le new + if($fs->exists($this->moodlefile.'-new')) { + $fs->remove($this->moodlefile); + $fs->rename($this->moodlefile.'-new',$this->moodlefile); + } + + $this->writeln(''); + return 1; + } + + + private function writelnred($string) { + $this->output->writeln(''.$string.''); + $this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n"); + } + private function writeln($string) { + $this->output->writeln($string); + $this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n"); + } +} diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/InitDataCommand.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/InitDataCommand.php index c86eca72..5bf5d33e 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/InitDataCommand.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Command/InitDataCommand.php @@ -34,6 +34,7 @@ class InitDataCommand extends ContainerAwareCommand $em = $this->getContainer()->get('doctrine')->getEntityManager(); $alias =$this->getContainer()->getParameter('alias'); $activate_widlimesurvey =$this->getContainer()->getParameter('activate_widlimesurvey'); + $activate_widmoodle =$this->getContainer()->getParameter('activate_widmoodle'); $output->writeln('PORTAL = Default Data'); @@ -63,6 +64,18 @@ class InitDataCommand extends ContainerAwareCommand $em->flush(); } + $entity = $em->getRepository('CadolesPortalBundle:Appexternal')->findoneby(["name"=>"Moodle"]); + if(!$entity&&$activate_widmoodle) { + $entity=new Appexternal; + $entity->setName("Moodle"); + $em->persist($entity); + $em->flush(); + } + elseif($entity&&!$activate_widmoodle) { + $em->remove($entity); + $em->flush(); + } + // Creation des icons $output->writeln(' > Creation Icons'); $finder = new Finder(); @@ -100,6 +113,26 @@ class InitDataCommand extends ContainerAwareCommand $em->flush(); } + $entityFlux = $em->getRepository('CadolesPortalBundle:Flux')->find(-2010); + if(!$entityFlux&&($activate_widmoodle)) { + $entityFlux = new Flux(); + $entityFlux->setRowOrder(0); + $entityFlux->setColor("f77f11"); + } + elseif($entityFlux&&!($activate_widmoodle)) { + $em->remove($entityFlux); + $em->flush(); + $entityWidget=null; + } + if($entityFlux) { + $entityFlux->setId(-2010); + $entityFlux->setTitle("Moodle"); + $entityFlux->setUrl("/".$alias."/feed/moodle/##userid##"); + $entityFlux->setMaxread(0); + $em->persist($entityFlux); + $em->flush(); + } + // Creation des pagecategory $output->writeln(' > Creation Pagecategory'); $entityPagecategory = $em->getRepository('CadolesPortalBundle:Pagecategory')->find(-100); @@ -378,8 +411,8 @@ class InitDataCommand extends ContainerAwareCommand // Widget Applications Externe $entityWidget = $em->getRepository('CadolesPortalBundle:Widget')->find(-1870); - if(!$entityWidget&&($activate_widlimesurvey)) $entityWidget = new Widget(); - elseif($entityWidget&&!($activate_widlimesurvey)) { + if(!$entityWidget&&($activate_widlimesurvey||$activate_widmoodle)) $entityWidget = new Widget(); + elseif($entityWidget&&!($activate_widlimesurvey||$activate_widmoodle)) { $pagewidgets=$entityWidget->getPagewidgets(); foreach($pagewidgets as $pagewidget) { $em->remove($pagewidget); diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/FeedController.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/FeedController.php index 1fba35c9..763a427f 100755 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/FeedController.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/FeedController.php @@ -39,4 +39,34 @@ class FeedController extends Controller $response->headers->set('Content-Type', 'application/xml; charset=utf-8'); return $response; } + + public function moodleAction($id) + { + + $directory=$this->get('kernel')->getRootDir()."/../uploads/moodle/".$id; + $feeds=[]; + $fs = new Filesystem(); + + if($fs->exists($directory."/invitation.json")) { + $file=file_get_contents($directory."/invitation.json"); + $json = substr($file, 0, -2); // sup dernier , + $surveys = json_decode("{".$json."}", true); + foreach($surveys as $id => $survey) { + array_push($feeds,[ + "id"=>$id, + "title"=>$survey["title"], + "url"=>$survey["url"], + "date"=>$survey["date"], + "description"=>$survey["description"], + "category"=>"moodle"]); + } + } + + $response = new Response($this->renderView('CadolesPortalBundle:Feed:index.xml.twig',array( + "feeds" => $feeds, + ))); + + $response->headers->set('Content-Type', 'application/xml; charset=utf-8'); + return $response; + } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php index 46884e09..23f03857 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php @@ -1542,6 +1542,27 @@ class PagewidgetController extends Controller } break; + + case "Moodle": + $category=["id"=>1,"label"=>"Moodle"]; + array_push($itemcategorys,$category); + + $directory=$this->get('kernel')->getRootDir()."/../uploads/moodle/".$user->getId(); + $files=[]; + $fs = new Filesystem(); + + if($fs->exists($directory."/course.json")) { + $file=file_get_contents($directory."/course.json"); + $json = substr($file, 0, -2); // sup dernier , + $courses = json_decode("{".$json."}", true); + if(is_array($courses)) { + foreach($courses as $id => $course) { + array_push($items,["id"=>$id,"title"=>$course["title"],"subtitle"=>"Sondage","url"=>$course["url"],"itemcategory"=>$category,"color"=>"f77f11","icon"=>"icon_moodle.png"]); + } + } + } + + break; } } } diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/config/routing.yml b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/config/routing.yml index 73198169..129bcd6a 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/config/routing.yml +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/config/routing.yml @@ -600,7 +600,9 @@ cadoles_portal_user_feed_limesurvey: path: /feed/limesurvey/{id} defaults: { _controller: CadolesPortalBundle:Feed:limesurvey } - +cadoles_portal_user_feed_moodle: + path: /feed/moodle/{id} + defaults: { _controller: CadolesPortalBundle:Feed:moodle } #== TOOL ================================================================================================================================================= diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Blog/view.html.twig b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Blog/view.html.twig index e470bcb8..8abf494f 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Blog/view.html.twig +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Blog/view.html.twig @@ -5,7 +5,7 @@ {% block pagewrapper %} {% if access=="config" %}