Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Автоматизация системы контроля самостоятельной работы студентов

Автоматизация системы контроля самостоятельной работы студентов


Руководство пользователя

Пользователи данного программного комплекса могут:

ѕ Записывать свою активность в ходе работы как «онлайн» так и «оффлайн»;

ѕ Загружать собранные данные на сервер;

ѕ Просматривать на web-сайте информацию о сессиях по каждому проекту;

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

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

Для регистрации выбираем пункт меню «Регистрация» (1) (см. рис. А.1). студент программный контроллер timetracker

Рис. А.1. Главная страница

Далее отображается страница регистрации (см. рис. А.2)

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

Рис. А.2. Регистрационный блок

Если пользователь уже зарегистрирован, он должен авторизоваться. Для этого на главной странице необходимо выбрать пункт «Войти»(2) (см. рис. А.1), после чего появится форма авторизации (см. рис. А.3)

Рис. А.3. Форма авторизации

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

Получив права администратора от главного администратора необходимо создать проект. Для этого следует выбрать пункт меню «Проекты - > Создать проект»(1)( см. рис. А.4.).

Рис. А.4.Меню администратора

После этого откроется форма для создания проекта ( см. рис. А.5.). Заполнив все поля и нажав на кнопку «Создать проект», администратор создаст новый проект, при этом в сам он будет записан как создатель этого проекта. Помеченные поля являются обязательными для заполнения.

Рис. А.5. Создание проекта

Затем администратору следует зайти на страницу управления проектом ( см. рис. А.6.). Здесь создатель проекта может добавить новых пользователей, удалить старых, просмотреть график активности пользователей в общем и отдельно по каждому пользователю за каждый день в течение последнего года.

Рис. А.6. Страница управления проектом

Кликнув по ссылке на сессию можно увидеть ее детали ( см. рис. А.7.). Снимки экрана могут быть увеличены по клику.

Рис. А.7. Информация о сессии

Для записи сессии необходимо загрузить приложение OrclTimeTracker По ссылке в главном меню сайта. (3)( см. рис. А.4.). Разархивировав и запустив приложение необходимо авторизоваться ( см. рис. А.8.).

Рис. А.8. Форма авторизации приложения OrclTimeTracker

После авторизации необходимо выбрать проект(1), к которому будет относиться сессия и нажать кнопку «Старт»(2). По завершении сессии необходимо нажать кнопку «Стоп»(3). Приложение синхронизируется с сервером автоматически: при запуске и при закрытии. ( см. рис. А.9.).

Рис. А.9. Главное окно программы OrclTimeTracker.

ПРИЛОЖЕНИЕ

1. Контроллер applogin.php

<?php

class Applogin extends CI_Controller

{

public function __construct()

{

parent::__construct();

$this->load->model('apploginmodel','appmod');

}

public function index()

{

$this->login();

}

public function login()

{

$post=$this->input->post();

if (isset($post['username'],$post['password']))

{

$result=$this->appmod->get_user($post['username'],md5($post['password']));

if (!empty($result))

{

$user_id=$result->ID;

$project_str=$this->get_projects($user_id);

$str= "ID={$result->ID}"." PROJECTS=".$project_str;

echo $str;

}

else

{

echo "FAIL";

}

}

else

{

echo "FAIL";

}

}

private function get_projects($user_id)

{

$result = $this->appmod->get_projects($user_id);

$i=0;

if ($result->num_rows>0)

{ foreach ($result->result() as $row)

{

$arr_atr[0]=$row->ID;

$arr_atr[1]=$row->NAME;

//$arr_atr[1]= iconv("UTF-8", "WINDOWS-1252", $row->NAME);

$arr_atr[2]=$row->STATUS;

$str_atr=implode('||',$arr_atr );

$data[$i]=$str_atr;

$i++;

}

$data_str=implode('|-|-|',$data);

}

else $data_str="1|-|-|Timetracker test project|-|-|1";

return $data_str;

}

function utf8_to_cp1251($utf8)

{

$windows1251 = "";

$chars = preg_split("//",$utf8);

for ($i=1; $i< count($chars)-1; $i++) {

$prefix = ord($chars[$i]);

$suffix = ord($chars[$i+1]);

if ($prefix==215) {

$windows1251 .= chr($suffix+80);

$i++;

} elseif ($prefix==214) {

$windows1251 .= chr($suffix+16);

$i++;

} else {

$windows1251 .= $chars[$i];

}

}

return $windows1251;

}

}

