<?

class c_services_poll_operation
{
    function show()
    {
        $data=$this->prepare_data();
        echo json_encode($data,JSON_UNESCAPED_UNICODE);
    }

    function prepare_data()
    {
        $t1=fixed_time();
        $rec_poll=array();
        ob_start();
        //$ids=explode(',',$_GET['id']) ;  $result=array()
        // передаем ID записи сесиии POLL из таблицы poll_sessions
        $poll_id=(int)$_GET['id'];
        $result=array();
        if($poll_id) $rec_poll=POLL()->get_poll_by_id($poll_id);

        //damp_array($rec_poll);

        if($rec_poll['pkey'])
        {

            //$main_event_pass=$ids[array_rand($ids)];
            $rec_event_pass=execSQL_van('select * from obj_site_events_pass where pkey='.$rec_poll['pass_id']);

            //if (!$rec_event_pass['pkey']) return(array('error'=>'event pass #'.$main_event_pass.' not found')) ;
            $rec_event=EVENTS()->get_event_by_id($rec_event_pass['event_id']);
            if(!$rec_event_pass['pkey']) return (array('error'=>'event ID '.$rec_event_pass['event_id'].' not found'));
            //damp_array($rec_event_pass) ;
            $themes_ids=$rec_event['_ext_info']['themes_ids'];  // $themes_ids=Array (4) ;

            if (_sizeof($themes_ids))
            {
                $rec_theme=POLL()->get_theme_by_id($themes_ids[0]) ;
                $rec_personal=PERSONAL()->get_personal_by_id($rec_event_pass['personal_id']) ;
                //damp_array($rec_theme);
                // проверяем что тема связана с мероприятием - тогда надо брать только те разделы темы, что касаются данного сотрудника
                if ($rec_theme['event_id'] and $rec_theme['event_id']==$rec_event_pass['event_id'])
                { $check_rasdels=execSQL('select * from poll_themes where parent='.$rec_theme['pkey'].' and filter!="" and not filter is null') ;
                  $ball_max=0 ; $section_select=0 ;
                  if (_sizeof($check_rasdels)) foreach($check_rasdels as $rec_rasdel)
                  {    echo 'Мероприятие "<strong>'.$rec_event['obj_name'].'</strong>" тема <strong>'.$rec_theme['obj_name'].'</strong> раздел <strong>'.$rec_rasdel['obj_name'].'</strong> - проверка условия отбора сотрудников для раздела темы опросов' ;
                       $res=EVENTS()->check_select_filter_to_personal($rec_rasdel['filter'],$rec_personal) ;
                       $ball_allow=$res['ball'] ;
                       if ($ball_allow>$ball_max)
                       { $ball_max=$ball_allow ;
                         $section_select=$rec_rasdel['pkey'] ;
                       }
                       if ($ball_allow)
                       {   //$rec_event_theme=$rec_event ;
                           //$rec_event_theme['theme_id']=$rec_theme['pkey'] ;
                           //$rec_event_theme['theme_name']=$rec_theme['obj_name'] ;
                           //$rec_event_theme['rasdel_id']=$rec_rasdel['pkey'] ;
                           //$rec_event_theme['rasdel_name']=$rec_rasdel['obj_name'] ;
                           //$rec_event_theme['filter']=$rec_rasdel['filter'] ;
                           //$rec_event_theme['info_filter']=$rec_rasdel['info_filter'] ;
                           //$rec_event_theme['ball']=$ball_allow+10 ; // даем еще +10 так как специальные мероприятия важнее
                           //$event_union[]=$rec_event_theme ;
                           echo ' - <span class=green>Сотрудник входит в условия отбора, мероприятие+тема добавлено в список с баллом <strong>'.$ball_allow.'</strong></span>, совпадение по '.implode(',',$res['info']).'<br>' ;
                       }
                       else echo ' - <span class=red>Сотрудник не входит в условия отбора, раздел темы отклонен</span><br>' ;
                  }
                  //print_2x_arr($event_union);
                  echo '$section_select='.$section_select.'<br>' ;
                  $themes_ids=array($section_select) ;
                }
            }

            echo '$themes_ids='.print_r($themes_ids,true).'<br>' ;
            if(!_sizeof($themes_ids)) return (array('error'=>'event ID '.$rec_event_pass['event_id'].', themes not found'));
            $themes_id=$themes_ids[array_rand($themes_ids)];
            if(_sizeof($themes_ids))
            {
                $str_ids=implode(',',$themes_ids);
                // получаем все разделы которые внутри указанной темы/раздела или сам раздел
                $recs_rasdels=execSQL_line('select pkey from poll_themes where pkey in ('.$str_ids.') or parent1 in ('.$str_ids.') or parent2 in ('.$str_ids.')  or parent3 in ('.$str_ids.')  or parent4 in ('.$str_ids.')  or parent5 in ('.$str_ids.')  or parent6 in ('.$str_ids.')  or parent7 in ('.$str_ids.')  or parent8 in ('.$str_ids.') or parent9 in ('.$str_ids.')',2,1);
                //$use_rasdel=$recs_rasdels[array_rand($recs_rasdels)] ;
                //echo '$use_rasdels='.$use_rasdel.'<br>' ;
                if(!_sizeof($recs_rasdels)) return (array('error'=>'event ID '.$rec_event_pass['event_id'].', theme ID '.$themes_id.' not found'));

                //$arr=TREE('poll_themes')->get_arr_parents_names($use_rasdel) ;
                //$theme_full_name=implode(' / ',$arr) ;

                $result['poll']=array();
                $result['poll']['id']=(string)$poll_id;
                $result['poll']['title']=$rec_event['obj_name']; //$theme_full_name ;
                $result['poll']['min_questions']=(int)$GLOBALS['LS_poll_question_count'];
                $result['poll']['max_errors']=(int)$GLOBALS['LS_poll_question_count'];
                if($GLOBALS['LS_poll_timeout_enable']) $result['poll']['correct_answer_timeout']=(int)$GLOBALS['LS_poll_correct_answer_timeout'];
                if($GLOBALS['LS_poll_timeout_enable']) $result['poll']['incorrect_answer_timeout']=(int)$GLOBALS['LS_poll_incorrect_answer_timeout'];

                $recs_question=array();


                //  если передан конкретный список вопросов - выбираем его
                if($_GET['q']) $recs_question=execSQL('select * from poll_questions where pkey in ('.$_GET['q'].') limit '.$GLOBALS['LS_poll_question_count'],1);
                elseif($rec_poll['quiestion_ids']) $recs_question=execSQL('select * from poll_questions where pkey in ('.$rec_poll['quiestion_ids'].') limit '.$GLOBALS['LS_poll_question_count'],1);
                // выбираем вопросы из всего перечня тем
                elseif ($rec_event['_ext_info']['close_status']==2 or $rec_event['_ext_info']['close_status']==3)
                {
                    // делаем запрос в базу на вопросы, которые еще не задавались сотруднику
                    //1=>'В течении всего срока',2=>'Пока не будет задан каждый вопрос по одному разу',3=>'Пока не будет правильный ответ по одному разу'
                    // close_status=2: делаем запрос в базу на вопросы, которые еще не задавались сотруднику
                    // close_status=3: делаем запрос в базу на вопросы, на которые сотрудник еще ни разу правильно не отвечал
                    echo 'close_status='.$rec_event['_ext_info']['close_status'].', ';
                    if($rec_event['_ext_info']['close_status']==2) echo 'делаем запрос в базу на вопросы, которые еще не задавались сотруднику<br>';
                    if($rec_event['_ext_info']['close_status']==3) echo 'делаем запрос в базу на вопросы, на которые сотрудник еще ни разу правильно не отвечал<br>';
                    //$usl_check=($rec_event['_ext_info']['close_status']==3)? 'and correct=1':'';

                    $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=mktime(0,0,0,$now['mon']-3,1,$now['year']); 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_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:'' ;


                    if(_sizeof($themes_ids))
                    {   $_usl=[] ;
                        $_usl[]='t1.parent in ('.implode(',',$recs_rasdels).')' ;
                        $_usl[]='t2.pkey is null' ;
                        $usl_select=implode(' and ',$_usl) ;

                        $recs_question=execSQL('select t1.* 
                                      from poll_questions t1
                                      left join poll_result t2 on t2.question_id=t1.pkey and t2.event_id='.$rec_event['pkey'].' and t2.personal_id='.$rec_event_pass['personal_id'].$usl_check.$usl_time.'   
                                      where '.$usl_select.'  
                                      order by rand() limit '.$GLOBALS['LS_poll_question_count'].'
                                    ',2);
                    }
                }

                if(!_sizeof($recs_question))
                {
                    $recs_question=execSQL('select * from poll_questions where parent in ('.implode(',',$recs_rasdels).') order by rand()  limit '.$GLOBALS['LS_poll_question_count'],1);
                }

                if(_sizeof($recs_question))
                {
                    $recs_answers=execSQL('select * from poll_answers where question_id in ('.implode(',',array_keys($recs_question)).')',1);
                    $recs_contents=execSQL('select * from poll_content where question_id in ('.implode(',',array_keys($recs_question)).')',1);
                    $recs_answers_by_question=group_by_field('question_id',$recs_answers);
                    $recs_contents_by_question=group_by_field('question_id',$recs_contents);
                    foreach($recs_question as $rec_question)
                    {
                        $data_question=array('id'=>$rec_question['pkey'],'text'=>mb_str_replace(["\t","\n","\r"],"",$rec_question['obj_name'].' ['.$rec_question['pkey'].']'),'images'=>array(),'video'=>array(),'answers'=>array());
                        if($GLOBALS['LS_poll_timeout_enable'])
                        {
                            if($rec_question['timeout']) $data_question['timeout']=(int)$rec_question['timeout'];
                            else $data_question['timeout']=(int)$GLOBALS['LS_poll_answer_timeout'];
                        }

                        if(_sizeof($recs_contents_by_question[$rec_question['pkey']])) foreach($recs_contents_by_question[$rec_question['pkey']] as $rec_content)
                        {
                            if(file_exists(_DIR_TO_ROOT.$rec_content['dir'].$rec_content['file_name']))
                            {
                                $content=file_get_contents(_DIR_TO_ROOT.$rec_content['dir'].$rec_content['file_name']);
                                $data_question['images'][]='data:'.$rec_content['type'].';base64,'.base64_encode($content);
                            }
                        }

                        if(_sizeof($recs_answers_by_question[$rec_question['pkey']])) foreach($recs_answers_by_question[$rec_question['pkey']] as $rec_answer)
                        {
                            $data_answer=array('id'=>$rec_answer['pkey'],'text'=>mb_str_replace(["\t","\n","\r"],"",$rec_answer['obj_name']),'correct'=>($rec_answer['status'])? true:false);
                            $data_question['answers'][]=$data_answer;
                        }

                        $result['poll']['questions'][]=$data_question;
                    }
                }
            }
        }
        else $result['error']='incorrect poll_id ['.$poll_id.']';
        $debug=ob_get_clean();
        //echo $debug ;
        $t2=fixed_time($t1);
        //LOGS()->reg_log('c_services_poll_operation',$debug) ;
        //damp_array($result,1,-1) ;
        LOG_JSON('mo_session')->reg('services poll content',$debug);
        $log_fname=($rec_poll['mo_id'])? 'mo_trace_'.$rec_poll['mo_id']:'mo_trace_'.$rec_poll['pkey'];
        LOG_JSON('mo_session')->flush($log_fname,array('reg_log'=>1,'comment'=>'Подгрузка контента POLL на терминал [/services/poll/operation/]'));

        if($GLOBALS['LS_trace_term'])
        {
            $text_json_out=(is_array($result) and _sizeof($result))? json_encode($result,JSON_UNESCAPED_UNICODE):'';
            LOGS()->log_request($_SERVER['REMOTE_ADDR'],$_SERVER['SERVER_ADDR'],'poll','',$text_json_out,array('terminal_id'=>0,'personal_id'=>$rec_event_pass['personal_id'],'mo_id'=>$rec_poll['mo_id'],'size1'=>0,'size2'=>strlen($text_json_out),'time_exec'=>$t2,'request_UID'=>0,'request_debug'=>$debug,'req_type'=>0,'req_url'=>$_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['SERVER_ADDR'].$_SERVER['REQUEST_URI']));
        }

        return ($result);
    }
}

?>
