/**
  * get singleton instance
  *
  * @access public
  * @static
  *
  */
 public static function _getInstance()
 {
     if (self::$instance) {
         return self::$instance;
     }
     return self::$instance = new ilMediaCastSettings();
 }
 /**
  * Constructor
  * @access public
  */
 function ilObjMediaCastGUI($a_data, $a_id, $a_call_by_reference, $a_prepare_output = true)
 {
     global $ilCtrl, $lng;
     $this->type = "mcst";
     $this->ilObjectGUI($a_data, $a_id, $a_call_by_reference, $a_prepare_output);
     $lng->loadLanguageModule("mcst");
     $lng->loadLanguageModule("news");
     $ilCtrl->saveParameter($this, "item_id");
     include_once "./Modules/MediaCast/classes/class.ilMediaCastSettings.php";
     $settings = ilMediaCastSettings::_getInstance();
     $this->purposeSuffixes = $settings->getPurposeSuffixes();
     $this->mimeTypes = array();
     $mime_types = $settings->getMimeTypes();
     foreach ($mime_types as $mt) {
         $this->mimeTypes[$mt] = $mt;
     }
     include_once "./Services/Utilities/classes/class.ilMimeTypeUtil.php";
     foreach (ilMimeTypeUtil::getExt2MimeMap() as $mt) {
         $this->mimeTypes[$mt] = $mt;
     }
     asort($this->mimeTypes);
 }
 /**
  * iniitialize settings storage for media cast
  *
  */
 protected function initMediaCastSettings()
 {
     include_once 'Modules/MediaCast/classes/class.ilMediaCastSettings.php';
     $this->settings = ilMediaCastSettings::_getInstance();
 }
 /**
  * Handle the event
  *
  * @param    string        component, e.g. "Services/User"
  * @param    event         event, e.g. "afterUpdate"
  * @param    array         array of event specific parameters
  */
 public function handleEvent($a_component, $a_event, $a_parameter)
 {
     // Adds access rights for standard participants to courses
     // Only needed for Soziale Arbeit
     // create course part of code
     if ($a_component == 'Modules/Course' && $a_event == 'create') {
         $crs = $a_parameter['object'];
         //activation unlimited, not offline
         $crs->setActivationType(IL_CRS_ACTIVATION_UNLIMITED);
         $crs->setOfflineStatus(false);
         global $affected_crs;
         $affected_crs = $a_parameter['obj_id'];
     }
     // Adds access rights for standard participants to courses
     // Only needed for Soziale Arbeit
     // update course part of code
     if ($a_component == 'Modules/Course' && $a_event == 'update') {
         global $tree, $rbacreview, $rbacadmin, $affected_crs;
         $crs = $a_parameter['object'];
         $ref_id = $crs->getRefId();
         //check if new Course is in "Soziale Arbeit -> Bachelor"
         if ($affected_crs == $a_parameter['obj_id'] && in_array(4781, $obj_path = $tree->getPathId($ref_id))) {
             //Get the current access rights on the course
             $user_role = $this->_getGlobalUserRoleId();
             $local_ops = $rbacreview->getRoleOperationsOnObject($user_role, $ref_id);
             $local_ops = array_map('strval', $local_ops);
             //Get the access rights of the standard course user and remove rights that the standard user doesn't have
             $non_member_template_id = $this->__getCrsNonMemberTemplateId();
             $template_ops = $rbacreview->getOperationsOfRole($non_member_template_id, 'crs', ROLE_FOLDER_ID);
             $role_folders = array_intersect($obj_path, $rbacreview->getFoldersAssignedToRole($user_role));
             end($role_folders);
             $parent_role_folder = prev($role_folders);
             $parent_ops = $this->__getTemplatePolicies($user_role, $parent_role_folder, 'crs');
             $template_ops = $this->__intersectPolicies($template_ops, $parent_ops);
             //Get the local and the next higher policies
             $local_policies = $this->__getTemplatePolicies($user_role, $ref_id);
             $parent_policies = $this->__getTemplatePolicies($user_role, $parent_role_folder);
             $non_member_policies = $this->__getTemplatePolicies($non_member_template_id, '');
             $non_member_policies = array_values($this->__intersectPolicies($non_member_policies, $parent_policies));
             if ($local_ops == $template_ops && $local_policies == $non_member_policies) {
                 $rbacadmin->copyRoleTemplatePermissions($user_role, $parent_role_folder, $ref_id, $user_role);
                 $local_policies = $this->__getTemplatePolicies($user_role, $ref_id, 'crs');
                 $rbacadmin->grantPermission($user_role, $local_policies, $ref_id);
             }
         }
     }
     // FFMPEG Conversion of media files
     if ($a_component == 'Services/MediaObjects' && $a_event == 'update' && isset($a_parameter) && count($a_parameter) > 0 && isset($a_parameter['object'])) {
         $allMediaItems = $a_parameter['object']->getMediaItems();
         $ffmpegQueue = 'ffmpegQueue.txt';
         foreach ($allMediaItems as $media_item) {
             $filename = $media_item->location;
             include_once "./Modules/MediaCast/classes/class.ilMediaCastSettings.php";
             $settings = ilMediaCastSettings::_getInstance();
             $purposeSuffixes = $settings->getPurposeSuffixes();
             if (in_array(mb_strtolower(substr($filename, strrpos($filename, '.') + 1)), $purposeSuffixes['VideoPortable'])) {
                 global $ilUser;
                 $folder = ilObjMediaObject::_getDirectory($a_parameter['object']->getId());
                 if (substr($filename, -3) != 'mp4') {
                     $numofLines = ilHSLUObjectDefaultsPlugin::lineCount($ffmpegQueue);
                     ilUtil::sendSuccess('Ihre Datei wurde hochgeladen und wird nun in ein Streaming-kompatibles Format konvertiert. Sie werden via Mail informiert, sobald die Konvertierung abgeschlossen ist. Vor der aktuell hochgeladenen Datei hat es ' . $numofLines . ' andere in der Warteschlange. Besten Dank für Ihre Geduld.', true);
                 }
                 file_put_contents($ffmpegQueue, $folder . '/' . $filename . '|' . $folder . '/' . substr($filename, 0, strrpos($filename, '.')) . '.mp4|' . $ilUser->getEmail() . "\n", FILE_APPEND);
                 //geht nicht wegen client cache
                 //@copy('Customizing/mob_vpreview.png', $folder.'/mob_vpreview.png');
                 @chmod($folder, 0775);
                 //set new media format
                 $media_item->setFormat('video/mp4');
                 $media_item->setLocation(substr($filename, 0, strrpos($filename, '.')) . '.mp4');
                 $media_item->update();
             } else {
                 if (in_array(mb_strtolower(substr($filename, strrpos($filename, '.') + 1)), $purposeSuffixes['AudioPortable']) && substr($filename, -3) != 'mp3') {
                     global $ilUser;
                     $folder = ilObjMediaObject::_getDirectory($a_parameter['object']->getId());
                     $numofLines = ilHSLUObjectDefaultsPlugin::lineCount($ffmpegQueue);
                     ilUtil::sendSuccess('Ihre Datei wurde hochgeladen und wird nun in ein Streaming-kompatibles Format konvertiert. Sie werden via Mail informiert, sobald die Konvertierung abgeschlossen ist. Vor der aktuell hochgeladenen Datei hat es ' . $numofLines . ' andere in der Warteschlange. Besten Dank für Ihre Geduld.', true);
                     file_put_contents($ffmpegQueue, $folder . '/' . $filename . '|' . $folder . '/' . substr($filename, 0, strrpos($filename, '.')) . '.mp3|' . $ilUser->getEmail() . "\n", FILE_APPEND);
                     //geht nicht wegen client cache
                     //@copy('Customizing/mob_vpreview.png', $folder.'/mob_vpreview.png');
                     @chmod($folder, 0775);
                     //set new media format
                     $media_item->setFormat('audio/mpeg');
                     $media_item->setLocation(substr($filename, 0, strrpos($filename, '.')) . '.mp3');
                     $media_item->update();
                 }
             }
         }
     }
 }