Материал: Разработка автоматизированной системы планирования и учета нарядов в подразделении для военно-учебных заведений

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Для удаления необходимо нажать изображение в виде красного креста напротив подчиненного подразделения, и данное подразделение будет удалено из системы.

Для редактирования необходимо нажать изображение в форме карандаша напротив вида записи праздника, после чего внести коррективы в форме и нажать кнопку "Сохранить".

После внесения изменений, записи в базе данных, которые содержат измененные или удаленные поля, будут также изменены.

Блок "Пользователи" выглядит следующим образом:

Рисунок 33 - Подсистема "администрирования". Блок "Пользователи"

Данный блок служит для активации новых пользователей, зарегистрированных в системе, а также для удаления существующих.

Для Активации необходимо нажать на изображение в виде зеленой галки напротив не активированного пользователя.

Для удаления нажать изображение в виде красного креста.

После внесения изменений, записи в базе данных, которые содержат измененные или удаленные поля, будут также изменены.

Заключение


Целью данной выпиской квалификационной работы являлось повысить эффективность работы должностного лица путем автоматизации процесса планирования нарядов в подразделении. В хорде работы проведен анализ методов и способов планирования и выработана оптимальная стратегия, которая легла в основу создаваемой системы. Итоговый программный продукт позволяет автоматизировать процесс планирования, тем самым повышает эффективность работы должностного лица. Особенностью, созданного программного продукта является уникальная система правил, помогающая эффективно формировать графики нарядов с учетом различных факторов. Данная система после небольшой доработки может быть использована в частях профиля института.

Список литературы


.     Предиус А.Г., Тропов И.И. Методические рекомендации по подготовке и защите выпускных и квалификационных работ.

2.      Крахмалев А.В., Щегряев Н.А. Методическое пособие по базам данных.

.        Ларри Ульма. Основы программирования на PHP.

.        Лаура Томсон, Люк Веллинг. РНР и МYSQL.

5.   ГОСТ 19.105-78. Общие требования к программным документам

6.      ГОСТ 19.201-78. Техническое задание Требования к содержанию и оформлению.

7.      ГОСТ 19.505-79. Руководство оператора. Требования к содержанию и оформлению.

Приложение 1. Установка и настройка связки Apache+PHP+MySQL


Устанавливаем Денвер. Он имеет нечто вроде ядра, или "сердца" - так называемый "базовый пакет", занимающий около 5.5 MB. Все остальное поставляется в виде пакетов расширений.

Базовый пакет содержит большинство необходимых программ и утилит:

1.   Инсталлятор (поддерживается также инсталляция на flash-накопитель).

2.      Apache, SSL, SSI, mod_rewrite, mod_php.

3.      PHP5 с поддержкой GD, MySQL, sqLite.

.        MySQL5 с поддержкой транзакций.

.        Система управления виртуальными хостами, основанная на шаблонах. Чтобы создать новый хост, вам нужно лишь добавить директорию в каталог /home, править конфигурационные файлы не требуется. По умолчанию уже поддерживаются схемы именования директорий многих популярных хостеров; новые можно без труда добавить.

.        Система управления запуском и завершением всех компонентов Денвера.

.        phpMyAdmin - система управления MySQL через Web-интерфейс.

.        Эмулятор sendmail и SMTP-сервера (отладочная "заглушка" на localhost:25, складывающая приходящие письма в /tmp в формате.eml); поддерживается работа совместно с PHP, Perl, Parser и т.д.

Запустите скачанный инсталлятор Денвера. Вы увидите перед собой нечто вроде следующего:

Рисунок 1. Окно установки "Денвер"

Вас спросят о том, в какой каталог вы хотели бы установить комплекс (по умолчанию используется C:\WebServers, вам нужно лишь нажать Enter, чтобы согласиться с этим выбором). В указанном каталоге будут расположены абсолютно все компоненты системы, и вне его никакие файлы в дальнейшем не создаются (исключая ярлыки на Рабочем столе).

Настоятельно рекомендуем вам устанавливать комплекс в каталог первого уровня - то есть, C:\WebServers, а не, например, C:\My\WebServers. Дело в том, что инсталляторы пакетов расширений ищут базовый комплект именно на первом уровне по всем дискам. И, если не находят, заставляют вас ввести имя директории вручную. Наверное, вам не нужны лишние проволочки при установке расширений?..

