<?
// EVENT_INSTR - на удаление, прямого обащения к классу не будет
function EVENT_POLL(){ if (!is_object($GLOBALS['EVENT_POLL'])) $GLOBALS['EVENT_POLL']=new i_event_poll();return($GLOBALS['EVENT_POLL']);}
class i_event_poll
{
   var $events_mode ;
   var $name='Опрос' ;
   var $url_page_event_create='/cab/events_poll/' ;
   var $url_page_event_card='/window/events_poll/card/' ;
   var $report_lessions_jurnal='doc_poll_lession_registr' ;   // стандартный журнал по собранию
   //var $arr_reports=array(1=>array('title'=>'Журнал регистрации сезонного инструктажа по БДД','code'=>'esmo_magnit_instruction/report_lessions_jurnal1')) ;
   var $arr_reports=array(1=>array('title'=>'Журнал опросов','code'=>'events_poll/doc_poll_lession_registr')) ;
   var $arr_allow_days=array(0=>'Все',1=>'Нечетные',2=>'Четные') ;
   var $rec_event ;
   var $rec_lession ;
   var $card_theme_title='Темы собрания' ;
   var $allow_send_invite=0 ; // разрешить отправлять сообщение о мероприятии

    var $default_settings=array('mode'=>1, //  ежегодный
                                'sanction'=>array('block_mo'=>0),
                                'message1'=>'Вы приглашены на собрание',

                               ) ;

    var $arr_status=array(0=>'',
                          1=>'Подлежит участию в опросе',
                          2=>'Принял участие в опросе',
                          3=>'Ответил на все вопросы',
                          ) ;

    var $arr_poll_status=array(0=>'Запланировано',
                              1=>'Запланировано',
                              2=>'Регистрация на собрание',
                              3=>'Идет собрание',
                              4=>'Собрание завершено'
                              ) ;

    var $arr_status_lession=array(0=>'Запланировано',
                          1=>'Идет регистрация',
                          2=>'Собрание начато',
                          3=>'Идет собрание',
                          4=>'Темы прочитаны',
                          5=>'Собрание завершено',
                          6=>'Занятие отменено'
                          ) ;

    var $arr_status_lession_person=array(0=>'',
                          1=>'Зарегистрирован в собрании',
                          2=>'Учавствует в собрании',
                          3=>'Убыл с собрания',
                          4=>'Зачет'
                          ) ;

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

    // регситрация прохождения участника контроля знаний. Вызов происходит в менент начала сесиии МО или КЗ
     // m_event::on_event_server_check_access_success
     // Перед вызовой данной функции проверяуится условия доставки контента (медиа или КЗ)
     // - терминал в группе мероприятия
     // - текущая дата подлежит расписанию
     // - участник не находится в статусе "Мероприятие пройдено"
     //
     // 1. Проверить регистрацию участника в obj_site_events_pass. Если записи еще нет - добавляем запись со статусом 1
     // 2. Открываем новую сессию КЗ, если сессия открывается в рамках МО, указываем MO_ID
     //
     //
     //

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

         //damp_array($rec_event);
         switch($rec_event['_ext_info']['moment'])
                       { case 1: $mode='after_auth' ; break ;
                         case 2: $mode='during_systolic' ; break ;
                         case 3: $mode='before_sign' ; break ;
                         default: $mode='after_auth' ; break ;
                       }
         //$moment_name=

         if ($session_info['content_view'][$mode])
         {   echo '<div class=red>В текущей сессии позиция <strong>'.$mode.'</strong> уже забронирования мероприятием ID '.$session_info['content_view'][$mode].'</div>' ;
             return ;
         }


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

     	     if (!$rec_event_pass['pkey'])
           {	 echo '<div class=green>Сотрудник еще не учавствовал в мероприятии</div>' ;
               echo 'Регистрируем участие в мероприятии<br>' ;
     	         $rec_event_pass['pkey']=adding_rec_to_table('obj_site_events_pass',$data);
     	         LOG_JSON('mo_session')->reg('register_personal_pass','Регистрируем участие в мероприятии',array('data'=>$data)) ;
           }

