Реализација система за праћење континуиране...

Post on 15-Jan-2016

72 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Висока школа електротехнике и рачунарства. Реализација система за праћење континуиране медицинске едукације. - д и п л о м с к и р а д -. кандидат Никола Рафајловић. ментор др Бошко Николић. 1. Увод. - PowerPoint PPT Presentation

TRANSCRIPT

Реализација система за праћењеконтинуиране медицинске едукације

- д и п л о м с к и р а д -

Висока школа електротехнике и рачунарства

кандидатНикола Рафајловић

ментордр Бошко Николић

1. Увод

• “Систем за праћење континуиране медицинске едукације” представља савремену трослојну веб апликацију.

• Пословна логика апликације се реализује преко

PHP-а као скриптног језика на серверској страни.• За складиштење података се користи MySQL база

података.

2.1. Трослојна архитектура

• Трослојна архитектура представља тип клијент-сервер архитектуре у којој су кориснички интерфејс, процеси пословне логике и приступ подацима, пројектовани и управљани као независни модули. Основне компоненте (слојеви) ове архитектуре су:

– Клијентски (презентациони) слој– Слој пословне (апликативне) логике– Слој података

2.1. Трослојна архитектура

2.1. Трослојна архитектура

Приступ динамичким веб страницама

2.2. РНР и рад са базама података

• PHP подржава API-је за приступ свим познатим базама података.

• Програмски језик PHP се у пракси најчешће користи са MySQL базом података.

• MySQL je ефикасан сервер за управљање базама података.

• Представља open source решење са одличним перформансама.

2.3. РНР МyAdmin

• Као алат за једноставно управљање MySQL базом података, често се користи апликација PHPМyАdmin.

• Омогућава:– креирање нових база података– измену постојећих база– рад са табелама– преглед података– унос података– измену података– брисање података

2.3. РНР МyAdmin

3. Модел базе података

4. РНР Codeigniter

• Codeigniter је open source фрејмворк за PHP језик. • Користи MVC модел (Model View Controller) и на тај

начин омогућава да се веб апликација организује у три различита дела:

– models - апстракција слоја базе података– views - HTML странице са деловима PHP кода– controllers - пословна логика апликације

4. РНР Codeigniter

Постоји велики број познатих РНР фрејмворка, а неки од најпознатијих су Zend, Cake, Trax... Према речима Рика Елиса, творца Codeigniter-а, сви они имају сличне недостатке:

• имају лошу документацију, ако уопште постоји • имају велики број претпоставки у вези са већ постојећим знањем

програмера• писани су за људе који имају администраторске привилегије над

сервером• претпостављају да постоји приступ командној линији• имају тенденцију да буду безразложно сложени за употребу, са

мноштвом XML шаблона непотребних за функционисање већине веб апликација

• претерано су велики и свеобухватни, или превише мали да би били употребљиви.

4. РНР Codeigniter

Структура PHP Codeigniter

апликације

4. РНР Codeigniter

Све директоријуме у основном можемо поделити у три групе:– оне са којима радимо и чији садржај најчешће мењамо

(controllers, models, views), а чији је садржај на почетку празан

– оне који садрже фајлове са системским кодом фрејмворка (system/libraries, system/codeigniter, system/drivers...) и које по потреби можемо да мењамо

– оне који садрже фајлове са кодом који су већ до пола исписани, али су им потребни додаци и промене (language, config, errors).

4.1. Kонфигурациони фајл

Config фолдер садржи групу фајлова који подешавају основне конфигурације апликације. У фајлу config/config.php дефинишемо локацију сајта./*|--------------------------------------------------------------------------| Base Site URL|--------------------------------------------------------------------------|| URL to your CodeIgniter root. Typically this will be your base URL,| WITH a trailing slash:|| http://example.com/|| If this is not set then CodeIgniter will guess the protocol, domain and| path to your installation.|*/$config['base_url'] = 'http://www.nikolaraf.com';

