Repository: airavata-php-gateway Updated Branches: refs/heads/develop cfdd5399d -> a84b53a98
Notification System modifications Project: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/commit/b01d107d Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/b01d107d Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/b01d107d Branch: refs/heads/develop Commit: b01d107d708e873838300587caefa67d3bb74f1c Parents: f9fc016 Author: Nipurn Doshi <[email protected]> Authored: Tue May 3 11:25:18 2016 -0400 Committer: Nipurn Doshi <[email protected]> Committed: Tue May 3 11:25:18 2016 -0400 ---------------------------------------------------------------------- app/controllers/AdminController.php | 10 +- app/libraries/AdminUtilities.php | 18 ++- app/libraries/CommonUtilities.php | 72 ++++++------ app/views/admin/manage-notices.blade.php | 162 +++++++++++++++----------- public/js/time-conversion.js | 2 + 5 files changed, 148 insertions(+), 116 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/b01d107d/app/controllers/AdminController.php ---------------------------------------------------------------------- diff --git a/app/controllers/AdminController.php b/app/controllers/AdminController.php index dae85b4..6d2c7ea 100644 --- a/app/controllers/AdminController.php +++ b/app/controllers/AdminController.php @@ -370,8 +370,9 @@ class AdminController extends BaseController { public function noticesView(){ Session::put("admin-nav", "notices"); $notices = array(); + $noticePriorities = CommonUtilities::get_notice_priorities(); $notices = array_reverse( CommonUtilities::get_all_notices() ); - return View::make("admin/manage-notices", array("notices" => $notices)); + return View::make("admin/manage-notices", array("notices" => $notices, "priorities" => $noticePriorities)); } public function addNotice(){ @@ -382,12 +383,7 @@ class AdminController extends BaseController { public function updateNotice(){ $inputs = Input::all(); - if( AdminUtilities::add_or_update_notice( $inputs, true)) - { - return 1; - } - else - return 0; + return AdminUtilities::add_or_update_notice( $inputs, true); } public function deleteNotice(){ http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/b01d107d/app/libraries/AdminUtilities.php ---------------------------------------------------------------------- diff --git a/app/libraries/AdminUtilities.php b/app/libraries/AdminUtilities.php index 23994e0..64dfbc2 100644 --- a/app/libraries/AdminUtilities.php +++ b/app/libraries/AdminUtilities.php @@ -2,6 +2,7 @@ use Airavata\Model\Workspace\Gateway; use Airavata\Model\Workspace\Notification; +use Airavata\Model\Workspace\NotificationPriority; class AdminUtilities { @@ -115,16 +116,21 @@ class AdminUtilities $notification = new Notification(); $notification->gatewayId = Session::get("gateway_id"); $notification->title = $notifData["title"]; - $notification->notifcationMessage = $notifData["notificationMessage"]; - $notification->publishedtime = strtotime( $notifData["publishedtime"])* 1000; + $notification->notificationMessage = $notifData["notificationMessage"]; + $notification->publishedTime = strtotime( $notifData["publishedTime"])* 1000; $notification->expirationTime = strtotime( $notifData["expirationTime"]) * 1000; + $notification->priority = intval($notifData["priority"]); if( $update){ $notification->notificationId = $notifData["notificationId"]; - return Airavata::getNotification( - Session::get('authz-token'), - Session::get("gateway_id"), - Airavata::updateNotification( Session::get("authz-token"), $notification) ); + if( Airavata::updateNotification( Session::get("authz-token"), $notification) ) + { + return json_encode( Airavata::getNotification( Session::get('authz-token'), + Session::get("gateway_id"), + $notifData["notificationId"] )); + } + else + 0; } else return Airavata::getNotification( http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/b01d107d/app/libraries/CommonUtilities.php ---------------------------------------------------------------------- diff --git a/app/libraries/CommonUtilities.php b/app/libraries/CommonUtilities.php index d5ce6c0..fed4c17 100644 --- a/app/libraries/CommonUtilities.php +++ b/app/libraries/CommonUtilities.php @@ -1,5 +1,6 @@ <?php use Airavata\Model\Workspace\Notification; +use Airavata\Model\Workspace\NotificationPriority; class CommonUtilities { @@ -230,41 +231,42 @@ class CommonUtilities public static function get_notices_ui( $notices){ - $notifVisibility = ""; - $countOfNotices = count( $notices); - $newNotices = 0; - if( Session::has("notice-count")){ - $newNotices = $countOfNotices - Session::get("notice-count"); - if( !$newNotices) - $notifVisibility = "hide"; - } - else - $newNotices = count( $notices); - - $noticesUI = '<li clas="dropdown" style="color:#fff; relative">' . - '<a href="#" class="dropdown-toggle notif-link" data-toggle="dropdown">' . - '<span class="glyphicon glyphicon-bell notif-bell"></span>' . - '<span class="notif-num ' . $notifVisibility . '" data-total-notices="' . $countOfNotices . '">' . $newNotices . '</span>'. - '<div class="dropdown-menu widget-notifications no-padding" style="width: 300px"><div class="slimScrollDiv" style="position: relative; overflow-y: scroll; overflow-x:hidden; width: auto; height: 250px;"><div class="notifications-list" id="main-navbar-notifications" style=" width: auto; height: 250px;">'; - - foreach( $notices as $notice){ - $noticesUI .= ' - <div class="notification"> - <div class="notification-title text-primary">' . $notice->title . '</div> - <div class="notification-description"><strong></strong>' . $notice->notifcationMessage . '</div> - <div class="notification-ago">' . date("m/d/Y h:i:s A T", $notice->publishedtime) . '</div> - <div class="notification-icon"></div> - </div> <!-- / .notification --> - '; - } + $notifVisibility = ""; + $countOfNotices = count( $notices); + $newNotices = 0; + if( Session::has("notice-count")){ + $newNotices = $countOfNotices - Session::get("notice-count"); + } + else + $newNotices = $countOfNotices; + + if( !$newNotices) + $notifVisibility = "hide"; + + $noticesUI = '<li clas="dropdown" style="color:#fff; relative">' . + '<a href="#" class="dropdown-toggle notif-link" data-toggle="dropdown">' . + '<span class="glyphicon glyphicon-bell notif-bell"></span>' . + '<span class="notif-num ' . $notifVisibility . '" data-total-notices="' . $countOfNotices . '">' . $newNotices . '</span>'. + '<div class="dropdown-menu widget-notifications no-padding" style="width: 300px"><div class="slimScrollDiv" style="position: relative; overflow-y: scroll; overflow-x:hidden; width: auto; height: 250px;"><div class="notifications-list" id="main-navbar-notifications" style=" width: auto; height: 250px;">'; + + foreach( $notices as $notice){ $noticesUI .= ' - </div><div class="slimScrollBar" style="width: 7px; position: absolute; top: 0px; opacity: 0.4; display: none; border-radius: 7px; z-index: 99; right: 1px; height: 195.925px; background: rgb(0, 0, 0);"></div> + <div class="notification"> + <div class="notification-title text-primary">' . $notice->title . '</div> + <div class="notification-description"><strong></strong>' . $notice->notificationMessage . '</div> + <div class="notification-ago">' . date("m/d/Y h:i:s A T", $notice->publishedTime) . '</div> + <div class="notification-icon"></div> + </div> <!-- / .notification --> + '; + } + $noticesUI .= ' + </div><div class="slimScrollBar" style="width: 7px; position: absolute; top: 0px; opacity: 0.4; display: none; border-radius: 7px; z-index: 99; right: 1px; height: 195.925px; background: rgb(0, 0, 0);"></div> - <div class="slimScrollRail" style="width: 7px; height: 100%; position: absolute; top: 0px; display: none; border-radius: 7px; opacity: 0.2; z-index: 90; right: 1px; background: rgb(51, 51, 51);"></div></div> <!-- / .notifications-list --> - <a href="#" class="notifications-link">MORE NOTIFICATIONS</a> - </div>'. - '</a>'. - '</li>'; + <div class="slimScrollRail" style="width: 7px; height: 100%; position: absolute; top: 0px; display: none; border-radius: 7px; opacity: 0.2; z-index: 90; right: 1px; background: rgb(51, 51, 51);"></div></div> <!-- / .notifications-list --> + <a href="#" class="notifications-link">MORE NOTIFICATIONS</a> + </div>'. + '</a>'. + '</li>'; return $noticesUI; } @@ -306,5 +308,9 @@ class CommonUtilities public static function get_all_notices(){ return Airavata::getAllNotifications( Session::get('authz-token'), Session::get("gateway_id")); } + + public static function get_notice_priorities(){ + return NotificationPriority::$__names; + } } http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/b01d107d/app/views/admin/manage-notices.blade.php ---------------------------------------------------------------------- diff --git a/app/views/admin/manage-notices.blade.php b/app/views/admin/manage-notices.blade.php index 2c0a84d..9413e5b 100644 --- a/app/views/admin/manage-notices.blade.php +++ b/app/views/admin/manage-notices.blade.php @@ -56,16 +56,16 @@ {{ $notice->title }} </td> <td> - {{ $notice->notifcationMessage}} + {{ $notice->notificationMessage}} </td> - <td class="time" unix-time="{{ $notice->publishedtime/1000 }}"> - {{ $notice->publishedtime }} + <td @if( $notice->publishedTime != null) class="time" unix-time="{{ $notice->publishedTime/1000 }}" @endif> + Not Set </td> - <td class="time" unix-time="{{ $notice->expirationTime/1000 }}"> - {{ $notice->expirationTime }} + <td @if( $notice->expirationTime != null) class="time" unix-time="{{ $notice->expirationTime/1000 }}" @endif> + Not Set </td> - <td> - {{-- $notice->priority --}} + <td class="priority"> + {{ $priorities[$notice->priority] }} </td> @if( Session::has("admin")) <td class="update-notice-icon"> @@ -87,12 +87,13 @@ </div> </div> +<input type="hidden" id="priorities-list" data-priorities="{{ htmlspecialchars(json_encode( $priorities ), ENT_QUOTES, 'UTF-8') }}"/> <!-- Create a Notice --> <div class="modal fade" id="create-notice" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> - <form class="form-horizontal notice-form-values"> + <form class="form-horizontal notice-form-values" action="javascript:0" method="POST"> <div class="modal-header"> <h3 class="text-center">Create a new Notice</h3> </div> @@ -100,7 +101,7 @@ </div> <div class="modal-footer"> - <button type="submit" class="btn btn-primary submit-add-notice-form" class="btn btn-primary form-control" value="Submit">Create</button> + <input type="submit" class="btn btn-primary submit-add-notice-form" class="btn btn-primary form-control" value="Create"/> </div> </form> @@ -111,7 +112,7 @@ aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> - <form class="form-horizontal notice-form-values"> + <form class="form-horizontal notice-form-values" action="#" method="POST"> <input type="hidden" class="notice-notificationId" name="notificationId"/> <div class="modal-header"> <h3 class="text-center">Update Notice</h3> @@ -120,7 +121,7 @@ </div> <div class="modal-footer"> - <button type="submit" class="btn btn-primary submit-update-notice-form" class="btn btn-primary form-control" value="Submit">Update</button> + <input type="submit" class="btn btn-primary submit-update-notice-form" class="btn btn-primary form-control" value="Update"/> </div> </form> </div> @@ -175,7 +176,7 @@ <label class="col-md-3 control-label">Publish Date</label> <div class="col-md-6"> <div class='input-group date datetimepicker9'> - <input type='text' class="form-control notice-publishedtime" id="publishedtime" required placeholder="From Date"/> + <input type='text' class="form-control notice-publishedTime" required placeholder="From Date"/> <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </span> @@ -186,7 +187,7 @@ <label class="col-md-3 control-label">Expiration Date</label> <div class="col-md-6"> <div class='input-group date datetimepicker10'> - <input type='text' class="form-control notice-expirationTime" placeholder="To Date" id="expirationTime"/> + <input type='text' class="form-control notice-expirationTime" placeholder="To Date"/> <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </span> @@ -197,10 +198,10 @@ <div class="form-group required"> <label class="col-md-3 control-label">Priority</label> <div class="col-md-6"> - <select class="form-control notice-priority"> - <option>Low</option> - <option>Normal</option> - <option>Hight</option> + <select class="form-control notice-priority" name="priority"> + @foreach( $priorities as $index => $priority) + <option value="{{ $index }}">{{ $priority}}</option> + @endforeach </select> </div> </div> @@ -230,8 +231,14 @@ var formInput = $("#update-notice .notice-" + key); formInput.val( noticeData[key]); } - $("#update-notice .notice-publishedtime").val( moment( parseInt( $("#update-notice .notice-publishedtime").val()) ).format('MM/DD/YYYY hh:mm a') ); - $("#update-notice .notice-expirationTime").val( moment( parseInt( $("#update-notice .notice-expirationTime").val()) ).format('MM/DD/YYYY hh:mm a') ); + var publishedTimeElem = $("#update-notice .notice-publishedTime"); + if( publishedTimeElem.val() != "") + publishedTimeElem.val( moment( parseInt( publishedTimeElem.val())).format('MM/DD/YYYY hh:mm a') ); + + var expirationTimeElem = $("#update-notice .notice-expirationTime"); + if( expirationTimeElem.val() != "") + expirationTimeElem.val( moment( parseInt( expirationTimeElem.val())).format('MM/DD/YYYY hh:mm a') ); + setDateProperties("#update-notice"); $("#update-notice").modal( "show"); @@ -240,56 +247,70 @@ //Add notice submit $("body").on("click", ".submit-add-notice-form", function(ev){ ev.preventDefault(); - $(this).html("<img src='{{URL::to('/')}}/assets/ajax-loader.gif'/>"); - var formData = $("#create-notice .notice-form-values").serialize(); - formData += "&publishedtime="+ moment( $("#publishedtime").val() ).utc().format('MM/DD/YYYY hh:mm a'); - formData += "&expirationTime="+ moment( $("#expirationTime").val() ).utc().format('MM/DD/YYYY hh:mm a'); - $.ajax({ - url: '{{URL::to('/')}}/add-notice', - type: "post", - data: formData, - success: function( data){ - var addedNotice = $.parseJSON( data); - $(".notices-list").prepend( - "<tr class='alert alert-success' data-notice-info='" + data + "'>" + updateRow( addedNotice) + "</tr>" - ); - $("#create-notice").modal("hide"); - }, - error: function(){ - $(".submit-add-notice-form").after("<span alert alert-danger'>An error has occurred. Please try again later.</span>"); - } - }).complete( function(){ - $(".submit-add-notice-form").html("Submit"); - }); + if( $('#create-notice .notice-form-values')[0].checkValidity() ){ + $(this).html("<img src='{{URL::to('/')}}/assets/ajax-loader.gif'/>"); + var formData = $("#create-notice .notice-form-values").serialize(); + formData += "&publishedTime="+ moment( $("#create-notice .notice-publishedTime").val() ).utc().format('MM/DD/YYYY hh:mm a'); + formData += "&expirationTime="+ moment( $("#create-notice .notice-expirationTime").val() ).utc().format('MM/DD/YYYY hh:mm a'); + $.ajax({ + url: '{{URL::to('/')}}/add-notice', + type: "post", + data: formData, + success: function( data){ + var addedNotice = $.parseJSON( data); + $(".notices-list").prepend( + "<tr id='notice-'" + addedNotice.notificationId + "' class='alert alert-success' data-notice-info='" + data + "'>" + updateRow( addedNotice) + "</tr>" + ); + $("#create-notice").modal("hide"); + }, + error: function(){ + $(".submit-add-notice-form").after("<span alert alert-danger'>An error has occurred. Please try again later.</span>"); + } + }).complete( function(){ + $(".submit-add-notice-form").html("Submit"); + }); + } }); //Update Notice Submit $("body").on("click", ".submit-update-notice-form", function(ev){ ev.preventDefault(); - $(this).html("<img src='{{URL::to('/')}}/assets/ajax-loader.gif'/>"); - var formData = $("#update-notice .notice-form-values").serialize(); - formData += "&publishedtime="+ moment( $("#publishedtime").val() ).utc().format('MM/DD/YYYY hh:mm a'); - formData += "&expirationTime="+ moment( $("#expirationTime").val() ).utc().format('MM/DD/YYYY hh:mm a'); - $.ajax({ - url: '{{URL::to('/')}}/update-notice', - type: "post", - data: formData, - success: function( data){ - var addedNotice = $.parseJSON( data); - $("#notice-" + $("#update-notice .notice-notificationId").val() ).html(updateRow( addedNotice)); - - $("#notice-" + $("#update-notice .notice-notificationId").val()) - .addClass("alert") - .addClass("alert-success") - .data("notice-info", data); - $("#update-notice").modal("hide"); - }, - error: function(){ - $(".submit-update-notice-form").after("<span alert alert-danger'>An error has occurred. Please try again later.</span>"); - } - }).complete( function(){ - $(".submit-add-notice-form").html("Update"); - }); + if( $('#update-notice .notice-form-values')[0].checkValidity() ){ + $(this).html("<img src='{{URL::to('/')}}/assets/ajax-loader.gif'/>"); + var formData = $("#update-notice .notice-form-values").serialize(); + var publishedTime = $("#update-notice .notice-publishedTime").val(); + if( publishedTime != "") + formData += "&publishedTime="+ moment().utc( publishedTime).format('MM/DD/YYYY hh:mm a'); + else + formData += "&publishedTime="; + var expirationTime = $("#ipdate-notice .notice-expirationTime").val(); + if( expirationTime != "") + formData += "&expirationTime="+ moment( ).utc().format('MM/DD/YYYY hh:mm a'); + else + formData += "&expirationTime="; + + $.ajax({ + url: '{{URL::to('/')}}/update-notice', + type: "post", + data: formData, + success: function( data){ + var addedNotice = $.parseJSON( data); + elemToUpdate = $("#notice-" + $("#update-notice .notice-notificationId").val() ); + elemToUpdate.html(updateRow( addedNotice)); + + elemToUpdate.addClass("alert").addClass("alert-success").data("notice-info", data); + $("#update-notice").modal("hide"); + + }, + error: function(){ + $(".submit-update-notice-form").after("<span alert alert-danger'>An error has occurred. Please try again later.</span>"); + } + }).complete( function(){ + $(".submit-update-notice-form").html("Update"); + }); + } + else + $('#update-notice .notice-form-values').submit(); }); $(".notices-list").on("click", ".delete-notice-icon", function(){ @@ -337,22 +358,23 @@ $( parent + " .datetimepicker10").data("DateTimePicker").setMinDate(e.date); //hack to close calendar on selecting date - $(this).find(".glyphicon-calendar").click(); + //$(this).find(".glyphicon-calendar").click(); }); $( parent + " .datetimepicker10").on("dp.change", function (e) { $( parent + " .datetimepicker9").data("DateTimePicker").setMaxDate(e.date); //hack to close calendar on selecting date - $(this).find(".glyphicon-calendar").click(); + //$(this).find(".glyphicon-calendar").click(); }); } function updateRow( noticeObject){ + var prioritiesList = $("#priorities-list").data("priorities"); var row = "<td>" + noticeObject.title + "</td>" + - "<td>" + noticeObject.notifcationMessage + "</td>" + - "<td class='date'>" + convertTimestamp( noticeObject.publishedtime) + "</td>" + - "<td class='date' unix-time='" + convertTimestamp( noticeObject.expirationTime ) + "'</td>" + - "<td></td>"+ + "<td>" + noticeObject.notificationMessage + "</td>" + + "<td class='date'>" + convertTimestamp( noticeObject.publishedTime) + "</td>" + + "<td class='date'>" + convertTimestamp( noticeObject.expirationTime ) + "'</td>" + + "<td>" + prioritiesList[noticeObject.priority] + "</td>"+ "<td class='update-notice-icon'><span class='glyphicon glyphicon-pencil'></span></td>"+ "<td class='delete-notice-icon'><span class='glyphicon glyphicon-trash'></span></td>"; return row; http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/b01d107d/public/js/time-conversion.js ---------------------------------------------------------------------- diff --git a/public/js/time-conversion.js b/public/js/time-conversion.js index 459d6a4..a9683d6 100644 --- a/public/js/time-conversion.js +++ b/public/js/time-conversion.js @@ -2,6 +2,8 @@ //<td> elements should have the unix time as an attribute e.g. <td class="time" unix-time="423423423524"></td> function convertTimestamp(timestamp) { + if( timestamp == null) + return; if( timestamp.length <= 10) timestamp = timestamp * 1000;// Convert the passed timestamp to milliseconds var d = new Date( parseInt( timestamp) ),