           $rec_session_kz=array('mo_id'   =>  ($session_info['terminal_type']=='mt')? $session_info['session_id']:0,
                               'terminal_id'   =>$session_info['terminal_id'],
                               'terminal_pkey' =>$session_info['terminal_pkey'],
                               'personal_id'   =>$session_info['personal_id'],
                               'group_id'      =>$session_info['group_id'],
                               'reader'        =>$session_info['reader'],
                               'event_id'       =>$rec_event['pkey'],
                               'pass_id'       =>$rec_event_pass['pkey'],
                               'quiestion_ids' =>$rec_event['quiestion_ids']
                             );

     	     //damp_array($rec_session_kz);

           $quiz_id=POLL()->open_poll_session($rec_session_kz,array('debug'=>1)) ; // id записи по проведению КЗ ;
           echo '<strong>Открываем сессию опроса</strong>, ID='.$quiz_id.'<br>' ; damp_array($rec_session_kz,1,-1); echo '<br>' ;
           // бронируем место для вывода
           $session_info['content_view'][$mode]=$rec_event['pkey'] ;
           echo '<div class=green>В текущей сессии забронирована позиция <strong>'.$mode.'</strong></div>' ;
         // формируем данные для терминала для выполнения КЗ через терминал
         if ($GLOBALS['LS_quiz_over_frame'])
         { $result['args']['data']['media_content'][$mode]['frame_src']=_PATH_TO_SITE.'/services/poll/session/'.$quiz_id.'/' ;
           $result['args']['data']['media_content'][$mode]['length']=(int) $GLOBALS['LS_quiz_session_timeout'] ;
          $result['args']['data']['media_content']['event_id']=(int) $rec_event['pkey'] ;
      }
         // обязательно возвращаем ID сессии - требуется для POLL()->send_email_invite
         return($quiz_id) ;
      }



    function panel_event_info() {$this->panel_params_info();}
    function panel_params_info()
    {   // данные по участникам мероприятия с учетом группы текущего аккаунта
        $arr_personals_status=EVENTS()->get_event_personals_status($this->rec_event['pkey'],array('usl'=>'(fired_data=0 or fired_data is null)')) ;
        $arr_personals_status_fired=EVENTS()->get_event_personals_status($this->rec_event['pkey'],array('usl'=>'fired_data>0')) ;
        //damp_array($arr_personals_status) ;
        $personals_count=array_sum($arr_personals_status) ;
        $personals_fired_count=array_sum($arr_personals_status_fired) ;
        $lession_personals_count=execSQL_value('select count(pkey) from obj_site_lession_persons where event_id='.$this->rec_event['pkey']) ;

        ?><table class="basic auto fz_small setting">
             <tr><th>Наименование:</th><td><?echo $this->rec_event['obj_name']?></td></tr>
             <tr><th>Дата/время собрания:</th><td><?echo date('d.m.Y',$this->rec_event['date_from'])?></td></tr>
             <?if ($this->allow_send_invite){?><tr><th>Приглашение на собрание:</th><td><?echo ($this->rec_event['_ext_info']['auto_status_2']==1)? 'Вручную':'Автоматически'?> (нет, вручную, автоматически)</td></tr><?}?>
             <?if ($this->allow_send_invite){?><tr><th>Дата начала уведомлений о собрании:</th><td><?echo ($this->rec_event['alert_from'])? date('d.m.Y',$this->rec_event['alert_from']):''?></td></tr><?}?>
             <tr><th>Условие отбора участников:</th><td><?PERSONAL()->get_personals_filter_info_to_item($this->rec_event['_reffer'])?></td></tr>
             <tr><th>Подлежат участию в собрании:</th><td><?echo $personals_count ; if ($personals_fired_count) echo '<div class="comment small">и еще '.$personals_fired_count.' в отложенном увольнении</div>'?></td></tr>
             <tr><th>Присутствующие на собрании:</th><td><?echo nl2br($this->rec_event['_ext_info']['message2'])?></td></tr>
             <tr><th><strong>ФАКТИЧЕСКИЕ ДАННЫЕ:</strong></th><td></td></tr>
             <tr><th>Статус собрания:</th><td><?echo $this->arr_status_lession[$this->rec_lession['status']]?></td></tr>
             <tr><th>Дата/время начала собрания:</th><td><?if ($this->rec_lession['time_from']) echo date('d.m.Y H:i',$this->rec_lession['time_from'])?></td></tr>
             <tr><th>Дата/время окончания собрания:</th><td><?if ($this->rec_lession['time_to']) echo date('d.m.Y H:i',$this->rec_lession['time_to'])?></td></tr>
             <tr><th>Число участников собрания:</th><td><?echo $lession_personals_count?></td></tr>
             <tr><th>Место проведения собрания:</th><td><?echo ACCOUNTS()->get_group_name($this->rec_lession['group_id'])?></td></tr>
         </table><br>
         <style type="text/css">
             table.basic.setting{}
             table.basic.setting th{text-align:left;font-weight:normal;}
             table.basic.setting td{text-align:left;font-weight:bold;font-size:15px;color:black;}
             table.basic.setting td p{text-align:left;font-weight:normal;}
         </style>
        <?
    }

   function panel_personal_info($rec_event)
   {   // данные по участникам мероприятия с учетом группы текущего аккаунта
       $arr_personals_status=EVENTS()->get_event_personals_status($this->rec_event['pkey']) ;
       $personals_count=array_sum($arr_personals_status) ;

       ?><div class="row event_info">
           <section class="col col-3">
                  <label class="label">Условие отбора участников</label>
                  <?PERSONAL()->get_personals_filter_info_to_item($rec_event['_reffer'])?>
           </section>
           <section class="col col-3">
                  <label class="label">Сотрудники</label>
                  <strong><?echo $personals_count.' '.get_case_by_count_1_2_5($personals_count,'сотрудник,сотрудника,сотрудников')?></strong>
           </section>
	  </div><?
   }

    function panel_params_edit($options=array())
      { //$arr_groups=ACCOUNTS()->get_arr_groups_to_cur_account() ;
        //  damp_array($this->rec_event) ;
        $arr_groups=ACCOUNTS()->get_arr_tree_workgroups() ;
        ?><link href="/<?echo _CLASS_?>/ext/interface/jfinder/finderjs.css" poll="all" rel="stylesheet">
            <script src="/<?echo _CLASS_?>/ext/interface/jfinder/jquery.finder.js"></script>
            <script src="/<?echo _CLASS_?>/ext/interface/jfinder/script_jfinder.js"></script>
           <div id="panel_filter">
                <form id="sky-form" class="sky-form">
                     <fieldset>
                         <h2>Информация по мероприятию</h2><br>
                         <div class="row event_info">
                               <? FORM()->filter_section_input_text('name','Наименование:',2,array('cur_value'=>addslashes($this->rec_event['obj_name']))) ;
                                  FORM()->filter_section_select_multiple('groups_ids','Место проведения опроса:',2,$arr_groups,array('cur_values'=>$this->rec_event['_ext_info']['groups_ids'])) ;
                               ?>
                               <input type="hidden" name="filter[mode]" value="5">
                               <input type="hidden" name="filter[group_id]" value="<?echo MEMBER()->cur_group_id?>">


                           </div>

                     </fieldset>

                    <? $arr_themes_ids=$this->rec_event['_ext_info']['themes_ids'] ;
                       // удаляем ID родительской темы из списка, если в списке есть её потомки
                       if (_sizeof($arr_themes_ids)) $arr_themes_ids=$this->clear_parent_themes($arr_themes_ids) ;
                       //damp_array($arr_themes_ids,1,-1) ;
                       $event_id=$this->rec_event['pkey'] ;
                    ?>

                    <label class="label">Темы контроля знаний</label>
                         <div id="current_themes"><ul>
                             <?  if (_sizeof($arr_themes_ids)) foreach($arr_themes_ids as $theme_id)
                             {   $arr=TREE('poll_themes')->get_arr_parents_names($theme_id,array('from_level'=>2)) ;
                                 $theme_full_name=implode(' / ',$arr) ;
                                 ?><li><?echo $theme_full_name?><input type="hidden" name="filter[themes_ids][<?echo $theme_id?>]" value="1"> <i class="fa fa-trash red v2" cmd="events_poll/event_poll_delete_theme" event_id="<?echo $event_id?>" theme_id="<?echo $theme_id?>"></i></li><?
                             }
                             ?>
                             </ul></div><br>
                         <div id="container_jfinder"></div> <br>
                         <div id="panel_item"></div>

                          <script type="text/javascript">
                              $j('#container_jfinder').jfinder({ upload_url:  '/services/events_poll/get_themes/',
                                                                 upload_params:  {event_id:<?echo $this->rec_event['pkey']?>},
                                                                 checkbox_name:  'filter[themes_ids]',
                                                                // element_click_cmd:  'poll/get_panel_element',
                                                                 debug:0
                                                               });
                          </script>
                    <div id="panel_buttons"><input type="submit" class="button v1" cmd="save_event" value="Сохранить" validate="form"></div>
                 </form>
          </div><br>
        <style>
              div.event_info strong{font-size:18px;font-weight:normal;}
              div#current_themes{margin-left:20px;}
              label.label.info{color:#4CAF50;font-size:12px;line-height:1.2em;margin-top:10px;}
        </style>

        <?

      }

     //  удаляем  ID родительской темы из списка, если есть потомок
    function clear_parent_themes($arr_ids)
    {  $arr_result=$arr_ids ;
       $recs=execSQL('select pkey,parent1,parent2,parent3,parent4,parent5,parent6,parent7,parent8,parent9 from poll_themes where pkey in ('.implode(',',$arr_ids).')') ;
       if (_sizeof($arr_ids)) foreach($arr_ids as $i=>$id)
        {  foreach($recs as $rec) if ($id!=$rec['pkey'])
           { if (!($id!=$rec['parent1'] and $id!=$rec['parent2'] and $id!=$rec['parent3']  and $id!=$rec['parent4']  and $id!=$rec['parent5']  and $id!=$rec['parent6']  and $id!=$rec['parent7']  and $id!=$rec['parent8']   and $id!=$rec['parent9'])) unset($arr_result[$i]) ;
           }


        }
       return($arr_result) ;
    }

    function update_personal_status_1($event_id)
    {  FILE_LOG()->append('update_personal_status_1') ;

       ob_start() ;
       $rec_event=EVENTS()->get_event_by_id($event_id) ;
       echo '<h3>Мероприятие "'.$rec_event['obj_name'].'", ID '.$rec_event['pkey'].'</h3><br>' ;

        // проверка существования таблицы $rec_event['viewer_name']
        $result=EVENTS()->event_check_existst_table($rec_event) ;
        if ($result['error']){?><div class="red"><? echo $result['error'] ?></div><?  return($result) ;}


       $result=EVENTS()->update_event_personals($event_id,array('remove_outer'=>1)) ;

       // если в мероприятии автоперевод в "направлен на инструктаж" - направляем
       if ($rec_event['_ext_info']['auto_status_2']==2) $this->set_personal_to_status_2($event_id,'') ;

       $text=ob_get_clean() ; echo $text ;

       LOGS()->reg_log('update_personal_status_1','',array('data'=>$result,'save_to_file'=>$text,'reffer'=>$rec_event['_reffer'])) ;

       return($result) ;
    }

    function set_personal_to_status_2($event_id,$personal_ids='')
      {  $rec_event=EVENTS()->get_event_by_id($event_id) ;

         $_usl=array() ;
         $_usl[]='event_id='.$event_id ;
         $_usl[]='status=1' ;
         if ($personal_ids)  $_usl[]='personal_id in ('.$personal_ids.')' ;
         $usl=implode(' and ',$_usl) ;
         $recs=execSQL('select pkey,personal_id from obj_site_events_pass where '.$usl) ;

         if (_sizeof($recs)) foreach($recs as $rec_event_pass)
         {   // отправляем ему сообщение
             $mess_rec=$this->prepare_message($rec_event,$rec_event_pass,$rec_event['_ext_info']['message1'])  ;
             $mess_reffer=PERSONAL()->message_personal_create($mess_rec) ;

             // фиксируем в записи по человеку в событии ID отправленого ему сообщения
             list($mess_id,$mess_tkey)=explode('.',$mess_reffer) ;
             $data=array('status'=>2,'mess_id'=>$mess_id) ;
             $options=array('old_status'=>1) ;
             EVENTS()->set_event_personal_data($rec_event['pkey'],$rec_event_pass['personal_id'],$data,'Отправлено сообшение о необходимости пройти инструктаж',$options) ;
         }


      }

    function prepare_message($rec_event,$rec_event_pass,$mess_text)
    { if ($rec_event['block_from']) $mess_text.=', срок до '.date('d.m.Y',$rec_event['block_from']) ;

      $mess=array('mess_text'=>$mess_text,
            'group_id'=>MEMBER()->cur_group_id,
            'account_id'=>MEMBER()->id,
            'personal_id'=>$rec_event_pass['personal_id'],
            'view_from'=>$rec_event['alert_from'],
            'view_to'=>$rec_event['alert_to'],
            //'max_day'=>$rec_event['_ext_info']['period_to_status_7'],
            'block_from'=>$rec_event['block_from'],
            'block_to'=>$rec_event['block_to'],
            'auto_close'=>$rec_event['block_to'],
            'view_mode'=>1, // показывать при прохождении МО
            'block_mo'=>$rec_event['_ext_info']['block_mo'], // блокировать прохождение МО если сообщение не будет закрыто
            'source_pkey'=>$rec_event_pass['pkey'], // ID персоны в мероприяии
            'source_tkey'=>$rec_event_pass['tkey'], // ID персоны в мероприяии
            'source_obj'=>$rec_event['ext'] // объект, которые будет использоваться в эвентах
            ) ;
      return($mess) ;
    }


   // вызывется из PERSONALS()->message_personal_set_view() ;
   function on_message_change($rec_mess,$params=array())
   { // пока не проверяем   $rec_mess['source_tkey']
     $rec_event_personal=execSQL_van('select * from view_event_personals where event_person_id='.$rec_mess['source_pkey']) ;
     if (_sizeof($rec_event_personal))
     {  switch($rec_event_personal['event_status'])
        {  // направлен на инструктаж => уведомлен
           case 2:  EVENTS()->set_event_personal_data($rec_event_personal['event_id'],$rec_event_personal['personal_id'],array('status'=>3),'Сотрудник уведомлен') ; break ;
        }
     }
   }

    function get_usl_select_workers($event_id)
    {  $usl='' ;
       //$rec_event=EVENTS()->get_event_by_id($event_id) ;
       //if ($rec_event['date_from']) $usl=' (c_data>='.$rec_event['date_from'].' or job_data>='.$rec_event['date_from'].')' ;
       return($usl) ;
    }

    function get_usl_select_personals($event_id)
    {  $usl='' ;
       //$rec_event=EVENTS()->get_event_by_id($event_id) ;
       //if ($rec_event['date_from']) $usl=' (c_data>='.$rec_event['date_from'].' or job_data>='.$rec_event['date_from'].')' ;
       return($usl) ;
    }

    function get_status_by_ids($ids,$options=array())
    { if (is_int($ids)) $ids=array($ids) ;
      if ($options['ids_in_keys']) $ids=array_keys($ids) ;
      $arr=array() ;
      if (_sizeof($ids)) foreach($ids as $id) $arr[]=$this->arr_status[$id] ;
      return(implode(',',$arr)) ;

    }

    // подпись документа

    function on_event_save_doc_signature($options=array())
    {  ob_start() ;
       $rec_doc=(_sizeof($options['rec_doc']))? $options['rec_doc']:array() ;
       echo 'pkey='.$rec_doc['pkey'].'<br>' ;
       echo 'doc_report_code='.$rec_doc['report_code'].'<br>' ;
       echo 'report_lessions_jurnal='.$this->report_lessions_jurnal.'<br>' ;
       // если документ - ведомость собрания, завершаем собрание
       if ($rec_doc['pkey'] and 'doc_'.$rec_doc['report_code']==$this->report_lessions_jurnal)
       {  $event_id=$rec_doc['source_pkey'] ;
          update_rec_in_table('obj_site_events_schedule',array('status'=>4),'pkey='.$event_id,array('debug'=>2)) ;  // 4 - Собрание завершено
          update_rec_in_table('obj_site_lession',array('status'=>5),'event_id='.$event_id,array('debug'=>2)) ;      // 5 - Занятие завершено
       }
       $text=ob_get_clean() ;
       LOGS()->reg_log('on_event_save_doc_signature',$text) ;
    }

    // обновляем статус участия в мероприятии на основании результатов мероприятия
    function update_personal_pass_status($event_id,$personal_id,$options=[])
    {  $rec_pass=execSQL_van('select * from obj_site_events_pass where event_id='.$event_id.' and personal_id='.$personal_id) ;
      // меняем статус участнику мероприятия
        if ($rec_pass['pkey'])
        {   // тут необходима проверка на полному прохождения мероприятия
          $rec_event=EVENTS()->get_event_by_id($event_id) ;
          $pass_status=2 ;

          if ($rec_event['_ext_info']['close_status']==2 or $rec_event['_ext_info']['close_status']==3)
             {   //1=>'В течении всего срока',2=>'Пока не будет задан каждый вопрос по одному разу',3=>'Пока не будет правильный ответ по одному разу'
                 // close_status=2: делаем запрос в базу на вопросы, которые еще не задавались сотруднику
                 // close_status=3: делаем запрос в базу на вопросы, на которые сотрудник еще ни разу правильно не отвечал
                 $usl_check=($rec_event['_ext_info']['close_status']==3)? 'and correct=1':'' ;


                 $arr=get_dates_of_quarter();
                 var_dump($arr) ; echo '<br>' ;
                 //echo $arr['start']->date.'<br>' ;
                 //echo strtotime($arr['start']->date).'<br>' ;

                 $now=getdate() ; $time_from=0 ;

                 switch($rec_event['_ext_info']['close_period'])
                 { case 2: $time_from=mktime(0,0,0,$now['mon'],1,$now['year']); break ; // c первого числа этого месяца
                   case 3: $time_from=strtotime($arr['start']->date) ;
                           break ;
                   case 4: $time_from=mktime(0,0,0,1,1,$now['year']); break ; // с первого числа этого года
                   case 5: $time_from=mktime(0,0,0,$now['mon'],$now['mday'],$now['year']); break ;// с нуля часов сегодня
                   case 6: $time_from=mktime($now['hours'],0,0,$now['mon'],$now['mday'],$now['year']); break ;// с нуля минут сегодня текущий час
                 }
                 echo 'close_status='.POLL()->arr_events_close_status[$rec_event['_ext_info']['close_status']].'<br>' ;
                 echo 'close_period='.POLL()->arr_events_close_period[$rec_event['_ext_info']['close_period']].'<br>' ;
                 echo '$time_from='.date('d.m.Y H:i',$time_from).'<br>' ;
                 $usl_time=($time_from)? ' and t2.c_data>='.$time_from:'' ;



                 $recs_question=execSQL('select t1.* 
                                           from poll_questions t1
                                           left join poll_result t2 on t2.question_id=t1.pkey and t2.event_id='.$event_id.' and t2.personal_id='.$personal_id.$usl_check.$usl_time.'  
                                           where t2.pkey is null  
                                         ') ;
                 if (!_sizeof($recs_question)) $pass_status=3 ;
                 echo 'Число вопрсов, которые еще не были заданы: '._sizeof($recs_question).'<br>' ;

             }
          echo 'Статус участия в мероприятии: '.$pass_status.'<br>' ;
          EVENTS()->set_event_personal_data_by_id($rec_pass['pkey'],array('status'=>$pass_status),'Проврка статуса участия в мероприятии') ;
        }

	}



}

?>