4.2. Структура Codeigniter апликације

Када се успостави конекција преко URL-а сајта прослеђује се HTTP захтев облика:

GET /folder/file.html HTTP/1.0

На нашем CI сајту не постоји HTML страница која може да се пронађе. Уместо тога, све захтеве који долазе ка апликацији пресреће и обрађује index.php фајл. Ако корисник жели да приступи страници апликације кликом на неко дугме или на неки од линкова захтев је оваквог облика:

GET /index.php/tests/showall HTTP/1.0

4.2. Структура Codeigniter апликације

Прослеђивање захтева корисника

4.2. Структура Codeigniter апликације

Почетна страница апликације PHP Codeigniter

4.3. Коришћење Codeigniter-а за рад са базом података

Подешавања за рад са базом података се налазе у конфигурационом фајлу чија је путања system/application/config/database.php. У суштини, потребно је да се нагласи где је база и ког је типа. Та подешавања се врше тако што се потребни параметри упишу у овај фајл.

 

$active_group = "default";$db['default']['hostname'] = "";$db['default']['username'] = "";$db['default']['password'] = "";$db['default']['database'] = "";$db['default']['dbdriver'] = "";

 

Опције које треба да се попуне су:• hostname: локација базе (`localhost` или IP адреса) • username и password: корисничко име и лозинка корисника са привилегијама за

приступ бази података• database: име базе података• dbdriver: тип базе података која се користи (MySQL, MySQLi, Postgre SQL,

ODBC, MS SQL)

5. Опис рада система

Почетна страница апликације

5. Опис рада система

Галерија

5. Опис рада система

Календар

5. Опис рада система

Курсеви

5. Опис рада система

Контакт

5. Опис рада система

Форма за пријављивање корисника на систем

5. Опис рада система

Форма за креирање налога корисника

5. Опис рада система

Форма за додавање фотографије

5. Опис рада система

Порука након успешно креираног корисничког налога

5. Опис рада система

Форма за промену лозинке

5. Опис рада система

Форма за пријаву заборављене лозинке

5. Опис рада система

Опције за корисника који се пријавио на систем

5. Опис рада система

Опција “Уплате”

5. Опис рада система

Опција “Присуство”: претрага курсева

5. Опис рада система

Опција “Присуство”: резултати претраге курсева

5. Опис рада система

Опција “Присуство”: пријава за курс

5. Опис рада система

Опција “Присуство”: обавештење о прихваћеном захтеву за присуство курсу

5. Опис рада система

Опција “Евиденција КМЕ”: претрага учешћа на курсевима

5. Опис рада система

Опција “Евиденција КМЕ”: учешће на курсевима и број остварених бодова КМЕ

5. Опис рада система

Опције референта

5. Опис рада система

Опција “Шифарник”: мени за избор табеле шифарника

5. Опис рада система

Опција “Шифарник”: приказ табеле шифарника и форме за филтрирање података из табеле шифарника

5. Опис рада система

Опција “Шифарник”: додавање података

5. Опис рада система

Опција “Шифарник”: измена података

5. Опис рада система

Опција “Шифарник”: брисање података

5.1. Регистрација корисника и отварање корисничких налога

Опција “Регистрација налога корисника”

5.1. Регистрација корисника и отварање корисничких налога

Опција “Регистрација налога корисника”

5.1. Регистрација корисника и отварање корисничких налога

Опција “Регистрација налога корисника”

5.1. Регистрација корисника и отварање корисничких налога

Опција “Регистровани корисници”

5.1. Регистрација корисника и отварање корисничких налога

Опција “Регистровани корисници”

5.1. Регистрација корисника и отварање корисничких налога

Опција “Регистровани корисници”

5.1. Евиденција курсева и одржавање курсева

Опција “Регистрација курса”

5.1. Евиденција курсева и одржавање курсева