?>

2. Модель apploginmodel.php

<?php

class Apploginmodel extends CI_Model

{

function get_user($username,$password)

{

$this->db->select('ID','USERNAME','PASSWORD');

$this->db->from('USERS');

$this->db->where('USERNAME',$username);

$this->db->where('PASSWORD',$password);

$query=$this->db->get();

return $query->row();

}

function get_projects($user_id)

{

$query="SELECT p.id, p.name, p.status "

. "FROM projects p JOIN projects_members m ON p.id=m.project_id "

. "WHERE m.user_id=$user_id";

$result=$this->db->query($query);

return $result;

}

}

?>

3. Контроллер appload.php

<?php

class Appload extends CI_Controller

{

public function __construct()

{

parent::__construct();

$this->load->model('apploadmodel','appmod');

$this->load->library('image_lib');

}

public function index()

{

$this->addsession();

}

public function add_session()

{

$post=$this->input->post();

if (isset($post['username'],

$post['password'],

$post['start_time'],

$post['end_time'],

$post['seconds'],

$post['message'],

$post['details']))

{

$result=$this->appmod->get_user($post['username'],md5($post['password']));

if (!empty($result))

{

// пользователь найден

//echo "ID={$result->ID}";

$user_id=$result->ID;

$start_time=$post['start_time'];

$end_time=$post['end_time'];

$seconds=$post['seconds'];

$message=$post['message'];

if (!$message) $message="no message";

$project_id = $post['project_id'];

$details_str=$post['details'];

$session_id=$this->appmod->add_session($user_id,$start_time,$end_time,$seconds,$message,$project_id);

$this->add_details($session_id, $details_str);

echo "SESSION_ID=".$session_id;

}

else

{

echo "FAIL";

}

}

else

{

echo "FAIL";

}

}

private function add_details($session_id,$details_str)

{

$strings=explode('|-|-|',$details_str);

foreach ($strings as $string)

{

$attributes=explode("||",$string);

$data['session_id']=$session_id;

$data['snap_num'] =$attributes[0];

$data['appname'] =$attributes[1];

$data['kb_hits'] =$attributes[2];

$data['ms_clicks'] =$attributes[3];

$data['time_spent']=$attributes[4];

$id=$this->appmod->add_details($data);

//return $id;

}

}

public function add_details1()

{

$post=$this->input->post();

if (isset($post['username'],

$post['password'],

$post['server_session_id'],

$post['snap_num'],

$post['appname'],

$post['kb_hits'],

$post['ms_clicks'],

$post['time_spent']))

{

$this->load->model('apploadmodel','appmod');

$result=$this->appmod->get_user($post['username'],md5($post['password']));

$owner_id=$this->appmod->get_session_owner($post['server_session_id']);

if (isset($result->ID) && $result->ID == $owner_id) // пользователь найден и сессия его

{

$id=$this->appmod->add_details($post);

echo "SESSION_DETAILS_ID=".$id;

}

else

{

echo "FAIL_AUTH";

}

}

else

{

echo "FAIL_WRONG_REQUEST";

}

}

public function login()

{

$post=$this->input->post();

if (isset($post['username'],$post['password']))

{

$this->load->model('apploginmodel','appmod');

$result=$this->appmod->get_user($post['username'],md5($post['password']));

if (!empty($result))

{

echo "ID={$result->ID}";

}

else

{

echo "FAIL";

}

}

else

{

echo "FAIL";

}

}

public function add_screen()

{

$config['upload_path'] = './assets/img/screens/';

//$config['upload_path'] = '../../../assets/img/screens/';

$config['allowed_types'] = 'gif|jpg|png';

$config['max_size']= '10000';

//$config['max_width'] = '1024';

//$config['max_height'] = '768';

$this->load->library('upload', $config);

if ( ! $this->upload->do_upload()) // если ошибка

{

//echo "FAIL_FILE_NOT_UPLOADED";

$error = $this->upload->display_errors();

echo $error;

}

else

{

//$data = array('upload_data' => $this->upload->data());

$data=$this->upload->data();

$post=$this->input->post();

if (isset($post['username'],$post['password']))

{

$this->load->model('apploadmodel','appmod');

$result=$this->appmod->get_user($post['username'],md5($post['password']));

$owner_id=$this->appmod->get_session_owner($post['server_session_id']);

if (isset($result->ID) && $result->ID == $owner_id) // пользователь найден и сессия его

{

$path=$data['full_path'];

$filename=$data['file_name'];

$session_id=$post['server_session_id'];

$time=$post['time'];

/*=================== Создание миниатюры ====================*/

$config['image_library'] = 'gd';

//$config['source_image'] = './images/'.$data["userfile"]["file_name"];

$config['source_image'] = "./assets/img/screens/".$filename;//$path;

$config['create_thumb'] = TRUE;

//$config['thumb_marker'] = '';

$config['maintain_ratio'] = TRUE;

$config['width'] = 250;

$config['height'] = 250;

//$catalog="";

$suffix=".jpg";

$config['new_image'] = basename($filename, $suffix)."_small.jpg";

//$this->load->library('image_lib', $config);

// Set your config up

$this->image_lib->initialize($config);

if ( ! $this->image_lib->resize())

{

echo $this->image_lib->display_errors();

}

//$thumbnail=$config['new_image'];

$thumbnail=basename($config['new_image'],$suffix)."_thumb.jpg";

/*===========================================================*/

// Добавляем запись в БД

//$thumbnail=$config['new_image'];

$id=$this->appmod->add_screen($path,$filename,$thumbnail,$session_id,$time);

echo "OK";//"SESSION_SCREEN_ID=".$id;

}

}

}

}

}

