Files
FHC-Core/application/controllers/system/Messages.php
T
Paolo a913482ef4 - Added private method _replaceKeys to controller system/Messages.php
- Fixed replacement of keys in the message vars array
2019-02-15 15:30:04 +01:00

340 lines
8.3 KiB
PHP

<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class Messages extends Auth_Controller
{
/**
*
*/
public function __construct()
{
parent::__construct(
array(
'write' => array('basis/message:rw', 'infocenter:rw'),
'send' => array('basis/message:rw', 'infocenter:rw'),
'sendJson' => array('basis/message:rw', 'infocenter:rw'),
'getVorlage' => array('basis/message:r', 'infocenter:r'),
'parseMessageText' => array('basis/message:r', 'infocenter:r'),
'getMessageFromIds' => array('basis/message:r', 'infocenter:r')
)
);
// Loads the message library
$this->load->library('MessageLib');
// Loads the widget library
$this->load->library('WidgetLib');
$this->load->model('system/Message_model', 'MessageModel');
$this->loadPhrases(
array(
'global',
'ui'
)
);
}
// -----------------------------------------------------------------------------------------------------------------
// Public methods
/**
* Write a new message
*/
public function write()
{
$person_id = $this->input->post('person_id');
$sender_id = null;
$authUser = $this->_getAuthUser();
if (isError($authUser))
{
show_error($authUser->retval);
}
else
{
$sender_id = getData($authUser)[0]->person_id;
}
$msgVarsData = $this->_getMsgVarsData($person_id);
// Retrieves message vars for a person from view view vw_msg_vars_person
$variablesArray = $this->messagelib->getMessageVarsPerson();
// Organisation units used to get the templates
$oe_kurzbz = $this->messagelib->getOeKurzbz($sender_id);
// Admin or commoner?
$isAdmin = $this->messagelib->getIsAdmin($sender_id);
$data = array (
'recipients' => $msgVarsData->retval,
'variables' => $variablesArray,
'oe_kurzbz' => $oe_kurzbz, // used to get the templates
'isAdmin' => $isAdmin
);
$this->load->view('system/messages/messageWrite', $data);
}
/**
* Send message
*/
public function send()
{
$persons = $this->input->post('persons');
$relationmessage_id = $this->input->post('relationmessage_id');
$msgVarsData = $this->MessageModel->getMsgVarsDataByPersonId($persons);
$send = $this->_send($msgVarsData, $relationmessage_id);
$this->load->view('system/messages/messageSent', array('success' => isSuccess($send)));
}
/**
* Send message, response is in JSON format
*/
public function sendJson()
{
$prestudents = $this->input->post('prestudents');
$vorlage_kurzbz = $this->input->post('vorlage_kurzbz');
$oe_kurzbz = $this->input->post('oe_kurzbz');
$msgVars = $this->input->post('msgvars');
$msgVarsData = $this->MessageModel->getMsgVarsDataByPrestudentId($prestudents);
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$prestudentsData = $this->PrestudentModel->getOrganisationunits($prestudents);
// Adds the organisation unit to each prestudent
if (isEmptyString($oe_kurzbz) && hasData($msgVarsData) && hasData($prestudentsData))
{
for ($i = 0; $i < count($msgVarsData->retval); $i++)
{
for ($p = 0; $p < count($prestudentsData->retval); $p++)
{
if ($prestudentsData->retval[$p]->prestudent_id == $msgVarsData->retval[$i]->prestudent_id)
{
$msgVarsData->retval[$i]->oe_kurzbz = $prestudentsData->retval[$p]->oe_kurzbz;
break;
}
}
}
}
$send = $this->_send($msgVarsData, null, $oe_kurzbz, $vorlage_kurzbz, $msgVars);
if (isError($send))
{
$this->outputJsonError($send->retval);
}
else
{
$this->outputJsonSuccess($send->retval);
}
}
// -----------------------------------------------------------------------------------------------------------------
// Private methods
/**
* Executes message sending
* @param $sender_id
* @return array wether execution was successfull - error or success
*/
private function _send($msgVarsData, $relationmessage_id = null, $oe_kurzbz = null, $vorlage_kurzbz = null, $msgVars = null)
{
$subject = $this->input->post('subject');
$body = $this->input->post('body');
$authUser = $this->_getAuthUser();
if (isError($authUser)) return $authUser;
$sender_id = getData($authUser)[0]->person_id;
// Send message(s)
if (hasData($msgVarsData))
{
// Loads the person log library
$this->load->library('PersonLogLib');
for ($i = 0; $i < count($msgVarsData->retval); $i++)
{
$parsedText = "";
$msgVarsDataArray = $this->_replaceKeys((array)$msgVarsData->retval[$i]); // replaces array keys
// Send without vorlage
if (isEmptyString($vorlage_kurzbz))
{
$parsedText = $this->messagelib->parseMessageText($body, $msgVarsDataArray);
$msg = $this->messagelib->sendMessage($sender_id, $msgVarsDataArray['person_id'], $subject, $parsedText, PRIORITY_NORMAL, $relationmessage_id, $oe_kurzbz);
}
// Send with vorlage
else
{
if (is_array($msgVars))
{
// Additional message variables
foreach ($msgVars as $key => $msgvar)
{
$msgVarsDataArray[$key] = $msgvar;
}
}
$msg = $this->messagelib->sendMessageVorlage($sender_id, $msgVarsDataArray['person_id'], $vorlage_kurzbz, $oe_kurzbz, $msgVarsDataArray);
}
if (isError($msg)) return $msg;
// Write log entry
$personLog = $this->personloglib->log(
$msgVarsDataArray['person_id'],
'Action',
array(
'name' => 'Message sent',
'message' => 'Message sent from person '.$sender_id.' to '.$msgVarsDataArray['person_id'].', messageid '.$msg->retval,
'success' => 'true'
),
'kommunikation',
'core',
null,
getAuthUID()
);
}
return success('Messages sent successfully');
}
else
{
return $msgVarsData;
}
}
/**
* getVorlage
*/
public function getVorlage()
{
$vorlage_kurzbz = $this->input->get('vorlage_kurzbz');
$result = null;
if (!isEmptyString($vorlage_kurzbz))
{
$this->load->model('system/Vorlagestudiengang_model', 'VorlagestudiengangModel');
$this->VorlagestudiengangModel->addOrder('version','DESC');
$result = $this->VorlagestudiengangModel->loadWhere(array('vorlage_kurzbz' => $vorlage_kurzbz));
}
else
{
$result = error('The given vorlage_kurzbz is not valid');
}
if (isError($result) || !hasData($result))
{
$this->outputJsonError($result->retval);
}
else
{
$this->outputJsonSuccess($result->retval);
}
}
/**
* parseMessageText
*/
public function parseMessageText()
{
$person_id = $this->input->get('person_id');
$text = $this->input->get('text');
$parsedText = '';
$data = null;
if (is_numeric($person_id))
{
$data = $this->MessageModel->getMsgVarsDataByPersonId($person_id);
}
else
{
$data = error('The given person_id is not a valid number');
}
if (isError($data) || !hasData($data))
{
$this->outputJsonError($data->retval);
}
else
{
$parsedText = $this->messagelib->parseMessageText($text, $this->_replaceKeys((array)$data->retval[0]));
$this->outputJsonSuccess($parsedText);
}
}
/**
* Outputs message data for a message (identified my msg id and receiver id) in JSON format
* @param $msg_id
* @param $receiver_id
*/
public function getMessageFromIds()
{
$msg_id = $this->input->get('msg_id');
$receiver_id = $this->input->get('receiver_id');
$msg = $this->messagelib->getMessage($msg_id, $receiver_id);
$this->output
->set_content_type('application/json')
->set_output(json_encode(array($msg->retval[0])));
}
// -----------------------------------------------------------------------------------------------------------------
// Private methods
/**
* Retrieves message vars from view vw_msg_vars
*/
private function _getMsgVarsData($person_id)
{
$msgVarsData = $this->MessageModel->getMsgVarsDataByPersonId($person_id);
if (isError($msgVarsData))
{
show_error($msgVarsData->retval);
}
return $msgVarsData;
}
/**
*
*/
private function _getAuthUser()
{
$sender_id = null;
$this->load->model('person/Person_model', 'PersonModel');
$authUser = $this->PersonModel->getByUid(getAuthUID());
if (!hasData($authUser)) $authUser = error('The current logged user person_id is not defined');
return $authUser;
}
/**
*
*/
private function _replaceKeys($data)
{
$tmpData = array();
// Replaces data array keys to a lowercase without spaces string
foreach ($data as $key => $val)
{
$tmpData[str_replace(' ', '_', strtolower($key))] = $val;
}
return $tmpData;
}
}