Опција “Регистрација курса”: унос периода акредитације

5.1. Евиденција курсева и одржавање курсева

Опција “Одржавање курса”

5.1. Евиденција курсева и одржавање курсева

Опција “Одржавање курса”: могућност евиденције предавача

5.1. Евиденција курсева и одржавање курсева

Опција “Акредитација курса”

5.1. Евиденција курсева и одржавање курсева

Опција “Акредитација курса”: измена података за курс

5.1. Евиденција курсева и одржавање курсева

Опција “Акредитација курса”: измена података за акредитацију курса

5.1. Евиденција пријава за курс

Опција “Пријава корисника за курс”

5.1. Евиденција пријава за курс

Опција “Пријава корисника за курс”: падајући мени

5.1. Евиденција пријава за курс

Опција “Oдобрење пријава за курс”

5.1. Евиденција пријава за курс

Опција “Oдобрење пријава за курс”: пријаве корисника

5.2. Евиденција полазника курсева

Опција “Преглед одржавања курсева”

5.2. Евиденција полазника курсева

Опција “Преглед одржавања курсева”: евиденција полазника

5.2. Евиденција полазника курсева

Опција “Преглед одржавања курсева”: евиденција полазника

5.3. Евиденција задужења и уплата

Опција “Евиденција задужења и уплата корисника”

5.3. Евиденција задужења и уплата

Опција “Евиденција задужења и уплата корисника”

5.3. Евиденција задужења и уплата

Опција “Евиденција задужења и уплата за курс”

5.3. Евиденција задужења и уплата

Опција “Евиденција задужења и уплата за курс”: задужења корисника за курс

5.3. Евиденција задужења и уплата

Опција “Евиденција задужења и уплата за курс”: задужења и уплате корисника

5.4. Опције администратора

5.4. Опције администратора

Опција “Ресет лозинке”

5.4. Опције администратора

Опција “Преглед и ажурирање корисничких привилегија”

5.4. Опције администратора

Опција “Преглед и ажурирање корисничких привилегија”

6. Реализација система

Codeigniter у својим суб-фолдерима садржи велики број фајлова и класа које су написане да олакшају рад. То су, у ствари, скриптови и функције које се често понављају и које по потреби једноставно могу да се позову. Осим класа, међу којима су и модели и контролери, постоје библиотеке, хелпери и плаг-инови.

Library може да се налази и у system и у application фолдеру и представља класу која пре употребе мора да се позове и тако буде укључена у супер-објекат.

Helper може да се налази и у system/helpers и у application/helpers фолдеру и представља скрипт, а не ОО код.

Plug-in може да се налази и у system/plugins и у application/plugins и такође представља скрипт. Основна разлика између хелпера и плаг-инова је та да плаг-ин представља једну функцију, док хелпер представља скуп функција.

6. Реализација система

Странице апликације се стварају динамички, на захтев корисника. За приступ почетној страници позива се основни контролер дефинисан у конфигурационом фајлу – application/config/routes.php, а то је login.php контролер, и његова основна функција index(). Ова функција у једном делу кода проверава да ли траје сесија корисника, и, ако то није случај, позива view template.php:

 

if(($this->session->userdata('is_logged_in')==FALSE)){

$data['main_content']='login_form';$this->load->view('includes/template',$data);

}

6. Реализација система

Страница template.php, која је сама по себи HTML поглед (view) и налази се у views/includes фолдеру, позива три погледа и тако настаје динамичка страница:

<?php $this->load->view('includes/header');?><?php $this->load->view($main_content);?><?php $this->load->view('includes/footer');?>

6.1. Пријављивање корисника на систем и креирање налога

Као променљиви део странице се за почетну страну позива поглед (view) login_form.php.

За реализацију је коришћен хелпер фрејмворка „Form Helper“ који се састоји од функција корисних за рад са формама. Код за форму за приступање систему (логовање корисника) написан помоћу функција овог хелпера изгледа овако:

 