?>

4. Модель apploadmodel

<?php

class Apploadmodel extends CI_Model

{

private $date_fmt = 'YYYY-MM-DD HH24:MI:SS';

function get_user($username,$password)

{

$this->db->select('ID','USERNAME','PASSWORD');

$this->db->from('USERS');

$this->db->where('USERNAME',$username);

$this->db->where('PASSWORD',$password);

$query=$this->db->get();

return $query->row();

}

private function getNextId($table_name)

{

$this->db->select($table_name."_SEQ.NEXTVAL AS NEXTID", FALSE);

$this->db->from('DUAL');

$query = $this->db->get();

$row = $query->row();

return $row->NEXTID;

}

public function get_session_owner($session_id)

{

$this->db->select('USER_ID');

$this->db->from('WORKSNAP_SESSIONS');

$this->db->where('ID',$session_id);

$query=$this->db->get();

$row=$query->row();

return $row->USER_ID;

}

public function add_session($user_id,$start_time,$end_time,$seconds,$message,$project_id)

{

$table='WORKSNAP_SESSIONS';

$session_id=$this->getNextId($table); // получаем id новой записи

/*$data = array(

'ID' =>$session_id,

'USER_ID' => $user_id,

'START_TIME' =>$start_time,

'END_TIME' => $end_time,

'SECONDS' => $seconds,

'MESSAGE' => $message

);

* */

// $this->db->insert($table, $data);

$this->db->set('ID', $session_id);

$this->db->set('USER_ID', $user_id);

$this->db->set('START_TIME', "TO_DATE('{$start_time}', '{$this->date_fmt}')",FALSE);

$this->db->set('END_TIME', "TO_DATE('{$end_time}', '{$this->date_fmt}')",FALSE);

$this->db->set('SECONDS', $seconds);

$this->db->set('PROJECT_ID', $project_id);

$this->db->set('MESSAGE', $message);

$this->db->insert($table);

return $session_id;

}

public function add_details($data)

{

$table='WORKSNAP_DETAILS';

$id=$this->getNextId($table); // получаем id новой записи

$this->db->set('ID', $id);

$this->db->set('SESSION_ID', $data['session_id']);

$this->db->set('SNAP_NUM', $data['snap_num']);

$this->db->set('APPNAME', $data['appname']);

$this->db->set('KB_HITS', $data['kb_hits']);

$this->db->set('MS_CLICKS', $data['ms_clicks']);

$this->db->set('TIME_SPENT', $data['time_spent']);

$this->db->insert($table);

return $id;

}

public function add_details1($data)

{

$table='WORKSNAP_DETAILS';

$id=$this->getNextId($table); // получаем id новой записи

$this->db->set('ID', $id);

$this->db->set('SESSION_ID', $data['server_session_id']);

$this->db->set('SNAP_NUM', $data['snap_num']);

$this->db->set('APPNAME', $data['appname']);

$this->db->set('KB_HITS', $data['kb_hits']);

$this->db->set('MS_CLICKS', $data['ms_clicks']);

$this->db->set('TIME_SPENT', $data['time_spent']);

$this->db->insert($table);

return $id;

}

public function add_screen($path,$filename,$thumbnail,$session_id,$time)

{

$table='WORKSNAP_SCREENS';

$id=$this->getNextId($table); // получаем id новой записи

$this->db->set('ID', $id);

$this->db->set('SESSION_ID',$session_id);

$this->db->set('PATH',$path);

$this->db->set('FILENAME',$filename);

$this->db->set('THUMBNAIL',$thumbnail);

$this->db->set('TIME', "TO_DATE('{$time}', '{$this->date_fmt}')",FALSE);

$this->db->insert($table);

return $id;

}}?>

