diff --git a/application/controllers/system/Messages.php b/application/controllers/system/Messages.php index 73d405dcc..390d75d33 100644 --- a/application/controllers/system/Messages.php +++ b/application/controllers/system/Messages.php @@ -26,6 +26,8 @@ class Messages extends VileSci_Controller public function write($sender_id, $msg_id = null, $receiver_id = null) { $prestudent_id = $this->input->post('prestudent_id'); + $person_id = $this->input->post('person_id'); + $msg = null; // Get message data if possible @@ -42,30 +44,15 @@ class Messages extends VileSci_Controller } } + $variablesArray = array(); + $msgVarsData = array(); + // Get variables $this->load->model('system/Message_model', 'MessageModel'); - $msgVarsDataByPrestudentId = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudent_id); - if ($msgVarsDataByPrestudentId->error) - { - show_error($msgVarsDataByPrestudentId->retval); - } - - if (!hasData($variables = $this->MessageModel->getMessageVars())) - { - unset($variables); - } - else - { - $variablesArray = array(); - // Skip person_id and prestudent_id - for($i = 2; $i < count($variables->retval); $i++) - { - $variablesArray['{'.str_replace(" ", "_", strtolower($variables->retval[$i])).'}'] = $variables->retval[$i]; - } - } - - array_shift($variables->retval); // Remove person_id - array_shift($variables->retval); // Remove prestudent_id + if($prestudent_id !== null) + $this->getPrestudentMsgData($prestudent_id, $variablesArray, $msgVarsData); + elseif($person_id !== null) + $this->getPersonMsgData($person_id, $variablesArray, $msgVarsData); // Organisation units used to get the templates $oe_kurzbz = array(); // A person can have more organisation units @@ -89,7 +76,7 @@ class Messages extends VileSci_Controller $data = array ( 'sender_id' => $sender_id, - 'receivers' => $msgVarsDataByPrestudentId->retval, + 'receivers' => $msgVarsData->retval, 'message' => $msg, 'variables' => $variablesArray, 'oe_kurzbz' => $oe_kurzbz, // used to get the templates @@ -99,6 +86,56 @@ class Messages extends VileSci_Controller $v = $this->load->view('system/messageWrite', $data); } + private function getPrestudentMsgData($prestudent_id, &$variablesArray, &$msgVarsData) + { + $msgVarsData = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudent_id); + if ($msgVarsData->error) + { + show_error($msgVarsData->retval); + } + + if (!hasData($variables = $this->MessageModel->getMessageVars())) + { + unset($variables); + } + else + { + $variablesArray = array(); + // Skip person_id and prestudent_id + for($i = 2; $i < count($variables->retval); $i++) + { + $variablesArray['{'.str_replace(" ", "_", strtolower($variables->retval[$i])).'}'] = $variables->retval[$i]; + } + } + + array_shift($variables->retval); // Remove person_id + array_shift($variables->retval); // Remove prestudent_id + } + + private function getPersonMsgData($person_id, &$variablesArray, &$msgVarsData) + { + $msgVarsData = $this->MessageModel->getMsgVarsDataByPersonId($person_id); + if ($msgVarsData->error) + { + show_error($msgVarsData->retval); + } + + if (!hasData($variables = $this->MessageModel->getMessageVarsPerson())) + { + unset($variables); + } + else + { + $variablesArray = array(); + // Skip person_id + for($i = 1; $i < count($variables->retval); $i++) + { + $variablesArray['{'.str_replace(" ", "_", strtolower($variables->retval[$i])).'}'] = $variables->retval[$i]; + } + array_shift($variables->retval); // Remove person_id + } + } + /** * send */ @@ -109,6 +146,7 @@ class Messages extends VileSci_Controller $subject = $this->input->post('subject'); $body = $this->input->post('body'); $prestudents = $this->input->post('prestudents'); + $persons = $this->input->post('persons'); $relationmessage_id = $this->input->post('relationmessage_id'); if (!isset($relationmessage_id) || $relationmessage_id == '') @@ -116,15 +154,20 @@ class Messages extends VileSci_Controller $relationmessage_id = null; } - // - $data = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudents); + // get message data of prestudents or persons + $prestudentsData = array(); + if($prestudents !== null) + { + $data = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudents); + // + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $prestudentsData = $this->PrestudentModel->getOrganisationunits($prestudents); + } + else + $data = $this->MessageModel->getMsgVarsDataByPersonId($persons); - // - $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - $prestudentsData = $this->PrestudentModel->getOrganisationunits($prestudents); - - // - if (hasData($data) && hasData($prestudentsData)) + // send message(s) + if (hasData($data)) { for ($i = 0; $i < count($data->retval); $i++) { @@ -138,12 +181,15 @@ class Messages extends VileSci_Controller $parsedText = $this->messagelib->parseMessageText($body, $dataArray); - $oe_kurzbz = ''; - for ($p = 0; $p < count($prestudentsData->retval); $p++) + $oe_kurzbz = null; + if(hasData($prestudentsData)) { - if ($prestudentsData->retval[$p]->prestudent_id == $data->retval[$i]->prestudent_id) + for ($p = 0; $p < count($prestudentsData->retval); $p++) { - $oe_kurzbz = $prestudentsData->retval[$p]->oe_kurzbz; + if ($prestudentsData->retval[$p]->prestudent_id == $data->retval[$i]->prestudent_id) + { + $oe_kurzbz = $prestudentsData->retval[$p]->oe_kurzbz; + } } } diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 4f4cefd79..5ad5e6066 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -474,7 +474,7 @@ class InfoCenter extends VileSci_Controller if (isError($dokumente_nachgereicht)) { - show_error($dokumente->retval); + show_error($dokumente_nachgereicht->retval); } $logs = $this->personloglib->getLogs($person_id); @@ -486,12 +486,22 @@ class InfoCenter extends VileSci_Controller show_error($notizen->retval); } + $user_person = $this->PersonModel->getByUid($this->uid); + + if (isError($user_person)) + { + show_error($user_person->retval); + } + + $messagelink = base_url('/index.ci.php/system/Messages/write/'.$user_person->retval[0]->person_id); + $data = array ( 'stammdaten' => $stammdaten->retval, 'dokumente' => $dokumente->retval, 'dokumente_nachgereicht' => $dokumente_nachgereicht->retval, 'logs' => $logs, - 'notizen' => $notizen->retval + 'notizen' => $notizen->retval, + 'messagelink' => $messagelink ); return $data; diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index caf746b94..81de63d49 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -157,13 +157,13 @@ class Person_model extends DB_Model * gets Stammdaten for a person, including contactdata in textform from other tables * nation, kontakt, adresse * @param $person_id - * @return array + * @return array, null when no person found */ public function getPersonStammdaten($person_id) { - $this->addSelect('tbl_person.*, s.kurztext as staatsbuergerschaft, g.kurztext as geburtsnation'); - $this->addJoin('bis.tbl_nation s', 'tbl_person.staatsbuergerschaft = s.nation_code', 'LEFT'); - $this->addJoin('bis.tbl_nation g', 'tbl_person.geburtsnation = g.nation_code', 'LEFT'); + $this->addSelect('public.tbl_person.*, s.kurztext as staatsbuergerschaft, g.kurztext as geburtsnation'); + $this->addJoin('bis.tbl_nation s', 'public.tbl_person.staatsbuergerschaft = s.nation_code', 'LEFT'); + $this->addJoin('bis.tbl_nation g', 'public.tbl_person.geburtsnation = g.nation_code', 'LEFT'); $person = $this->load($person_id); @@ -194,4 +194,18 @@ class Person_model extends DB_Model return success($stammdaten); } + + /** + * gets person data from uid + * @param $uid + * @return array + */ + public function getByUid($uid) + { + $this->addSelect('vorname, nachname, gebdatum, person_id'); + $this->addJoin('tbl_benutzer', 'person_id'); + + return $this->loadWhere(array('uid' => $uid)); + } + } diff --git a/application/models/system/Message_model.php b/application/models/system/Message_model.php index a99716022..64d9ff5d1 100644 --- a/application/models/system/Message_model.php +++ b/application/models/system/Message_model.php @@ -102,6 +102,23 @@ class Message_model extends DB_Model } } + /** + * getMessageVars for person + */ + public function getMessageVarsPerson() + { + $result = $this->db->query('SELECT * FROM public.vw_msg_vars_person WHERE 0 = 1'); + + if ($result) + { + return success($result->list_fields()); + } + else + { + return error($this->db->error(), FHC_DB_ERROR); + } + } + /** * getMsgVarsDataByPrestudentId */ @@ -111,4 +128,14 @@ class Message_model extends DB_Model return $this->execQuery(sprintf($query, is_array($prestudent_id) ? 'IN' : '='), array($prestudent_id)); } + + /** + * getMsgVarsDataByPersonId + */ + public function getMsgVarsDataByPersonId($person_id) + { + $query = 'SELECT * FROM public.vw_msg_vars_person WHERE person_id %s ?'; + + return $this->execQuery(sprintf($query, is_array($person_id) ? 'IN' : '='), array($person_id)); + } } diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index be2b68906..e540e22b9 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -29,7 +29,8 @@ $this->load->view(
+ Details: vorname.' '.$stammdaten->nachname ?> +
@@ -132,11 +133,26 @@ $this->load->view( - zugangscode)): ?> - Zugang Bewerbung: zugangscode) ?> - +
+
+
+ +  Nachricht senden +
+
+ zugangscode)): ?> + + +
@@ -727,11 +743,19 @@ $this->load->view( "dateFormat": "dd.mm.yy" }); - //javascript hack - not nice! + //javascript bootstrap hack - not nice! $("select").addClass('form-control'); $("table").addClass('table-condensed'); $("#logtable, #notiztable").addClass('table-hover'); + //add submit event to message send link + $("#sendmsglink").click( + function() + { + $("#sendmsgform").submit(); + } + ); + //add click events to "formal geprüft" checkboxes diff --git a/application/views/system/messageWrite.php b/application/views/system/messageWrite.php index 940e097ad..6b300bc46 100644 --- a/application/views/system/messageWrite.php +++ b/application/views/system/messageWrite.php @@ -126,8 +126,9 @@ prestudent_id) ? $receiver->prestudent_id : $receiver->person_id; ?> - + @@ -156,7 +157,17 @@ for($i = 0; $i < count($receivers); $i++) { $receiver = $receivers[$i]; - echo '' . "\n"; + if (isset($receiver->prestudent_id)) + { + $receiverid = $receiver->prestudent_id; + $fieldname= 'prestudents[]'; + } + else + { + $receiverid = $receiver->person_id; + $fieldname= 'persons[]'; + } + echo '' . "\n"; } ?> diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index f2dd9f398..dbd40a3d2 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -127,6 +127,75 @@ if(!$result = @$db->db_query("SELECT 1 FROM public.vw_msg_vars LIMIT 1")) else echo '
Granted privileges to vilesci on public.vw_msg_vars'; } + +if(!$result = @$db->db_query("SELECT 1 FROM public.vw_msg_vars_person LIMIT 1")) +{ + // CREATE OR REPLACE VIEW public.vw_msg_vars and grants privileges + $qry = ' + CREATE OR REPLACE VIEW public.vw_msg_vars_person AS ( + SELECT DISTINCT ON(p.person_id) p.person_id, + p.nachname AS "Nachname", + p.vorname AS "Vorname", + p.anrede AS "Anrede", + a.strasse AS "Strasse", + a.ort AS "Ort", + a.plz AS "PLZ", + a.gemeinde AS "Gemeinde", + a.langtext AS "Nation", + ke.kontakt AS "Email", + kt.kontakt AS "Telefon" + FROM public.tbl_person p + LEFT JOIN ( + SELECT person_id, + kontakt + FROM public.tbl_kontakt + WHERE zustellung = TRUE + AND kontakttyp = \'email\' + ORDER BY kontakt_id DESC + ) ke USING(person_id) + LEFT JOIN ( + SELECT person_id, + kontakt + FROM public.tbl_kontakt + WHERE zustellung = TRUE + AND kontakttyp IN (\'telefon\', \'mobil\') + ORDER BY kontakt_id DESC + ) kt USING(person_id) + LEFT JOIN ( + SELECT person_id, + strasse, + ort, + plz, + gemeinde, + langtext + FROM public.tbl_adresse + LEFT JOIN bis.tbl_nation ON(bis.tbl_nation.nation_code = public.tbl_adresse.nation) + WHERE public.tbl_adresse.heimatadresse = TRUE + ORDER BY adresse_id DESC + ) a USING(person_id) + ORDER BY p.person_id ASC + );'; + + if(!$db->db_query($qry)) + echo 'public.vw_msg_vars_person: '.$db->db_last_error().'
'; + else + echo '
public.vw_msg_vars_person view created'; + + $qry = 'GRANT SELECT ON TABLE public.vw_msg_vars_person TO web;'; + + if(!$db->db_query($qry)) + echo 'public.vw_msg_vars_person: '.$db->db_last_error().'
'; + else + echo '
Granted privileges to web on public.vw_msg_vars_person'; + + $qry = 'GRANT SELECT ON TABLE public.vw_msg_vars_person TO vilesci;'; + + if(!$db->db_query($qry)) + echo 'public.vw_msg_vars_person: '.$db->db_last_error().'
'; + else + echo '
Granted privileges to vilesci on public.vw_msg_vars_person'; +} + //Spalte anmerkung und rechnungsadresse in tbl_adresse if(!$result = @$db->db_query("SELECT rechnungsadresse FROM public.tbl_adresse LIMIT 1")) {