<?php $js='onClick="clearText(this)"';

echo form_open('login/validate_credentials');echo form_input('korisnicko_ime','Korisničko ime',$js);echo form_password('lozinka','Password',$js);echo form_submit('submit','Login');echo form_close();

?>

6.1. Пријављивање корисника на систем и креирање налога

Што је еквивалентно коду HTML-a:

 <form action="http://www.nikolaraf.com/login/validate_credentials"

method="post" accept-charset="utf-8"><input type="text" name="korisnicko_ime" value="Korisničko ime"

onClick="clearText(this)" /><input type="password" name="lozinka" value="Password"

onClick="clearText(this)" /><input type="submit" name="submit" value="Login" /></form>

6.1. Пријављивање корисника на систем и креирање налога

Функција validate_credentials() контролера login.php има задатак да провери да ли у бази података постоји корисник са тим корисничким именом и лозинком. За проверу се користи модел који се позива из контролера:

 

$this->load->model('membership_model');

$data['results']=$this->membership_model->validate();

6.1. Пријављивање корисника на систем и креирање налога

Ако подаци постоје уписују се у колачић (cookie) сесије:

 foreach($data['results'] as $row){

$data=array(

'ID'=>$row->ID, 'trenutak_registracije'=>$row->trenutak_registracije,

'korisnicko_ime'=>$row->korisnicko_ime,'ime'=>$row->ime,

...);

}

$this->session->set_userdata($data);

6.1. Пријављивање корисника на систем и креирање налога

За праћење сесије корисника служи класа „Session Class“ која омогућава праћење активности корисника док претражују сајт. Ова класа је аутоматски учитана приликом покретања сајта помоћу вредности које смо претходно дефинисали у конфигурационом autoload.php фајлу (заједно са осталим класама):

 

$autoload['libraries'] = array('database','session','pagination');

6.1. Пријављивање корисника на систем и креирање налога

Форма коју садржи view login_form.php има и дугме које води ка форми за креирање корисничког налога – „креирај налог“. Коришћењем ове опције кориснику се приказује форма коју садржи view signup_form.php . Кориснику се нуди могућност да унесе своје податке, а за проверу исправности података се користи још једна корисна библиотека – „Form Validation“.

Када је форма исправно попуњена, она проверава да ли су подаци одговарајућег типа и да ли одговарају задатом критеријуму.

Функција create_member() контролера login.php је задужена за овакву врсту провере:

 

