<?
// EVENT_INSTR - на удаление, прямого обащения к классу не будет
function EVENT_MEDIA(){ if (!is_object($GLOBALS['EVENT_MEDIA'])) $GLOBALS['EVENT_MEDIA']=new i_event_media();return($GLOBALS['EVENT_MEDIA']);}
class i_event_media
{
   var $events_mode ; // переодичность инструктажа
   var $name='Доведение контента' ; //
   var $url_page_event_create='/cab/events_media/' ;
   var $url_page_event_card='/window/events_media/card/' ;
   var $rec_event ;
   var $reffer ;
   var $arr_moment=array(1=>'После авторизации',2=>'Во время измерения давления',3=>'Перед подписью') ;
   var $arr_select_content_mode=array(1=>'По порядку следования',2=>'Случайным порядком') ;
   var $arr_mo_content_mode=array(1=>'Один контент из списка',2=>'Весь список контента') ;
   var $arr_full_content_mode=array(1=>'Один контент из списка',2=>'Весь список контента',3=>'Весь срок действия мероприятия') ;
   var $arr_allow_days=array(0=>'Все',1=>'Нечетные',2=>'Четные') ;

	var $default_settings=array('name'=>'Доведение контента', //  ежегодный
	                            'dyn_pass'=>1,
	                            'type'=>6,
	                            'mode'=>6,
	                            'ext'=>'events_media/i_event_media'
	                            ) ;

    var $arr_status=array(0=>'Контент не доведен',
                          1=>'Контент отправлен',
                          2=>'Контент доведен частично',
                          3=>'Контент доведен'
                          ) ;

   function get_url_event_card($id)
   {
     return('/window/events_media/card/'.$id.'/') ;
   }


    function update_personal_status_1($event_id,$count=100)
    {
    }

    //
    function check_allow_append_personal($event_id,$personal_id)
    {
    }




   // нет необходимости, так как event_pass_status автоматисески изменятся при измении статусов связанных сообщений
   // а в самом event_pass не хранятся данные по срокам сдачи документа - они  есть только в связанном сообщении
   function update_personal_event_status()
   {   //$event_ids=execSQL_line('select pkey from obj_site_events_schedule where clss=222 and ext="events_media/i_event_media"') ;
       //if ($event_ids) execSQL_update('update obj_site_events_pass set status=4 where event_id in ('.implode(',',$event_ids).') and status in (1,2) and close_data<'.time(),2) ;
   }



    function reg_content_file($event_id,$data)
     { // сохраеям файл в директорию медиаконтента
       $storage_file='/'.$GLOBALS['LS_storage'].'/media_content/'.ENGINE()->get_doc_dir() ;
       DISK()->check_dir(_DIR_TO_ROOT.$storage_file) ;
       $from=$data['obj_name'];
       $to=$storage_file.basename($from) ;
       rename(_DIR_TO_ROOT.$from,_DIR_TO_ROOT.$to) ;
       // создаем запись в БД
       $data['clss']=229 ;
       $data['parent']=0 ;
       $data['event_id']=$event_id ;
       $data['obj_name']=basename($from) ;
       $data['file_name']=hide_server_dir($to) ;
       $data['account_id']=MEMBER()->id ;
       $data['len']=10 ;
       $data['moment']=1 ;
       // получаем свойства файла

       $data['size']=filesize(_DIR_TO_ROOT.$to) ;
       $data['type']=mime_content_type(_DIR_TO_ROOT.$to) ;
       if (strpos($data['type'],'image')!==false)
       {  $image_size=@getimagesize(_DIR_TO_ROOT.$to) ;
          $data['width']=$image_size[0] ;
          $data['height']=$image_size[1] ;
       }

       //$file_info=get_file_info(_DIR_TO_ROOT.$to,basename($to)) ;
       //damp_array($file_info) ;
       $file_reffer=adding_rec_to_table('media_content',$data,array('debug'=>0,'return_reffer'=>1)) ;
       LOGS()->reg_log('Добавление контента мероприятия',$data['obj_name'],array('reffers'=>[$file_reffer,$this->reffer])) ;
       return($file_reffer) ;
     }

    function reg_content_text($event_id,$text)
     { $data['clss']=5 ;
       $data['parent']=0 ;
       $data['event_id']=$event_id ;
       $data['manual']=$text ;
       $data['account_id']=MEMBER()->id ;
       $data['type']='text' ;
       $data['len']=10 ;
	   $data['moment']=1 ;
       $file_reffer=adding_rec_to_table('media_content',$data,array('debug'=>0,'return_reffer'=>1)) ;
       LOGS()->reg_log('Добавление контента мероприятия',$data['obj_name'],array('reffers'=>[$file_reffer,$this->reffer])) ;
       return($file_reffer) ;
     }

     function delete_content($event_id,$content_ids)
     {
         execSQL_update('delete from media_content where event_id='.$event_id.' and pkey in ('.implode(',',array_keys($content_ids)).')') ;
     }

     function add_personals_to_event($event_id,$personals_ids,$options=array())
     {

     }