Далее вам предложат ввести имя виртуального диска, который будет связан с только что указанной директорией. Рекомендуем вам согласиться со значением по умолчанию (Z:). Важно, что диска с этим именем еще не должно содержаться в системе - чаще всего так и происходит с диском Z:.

После этого начнется копирование файлов дистрибутива, а под конец вам будет задан вопрос, как именно вы собираетесь запускать и останавливать комплекс. У вас есть две альтернативы:

1.   Создавать виртуальный диск при загрузке машины (естественно, инсталлятор позаботится, чтобы это происходило автоматически), а при остановке серверов его (диск) не отключать. На мой взгляд, это наиболее удобный режим, и я сам пользуюсь только им.

2.      Создавать виртуальный диск только по явной команде старта комплекса (при щелчке по ярлыку запуска на Рабочем столе). И, соответственно, отключать диск от системы - при остановке серверов.

Приложение 2. Листинг программы

<?php //logout.php if (abs(intval($_GET['act']))==1){  session_start();   include (dirname(__FILE__).'/engine/classes/UserTools.class.php');  $userTools = new UserTools();  $userTools->logout();  header("Location:/index.php"); } else{  header("Location:/index.php");  //include_once ("index.php"); } ?> <?php  /* SELECT kaf_users.id,fromId,toId,login FROM kaf_mail left outer join kaf_users on kaf_mail.fromId=kaf_users.id or kaf_mail.toId=kaf_users.id WHERE fromId = 10 OR toId=10 Group By login SELECT id,login FROM kaf_mail left outer join kaf_users on kaf_mail.fromId=kaf_users.id or kaf_mail.toId=kaf_users.id WHERE fromId = 10 OR toId=10 Group By login */  class DB {       /*  protected $db_name = 'articls';  protected $db_user = 'articls';  protected $db_pass = 'wt7jxRd5';  protected $db_host = 'localhost';*/    protected $db_name = 'kafedra';  protected $db_user = 'root';  protected $db_pass = '';  protected $db_host = 'localhost';   static $sqlCount;  public $prefix = 'kaf_';  public $say;    function __construct() {   $this->say = $this->prefix.'say';   $this->stena = $this->prefix.'stena';   $this->fotoComments = $this->prefix.'fotoComments';   $this->blogPostComments = $this->prefix.'blog_posts_comments';  }    public function whatTable ($data){     switch ($data) {    case 'say' : {$data = $this->say;break;}    case 'stena' : {$data = $this->stena;break;}    case 'foto' : {$data = $this->fotoComments;break;}     case 'blog' : {$data = $this->blogPostComments;break;}      }    return $data;    }     public function connect() {   $connection = mysql_connect($this->db_host, $this->db_user, $this->db_pass);      mysql_query('SET NAMES utf8') or header('Location: Error');   mysql_select_db($this->db_name);  return true;  }    // Берет ряд mysql и возвращает ассоциативный массив, в котором  // названия колонок являются ключами массива. Если singleRow - true,  // тогда выводится только один ряд  public function processRowSet($rowSet, $singleRow=false){   $resultArray = array();   while($row = mysql_fetch_assoc($rowSet)){    array_push($resultArray, $row); // добавить в конец массива   }   if($singleRow === true)     return $resultArray[0];  return $resultArray;  }    //Выбирает ряды из БДЯ  //Выводит полный ряд или ряды из $table используя $where   public function select($table, $where, $fields="*") {   $sql = "SELECT $fields FROM $table WHERE $where";   $this->requestsCount++;   $result = mysql_query($sql);   if(mysql_num_rows($result) == 1) {     return $this->processRowSet($result, true);}  return $this->processRowSet($result);  }  //Вносит изменения в БД  public function update($data, $table, $where) {    $this->requestsCount++;    $fields = $field_data = array();   $sql="UPDATE $table SET ";   foreach ($data as $key => $value){    $fields[] = $key;    if (is_numeric($value)){     $field_data[] = (int)$value;    }else{     $field_data[] = '"'.mysql_escape_string(trim($value)).'"';    }   }//echo $sql;   for ($i=0;$i<count($data);$i++){    $sql.=$fields[$i].'='.$field_data[$i].',';   }   $sql=substr($sql, 0, strlen($sql)-1);   $sql.= " WHERE $where";   return $this->query($sql);  }    public function query($sql){   $this->requestsCount++;   if (mysql_query($sql))return 1;   else return mysql_error();   }    public function getQuery($sql){   $this->requestsCount++;   if ($res=mysql_query($sql))return $res;   else return mysql_error();   }    public function delete($table,$where){   $this->requestsCount++;   $sql = "DELETE FROM `$table` WHERE $where";   return $this->query($sql);  }    public function count($table,$where){   $this->requestsCount++;      $sql = mysql_query("SELECT * FROM `$table` WHERE $where");         if(!$sql)return 0;         else return mysql_num_rows($sql);  }    final public function insert($table, array $data){   $this->requestsCount++;   $fields = $field_data = array();   foreach ($data as $key => $value){    $fields[] = '`'.$key.'`';    if (is_numeric($value)){     $field_data[] = (int)$value;    }else{     $field_data[] = '"'.mysql_escape_string(trim($value)).'"';    }   }  return $this->query('INSERT INTO `'.$table.'` ('.implode(',', $fields).') VALUES('.implode(',', $field_data).')');  } }  ?> <?php //Func.class.php  class Func {   public function getDate($date,$type=""){   if($type=="d"){    return date("j",$date);     }   elseif($type=="m"){    return abs(date("m",$date));      }   elseif($type=="y"){    return date("Y",$date);      }   else{    return date("d.m.y",$date);      }  }        public function russianDate($date,$type='',$year=1,$month=1,$day=1,$time=1){             if($type == 'month'){             $date=explode(".", date("d.m.Y.G:i",$date));    switch ($date[1]){     case 1: $m='Январь'; break;     case 2: $m='Февраль'; break;     case 3: $m='Март'; break;     case 4: $m='Апрель'; break;     case 5: $m='Май'; break;     case 6: $m='Июнь'; break;     case 7: $m='Июль'; break;     case 8: $m='РђРІРіСѓСЃС‚'; break;     case 9: $m='Сентябрь'; break;     case 10: $m='Октябрь'; break;     case 11: $m='РќРѕСЏР±СЂСЊ'; break;     case 12: $m='Декабрь'; break;    }              return $m;        }                 if($type=='fullAndWeek'){             $week=explode(".", date("w",$date));    switch ($week[0]){     case 1: $week='понедельник'; break;     case 2: $week='вторник'; break;     case 3: $week='среда'; break;     case 4: $week='четверг'; break;     case 5: $week='пятница'; break;     case 6: $week='суббота'; break;     case 0: $week='воскресенье'; break;    }         }         else{             $week='';         }         if($type=='week'){             $week=explode(".", date("w",$date));    switch ($week[0]){     case 1: $week='понедельник'; break;     case 2: $week='вторник'; break;     case 3: $week='среда'; break;     case 4: $week='четверг'; break;     case 5: $week='пятница'; break;     case 6: $week='суббота'; break;     case 0: $week='воскресенье'; break;    }             return $week;         }            $date=explode(".", date("d.m.Y.G:i",$date));   if($type=='short'){    switch ($date[1]){     case 1: $m='СЏРЅРІ'; break;     case 2: $m='фев'; break;     case 3: $m='мар'; break;     case 4: $m='апр'; break;     case 5: $m='мая'; break;     case 6: $m='РёСЋРЅ'; break;     case 7: $m='РёСЋР»'; break;     case 8: $m='авг'; break;     case 9: $m='сен'; break;     case 10: $m='РѕРєС‚'; break;     case 11: $m='РЅРѕСЏ'; break;     case 12: $m='дек'; break;    }   }   else {    switch ($date[1]){     case 1: $m='января'; break;     case 2: $m='февраля'; break;     case 3: $m='марта'; break;     case 4: $m='апреля'; break;     case 5: $m='мая'; break;     case 6: $m='РёСЋРЅСЏ'; break;     case 7: $m='июля'; break;     case 8: $m='августа'; break;     case 9: $m='сентября'; break;     case 10: $m='октября'; break;     case 11: $m='РЅРѕСЏР±СЂСЏ'; break;     case 12: $m='декабря'; break;    }      }            return ($day==1?abs($date[0]):null).'&nbsp;'.($month==1?$m.'&nbsp;':null).($year==1?$date[2].'':null).(!empty($week)?',&nbsp'.$week.'&nbsp':null).($time==1?$date[3]:null);  }           public function rgbToHex($rgb){         $hex = '#';         $hex .= str_pad(dechex($rgb[0]), 2, "0", STR_PAD_LEFT);         $hex .= str_pad(dechex($rgb[1]), 2, "0", STR_PAD_LEFT);         $hex .= str_pad(dechex($rgb[2]), 2, "0", STR_PAD_LEFT);         return $hex;     }          public function countOfDays($time){         $n=date("j",$time);         $n=intval($n);             $n=$time-$n*86400+1;             $res['last']=date("t",$n);                          $n=$time;             $res['now']=date("t",$n);                          $n=date("j",$time);             $n=intval($n);                         $count=date("t",$time)-$n+1;             $n=$time+$count*86400;             $res['next']=date("t",$n);         return $res;             }    public function  toArray($array) {   if (is_array($array) && !isset($array[0]))    $array = array(0=>$array);   return $array;  }    public $agencys = array (         '01' => 'MO',        );                                  Function DateDiff($date1,$date2,$interval='d') {         // получает количество секунд между РґРІСѓРјСЏ датами          $timedifference = $date2 - $date1;              switch ($interval) {             case 'w':                 $retval = bcdiv($timedifference,604800);                 break;             case 'd':                 $retval = bcdiv($timedifference,86400);                 break;             case 'h':                 $retval =bcdiv($timedifference,3600);                 break;             case 'n':                 $retval = bcdiv($timedifference,60);                 break;             case 's':                 $retval = $timedifference;                 break;                          }         return $retval;     }                              Function isHoliday($date,$holidayList=null) {         global $db;         $date=strtotime(date('d.m.Y',$date));         $week=explode(".", date("w",$date));         $isHoliday = ($week[0]==6 || $week[0]==0)?true:false;         if(!$isHoliday) {             if($holidayList==null){                 $req = $db->select($db->prefix.'holidays','unitId=0','date,everyYear');                 $req = $this->toArray($req);             }             else {                 $req = $holidayList;             }             foreach ($req AS $key => $hd){                 if($hd['date']){                     $hd['date']=strtotime(date('d.m.',$hd['date']).date('Y',time()));                                     }                 $holidays[] = $hd['date'];             }             $isHoliday = (in_array($date,$holidays)) ? true : false ;         }         return $isHoliday;     }          function getHolidayList($dateFrom,$dateTo=0){         global $db;         $dateTo = ($dateTo==0) ? time() : $dateTo;         $dateFrom=strtotime(date('d.m.Y',$dateFrom));         $dateTo=strtotime(date('d.m.Y',$dateTo));         $differDate=$this->DateDiff($dateFrom,$dateTo)+1; // разница между 2 датами         $dateFrombuf=$dateFrom;         $holDB = $this->toArray($db->select($db->prefix.'holidays','unitId=0','date,everyYear'));         for($i=0;$i<$differDate;$i++){             $this->isHoliday($dateFrombuf,$holDB) ? $holidays[]=$dateFrombuf : null;             $dateFrombuf+=86400;         }         return $holidays;     }               function options($sqlTable,$col,$selectId,$downIndex=0,$upUndex=0,$sort=''){      global $db;      unset($array);      $array=array();         $sort=(!empty($sort) ? $sort : 'id');      $array=$db->select($db->prefix.$sqlTable,"id>0 ORDER BY $sort ASC");      $array = $this->toArray($array);      $i=$downIndex;      $j=($upUndex!=0)?$upUndex:count($array);      $return= " <option value='0'></option> ";      for($i;$i<$j;$i++){       $id=$array[$i]['id'];       $selected=($id==$selectId)?"selected='selected'":"";       $value=$array[$i][$col];             $value.=(($array[$i]['isFac'])?'С„':'');       $return.= " <option>АЙДИ типа подразделения       $unit['typeTitle']=$db->select($db->prefix.'unitsType','id='.$unit['typeId']['typeId'],'title');  // тайтл (факультет/кафедра)             switch ($unit['typeId']['typeId']) {                 case 1: {$table='fucks';$unitFields='number,title,abr';break;}                 case 2: {$table='kafs';$unitFields='number,title,fuckId';break;}             }       $unit['fields']=$db->select($db->prefix.$table,'id='.$result['unitId'],$unitFields);  // получаем поля подразделения                          $result['unit']['id']=$result['unitId'];             $result['unit']['typeId']=$unit['typeId']['typeId'];             $result['unit']['typeTitle']=$unit['typeTitle']['title'];             $result['unit']['number']=$unit['fields']['number'];             $result['unit']['title']=$unit['fields']['title'];             $result['unit']['shotTitle']=$unit['fields']['number'].' '.mb_substr($unit['typeTitle']['title'],0,1);             $result['unit']['abr']=$unit['fields']['abr'];             $result['unit']['fuckId']=$unit['fields']['fuckId'];         }            $users = $result;                 foreach ($users AS $i => $us){             if($us['id']){        $ava=$userTools->checkAvatar($us['avatar']);                 $out .="                     <a href='".$site->url.$page->dosie."?id=".$us['id']."'>                         <div id='user".$us['id']."'>Январь","Февраль","Март","Апрель","Май","Июнь",        "Июль","РђРІРіСѓСЃС‚","Сентябрь","Октябрь","РќРѕСЏР±СЂСЊ","Декабрь");         if($date!=0){             $date = explode('.',date('d.m.Y',$date));             $m = $date[1];             $y = $date[2];         }        if (!isset($y) OR $y < 1970 OR $y > 2037) $y=date("Y");        if (!isset($m) OR $m < 1 OR $m > 12) $m=date("m");              $month_stamp=mktime(0,0,0,$m,1,$y);        $day_count=date("t",$month_stamp);        $weekday=date("w",$month_stamp);        if ($weekday==0) $weekday=7;        $start=-($weekday-2);        $last=($day_count+$weekday-1) % 7;        if ($last==0) $end=$day_count; else $end=$day_count+7-$last;        $today=strtotime('1.'.$m.'.'.$y);        $prev=strtotime(date('1.m.Y',mktime (0,0,0,$m-1,1,$y)));        $next=strtotime(date('1.m.Y',mktime (0,0,0,$m+1,1,$y)));         if(!empty($userId)){             $userId = abs(intval($userId));         }         if($unitId!=null){             $unitIdSQL = ' AND U.id='.abs(intval($unitId));         } else {             $unitIdSQL = '';         }        $i=0;            $arrayOfDutyTypes=$db->select($db->prefix.'dutyTypes',"id>0");      $dutyTypes = $func->toArray($arrayOfDutyTypes);  // РІРёРґС‹ нарядов РІ филиале      $arrayOfUnits=$db->select($db->prefix.'units AS U Left JOIN '.$db->prefix.'fucks AS F ON F.id=U.id Left JOIN  '.$db->prefix.'kafs AS K ON K.id=U.id Left JOIN  '.$db->prefix.'unitsType AS T ON T.id=U.typeId',                     'U.id>0 '.$unitIdSQL.' ORDER BY U.typeId,F.number,K.number ASC','F.number AS Fnum, U.id, K.number AS Knum, T.id AS Tid, T.title AS title');      $units = $func->toArray($arrayOfUnits);  // СЃРїРёСЃРѕРє подразделений         $buf=array();         foreach ($units AS $k=>$unit){             $buf[$unit['id']]['id']=$unit['id'];                    if($unit['Tid']==1){                     $buf[$unit['id']]['number']=$unit['Fnum'];                 } else{                      $buf[$unit['id']]['number']=$unit['Knum'];                 }                 $buf[$unit['id']]['number']=$buf[$unit['id']]['number'].mb_substr($unit['title'],0,1);                  $buf[$unit['id']]['title']=$unit['title'];                       }         unset($units);         $units=$buf;         $i=0;      $showDuties = array(); // вывод нарядов РЅР° календарь                $unitIdSQL = (!empty($unitId)) ? ' AND unitId='.abs(intval($unitId)) : '';      $arrayOfAllUsers=$db->select($db->prefix.'users',"id>0 AND activate=1".$unitIdSQL);      $allusers = $func->toArray($arrayOfAllUsers);  // пользователи ALL            $thisMonth['start'] =  strtotime('1.'.$m.'.'.$y);      $thisMonth['end'] = strtotime($day_count.'.'.$m.'.'.$y);      $dutiesFromDb = $db->select($db->prefix.'duty',"date BETWEEN ".$thisMonth['start']." AND ".$thisMonth['end']." ORDER BY date ASC"); // наряды РЅР° месяц РёР· базы      $dutiesFromDb = $func->toArray($dutiesFromDb);      //var_export($dutiesFromDb);      $l=0;      $userTools->getRools();      $events = array(); // массив РёР· событий(селектов)      $days = array(); // массив дней РІ которых изменены наряды         //var_export($dutiesFromDb);      for($i=1;$i<=$day_count;$i++){           if(!empty($dutiesFromDb[($l)]['dutyTypeId'])){        if($this->getDate($dutiesFromDb[($l)]['date'],"d")==$i){         $days[]=$i;                     $dateBuf = date('j',$dutiesFromDb[($l)]['date']);         while($i == $dateBuf){          //$func->getDate($dutiesFromDb[($l-1)]['date'],"d").'|';          $events[$i][]=$dutiesFromDb[$l];          $l++;                         $dateBuf = date('j',$dutiesFromDb[($l)]['date']);         }        }        else{         $events[$i]=NULL;        }       }       else{        $events[$i]=NULL;       }      }       //var_export($events);             if (isset($_GET['act']) || isset($act)) {       $act=empty($act) ? $_GET['act'] : $act; // - EDIT комендант       if($act=="edit"){        if($user->rools[0]){         for($day=1;$day<=$day_count;$day++){          $x=0;          while($dutyTypes[$x]['id']!=''){           $j=0;           $showDuties[$day].='           <div style=" clear:right">            <div style="float:left" title="'.$dutyTypes[$x]['fullTitle'].'">'.$dutyTypes[$x]['title'].'</div>             <div style="float:right;">             <select style="" name="select['.$day.'][]" id="select['.$day.'][]"><option value=""> </option>';              //while($units[$j]['id']!=''){                         foreach($units AS $k=>$v){               if(in_array($day,$days)){                for($p=0;$p<count($events[$day]);$p++){                 if($units[$k]['id']==$events[$day][$p]['unitId'] && $dutyTypes[$x]['id']==$events[$day][$p]['dutyTypeId']){                  $selected = "selected='selected'";                  break;                 }                 else{                  $selected = "";                             }                }                }               else{                $selected = "";                              }               $showDuties[$day].='<option '.$selected.' value="'.$units[$k]['id'].'">'.$units[$k]['number'].'</option>';               $j++;              }              $showDuties[$day].='             </select>                <input  type="hidden" name="dutyTypeId['.$day.'][]" id="dutyTypeId['.$day.'][]" value="'.$dutyTypes[$x]['id'].'">            </div>           </div>';           $x++;          }         }         //echo var_export($showDuties);        } // - EDIT Начальники Кафедр Рё Факульетов                        elseif($user->rools[1]){ // начКаф & начФак                    $arr='';         if(!empty($user->unit['id'])){          $arrayOfUsers=$db->select($db->prefix.'users',"unitId=".$user->unit['id'].' AND activate=1');          $users = $func->toArray($arrayOfUsers);  // пользователи для НачКафа          for($day=1;$day<=$day_count;$day++){                            $flag=false;                          for($x=0;$x<count($dutyTypes);$x++){                              for($r=0;$r<count($events[$day]);$r++){                if($user->unit['id']==$events[$day][$r]['unitId'] && $dutyTypes[$x]['id']==$events[$day][$r]['dutyTypeId']){                             $warning='';                                         if(!empty($events[$day][$r]['comment'])) {                                 $warning = '<img src="'.$tpl->url.'img/mail/warning1.gif" title="'.$events[$day][$r]['comment'].'">';                             }                                               $color = ($events[$day][$r]['userId']) ? 'blue' : 'red';                 $showDuties[$day].='                 <div style="clear:right">                  <div style="float:left;color:'.$color.'" title="'.$dutyTypes[$x]['fullTitle'].'">'.$dutyTypes[$x]['title'].'</div>                                                                <div style="float:right;">                                                 '.$warning.'                   <select style="width:90px;" name="select['.$day.'][]" id="select"['.$day.'][]"><option value=""> </option>';                    $j=0;                    while($users[$j]['id']!=''){                  if($users[$j]['id']==$events[$day][$r]['userId']){                   $selected = "selected='selected'";                  }                  else {                   $selected = "";                  }                     $showDuties[$day].='<option '.$selected.' value="'.$users[$j]['id'].'">'.$users[$j]['login'].'</option>';                     $j++;                    }                    $showDuties[$day].='                   </select>                   <input  type="hidden" name="dutyTypeId['.$day.'][]" id="dutyTypeId['.$day.'][]" value="'.$dutyTypes[$x]['id'].'">                  </div>                 </div>';                                         $flag=true;                }                                     else{                                     }               }                                 if(!$flag){                                         $showDuties[$day].='                 <div style="clear:right">                  <div style="clear:left;color:#ccc"  title="'.$dutyTypes[$x]['fullTitle'].'">'.$dutyTypes[$x]['title'].'</div>                                          </div>                                         ';                                 }                                 $flag=false;                             }          }         }          else {          echo "Укажите номер кафедры или факультета.";           }         }        else{         echo "Отказанно РІ доступе!";        }       } // - VIEW                   elseif($act=="view"){ //VIEW // - VIEW USER                    if(isset($userId)){          $uId=$userId;                     $unitIdSQL = (!empty($unitId)) ? ' AND unitId='.abs(intval($unitId)) : '';         $arrayOfDutyUser=$db->select($db->prefix.'duty',"date BETWEEN ".strtotime("1-$m-$y")." and ".strtotime("$day_count-$m-$y").$unitIdSQL." AND userId=".$uId);                  $dutyUser = $func->toArray($arrayOfDutyUser);  // наряды РЅР° пользователя                     for($day=1;$day<=$day_count;$day++){                         for($j=0;$j<count($dutyUser);$j++){                             if(strtotime("$day.$m.$y")==$dutyUser[$j]['date']){                                 $showDuties[$day]="             <div>Сегодня                             </a>                             <a>в-„&nbsp;                             </a>                             <a>в-є&nbsp;                             </a>                         </td>                         <td >Распределить автоматически                  </a>              <a>Редактировать                 </a>                             <?                }                else{                             ?>                              <a id="automaticSetDuty" onclick="automaticSetDuty('<? echo $user->role['id'];?>','<? echo strtotime('1.'.$m.'.'.$y);?>','<? echo $act; ?>')" >Распределить автоматически                  </a>                              <a  onclick="getCalendar(<? echo strtotime('1.'.$m.'.'.$y); ?>,'<? echo 'view'; ?>')">Р-акончить редактирование               </a>                              <a id="buttonSave" onclick="saveEdited(<? echo strtotime('1.'.$m.'.'.$y); ?>, 'edit')">Сохранить               </a>                             <?                }                             }                             ?>                           <!--<span>Неделя</span>                                   <span >День</span>                                   <span >РџРќ</th>                                                 <th >Р’Рў</th>                                                 <th>РЎР </th>                                                 <th>Р§Рў</th>                                                 <th>РџРў</th>                                                 <th>РЎР‘</th>                                                 <th>Р’РЎ</th>                                               </tr>                                           </thead>                                           <tbody>                                               <?                  $i=0;                                                 for($d=$start;$d<=$end;$d++) {                                                     if (!($i++ % 7)) echo ' <tr >'.$todaySelect.' " >                                                                   <div style="min-height: 150px;">                                                                       <div >цвета пользователей             foreach ($users AS $i => $us){                 while($leaves[$us['id']]['color'] == null){                     $rgb = array(rand(0,255),rand(0,255),rand(0,255));                     $color = $this->rgbToHex($rgb);                     $leaves[$us['id']]['color'] = (!in_array($color,$colors)) ? $color : null;                 }                 $leaves[$us['id']]['login']=$us['login'];                 $leaves[$us['id']]['checked']=false;                 $colors[] = $leaves[$us['id']]['color'];             }         }         unset($colors);                        $out .= '             <div id="leavesUsers" style="width:10%;float:left">             <input  type="hidden" name="post" id="post" value="'.$_SESSION["post"].'">         ';                  if(is_array($leaves)){             foreach($leaves as $userId => $value){                 if(!empty($userId)){                     $colors[$userId] = $color = $value['color'];                        $usersToSql[]=$userId;                 }                            }             $usersToSql = (is_array($usersToSql)) ? implode(',',$usersToSql) : 0;         } else {             $usersToSql=0;         }                            $date = time();         $dateNow = explode('.',date('d.m.Y',$date));         $dateFrom = strtotime('1.'.$dateNow[1].'.'.$dateNow[2]);         $leavesToCalendar = array();         if(empty($dateFrom)){             $dateTo = $dateFrom+(366*86400);           }         $year = $dateNow[2].','.($dateNow[2]+1);          $leavesFromDb = $db->select($db->prefix.'leaves AS L RIGHT JOIN '.$db->prefix.'users AS U ON U.id=L.userId', 'U.id IN ('.$usersToSql.')', 'L.*,U.id AS userId,U.login');         $leavesFromDb = $this->toArray($leavesFromDb);         //var_export($leavesFromDb);                         $days = array();         if(is_array($leavesFromDb)){             foreach($leavesFromDb as $key => $value){                 $bufDays = explode(',',$value['days']);                 $leaves[$value['userId']]['login']=$value['login'];                  $leaves[$value['userId']]['days']=$bufDays[0]!='' ? count($bufDays) : 0;                 if($leaves[$value['userId']]['checked']==true || $checkAll){                      foreach($bufDays AS $keyBufDay=>$bufDay){                         $days[$bufDay]['usersId'][]=$value['userId'];                         $days[$bufDay]['logins'][]=$value['login'];                         $days[$bufDay]['colors'][]=$colors[$value['userId']];                     }                  }                 }         }                  //var_export($leaves);         foreach($leaves as $userId => $value){              $color = $value['color'];             if($value['checked']==true ){                 $checked = "checked='true'";                     $count = $value['days'];                     } else {                 $checked = "";                             }              $count = $value['days'];               $out .="                 <div id='user".$userId."' >'             <div id="leavesCalendar" style="width:80%;float:right;">             <script type="text/javascript" src="'.$site->url.'engine/includes/js/leaves.js"></script>         '; // весь месяц         for($month=1;$month<=12;$month++){             $dateNow = explode('.',date('d.m.Y',$date));             $count = $this->countOfDays($date);             $countDays[$month] = $count['now'];                 $out .= '                      <div title="'.$dateNow[2].'" style="width:9%;float:left;border-style: solid; border-width: 1px; text-align:center;margin:1px;">                         '.$this->russianDate($date,'month').'                     </div>                 '; // месяц РЅР° СЂСѓСЃСЃРєРѕРј языке                                  $out .= '<div id="leavesDays" style="width:90%;float:left;cursor : crosshair">'; // РґРЅРё меняца                 $colWidth = 70/30;                 for($day=1;$day<=$countDays[$month];$day++){                     $dayId = strtotime($day.'.'.$dateNow[1].'.'.$dateNow[2]);                     $bgColor =  !empty($days[$dayId]['colors'][0]) ? 'background:'.$days[$dayId]['colors'][0].';' : '';                     $title =  (!empty($days[$dayId]['logins'][0]))? implode(', ',$days[$dayId]['logins']) : '';                     $out .= '                         <div title="'.$title.'" id="'.$dayId.'" style="'.$bgColor.'width:'.$colWidth.'%;float:left;border-style: solid; border-width: 1px; margin:1px;text-align:center;font-size: 8px;font-weight: bold;">                         '.date('j',$dayId).'                         </div>                     ';                                               }                 $out .= '</div>' ;                                         $date = $date+($countDays[$month]*86400);                  }         $out .= '</div>' ;           return $out;     } } ?>