$this->load->library('form_validation');$this->form_validation->set_rules('korisnicko_ime','"Korisničko

ime"','trim|required|min_length[4]');...

6.1. Пријављивање корисника на систем и креирање налога

За додавање фотографије користи се „File Uploading Class“, а за промену величине фотографије „Image Manipulation Class“.

После избора фотографије и клика на „upload“ дугме форме, функција signup_successful() учитава модел gallery_model и позива функцију овог модела do_upload().

 

$this->load->model('gallery_model');

if ($this->input->post('upload')) { 

$this->gallery_model->do_upload();

}

6.1. Пријављивање корисника на систем и креирање налога

do_upload() функција учитава библиотеку upload пошто претходно дефинишемо конфигурациони низ $config.

 $config = array(

'allowed_types' => 'jpg|jpeg|gif|png','upload_path' => $this->gallery_path,'max_size' => 10000

);$this->load->library('upload', $config);if ( ! $this->upload->do_upload()){

$error = array('error' => $this->upload->display_errors());}else{

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

6.1. Пријављивање корисника на систем и креирање налога

Ова функција такође помоћу библиотеке image_lib и конфигурационог низа смањује димензије фотографије корисника ради њеног каснијег приказа у апликацији и смешта такву копију у директоријум „images_gallery/thumbs“ где се налазе све смањене фотографије корисника.

 $config = array(

'source_image' => $image_data['full_path'],'new_image' => $this->gallery_path . '/thumbs','maintain_ration' => true,'width' => 100,'height' => 150

);

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

6.1. Пријављивање корисника на систем и креирање налога

Кориснику се шаље порука о успешно унетим подацима путем електронске поште. За слање мејлова коришћена је „Email“ библиотека фрејмворка.

 

$config=Array(

'protocol'=>'smtp','smtp_host'=>'ssl://smtp.googlemail.com','smtp_port'=>465,'smtp_user'=>'nikolaraf@nikolaraf.com','smtp_pass'=>'gitarista'

);

$this->load->library('email', $config);$this->email->set_newline("\r\n");

6.1. Пријављивање корисника на систем и креирање налога$this->email->from('xsaero@gmail.com', 'Nikola Rafajlovic');$this->email->to($mejl);$this->email->subject('CKME Medicinski fakultet');$this->email->message('Poštovani, uspešno ste kreirali nalog. Čeka se registracija naloga od strane administratora.');

$path = $this->config->item('server_root');$file = $path . '/attachments/diplomski.txt';

$this->email->attach($file);if($this->email->send()){

$data['main_content']='signup_successful';$this->load->view('includes/template',$data);

}else{$data['poruka']="Greška prilikom slanja mejla!";$data['main_content']='signup_form_poruka';$this->load->view('includes/template',$data);

}

6.2. Опције регистрованих корисника

За прву опцију – „уплате“, којом корисник проверава своја задужења и уплате за курсеве, у бази података постоје две колоне: „задужење“ и „уплате“.

6.2. Опције регистрованих корисника

Бирањем ове опције контролер korisnik.php у својој функцији korisnik_uplate() позива модел get_all.php и његове функције get_uplate($id) и get_zaduzenja($id):

 

$id=$data['ID'];

$data['uplate']=$this->get_all->get_uplate($id);$data['zaduzenja']=$this->get_all->get_zaduzenja($id);

$data['main_content']='korisnik/korisnik_uplate_view';$this->load->view('includes/template',$data);

6.2. Опције регистрованих корисника

Функција get_zaduzenja($id) проналази корисника у бази података помоћу променљиве $id као параметра функције, а затим помоћу функције explode() прави низ од стринга који се налази у колони тако што издваја елементе одвојене сепаратором „;“:

function get_zaduzenja($id){

$this->db->where('ID',$id);$q=$this->db->get('korisnik');foreach($q->result() as $row){

$zaduzenje=$row->zaduzenje;

}

6.2. Опције регистрованих корисника

if($zaduzenje!=''){$zad=explode(';',$zaduzenje);$zad_pop = array_pop($zad);$i=0;foreach($zad as $z){

$par_zaduzenje=explode(',',$z);$result[$i][0]=$par_zaduzenje[0];$result[$i][1]=$par_zaduzenje[1];$this->db->where('ID_odrzavanje',$result[$i][1]);$q=$this->db->get('kurs_odrzavanje');foreach($q->result() as $r){

$result[$i][2]=$r->naziv_kursa;$result[$i][3]=$r->foto;}$i++;

}}else{

$result="prazan";

}return $result;

}

7. Закључак

Апликација “Систем за праћење континуиране медицинске едукације” је савремена трослојна веб апликација.

Дизајн апликације је урађен помоћу HTML-a i CSS-a. За реализацију функционалности апликације на клијентској страни је

коришћен програмски језик JavaScript и Јquery JavaScript библиотека. Пословна логика апликација је реализована помоћу програмског језика

PHP, као скриптног језика на серверској страни (РНР фрејмворк „Codeigniter”), а за складиштење података је коришћена MySQL база података.

Codeigniter је, као open source апликација, отворен за креацију нових библиотека или хелпера од стране корисника. Такође је могуће да се нове функционалности реализују помоћу нових функција већ постојећих контролера и модела.

ХВАЛА

top related