5. Контроллер projects

<?php

/**

* Description of projects

* Класс для работы с проектами

*

* @author Alex

*/

class Projects extends CI_Controller

{

function __construct()

{

parent::__construct();

$this->load->library('session');

$this->load->model("projects_model",'pmodel');

$this->load->model("user_model",'usermod');

$this->load->helper('date');

//$this->output->enable_profiler(TRUE);

// незалогиненых пересылаем на главную страницу

$username = $this->session->userdata("username");

if (empty($username))

{

redirect(base_url("index.php/home"));

}

}

function index($project_id = NULL,$username=NULL)

{

// Проверка того что пользователь залогинен

$project_id=$project_id*1;

if (empty($project_id) || !is_numeric($project_id)) // если id проекта не указан или не является числом

{

$this->my_projects();

return;

}

else

{

// сначала нужно проверить, что проект с таким id существует

$project = $this->pmodel->check_project_id($project_id*1);

if ($project === 0)

{

redirect(base_url()."index.php/projects"); return;

}

// теперь проверяем есть ли у пользователя доступ к этому проекту

if (!$this->pmodel->check_member_id($project_id,$this->session->userdata("user_id")*1))

{

redirect(base_url()."index.php/projects"); return; // автивный пользоваетль не участвует в данном проекте, потому и не может его просмотреть

}

// теперь определяем id пользователя-создателя проекта

$creator_id = $this->pmodel->get_project_creator_id($project_id);

// развилка: если имя пользователя не указано - даем общую информацию по проекту

// если указана, то показываем инфу проекта по пользователю.

// просматривать общую информацию может только создатель, инфу по пользователю - создатель и сам пользователь

// проверяем есть ли в URI имя пользователя

if (!empty($username))

{

$user_id = $this->usermod->get_userid($username);

$this->show_project_info_by_user($project_id,$user_id);

}

else // показываем инфу по проекту

{

$this->show_project_summary($project_id);

}

}

// $user_id = $this->usermod->get_userid($username);

// if ($user_id==0){ echo "ERROR_WRONG_USER_ID"; redirect(base_url()."index.php/home");return;}

// $this->show_projects_by_user_id($user_id);

}

function my_projects()

{

/*$user = $this->session->userdata('username');

if (empty($user)) $user="";

// if ($user == 0) { echo "ERROR_AUTHORIZATION"; return;}

$user_id = $this->usermod->get_userid($user);

if ($user_id==0){ echo "ERROR_WRONG_USER_ID";redirect(base_url()."index.php/home"); return;}

$this->show_projects_by_user_id($user_id);

*/

$user = $this->session->userdata('username');

if (empty($user)) $user="";

//if ($user == 0) { echo "ERROR_AUTHORIZATION"; redirect(base_url()."index.php/home"); return;}

$user_id = $this->usermod->get_userid($user);

//if ($user_id==0){ echo "ERROR_WRONG_USER_ID";redirect(base_url()."index.php/home"); return;}

$this->project_list($user_id);

}

function show_projects_by_user_id($user_id)

{

$projects = $this->pmodel->get_projects_by_user_id($user_id);

// получаем две даты - сегодня $day_to и год назад $day_from

$oneday=24*60*60;

$today = time();

$day = $today-(365*$oneday);

$next_day= $today +(1*$oneday);

$day_from=date("Ymd",$day); // year ago (ex. 20130606)

$day_to = date("Ymd",$next_day); // today (ex. 20140606)

foreach ($projects as &$project)

{

// функция возвращает массив ( user_id, username, full_name, project_id, status). status: 0 - бан, 1 - пользователь, 2 - админ

$project['MEMBERS'] = $this->pmodel->get_members_by_project_id($project['PROJECT_ID']);

$project['NOT_MEMBERS'] = $this->pmodel->get_non_project_users($project['PROJECT_ID']);

$project['CREATOR_NAME'] = $this->usermod->get_username_by_id($project['CREATOR_ID']);

$project['LAST_COMMITS'] = $this->pmodel->get_proj_last_sessions($project['PROJECT_ID'],5);

$project['SESSIONS_YEAR']= $this->pmodel->get_sessions_year($project['PROJECT_ID'],$day_from,$day_to);

}

$data = array("projects" => $projects, 'username' => $this->usermod->get_username_by_id($user_id));

$this->load->view("header");

$this->load->view("projects",$data);

$this->load->view("footer");

}

function get_sessions_by_date()

{

if ($this->input->is_ajax_request()) {

$this->output->enable_profiler(FALSE);

}

$post = $this->input->post(NULL, TRUE);// получить все из POST

$project_id = $post['project_id'];

$date=$post['date'];

$session=array();

if (!empty($post['user_id']))

{

$user_id=$post['user_id'];

$sessions = $this->pmodel->get_sessions_by_date($project_id, $date,$user_id);

}

else $sessions = $this->pmodel->get_sessions_by_date($project_id, $date);

foreach($sessions as &$session)

{

$session["TIME"]= seconds_to_time($session["SECONDS"]);

$session['URL'] = base_url("/index.php/session/index/".$session['ID']);

}

echo json_encode($sessions);

}

function show_project_info_by_user($project_id,$user_id)

{

//проверяем является ли пользователь участником проекта

if (!$this->pmodel->check_member_id($project_id,$user_id))

{

echo "Пользователь не участвует в проекте";

redirect("index.php/projects");

}

$creator_id = $this->pmodel->get_project_creator_id($project_id);

$logged_user_id=$this->session->userdata("user_id");

// контроль доступа, видеть информацию может только создатель проекта и сам пользователь

if ($creator_id != $logged_user_id && $logged_user_id != $user_id)

{

echo "Вам запрещен доступ к данной информации";

redirect("index.php/projects");

return;

}

$oneday=24*60*60;

$today = time();

$day = $today-(365*$oneday);

$day_from=date("Ymd",$day); // year ago (ex. 20130606)

$day_to = date("Ymd",$today); // today (ex. 20140606)

$project = $this->pmodel->get_project($project_id);

$project['CREATOR_NAME'] = $this->usermod->get_username_by_id($project['CREATOR_ID']);

$project['SESSIONS_YEAR']= $this->pmodel->get_sessions_year($project['PROJECT_ID'],$day_from,$day_to,$user_id);

$project['USER_INFO']=$this->usermod->get_user($user_id);

$data = array("project" => $project, 'username' => $this->usermod->get_username_by_id($user_id));

$this->load->view("header");

$this->load->view("project_info",$data);

$this->load->view("footer");

//var_dump($project);

}

function show_project_summary($project_id)

{

$user_id = $this->session->userdata('user_id');

$username = $this->session->userdata('username');

$creator_id = $this->pmodel->get_project_creator_id($project_id);

if ($user_id != $creator_id)

{

//$this->show_project_info_by_user($project_id,$user_id);

redirect(base_url("index.php/projects/index/$project_id/$username"));

return;

}

else

{

$projects = array($this->pmodel->get_project($project_id));

// получаем две даты - сегодня $day_to и год назад $day_from

$oneday=24*60*60;

$today = time();

$day = $today-(365*$oneday);

$day_from=date("Ymd",$day); // year ago (ex. 20130606)

$day_to = date("Ymd",$today); // today (ex. 20140606)

foreach ($projects as &$project)

{

$project['MEMBERS'] = $this->pmodel->get_members_by_project_id($project['PROJECT_ID']);

$project['CREATOR_NAME'] = $this->usermod->get_username_by_id($project['CREATOR_ID']);

$project['LAST_COMMITS'] = $this->pmodel->get_proj_last_sessions($project['PROJECT_ID'],5);

$project['NOT_MEMBERS'] = $this->pmodel->get_non_project_users($project_id);

$project['SESSIONS_YEAR']= $this->pmodel->get_sessions_year($project['PROJECT_ID'],$day_from,$day_to);

}

$data = array("projects" => $projects, 'username' => $this->usermod->get_username_by_id($user_id));

$this->load->view("header");

$this->load->view("projects",$data);

$this->load->view("footer");

}

}

public function add_member()

{

if (!$this->input->is_ajax_request())

{

return;

}

$post = $this->input->post();

$this->pmodel->add_member($post['project_id'],$post['not_member']);

$user = $this->usermod->get_user($post['not_member']);

$user_id = $user["ID"];

$username=$user["USERNAME"];

$full_name=$user["FULL_NAME"];

//$url = base_url("index.php/projects/index/".$post['project_id']."/".$username);

$respond = '<tr><td><a href="'.base_url("index.php/projects/index/".$post['project_id']."/".$username).'">'

. $username.' ('.$full_name.')</a></td>'

. '<td><button id="delete_member_'.$user_id.'" class="btn-danger delete_member"><i class="icon-minus"></i></button></td></tr>';

//echo json_encode(array("user_id" => $user_id, 'username' => $username, 'full_name' => $full_name));

echo $respond;

}

function delete_member()

{

if (!$this->input->is_ajax_request())

{

return;

}

$post = $this->input->post();

$this->pmodel->delete_member($post['project_id'],$post['user_id']);

$user = $this->usermod->get_user($post['user_id']);

$data = array('user_id' => $user["ID"], 'username' => $user["USERNAME"], 'full_name' => $user["FULL_NAME"]) ;

echo json_encode($data);

}

public function project_list($user_id)

{

$projects = $this->pmodel->get_projects_by_user_id($user_id);

foreach ($projects as &$project)

{

$project['CREATOR_NAME'] = $this->usermod->get_username_by_id($project['CREATOR_ID']);

}

$this->load->view("header");

$this->load->view("project_list_view",array("projects" => $projects));

$this->load->view("footer");

}

function create()

{

$creator_id = $this->session->userdata("user_id");

$admin = $this->session->userdata("admin");

$msg="";

// сначала проверим что пользователь - админ

if ($admin == 0)

{

redirect(base_url()."index.php/projects"); return;

}

$this->load->library('form_validation');

$this->form_validation->set_rules('project_name', 'project_name', 'trim|required|xss_clean');

$this->form_validation->set_rules('project_description', 'project_description', 'trim|xss_clean');

$this->form_validation->set_rules('hours_week', 'hours_week', 'trim|required|xss_clean');

$this->form_validation->set_rules('hours_total', 'hours_total', 'trim|required|xss_clean');

//проверяем прошли ли данные проверку

if ($this->form_validation->run() == TRUE )

{

$post=$this->input->post();

$data= array(

'creator_id' => $creator_id,

'project_name' =>$post['project_name'],

'project_description' => $post['project_description'],

'hours_week' => $post['hours_week'],

'hours_total' => $post['hours_total']

);

$project_id=$this->pmodel->create_project($data);

if ($project_id > 0)

{

redirect(base_url("index.php/projects/index/$project_id"));

return;

}

}

$this->load->view("header");

$this->load->view("create_project_view",$msg);

$this->load->view("footer");

}

}

