PRinting the event mail template, fixing some jquery, adding security, still need more work see #4658

skala
Julio Montoya 14 years ago
parent ba2197b858
commit 0bc2807f73
  1. 91
      main/admin/event_controller.php
  2. 164
      main/admin/event_type.php
  3. 4
      main/inc/ajax/events.ajax.php
  4. 23
      main/inc/ajax/model.ajax.php
  5. 23
      main/inc/conf/events.conf.dist.php
  6. 1
      main/inc/lib/autoload.class.php
  7. 121
      main/inc/lib/event_email_template.class.php
  8. 14
      main/inc/lib/events.lib.inc.php

@ -0,0 +1,91 @@
<?php
// name of the language file that needs to be included
$language_file = array('admin', 'events');
$cidReset = true;
require_once '../inc/global.inc.php';
//The event type is so mess that I'm giving me the freedom to try to do a "symfony controller" style
class eventController { // extends Controller {
public function showAction()
{
}
public function newAction()
{
}
public function addAction()
{
}
public function listingAction()
{
$event_email_template = new EventEmailTemplate();
return $event_email_template->display();
}
public function deleteAction($id) {
$event_email_template = new EventEmailTemplate();
return $event_email_template->delete($id);
}
}
$event_controller = new eventController();
$action = isset($_GET['action']) ? $_GET['action'] : null;
switch ($action) {
case 'show':
$event_controller->showAction();
break;
case 'add':
$event_controller->addAction();
break;
case 'new':
$event_controller->newAction();
break;
case 'listing':
$content = $event_controller->listingAction();
break;
case 'delete' :
$event_controller->deleteAction($_GET['id']);
$content = $event_controller->listingAction();
break;
}
//jqgrid will use this URL to do the selects
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_event_email_template';
//The order is important you need to check the the $column variable in the model.ajax.php file
$columns = array(get_lang('Subject'), get_lang('Message'), get_lang('EventTypeName'), get_lang('Language'), get_lang('Status'), get_lang('Actions'));
//Column config
$column_model = array(
array('name'=>'subject', 'index'=>'subject', 'width'=>'80', 'align'=>'left'),
array('name'=>'message', 'index'=>'message', 'width'=>'500', 'align'=>'left','sortable'=>'false'),
array('name'=>'event_type_name', 'index'=>'event_type_name', 'width'=>'80', 'align'=>'left'),
array('name'=>'language_id', 'index'=>'language_id', 'width'=>'80', 'align'=>'left'),
array('name'=>'activated', 'index'=>'activated', 'width'=>'80', 'align'=>'left'),
array('name'=>'actions', 'index'=>'actions', 'width'=>'100')
);
//Autowidth
$extra_params['autowidth'] = 'true';
//height auto
$extra_params['height'] = 'auto';
$htmlHeadXtra[] = api_get_jqgrid_js();
$htmlHeadXtra[] = '<script>
$(function() {
'.Display::grid_js('event_email_template', $url,$columns,$column_model,$extra_params, array(), $action_links,true).'
});
</script>';
$tpl = new Template($tool_name);
$tpl->assign('actions', $actions);
$tpl->assign('message', $message);
$tpl->assign('content', $content);
$tpl->display_one_col_template();

