diff --git a/main/admin/event_controller.php b/main/admin/event_controller.php new file mode 100644 index 0000000000..09c01b1881 --- /dev/null +++ b/main/admin/event_controller.php @@ -0,0 +1,91 @@ +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[] = ''; + +$tpl = new Template($tool_name); +$tpl->assign('actions', $actions); +$tpl->assign('message', $message); +$tpl->assign('content', $content); +$tpl->display_one_col_template(); \ No newline at end of file diff --git a/main/admin/event_type.php b/main/admin/event_type.php index ff57dc04f7..7a931942eb 100644 --- a/main/admin/event_type.php +++ b/main/admin/event_type.php @@ -1,390 +1,362 @@ 'index.php', 'name' => get_lang('PlatformAdmin')); +$interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); $tool_name = get_lang('events_title'); -$action = isset($_POST['action'])?$_POST['action']:null; +$action = isset($_POST['action']) ? $_POST['action'] : null; //$eventId = isset($_POST['eventId'])?$_POST['eventId']:null; -$eventName = isset($_POST['eventList'])?$_POST['eventList']:null; -$eventUsers = isset($_POST['eventUsers'])?$_POST['eventUsers']:null; -$eventMessage = isset($_POST['eventMessage'])?$_POST['eventMessage']:null; -$eventSubject = isset($_POST['eventSubject'])?$_POST['eventSubject']:null; -$eventMessageLanguage = isset($_POST['languages'])?$_POST['languages']:null; -$activated = isset($_POST['activated'])?$_POST['activated']:0; - -if($action == 'modEventType') { - if($eventUsers) { - $users = explode(';',$eventUsers); - } - else { - $users = array(); - } - - save_event_type_message($eventName,$users,$eventMessage,$eventSubject, $eventMessageLanguage, $activated); - - // echo mysql_error(); - header('location: event_type.php'); - exit; +$eventName = isset($_POST['eventList']) ? $_POST['eventList'] : null; +$eventUsers = isset($_POST['eventUsers']) ? $_POST['eventUsers'] : null; +$eventMessage = isset($_POST['eventMessage']) ? $_POST['eventMessage'] : null; +$eventSubject = isset($_POST['eventSubject']) ? $_POST['eventSubject'] : null; +$eventMessageLanguage = isset($_POST['languages']) ? $_POST['languages'] : null; +$activated = isset($_POST['activated']) ? $_POST['activated'] : 0; + +if ($action == 'modEventType') { + if ($eventUsers) { + $users = explode(';', $eventUsers); + } else { + $users = array(); + } + save_event_type_message($eventName, $users, $eventMessage, $eventSubject, $eventMessageLanguage, $activated); + + header('location: event_type.php'); + exit; } $ets = get_all_event_types(); $languages = api_get_languages(); -$ajaxPath = api_get_path(WEB_CODE_PATH).'inc/ajax/events.ajax.php'; +$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(); - ?> - - -

- +
- - - - - - - - - - - - - - -
-

-
-

-
-   - -

-
- - - - - -
- -
- -
+ + + + + + + + + + + + + +
+

+
+

+
+   + +

+
+ + + + + +
+
+ +
+ +

- -
+ + + + + + +
+

-

+ + + + + +
+ +
- - - - - - - -
- - -
- - - -

- - - - - - - - - -
- - -

-
- - -
    -
    - -

    - - + + +

    + + + + + + + + + +
    + + +

    +
    + + +
      +
      + +

      + +
      - - +Display :: display_footer(); \ No newline at end of file diff --git a/main/inc/ajax/events.ajax.php b/main/inc/ajax/events.ajax.php index 62c09269b5..b7e95d2764 100644 --- a/main/inc/ajax/events.ajax.php +++ b/main/inc/ajax/events.ajax.php @@ -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; } diff --git a/main/inc/ajax/model.ajax.php b/main/inc/ajax/model.ajax.php index c5dca35e4a..23606e2a80 100644 --- a/main/inc/ajax/model.ajax.php +++ b/main/inc/ajax/model.ajax.php @@ -120,7 +120,11 @@ switch ($action) { $obj = new Gradebook(); $count = $obj->get_count(); break; - case 'get_careers': + case 'get_event_email_template': + $obj = new EventEmailTemplate(); + $count = $obj->get_count(); + break; + case 'get_careers': $obj = new Career(); $count = $obj->get_count(); break; @@ -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'] = ''.$item['subject'].''; + }*/ + $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(); diff --git a/main/inc/conf/events.conf.dist.php b/main/inc/conf/events.conf.dist.php index 3b3ba5b3b7..995ce86ad5 100644 --- a/main/inc/conf/events.conf.dist.php +++ b/main/inc/conf/events.conf.dist.php @@ -14,27 +14,50 @@ * */ 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 + '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 ), 'self_sent' => true, // this key states that we can't add user to this event through the admin panel 'name_lang_var' => get_lang('userRegistrationTitle'), 'desc_lang_var' => get_lang('userRegistrationComment'), - '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', + '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', + 'admin_phone' => 'administrator_phone', + 'admin_email' => 'administrator_email', ) ), ); diff --git a/main/inc/lib/autoload.class.php b/main/inc/lib/autoload.class.php index 594a87c9e0..55d55daf83 100644 --- a/main/inc/lib/autoload.class.php +++ b/main/inc/lib/autoload.class.php @@ -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'; diff --git a/main/inc/lib/event_email_template.class.php b/main/inc/lib/event_email_template.class.php new file mode 100644 index 0000000000..25f708eefc --- /dev/null +++ b/main/inc/lib/event_email_template.class.php @@ -0,0 +1,121 @@ +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()); + } */ +} \ No newline at end of file diff --git a/main/inc/lib/events.lib.inc.php b/main/inc/lib/events.lib.inc.php index 13e054760e..9bc95f79d6 100644 --- a/main/inc/lib/events.lib.inc.php +++ b/main/inc/lib/events.lib.inc.php @@ -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); + } /**