     function register_personal_pass($rec_event,&$session_info,&$result)
     {   echo 'Начинаем регистрацию мероприятия <strong>'.$rec_event['obj_name'].'</strong> [доведение медиаконтента]<br>' ;
	     $group_id=$session_info['group_id'] ;
         $rec_event_pass=execSQL_van('select * from obj_site_events_pass where personal_id='.$session_info['personal_id'].' and event_id='.$rec_event['pkey']) ;

	     if (!$rec_event_pass['pkey'])
         {	 echo '<strong>Регистрируем участие в мероприятии</strong><br>' ;

	         $data=array(   'clss'=>223,
	                        'indx'=>1,
	                        'event_id'=>$rec_event['pkey'],
	                        'personal_id'=>$session_info['personal_id'],
	                        'account_id'=>0,
	                        'group_id'=>$group_id,
	                        'status'=>1,  // направлен на доведение контента - контент отправлен на терминал
	                       ) ;

	         $rec_event_pass['pkey']=adding_rec_to_table('obj_site_events_pass',$data);
	         LOGS()->reg_log('register_personal_pass','',array('data'=>$data)) ;
         }
	     else
	     {   $data=array('group_id'=>$group_id) ;
	     	 echo '<strong>Обновляем запись по участию в мероприятии</strong><br> ID='.$rec_event_pass['pkey'].': '.print_r($data,true).'<br>';
		     update_rec_in_table('obj_site_events_pass',$data,'pkey='.$rec_event_pass['pkey']);
		     LOGS()->reg_log('update_personal_pass','',array('data'=>$data)) ;
	     }

		  // получаем список контента, который уже был просмотрен - стоит по этому мероприятию в статусе 3
	      echo 'Список контента, который уже был просмотрен: ' ;
	      $rec_media_content_view_prev=execSQL_line('select content_id from media_content_view where event_id='.$rec_event['pkey'].' and personal_id='.$session_info['personal_id'].' and status=3') ;
	      echo (_sizeof($rec_media_content_view_prev))? implode(', ',$rec_media_content_view_prev):'-' ; echo '<br>' ;


          // получаем произвольную запись по контенту мероприятия
          // в мероприятии может быть несколько контентов, показываемых в разное время
          // в настройках мероприятия указывается, что является условием прохождения мероприятия
          // - полный просмотр всех контентов мероприятия
          // - просмотр минимальной длительности всех контентов
          // - полный просмотр одного из контентов
          // - просмотр минимальной длительности одного из контента
	      $ext_info=$rec_event['_ext_info'] ;
	      //damp_array($ext_info,1,-1);
	      $_usl=array() ;
	      $_usl[]='event_id='.$rec_event['pkey'] ;
	      if (_sizeof($rec_media_content_view_prev) and $ext_info['full_content_mode']!=3) $_usl[]='not pkey in ('.implode(',',$rec_media_content_view_prev).')' ;
	      $usl=implode(' and ',$_usl) ;
          $limit=($ext_info['mo_content_mode']==1)? 'limit 1':'' ;
          $order=($ext_info['select_content_mode']==2 or $ext_info['full_content_mode']==3)? 'order by rand()':'order by indx' ;
	      echo 'Список контента, который еще не был просмотрен: ' ;
          $recs_content=execSQL('select * from media_content where '.$usl.' '.$order.' '.$limit) ;
          echo (_sizeof($recs_content))? implode(', ',array_keys($recs_content)):'-' ; echo '<br>' ;
          echo 'Получено <strong>'._sizeof($recs_content).'</strong> записей контента по текущему мероприятию<br>' ;

          // вписосывает в запись по сотруднику поле необходимости доведения контента
          if (_sizeof($recs_content)) foreach($recs_content as $rec_content)
          {	  switch($rec_content['moment'])
              { case 1: $mode='after_auth' ; break ;
                case 2: $mode='during_systolic' ; break ;
                case 3: $mode='before_sign' ; break ;
                default: $mode='after_auth' ; break ;
              }

              if (!$session_info['content_view'][$mode])
              {  //   создаем запись в таблице  media_content_view
	          $data=array('event_id'=>$rec_event['pkey'],
	          	          'personal_id'=>$session_info['personal_id'],
	          	          'pass_id'=>$rec_event_pass['pkey'],
	          	          'content_id'=>$rec_content['pkey'],
                        //'length'=>$rec_content['len'],
	          	          'mo_id'=>$session_info['session_id'],
	          	          'status'=>0, // контент подготовлен для показа на терминале
	          	          'indx'=>1,
	          	       ) ;


	          $content_view_id=adding_rec_to_table('media_content_view',$data) ;
                  echo '<span class="green">Добавлена запись в таблицу media_content_view</span>, ID='.$content_view_id.'<br>' ;

              $result['args']['data']['media_content']['pass_id']=(int) $rec_event_pass['pkey'] ;
              // вся передача контента только через фреймы
              if ($rec_content['pkey'])
              { $result['args']['data']['media_content'][$mode]['frame_src']=_PATH_TO_SITE.'/services/events_media/content/'.$content_view_id.'/' ;
                $result['args']['data']['media_content'][$mode]['length']=(int) $rec_content['len'] ;
                $result['args']['data']['media_content'][$mode]['media_id']=(int) $rec_content['pkey'] ;
                $result['args']['data']['media_content'][$mode]['content_view_id']=(int) $content_view_id ;
                $result['args']['data']['media_content']['event_id']=(int) $rec_event['pkey'] ;
              }

                  $session_info['content_view'][$mode]=$rec_event['pkey'] ;
              }
              else echo '<div class=red>В текущей сессии позиция <strong>'.$mode.'</strong> уже забронирования мероприятием ID '.$session_info['content_view'][$mode].'</div>' ;
          }
          else
          { echo 'Весь контент просмотрен - участие в мероприятии дожно быть закрыто<br>' ;
	        //EVENTS()->set_event_personal_data($rec_event['pkey'],$rec_personal['pkey'],array('status'=>3),'Весь медиаконтен доведен') ;
          }
          damp_array($result['media_content'],1,-1) ;
     }

}

?>
