Автоматизация системы контроля самостоятельной работы студентов
Система контроля самостоятельной работы студента и ее автоматизация. Краткое руководство пользователя для программного комплекса TimeTracker (функции и возможности). Примеры разработанных контроллеров applogin.php, projects, моделей Projects_model.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 28.07.2014 |
Размер файла | 2,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
«Автоматизация системы контроля самостоятельной работы студентов»
Руководство пользователя
Эксплуатационный документ
в текстовом виде
на 7 листах
Разработал:
студент V курса
Джундиет Александр Сергеевич
Рыбница, 2014
Руководство пользователя
Пользователи данного программного комплекса могут:
ѕ Записывать свою активность в ходе работы как «онлайн» так и «оффлайн»;
ѕ Загружать собранные данные на сервер;
ѕ Просматривать на 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;
}
}
Размещено на Allbest.ru
Подобные документы
Порядок контроля и приемки программного продукта, предназначенного для автоматизации процесса анализа эффективности инвестиций и капитальных вложений. Состав входной и выходной информации. Описание функций программного комплекса. Руководство пользователя.
курсовая работа [436,8 K], добавлен 28.05.2013Анализ хозяйственной деятельности, технического и программного обеспечения ООО НПФ "Интек". Полная автоматизация настройки контроллеров, предназначенных для процесса отслеживания показателей в нефтяных установках. Оценка экономической эффективности ИС.
дипломная работа [2,6 M], добавлен 18.06.2013Структура программного комплекса и UML–представление программного обеспечения. Анализ статических нагрузок на пользователя при работе за компьютером. Руководство пользователя, программиста и системного администратора. Ошибки фискальных регистраторов.
дипломная работа [3,4 M], добавлен 02.09.2013Психолого-педагогические основы применения современных средств обучения по дисциплине "Специальная технология". Организация самостоятельной работы студентов Машиностроительного лицея №8, подходы к разработке блока мультимедийных уроков, их эффективность.
дипломная работа [2,1 M], добавлен 14.09.2015Проблема повышения оперативности учета и контроля посещаемости и успеваемости студентов ЮТИ ТПУ. Разработка информационной системы, требования к ней. Информационное обеспечение задачи, автоматизация предметной области. Описание интерфейса системы.
дипломная работа [2,6 M], добавлен 17.07.2012Разработка и реализация программного комплекса для обеспечения возможности проведения тестирования в образовательной среде. Разработка структура системы, базы данных, алгоритмов, интерфейса пользователя. Технико-экономическое обоснование проекта.
дипломная работа [3,3 M], добавлен 03.09.2012Проектирование информационной системы для удобного ведения учета товара. Функциональная модель предметной области. Обоснование выбора языка программирования. Описание программы, руководство пользователя. Протокол тестирования программного продукта.
курсовая работа [537,6 K], добавлен 18.09.2014Возможности автоматизации в сфере бытового обслуживания, в частности в фотоателье. Автоматизация работы с клиентами. Апробации возможностей языка SQL. Реализация информационной системы, создание программы средствами объектно-ориентированного языка Delphi.
курсовая работа [28,5 K], добавлен 30.11.2009Предметная область объекта автоматизации информационных процессов. Основные этапы автоматизации работы метрологического отдела Воронежского вагоноремонтного завода. Расчет надежности аппаратной части и программного обеспечения. Руководство пользователя.
дипломная работа [5,7 M], добавлен 01.02.2014Автоматизация и визуализация рабочего места методиста факультета, работающего с личными делами студентов. Создание базы данных и ограничений. Интерфейс пользователя и порядок работы с программным обеспечением. Разработка справки и контекстной помощи.
курсовая работа [867,3 K], добавлен 22.02.2016