@ -1,11 +1,12 @@
<?php
// name of the language file that needs to be included
$language_file = array('admin', 'events');
$cidReset = true;
require_once '../inc/global.inc.php';
require_once '../inc/conf/events.conf.php';
$this_section = SECTION_PLATFORM_ADMIN;
api_protect_admin_script();
$interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin'));
@ -23,14 +24,11 @@ $activated = isset($_POST['activated'])?$_POST['activated']:0;
if ($action == 'modEventType') {
if ($eventUsers) {
$users = explode(';', $eventUsers);
}
else {
} else {
$users = array();
}
save_event_type_message($eventName, $users, $eventMessage, $eventSubject, $eventMessageLanguage, $activated);
// echo mysql_error();
header('location: event_type.php');
exit;
}
@ -42,23 +40,21 @@ $languages = api_get_languages();
$ajaxPath = api_get_path(WEB_CODE_PATH) . 'inc/ajax/events.ajax.php';
Display::display_header($tool_name);
$key_lang = get_lang('unsaved_changes');
$action_array = array(array('url' =>'event_controller.php?action=listing' , 'content' => get_lang('List')));
echo Display::actions($action_array);
$key_lang = get_lang('unsaved_changes');
$users = UserManager::get_user_list();
?>
<script language="javascript">
<script>
var usersList = <?php print json_encode($users) ?>;
var eventTypes = <?php print json_encode($ets) ?>;
var eventsConfig = <?php print json_encode($event_config) ?>;
var currentLanguage = <?php print json_encode(api_get_interface_language()) ?>;
var flagContentHasChanged = false;
var key_lang = "<?php print $key_lang ?>";
function ajax(params,func) {
$.ajax({
url: "<?php echo $ajaxPath ?>",
@ -72,29 +68,25 @@ $users = UserManager::get_user_list();
function refreshUsersList() {
removeAllOption($('#usersList'));
$.each(usersList, function(ind,item) {
console.log(item.firstname);
addOption($('#usersList'), item.user_id, item.firstname + ' '+item.lastname);
}
);
});
}
function getCurrentEventTypeInd() {
var ind=false;
$.each(eventTypes,function(i,item)
{
$.each(eventTypes,function(i,item) {
if(item.event_type_name == $('#eventList option:selected').first().attr('value')) {
ind=i;
return false;
}
}
)
return ind;
}
function getCurrentEventTypeName()
{
function getCurrentEventTypeName() {
var name = false;
return $('#eventList option:selected').first().attr('value');
}
@ -106,93 +98,82 @@ $users = UserManager::get_user_list();
$("span#activated_checkbox").css("display", "inline"); // make checkbox visible
$('input[name=activated]').attr('checked', false);
if(typeof(eventsConfig[currentEventName])!='undefined')
{
if(eventsConfig[currentEventName].self_sent == true) // if registration, only sent to self_user
{
$(".registration_case").css("display", "none");
if (typeof(eventsConfig[currentEventName])!='undefined') {
// if registration, only sent to self_user
if (eventsConfig[currentEventName].self_sent == true) {
//hide
$(".registration_case").show();
$("#usersList").attr('disabled', 'true');
$("#usersSubList").attr('disabled', 'true');
} else {
$(".registration_case").show();
$("#usersList").removeAttr('disabled');
$("#usersSubList").removeAttr('disabled');
}
else
{
$(".registration_case").css("display", "block");
}
}
else
{
$(".registration_case").css("display", "block");
} else {
$(".registration_case").show();
$("#usersList").removeAttr('disabled');
$("#usersSubList").removeAttr('disabled');
}
// List of events configuration
$('#eventName').attr('value', currentEventName);
// $('#descLangVar').text(eventsConfig[currentEventName].desc_lang_var);
// set message and subject accoding to the current interface language
$.each(eventTypes,function(key,value)
{
if(eventTypes[key]["event_type_name"] == currentEventName)
{
// Set message and subject accoding to the current interface language
$.each(eventTypes,function(key,value) {
if (eventTypes[key]["event_type_name"] == currentEventName) {
$('#eventNameTitle').text(eventTypes[key]["nameLangVar"]);
}
if(eventTypes[key]["event_type_name"] == currentEventName && eventTypes[key]["activated"] == 1)
{
if (eventTypes[key]["event_type_name"] == currentEventName && eventTypes[key]["activated"] == 1) {
$('input[name=activated]').attr('checked', true);
}
if(eventTypes[key]["event_type_name"] == currentEventName && eventTypes[key]["dokeos_folder"] == currentLanguage)
{
if (eventTypes[key]["event_type_name"] == currentEventName && eventTypes[key]["dokeos_folder"] == currentLanguage) {
$('#eventMessage').val(eventTypes[key]["message"]);
$('#eventSubject').val(eventTypes[key]["subject"]);
}
});
// displays the available keys for the mail template (related to an event name)
// Displays the available keys for the mail template (related to an event name)
$('#keys').find('li').remove();
if(typeof(eventsConfig[currentEventName]["available_keyvars"])!='undefined')
{
$.each(eventsConfig[currentEventName]["available_keyvars"],function(key,value)
{
if(typeof(eventsConfig[currentEventName]["available_keyvars"])!='undefined') {
$.each(eventsConfig[currentEventName]["available_keyvars"],function(key,value) {
$('#keys').append('<li>'+key+'</li>');
});
}
ajax({action:"get_event_users", eventName:currentEventName},function(data) {
$.ajax({
url: '<?php echo $ajaxPath ?>?action=get_event_users&eventName=' +currentEventName,
dataType: 'json',
success: function(data) {
removeAllOption($('#usersSubList'));
refreshUsersList();
//
usersIds = new Array();
$.each(data,function(ind,item) {
var json = jQuery.parseJSON(data);
$.each(json, function(ind,item) {
addOption($('#usersSubList'),item.user_id, item.firstname + ' '+item.lastname);
usersIds[ind] = item.value;
removeOption($('#usersList'),item.user_id);
});
$('#eventUsers').attr('value',usersIds.join(';'));
}
);
});
}
function submitForm() {
if($('#eventId')) {
usersIds = new Array();
$('#usersSubList option').each(function(ind,item)
{
$('#usersSubList option').each(function(ind,item) {
usersIds[ind] = item.value;
}
);
});
$('#eventUsers').attr('value',usersIds.join(';'));
return true;
}
return false;
}
@ -247,27 +228,20 @@ $users = UserManager::get_user_list();
/**
* Asks if user want to abandon the changes he's done
*/
function confirmMessage(sender)
{
if(flagContentHasChanged == true)
{
if(confirm(key_lang))
{
function confirmMessage(sender) {
console.log(sender);
if(flagContentHasChanged == true) {
if(confirm(key_lang)) {
flagContentHasChanged = false;
if(sender == "eventList")
{
if(sender == "eventList") {
cleanInput();
showEventType();
}
else if(sender == "languages")
{
} else if(sender == "languages") {
cleanInput();
changeLanguage();
}
}
}
else
{
} else {
if(sender == "eventList")
showEventType();
else if(sender == "languages")
@ -284,11 +258,10 @@ $users = UserManager::get_user_list();
$('#eventSubject').val("");
}
</script>
<h3><?php print get_lang('events_title') ?></h3>
<div class="page-header">
<h2><?php print get_lang('events_title') ?></h2>
</div>
<form method="POST" onSubmit="return submitForm(); ">
<table id="" width="90%">
<tr>
<td width="5%">
@ -308,11 +281,9 @@ $users = UserManager::get_user_list();
<td>
<select multiple="1" id="eventList" onchange="confirmMessage(this.name); return false;" name="eventList">
<?php
foreach ($event_config as $key => $config) {
print '<option value="' . $key . '">' . get_lang($config['name_lang_var']) . '</option>';
}
?>
</select>
</td>
@ -322,6 +293,7 @@ $users = UserManager::get_user_list();
<td valign="middle" class="registration_case">
<button class="arrowr" onclick='moveUsers($("#usersList"),$("#usersSubList")); return false;'></button>
<br />
<br />
<button class="arrowl" onclick='moveUsers($("#usersSubList"),$("#usersList")); return false;'></button>
</td>
<td>
@ -330,15 +302,18 @@ $users = UserManager::get_user_list();
</tr>
</table>
<br />
<span id="activated_checkbox"><label for="activated" style="display:inline;"><?php print get_lang('checkbox_activated'); ?></label><input type="checkbox" name="activated" value="1" /></span>
<br />
<h2 id="eventNameTitle"></h2>
<span id="activated_checkbox">
<label for="activated" style="display:inline;"><?php print get_lang('checkbox_activated'); ?></label>
<input type="checkbox" name="activated" value="1" />
</span>
<br />
<h2 id="eventNameTitle"></h2>
<select id="languages" name="languages" style="margin-top:20px;" onclick='confirmMessage(this.name); return false;'>
<?php foreach($languages["name"] as $key => $value){ $english_name = $languages['folder'][$key]; ?>
<?php foreach ($languages["name"] as $key => $value) {
$english_name = $languages['folder'][$key]; ?>
<option value="<?php echo $english_name; ?>" <?php echo ($english_name == api_get_interface_language()) ? "selected=selected" : ""; ?>><?php echo $value; ?></option>
<?php } ?>
</select>
@ -349,13 +324,14 @@ $users = UserManager::get_user_list();
<input type="hidden" id="eventName" />
<br />
<!-- <div id="descLangVar">
</div>-->
<br />
<label for="eventSubject"><h4><?php print get_lang('events_labelSubject'); ?></h4></label>
<input type="text" id="eventSubject" name="eventSubject" onchange="contentChanged(); return false;" />
<label for="eventSubject">
<h4><?php print get_lang('events_labelSubject'); ?></h4>
</label>
<input class="span6" type="text" id="eventSubject" name="eventSubject" onchange="contentChanged(); return false;" />
<br /><br />
<table>
<tr>
@ -368,7 +344,8 @@ $users = UserManager::get_user_list();
</tr>
<tr>
<td>
<textarea cols="100" rows="10" name="eventMessage" id="eventMessage" onchange="contentChanged(); return false;"></textarea>
<textarea class="span6" rows="10" name="eventMessage" id="eventMessage" onchange="contentChanged(); return false;">
</textarea>
</td>
<td class="available_keys">
<div id="keys" style="padding-left: 50px;"><ul></ul></div>
@ -381,10 +358,5 @@ $users = UserManager::get_user_list();
<input type="submit" value="<?php print get_lang('events_btnMod'); ?>" />
</form>
<?php
Display :: display_footer();
?>

@ -4,7 +4,7 @@ require_once '../global.inc.php';
$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null;
$actionEventName = isset($_REQUEST['eventName']) ? $_REQUEST['eventName'] : null;
$event_name = isset($_REQUEST['eventName']) ? $_REQUEST['eventName'] : null;
api_protect_admin_script();
@ -18,7 +18,7 @@ switch ($action) {
print json_encode($users);
break;
case 'get_event_users' :
$users = get_event_users($actionEventName);
$users = get_event_users($event_name);
print json_encode($users);
break;
}

@ -120,6 +120,10 @@ switch ($action) {
$obj = new Gradebook();
$count = $obj->get_count();
break;
case 'get_event_email_template':
$obj = new EventEmailTemplate();
$count = $obj->get_count();
break;
case 'get_careers':
$obj = new Career();
$count = $obj->get_count();
@ -253,6 +257,23 @@ switch ($action) {
}
$result = $new_result;
break;
case 'get_event_email_template':
$columns = array('subject', 'message', 'event_type_name', 'language_id', 'activated', 'actions');
if(!in_array($sidx, $columns)) {
$sidx = 'subject';
}
$result = Database::select('*', $obj->table, array('order'=>"$sidx $sord", 'LIMIT'=> "$start , $limit"));
$new_result = array();
foreach ($result as $item) {
$item['actions'] .= Display::url(Display::return_icon('delete.png', get_lang('Delete')), api_get_path(WEB_CODE_PATH).'admin/event_controller.php?action=delete&id='.$item['id']);
/*if (!$item['status']) {
$item['name'] = '<font style="color:#AAA">'.$item['subject'].'</font>';
}*/
$new_result[] = $item;
}
$result = $new_result;
break;
case 'get_careers':
$columns = array('name', 'description', 'actions');
if(!in_array($sidx, $columns)) {
@ -321,7 +342,7 @@ switch ($action) {
//var_dump($result);
$allowed_actions = array('get_careers', 'get_promotions', 'get_usergroups', 'get_gradebooks',
'get_sessions', 'get_exercise_results', 'get_work_user_list', 'get_timelines', 'get_grade_models');
'get_sessions', 'get_exercise_results', 'get_work_user_list', 'get_timelines', 'get_grade_models', 'get_event_email_template');
//5. Creating an obj to return a json
if (in_array($action, $allowed_actions)) {
$response = new stdClass();

@ -14,7 +14,30 @@
*
*/
global $event_config;
$event_config = array(
'portal_homepage_edited' => array( // key for "user registration" event
'actions' => array( // we link this event to a bunch of functions that will be triggered when the event is fired
'portal_homepage_edited_send_email' // don't forget to actually write this function at the end of this file
),
'self_sent' => false, // this key states that we can't add user to this event through the admin panel
'name_lang_var' => get_lang('portal_homepage_edited'),
'desc_lang_var' => get_lang('portal_homepage_edited'),
'available_keyvars' => array (// keys used for the mail template
'url' => 'portal',
'sitename' => 'sitename',
'firstname' => 'firstname',
'lastname' => 'lastname',
'username' => 'username',
'usermail' => 'usermail',
'password' => 'password',
'user_lang' => 'language',
'admin_name' => 'administrator_name',
'admin_surname' => 'administrator_surname',
'admin_phone' => 'administrator_phone',
'admin_email' => 'administrator_email',
)
),
'user_registration' => array( // key for "user registration" event
'actions' => array( // we link this event to a bunch of functions that will be triggered when the event is fired
'event_send_mail' // don't forget to actually write this function at the end of this file

@ -145,6 +145,7 @@ class Autoload
$result['Event'] = '/main/coursecopy/classes/Event.class.php';
$result['EventsMail'] = '/main/inc/lib/events_email.class.php';
$result['EventsDispatcher'] = '/main/inc/lib/events_dispatcher.class.php';
$result['EventEmailTemplate'] = '/main/inc/lib/event_email_template.class.php';
$result['Exercise'] = '/main/exercice/exercise.class.php';
$result['ExerciseLink'] = '/main/gradebook/lib/be/exerciselink.class.php';
$result['ExerciseResult'] = '/main/exercice/exercise_result.class.php';

@ -0,0 +1,121 @@
<?php
/* For licensing terms, see /license.txt */
/**
* This class provides methods for the notebook management.
* Include/require it in your code to use its features.
* @package chamilo.library
*/
/**
* Code
*/
define ('EVENT_EMAIL_TEMPLATE_ACTIVE', 1);
define ('EVENT_EMAIL_TEMPLATE_INACTIVE',0);
/**
* @package chamilo.library
*/
class EventEmailTemplate extends Model {
var $table;
var $columns = array('id', 'message','subject','event_type_name','activated');
public function __construct() {
$this->table = Database::get_main_table(TABLE_EVENT_EMAIL_TEMPLATE);
}
public function get_all($where_conditions = array()) {
return Database::select('*',$this->table, array('where'=>$where_conditions,'order' =>'name ASC'));
}
/**
* Displays the title + grid
*/
public function display() {
// action links
$content = Display::actions(array(array('url' => 'event_type.php' , 'content' => get_lang('Add'))));
$content .= Display::grid_html('event_email_template');
return $content;
}
public function get_status_list() {
return array(EVENT_EMAIL_TEMPLATE_ACTIVE => get_lang('Enable'), EVENT_EMAIL_TEMPLATE_INACTIVE=> get_lang('Disable'));
}
/**
* Returns a Form validator Obj
* @todo the form should be auto generated
* @param string url
* @param string action add, edit
* @return obj form validator obj
*/
public function return_form($url, $action) {
$oFCKeditor = new FCKeditor('description') ;
$oFCKeditor->ToolbarSet = 'careers';
$oFCKeditor->Width = '100%';
$oFCKeditor->Height = '200';
$oFCKeditor->Value = '';
$oFCKeditor->CreateHtml();
$form = new FormValidator('career', 'post', $url);
// Settting the form elements
$header = get_lang('Add');
if ($action == 'edit') {
$header = get_lang('Modify');
}
$form->addElement('header', $header);
$id = isset($_GET['id']) ? intval($_GET['id']) : '';
$form->addElement('hidden', 'id', $id);
$form->addElement('text', 'name', get_lang('Name'), array('size' => '70'));
$form->add_html_editor('description', get_lang('Description'), false, false, array('ToolbarSet' => 'careers','Width' => '100%', 'Height' => '250'));
$status_list = $this->get_status_list();
$form->addElement('select', 'status', get_lang('Status'), $status_list);
if ($action == 'edit') {
$form->addElement('text', 'created_at', get_lang('CreatedAt'));
$form->freeze('created_at');
}
if ($action == 'edit') {
$form->addElement('style_submit_button', 'submit', get_lang('Modify'), 'class="save"');
} else {
$form->addElement('style_submit_button', 'submit', get_lang('Add'), 'class="save"');
}
// Setting the defaults
$defaults = $this->get($id);
if (!empty($defaults['created_at'])) {
$defaults['created_at'] = api_convert_and_format_date($defaults['created_at']);
}
if (!empty($defaults['updated_at'])) {
$defaults['updated_at'] = api_convert_and_format_date($defaults['updated_at']);
}
$form->setDefaults($defaults);
// Setting the rules
$form->addRule('name', get_lang('ThisFieldIsRequired'), 'required');
return $form;
}
public function get_count() {
$row = Database::select('count(*) as count', $this->table, array(),'first');
return $row['count'];
}
/*
public function save($params) {
$id = parent::save($params);
if (!empty($id)) {
event_system(LOG_CAREER_CREATE, LOG_CAREER_ID, $id, api_get_utc_datetime(), api_get_user_id());
}
return $id;
}
public function delete($id) {
parent::delete($id);
event_system(LOG_CAREER_DELETE, LOG_CAREER_ID, $id, api_get_utc_datetime(), api_get_user_id());
} */
}

@ -666,7 +666,8 @@ function get_users_subscribed_to_event($event_name) {
WHERE ue.user_id = u.user_id
AND e.name = "'.$event_name.'"
AND e.id = ue.event_type_id';
return Database::store_result(Database::query($sql),'ASSOC');
$return = Database::store_result(Database::query($sql),'ASSOC');
return json_encode($return);
}
/**
@ -676,11 +677,16 @@ function get_users_subscribed_to_event($event_name) {
*/
function get_event_users($event_name) {
$event_name = Database::escape_string($event_name);
$sql = 'SELECT user.* FROM '.Database::get_main_table(TABLE_MAIN_USER).' user JOIN '.Database::get_main_table(TABLE_EVENT_TYPE_REL_USER).' relUser
$sql = 'SELECT user.user_id, user.firstname, user.lastname FROM '.Database::get_main_table(TABLE_MAIN_USER).' user JOIN '.Database::get_main_table(TABLE_EVENT_TYPE_REL_USER).' relUser
ON relUser.user_id = user.user_id
WHERE relUser.event_type_name = "'.$event_name.'"';
$events_types = Database::store_result(Database::query($sql),'ASSOC');
return $events_types;
//For tests
//$sql = 'SELECT user.user_id, user.firstname, user.lastname FROM '.Database::get_main_table(TABLE_MAIN_USER);
$user_list = Database::store_result(Database::query($sql), 'ASSOC');
return json_encode($user_list);
}
/**

Loading…
Cancel
Save