6. Модель Projects_model

<?php

/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

/**

* Description of projects_model

*

* @author Alex

*/

class Projects_model extends CI_Model

{

function __construct()

{

parent::__construct();

}

//put your code here

function get_projects_by_user_id($user_id)

{

$query = "SELECT p.id as project_id, p.name as project_name, p.description, p.creator_id, p.create_date, p.status as project_status, m.user_id "

. " FROM projects p JOIN projects_members m ON p.id = m.project_id "

. " WHERE m.user_id = $user_id";

$result = $this->db->query($query);

return $result->result_array();

}

function get_members_by_project_id($project_id)

{

$query = "SELECT u.id as user_id, u.username, u.full_name, m.project_id, m.status"

. " FROM users u JOIN projects_members m ON u.id = m.user_id"

. " WHERE m.project_id = $project_id";

$result = $this->db->query($query);

return $result->result_array();

}

function get_proj_last_sessions($project_id,$n)

{

$format_time_str='DD/MM/YY HH24:MI:SS';

$query = "SELECT * FROM("

. "SELECT s.id, "

. "TO_CHAR(s.start_time,'$format_time_str') as START_TIME, "

. "TO_CHAR(s.end_time,'$format_time_str') as END_TIME "

. ", s.SECONDS "

. ", u.username as username "

. "FROM users u JOIN worksnap_sessions s ON u.id=s.user_id "

. "WHERE project_id=$project_id "

. "ORDER BY END_TIME DESC )"

. "WHERE ROWNUM<=$n";

$result = $this->db->query($query);

return $result->result_array();

}

function get_sessions_by_date($project_id, $date, $user_id = "NULL")

{

$format_time_str='DD/MM/YY HH24:MI:SS';

$format_input_date_str = 'YYYYMMDD';

$query="SELECT u.username, u.full_name, s.id, "

. "TO_CHAR( s.start_time,'$format_time_str') as start_time, "

. "TO_CHAR( s.end_time,'$format_time_str') as end_time,"

. "s.seconds "

. "FROM users u JOIN worksnap_sessions s ON u.id=s.user_id "

. "WHERE "

. "project_id=$project_id "

. "AND TO_CHAR(s.start_time,'$format_input_date_str')='$date' ";

if ($user_id != "NULL") $query = $query. " AND s.user_id=".$user_id;

$query= $query." ORDER BY start_time DESC ";

$result=$this->db->query($query);

return $result->result_array();

}

function get_sessions_year($project_id,$day_from,$day_to, $user_id = NULL)

{

//$format_time_str='DD/MM/YY HH24:MI:SS';

$format_input_date_str = 'YYYYMMDD';

//убираем всех кто был удален из проекта

$subquery = "SELECT user_id FROM projects_members WHERE project_id=$project_id";

$query = "SELECT TO_CHAR(s.START_TIME,'$format_input_date_str') as S_DATE, COUNT(id) as S_NUM, SUM(SECONDS) as S_SECONDS"

." FROM worksnap_sessions s "

." WHERE s.START_TIME >= TO_DATE('$day_from','$format_input_date_str') "

." AND TO_CHAR(s.START_TIME,'$format_input_date_str') <= '$day_to' "

." AND project_id = $project_id"

." AND user_id IN ($subquery) ";

if ($user_id != NULL)

{

$query = $query." AND user_id=$user_id";

}

$query = $query." GROUP BY TO_CHAR(s.START_TIME,'$format_input_date_str')";

$result=$this->db->query($query);

return $result->result_array();

}

function check_project_id($proj_id)

{

$this->db->select("ID");

$this->db->from("PROJECTS");

$this->db->where("ID",$proj_id);

$result = $this->db->get();

if ($result->num_rows() != 1)

{

return 0;

}

return $result->row();

}

function check_member_id($proj_id,$user_id)

{

$this->db->select("ID");

$this->db->from("PROJECTS_MEMBERS");

$this->db->where("PROJECT_ID",$proj_id);

$this->db->where("USER_ID",$user_id);

$result = $this->db->get();

if ($result->num_rows() != 1)

{

return FALSE;

}

return TRUE;

}

function get_project_creator_id($project_id)

{

$query = "SELECT creator_id "

. "FROM projects "

. "WHERE id = $project_id ";

$result = $this->db->query($query);

return $result->row()->CREATOR_ID;

}

function get_project($project_id)

{

$query = "SELECT p.id as project_id, p.name as project_name, p.description, p.creator_id, p.create_date, p.status as project_status, p.seconds_week, p.seconds_total"

. " FROM projects p "

. " WHERE p.id = TO_NUMBER($project_id)";

$result = $this->db->query($query);

return $result->row_array();

}

// Функция возвращает всю информацию о сессиях для данного проекта и пользователя за

function get_sessions_year_by_user($project,$day_from,$day_to,$user_id)

{

$format_input_date_str = 'YYYYMMDD';

$query = "SELECT TO_CHAR(s.START_TIME,'$format_input_date_str') as S_DATE, SUM(SECONDS) as S_SECONDS"

." FROM worksnap_sessions s "

." WHERE s.START_TIME >= TO_DATE('$day_from','$format_input_date_str') "

." AND s.START_TIME <= TO_DATE ('$day_to','$format_input_date_str') "

." AND project_id = $project_id";

if ($user_id != NULL)

{

$query = $query." AND user_id=$user_id";

}

$query = $query." GROUP BY TO_CHAR(s.START_TIME,'$format_input_date_str')";

$result=$this->db->query($query);

return $result->result_array();

}

function get_non_project_users($project_id)

{

if (empty($project_id)) return FALSE;

$query = "SELECT * FROM users u "

. " WHERE not exists "

. "( SELECT 1 FROM projects_members pm "

. "WHERE pm.user_id=u.id "

. "AND pm.project_id=$project_id"

. ")";

$result = $this->db->query($query);

return $result->result_array();

}

function add_member($project_id,$user_id)

{

$query = "INSERT INTO projects_members(PROJECT_ID, USER_ID,status) VALUES($project_id,$user_id,1)";

$result = $this->db->query($query);

}

function delete_member($project_id,$user_id)

{

$query = "DELETE FROM projects_members WHERE project_id=$project_id AND user_id=$user_id";

$result = $this->db->query($query);

}

function create_project($data)

{

$query = "INSERT INTO projects(id,creator_id, name, description, seconds_week, seconds_total,status)"

. " VALUES(PROJECTS_SEQ.nextval,"

. "".$data['creator_id'] .","

. "'".$data['project_name']."',"

. " '".$data['project_description']."', "

. "".($data['hours_week']*3600).", "

. "".($data['hours_total']*3600).","

. "1)";

$result = $this->db->query($query);

$query = "SELECT id FROM projects WHERE id=(SELECT MAX(id) FROM projects)";

$result = $this->db->query($query);

$project_id = $result->row()->ID;

$query = "INSERT INTO projects_members(id, user_id, project_id,status)"

. " VALUES(PROJECTS_MEMBER_SEQ.nextval,".$data['creator_id'].", $project_id, 1 )";

$result = $this->db->query($query);

return $project_id;

}

}

 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
 
Предметы
Банковское дело
Бухучет и аудит
География
Журналистика
Информатика
История
Культурология
Литература
Маркетинг
Математика, химия, физика
Медицина
Менеджмент
Недвижимость
Охрана труда
Педагогика
Политология
Право
Психология
Религиоведение
Сельское хозяйство
Социология
Спорт
Техника
Товароведение
Философия
Финансы
Экология
Экономика
Этика и эстетика
Прочее