5f1bcaad by Kevin Burton

Notifications System - starting of it.

1 parent a72b2dd4
Showing 46 changed files with 761 additions and 1 deletions
......@@ -46,4 +46,10 @@
position:relative;
margin-top: -28px;
}
#TzBrandingFooter a { color:#fff; text-decoration:none; }
\ No newline at end of file
#TzBrandingFooter a { color:#fff; text-decoration:none; }
#wpcontent {
/*background: #FFFFFF url(../images/backing.gif) top left repeat-y;*/
}
.update-nag { display:none; }
\ No newline at end of file
......
<?php
namespace Tz\WordPress\Tools\Notifications\Settings;
error_reporting(E_ALL^E_DEPRECATED);
use Tz\WordPress\Tools;
use Tz\Common;
use Tz\WordPress\Tools\Notifications;
const CAPABILITY = "manage_notifications";
const MANAGE_SYSTEM_NOTIFICATIONS = "create_system_notifications";
call_user_func(function() {
$role = get_role('administrator');
$role->add_cap(CAPABILITY);
$role->add_cap(MANAGE_SYSTEM_NOTIFICATIONS);
//$role->remove_cap(SUB_ADMIN_CAPABILITY);
Tools\add_actions(__NAMESPACE__ . '\Actions');
});
function display_page() {
if (isset($_GET['action']) && $_GET['action']=="edit") {
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'edit.php');
} else {
if (isset($_GET['action']) && $_GET['action']=="delete") {
wp_delete_post($_GET['page_id'],true);
} elseif (isset($_GET['action']) && $_GET['action']=="delete") {
$id = $_GET['page_id'];
$postdata = get_post_meta($id,'details',true);
$postdata['status'] = "archived";
update_post_meta($id,'details',$postdata);
}
// get all the notifications that status != "archived";
$notifications = array();
$notifications['triggered'] = array();
$notifications['scheduled'] = array();
$args = array(
'post_type' => 'notifications'
, 'numberposts' => -1
, 'orderby' => 'modified'
, 'order' => 'desc'
);
foreach(get_posts($args) as $entry) {
$id = $entry->ID;
$details = get_post_meta($id,'details',true);
$email = get_post_meta($id,'email',true);
$system = get_post_meta($id,'system',true);
$sms = get_post_meta($id,'sms',true);
$entry->trigger = $details['trigger'];
$entry->status = isset($details['status']) ? $details['status'] : "active";
$entry->type = $details['type'];
$entry->sendto = $details['sendto'];
$entry->is_email = (($email['text'] != "" || $email['html'] != "")) ? true : false;
$entry->is_system = ($system != "") ? true : false;
$entry->is_sms = ($sms != "") ? true : false;
$entry->execute_date = $details['execute_date'];
if ($entry->status != "archived") {
$notifications[$entry->type][] = $entry;
}
}
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'admin.php');
}
}
function mysqldatetime_to_timestamp($datetime = "")
{
// function is only applicable for valid MySQL DATETIME (19 characters) and DATE (10 characters)
$l = strlen($datetime);
if(!($l == 10 || $l == 19))
return 0;
//
$date = $datetime;
$hours = 0;
$minutes = 0;
$seconds = 0;
// DATETIME only
if($l == 19)
{
list($date, $time) = explode(" ", $datetime);
list($hours, $minutes, $seconds) = explode(":", $time);
}
list($year, $month, $day) = explode("-", $date);
return mktime($hours, $minutes, $seconds, $month, $day, $year);
}
function fixFilesArray(&$files)
{
$names = array( 'name' => 1, 'type' => 1, 'tmp_name' => 1, 'error' => 1, 'size' => 1);
foreach ($files as $key => $part) {
// only deal with valid keys and multiple files
$key = (string) $key;
if (isset($names[$key]) && is_array($part)) {
foreach ($part as $position => $value) {
$files[$position][$key] = $value;
}
// remove old key reference
unset($files[$key]);
}
}
}
function create_trigger_notification() {
print "hello";
}
function notification_settings() {
print "settings";
}
function create_notification() {
global $wpdb;
if ($_POST && isset($_POST['_POSTED_']) && $_POST['_POSTED_']=="yes") {
// ok, so now we need to create the notification.
class postTemplate {
var $post_title = '';
var $post_content = '';
var $post_status = 'publish';
var $post_type = 'notifications';
var $comment_status = 'closed';
}
//details
$type = $_POST['type'];
$title = $_POST['title'];
$sendto = $_POST['sendto'];
$execute_date = ($type=="scheduled") ? $_POST['execute_date'] : "0000-00-00 00:00:00";
$trigger = ($type=="scheduled") ? "scheduled-cron-job" : $_POST['trigger'];
// email
$subject = $_POST['subject'];
$text = $_POST['text'];
$html = $_POST['html'];
$attachments = array();
$upload_dir = __DIR__ . "/uploads/";
fixFilesArray($_FILES['attachment']);
foreach ($_FILES['attachment'] as $position => $file) {
// should output array with indices name, type, tmp_name, error, size
if($file['name'] != "") {
move_uploaded_file($file['tmp_name'],$upload_dir . $file['name']);
$attachments[] = $file['name'];
}
}
// system
$system = $_POST['system'];
// SMS
$sms = $_POST['sms'];
// make post...
$notification = new postTemplate();
$notification->post_title = $title;
$notification->post_content = "Notification created ".date('Y-m-d H:i:s')." --- to be sent on $execute_date";
$notification->post_date_gmt = date("Y-m-d H:i:s",time());
$id = wp_insert_post($notification);
add_post_meta($id, "details", array(
'type' => $type
, 'sendto' => $sendto
, 'status' => 'pending'
, 'trigger' => $trigger
, 'execute_date' => $execute_date
));
add_post_meta($id, "email", array(
'subject' => $subject
, 'text' => $text
, 'html' => $html
, 'attachments' => $attachments
));
add_post_meta($id, "system", $system);
add_post_meta($id, "sms", $sms);
$flash = "Notification Saved Successfully!";
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'create.php');
} else {
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'create.php');
}
}
class Actions {
public static function init() {
global $wpdb;
$wpdb->show_errors();
register_post_type( 'notifications', array(
'label' => __('Notifs')
, 'public' => true
, 'show_ui' => false
, 'hierarchical' => false
, 'exclude_from_search' => true
));
}
public static function admin_menu() {
add_menu_page('Notifications','Notifications',CAPABILITY,'notifications',__NAMESPACE__ . '\display_page' );
add_submenu_page('notifications','New Notification', 'New Notification',CAPABILITY,'notifications-create-new',__NAMESPACE__ . '\create_notification');
add_submenu_page('notifications','Settings', 'Settings',CAPABILITY,'notifications-settings',__NAMESPACE__ . '\notification_settings');
}
public function admin_init() {
register_setting(Notifications\OPTION_NAME, Notifications\OPTION_NAME);
}
}
?>
\ No newline at end of file
<?php
namespace Tz\WordPress\Tools\Notifications;
use Tz\WordPress\Tools;
use Tz\Common;
const OPTION_NAME = "notif_options";
call_user_func(function() {
Vars::$options = new Tools\WP_Option(OPTION_NAME);
if (is_admin()) {
require_once(__DIR__ . DIRECTORY_SEPARATOR . 'Admin.php');
}
});
/**
Send Notifications
@trigger = notification unique slug name
@user = user id (to get email and name)
@type = instant or cron
*/
function send_notification($trigger="NO_TRIGGER",$user=0,$type="instant") {
}
function current_url() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
class Vars {
public static $options;
}
?>
\ No newline at end of file
No preview for this file type
No preview for this file type
No preview for this file type
<?php
use Tz\WordPress\Tools\Notifications;
use Tz\WordPress\Tools\Notifications\Settings;
use Tz\WordPress\Tools;
/*
print "<pre>";
print_r($notifications);
print "</pre>";
*/
?>
<link rel="stylesheet" href="<?php echo Tools\url('assets/css/notifications.css', __FILE__)?>" />
<script type="text/javascript" src="<?php echo Tools\url('assets/scripts/jquery.-1.4.2.min.js', __FILE__)?>"></script>
<script type="text/javascript" src="<?php echo Tools\url('assets/scripts/jquery.qtip-1.0.0-rc3.js', __FILE__)?>"></script>
<div id="" class="wrap">
<h2>Notifications</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam iaculis convallis nisi eu dignissim. Quisque malesuada augue in mi blandit at blandit tortor sollicitudin. Cras at justo mi, vel mollis est. Donec orci erat, blandit varius vehicula vitae, volutpat at lorem. Etiam tincidunt bibendum ante, non tincidunt purus faucibus sed. Suspendisse eget facilisis tellus. Nulla imperdiet leo placerat diam sollicitudin nec mattis neque mattis. Cras id lacus tellus. Phasellus volutpat vehicula porttitor. Praesent erat felis, pharetra mollis egestas sit amet, rhoncus eget nisl. Morbi interdum sapien vitae nibh pharetra scelerisque. Mauris porta accumsan velit ac aliquam. Sed sit amet dictum felis. Fusce tempus vulputate nulla, quis tincidunt velit mattis eu.</p>
<h3 class="table-caption">Scheduled Notifications</h3>
<table cellspacing="0" class="widefat post fixed" style="margin-top:15px;">
<thead>
<tr>
<th scope="col" class="manage-column">Description</th>
<th scope="col" width="200" class="manage-column">Execute Date/Time</th>
<th scope="col" width="200" class="manage-column">Send To</th>
<th scope="col" width="60" class="manage-column">Email</th>
<th scope="col" width="60" class="manage-column">System</th>
<th scope="col" width="60" class="manage-column">SMS</th>
<th scope="col" width="200" class="manage-column">&nbsp;</th>
</tr>
</thead>
<tbody>
<?php foreach($notifications['scheduled'] as $entry):?>
<tr>
<td><?php echo $entry->post_title; ?></td>
<td><?php echo $entry->execute_date; ?></td>
<td><?php echo $entry->sendto; ?></td>
<td><?php if ($entry->is_email): ?><img src="<?php echo Tools\url('assets/images/accept.png', __FILE__)?>" /><?php endif;?></td>
<td><?php if ($entry->is_system): ?><img src="<?php echo Tools\url('assets/images/accept.png', __FILE__)?>" /><?php endif;?></td>
<td><?php if ($entry->is_sms): ?><img src="<?php echo Tools\url('assets/images/accept.png', __FILE__)?>" /><?php endif;?></td>
<td>
<?php if (Settings\mysqldatetime_to_timestamp($entry->execute_date) < time()):?>
<a href="/wp-admin/admin.php?page=notifications&action=archive&page_id=<?php echo $entry->ID; ?>">archive</a>
<?php else: ?>
<a href="/wp-admin/admin.php?page=notifications&action=edit&page_id=<?php echo $entry->ID; ?>">edit</a>
| <a href="/wp-admin/admin.php?page=notifications&action=delete&page_id=<?php echo $entry->ID; ?>" onclick="return confirm('Are you sure?');">delete</a></td>
<?php endif; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<h3 class="table-caption">System Triggered Notifications</h3>
<table cellspacing="0" class="widefat post fixed" style="margin-top:15px;">
<thead>
<tr>
<th scope="col" class="manage-column">Description</th>
<?php if (current_user_can(Settings\MANAGE_SYSTEM_NOTIFICATIONS)): ?>
<th scope="col" width="200" class="manage-column">Trigger/Slug</th>
<?php endif; ?>
<th scope="col" width="200" class="manage-column">Send To</th>
<th scope="col" width="60" class="manage-column">Email</th>
<th scope="col" width="60" class="manage-column">System</th>
<th scope="col" width="60" class="manage-column">SMS</th>
<th scope="col" width="200" class="manage-column">&nbsp;</th>
</tr>
</thead>
<tbody>
<?php foreach($notifications['triggered'] as $entry):?>
<tr>
<td><?php echo $entry->post_title; ?></td>
<?php if (current_user_can(Settings\MANAGE_SYSTEM_NOTIFICATIONS)): ?>
<td><?php echo $entry->trigger; ?></td>
<?php endif; ?>
<td><?php echo $entry->sendto; ?></td>
<td><?php if ($entry->is_email): ?><img src="<?php echo Tools\url('assets/images/accept.png', __FILE__)?>" /><?php endif;?></td>
<td><?php if ($entry->is_system): ?><img src="<?php echo Tools\url('assets/images/accept.png', __FILE__)?>" /><?php endif;?></td>
<td><?php if ($entry->is_sms): ?><img src="<?php echo Tools\url('assets/images/accept.png', __FILE__)?>" /><?php endif;?></td>
<td><a href="/wp-admin/admin.php?page=notifications&action=edit&page_id=<?php echo $entry->ID; ?>">edit</a>
<?php if (current_user_can(Settings\MANAGE_SYSTEM_NOTIFICATIONS)): ?>
| <a href="/wp-admin/admin.php?page=notifications&action=delete&page_id=<?php echo $entry->ID; ?>" onclick="return confirm('Are you sure?');">delete</a>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
\ No newline at end of file
h3.table-caption { padding:0; margin:25px 0 0px 0; }
.wide-input-field { width:350px;resize: none}
.post-success {
padding:10px;
font-size: 12px;
background: #ffffcc;
color:#88c550;
}
table.expandable thead th {
cursor:pointer;
}
table.expandable tbody {
background-color:#fdfdee;
}
table.expandable thead th.toggle h6 {
background: transparent url(../images/open.png) left no-repeat;
padding:0 0 0 16px;
font-size:11px;
margin:0;
line-height:1.3em;
}
table.expandable thead.open th.toggle h6 {
background: transparent url(../images/close.png) left no-repeat;
}
#ui-timepicker-div { margin: 0px 10px; }
#ui-timepicker-div dl{ text-align: left; }
#ui-timepicker-div dl dt{ height: 25px; font-size: 11px; }
#ui-timepicker-div dl dd{ margin: -25px 0 10px 65px; font-size: 11px; }
\ No newline at end of file
/*
* jQuery timepicker addon
* By: Trent Richardson [http://trentrichardson.com]
* Version 0.5
* Last Modified: 6/16/2010
*
* Copyright 2010 Trent Richardson
* Dual licensed under the MIT and GPL licenses.
* http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
* http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
*
* HERES THE CSS:
* #ui-timepicker-div dl{ text-align: left; }
* #ui-timepicker-div dl dt{ height: 25px; }
* #ui-timepicker-div dl dd{ margin: -25px 0 10px 65px; }
*/
(function($){function Timepicker(){}Timepicker.prototype={$input:null,$timeObj:null,inst:null,hour_slider:null,minute_slider:null,second_slider:null,hour:0,minute:0,second:0,ampm:'',formattedDate:'',formattedTime:'',formattedDateTime:'',defaults:{holdDatepickerOpen:true,showButtonPanel:true,timeOnly:false,showHour:true,showMinute:true,showSecond:false,showTime:true,stepHour:.05,stepMinute:.05,stepSecond:.05,ampm:false,hour:0,minute:0,second:0,timeFormat:'hh:mm tt',alwaysSetTime:true},addTimePicker:function(dp_inst){var tp_inst=this;var currDT=this.$input.val();var regstr=this.defaults.timeFormat.toString().replace(/h{1,2}/ig,'(\\d?\\d)').replace(/m{1,2}/ig,'(\\d?\\d)').replace(/s{1,2}/ig,'(\\d?\\d)').replace(/t{1,2}/ig,'(am|pm|a|p)?').replace(/\s/g,'\\s?')+'$';if(!this.defaults.timeOnly){regstr='\\S{'+this.defaults.timeFormat.length+',}\\s+'+regstr;}var order=this.getFormatPositions();var treg=currDT.match(new RegExp(regstr,'i'));if(treg){if(order.t!==-1)this.ampm=((treg[order.t]==undefined||treg[order.t].length==0)?'':(treg[order.t].charAt(0).toUpperCase()=='A')?'AM':'PM').toUpperCase();if(order.h!==-1){if(this.ampm=='AM'&&treg[order.h]=='12')this.hour=0;else if(this.ampm=='PM'&&treg[order.h]!='12')this.hour=(parseFloat(treg[order.h])+12).toFixed(0);else this.hour=treg[order.h];}if(order.m!==-1)this.minute=treg[order.m];if(order.s!==-1)this.second=treg[order.s];}tp_inst.timeDefined=(treg)?true:false;setTimeout(function(){tp_inst.injectTimePicker(dp_inst,tp_inst);},10);},getFormatPositions:function(){var finds=this.defaults.timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|t{1,2})/g);var orders={h:-1,m:-1,s:-1,t:-1};if(finds){for(var i=0;i<finds.length;i++){if(orders[finds[i].toString().charAt(0)]==-1)orders[finds[i].toString().charAt(0)]=i+1;}}return orders;},injectTimePicker:function(dp_inst,tp_inst){var $dp=$('#'+$.datepicker._mainDivId);var hourMax=23-(23%tp_inst.defaults.stepHour);var minMax=59-(59%tp_inst.defaults.stepMinute);var secMax=59-(59%tp_inst.defaults.stepSecond);if($dp.find("div#ui-timepicker-div").length==0){var html='<div id="ui-timepicker-div">'+'<dl>'+'<dt id="ui_tpicker_time_label"'+((tp_inst.defaults.showTime)?'':' style="display:none;"')+'>Time</dt>'+'<dd id="ui_tpicker_time"'+((tp_inst.defaults.showTime)?'':' style="display:none;"')+'></dd>'+'<dt id="ui_tpicker_hour_label"'+((tp_inst.defaults.showHour)?'':' style="display:none;"')+'>Hour</dt>'+'<dd id="ui_tpicker_hour"'+((tp_inst.defaults.showHour)?'':' style="display:none;"')+'></dd>'+'<dt id="ui_tpicker_minute_label"'+((tp_inst.defaults.showMinute)?'':' style="display:none;"')+'>Minute</dt>'+'<dd id="ui_tpicker_minute"'+((tp_inst.defaults.showMinute)?'':' style="display:none;"')+'></dd>'+'<dt id="ui_tpicker_second_label"'+((tp_inst.defaults.showSecond)?'':' style="display:none;"')+'>Second</dt>'+'<dd id="ui_tpicker_second"'+((tp_inst.defaults.showSecond)?'':' style="display:none;"')+'></dd>'+'</dl>'+'</div>';$tp=$(html);if(tp_inst.defaults.timeOnly==true){$tp.prepend('<div class="ui-widget-header ui-helper-clearfix ui-corner-all"><div class="ui-datepicker-title">Choose Time</div></div>');$dp.find('.ui-datepicker-header, .ui-datepicker-calendar, .ui-datepicker-current').hide();}tp_inst.hour_slider=$tp.find('#ui_tpicker_hour').slider({orientation:"horizontal",value:tp_inst.hour,min:0,max:hourMax,step:tp_inst.defaults.stepHour,slide:function(event,ui){tp_inst.hour_slider.slider("option","value",ui.value);tp_inst.onTimeChange(dp_inst,tp_inst);}});tp_inst.minute_slider=$tp.find('#ui_tpicker_minute').slider({orientation:"horizontal",value:tp_inst.minute,min:0,max:minMax,step:tp_inst.defaults.stepMinute,slide:function(event,ui){tp_inst.minute_slider.slider("option","value",ui.value);tp_inst.onTimeChange(dp_inst,tp_inst);}});tp_inst.second_slider=$tp.find('#ui_tpicker_second').slider({orientation:"horizontal",value:tp_inst.second,min:0,max:secMax,step:tp_inst.defaults.stepSecond,slide:function(event,ui){tp_inst.second_slider.slider("option","value",ui.value);tp_inst.onTimeChange(dp_inst,tp_inst);}});$dp.find('.ui-datepicker-calendar').after($tp);tp_inst.$timeObj=$('#ui_tpicker_time');if(dp_inst!=null){var timeDefined=tp_inst.timeDefined;tp_inst.onTimeChange(dp_inst,tp_inst);tp_inst.timeDefined=timeDefined;}}},onTimeChange:function(dp_inst,tp_inst){var hour=tp_inst.hour_slider.slider('value');var minute=tp_inst.minute_slider.slider('value');var second=tp_inst.second_slider.slider('value');var ampm=(tp_inst.hour<12)?'AM':'PM';var hasChanged=false;if(tp_inst.hour!=hour||tp_inst.minute!=minute||tp_inst.second!=second||(tp_inst.ampm.length>0&&tp_inst.ampm!=ampm))hasChanged=true;tp_inst.hour=parseFloat(hour).toFixed(0);tp_inst.minute=parseFloat(minute).toFixed(0);tp_inst.second=parseFloat(second).toFixed(0);tp_inst.ampm=ampm;tp_inst.formatTime(tp_inst);tp_inst.$timeObj.text(tp_inst.formattedTime);if(hasChanged){tp_inst.updateDateTime(dp_inst,tp_inst);tp_inst.timeDefined=true;}},formatTime:function(inst){var tmptime=inst.defaults.timeFormat.toString();var hour12=((inst.ampm=='AM')?(inst.hour):(inst.hour%12));hour12=(hour12==0)?12:hour12;if(inst.defaults.ampm==true){tmptime=tmptime.toString().replace(/hh/g,((hour12<10)?'0':'')+hour12).replace(/h/g,hour12).replace(/mm/g,((inst.minute<10)?'0':'')+inst.minute).replace(/m/g,inst.minute).replace(/ss/g,((inst.second<10)?'0':'')+inst.second).replace(/s/g,inst.second).replace(/TT/g,inst.ampm.toUpperCase()).replace(/tt/g,inst.ampm.toLowerCase()).replace(/T/g,inst.ampm.charAt(0).toUpperCase()).replace(/t/g,inst.ampm.charAt(0).toLowerCase());}else{tmptime=tmptime.toString().replace(/hh/g,((inst.hour<10)?'0':'')+inst.hour).replace(/h/g,inst.hour).replace(/mm/g,((inst.minute<10)?'0':'')+inst.minute).replace(/m/g,inst.minute).replace(/ss/g,((inst.second<10)?'0':'')+inst.second).replace(/s/g,inst.second);tmptime=$.trim(tmptime.replace(/t/gi,''));}inst.formattedTime=tmptime;return inst.formattedTime;},updateDateTime:function(dp_inst,tp_inst){var dt=this.$input.datepicker('getDate');if(dt==null)this.formattedDate=$.datepicker.formatDate($.datepicker._get(dp_inst,'dateFormat'),new Date(),$.datepicker._getFormatConfig(dp_inst));else this.formattedDate=$.datepicker.formatDate($.datepicker._get(dp_inst,'dateFormat'),dt,$.datepicker._getFormatConfig(dp_inst));if(this.defaults.alwaysSetTime){this.formattedDateTime=this.formattedDate+' '+this.formattedTime;}else{if(dt==null||!tp_inst.timeDefined||tp_inst.timeDefined==false){this.formattedDateTime=this.formattedDate;}else{this.formattedDateTime=this.formattedDate+' '+this.formattedTime;}}if(this.defaults.timeOnly==true)this.$input.val(this.formattedTime);else this.$input.val(this.formattedDateTime);}};jQuery.fn.datetimepicker=function(o){var tp=new Timepicker();if(o==undefined)o={};tp.defaults=$.extend({},tp.defaults,o);tp.defaults=$.extend({},tp.defaults,{beforeShow:function(input,inst){tp.hour=tp.defaults.hour;tp.minute=tp.defaults.minute;tp.second=tp.defaults.second;tp.ampm='';tp.$input=$(input);tp.inst=inst;tp.addTimePicker(inst);if($.isFunction(o['beforeShow']))o.beforeShow(input,inst);},onChangeMonthYear:function(year,month,inst){tp.updateDateTime(inst,tp);if($.isFunction(o['onChangeMonthYear']))o.onChangeMonthYear(year,month,inst);},onClose:function(dateText,inst){tp.updateDateTime(inst,tp);if($.isFunction(o['onClose']))o.onClose(dateText,inst);}});$(this).datepicker(tp.defaults);};jQuery.fn.timepicker=function(o){o=$.extend(o,{timeOnly:true});$(this).datetimepicker(o);};$.datepicker._selectDate=function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);var holdDatepickerOpen=(this._get(inst,'holdDatepickerOpen')===true)?true:false;dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input)inst.input.val(dateStr);this._updateAlternate(inst);var onSelect=this._get(inst,'onSelect');if(onSelect)onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst]);else if(inst.input)inst.input.trigger('change');if(inst.inline)this._updateDatepicker(inst);else if(holdDatepickerOpen){}else{this._hideDatepicker();this._lastInput=inst.input[0];if(typeof(inst.input[0])!='object')inst.input.focus();this._lastInput=null;}this._notifyChange(inst);};$.datepicker._base_updateDatepicker=$.datepicker._updateDatepicker;$.datepicker._updateDatepicker=function(inst){this._base_updateDatepicker(inst);this._beforeShow(inst.input,inst);};$.datepicker._beforeShow=function(input,inst){var beforeShow=this._get(inst,'beforeShow');if(beforeShow)beforeShow.apply((inst.input?inst.input[0]:null),[inst.input,inst]);};$.datepicker._doKeyPress=function(event){var inst=$.datepicker._getInst(event.target);if($.datepicker._get(inst,'constrainInput')){var dateChars=$.datepicker._possibleChars($.datepicker._get(inst,'dateFormat'));var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);return event.ctrlKey||(chr<' '||!dateChars||dateChars.indexOf(chr)>-1||event.keyCode==58||event.keyCode==32);}};})(jQuery);
\ No newline at end of file
This diff could not be displayed because it is too large.
<?php
use Tz\WordPress\Tools\Notifications\Settings;
use Tz\WordPress\Tools\Notifications;
use Tz\WordPress\Tools;
?>
<link type="text/css" href="<?php echo Tools\url('assets/css/smoothness/jquery-ui-1.8.4.custom.css', __FILE__)?>" rel="stylesheet" />
<script type="text/javascript" src="<?php echo Tools\url('assets/scripts/jquery-1.4.2.min.js', __FILE__)?>"></script>
<script type="text/javascript" src="<?php echo Tools\url('assets/scripts/jquery-ui-1.8.4.custom.min.js', __FILE__)?>"></script>
<script type="text/javascript" src="<?php echo Tools\url('assets/scripts/datetimepicker.js', __FILE__)?>"></script>
<link rel="stylesheet" href="<?php echo Tools\url('assets/css/notifications.css', __FILE__)?>" />
<div id="" class="wrap">
<h2>Notifications - Create New</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam iaculis convallis nisi eu dignissim. Quisque malesuada augue in mi blandit at blandit tortor sollicitudin. Cras at justo mi, vel mollis est. Donec orci erat, blandit varius vehicula vitae, volutpat at lorem. Etiam tincidunt bibendum ante, non tincidunt purus faucibus sed. Suspendisse eget facilisis tellus. Nulla imperdiet leo placerat diam sollicitudin nec mattis neque mattis. Cras id lacus tellus. Phasellus volutpat vehicula porttitor. Praesent erat felis, pharetra mollis egestas sit amet, rhoncus eget nisl. Morbi interdum sapien vitae nibh pharetra scelerisque. Mauris porta accumsan velit ac aliquam. Sed sit amet dictum felis. Fusce tempus vulputate nulla, quis tincidunt velit mattis eu.</p>
<?php if (isset($flash) && $flash !=""): ?>
<div class="post-success">
<?php echo $flash; ?>
</div>
<?php endif; ?>
<form enctype="multipart/form-data" method="post" action="/wp-admin/admin.php?page=notifications-create-new">
<input type="hidden" name="_POSTED_" value="yes" />
<table cellspacing="0" class="widefat post fixed" style="margin-top:15px;">
<thead>
<tr>
<th width="150">Notification Details</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td width="150">Notification Type</td>
<td>
<select name="type" id="notif_type" class="wide-input-field" onchange="updateNotificationType();">
<option value="scheduled">Scheduled Notification</option>
<?php if (current_user_can(Settings\MANAGE_SYSTEM_NOTIFICATIONS)): ?>
<option value="triggered">System Triggered Notification</option>
<?php endif; ?>
</select>
</td>
</tr>
<tr>
<td width="150">Notification Description</td>
<td><input type="text" name="title" class="wide-input-field" /></td>
</tr>
<tr>
<td>Sent To:</td>
<td>
<select name="sendto" class="wide-input-field">
<option value="user">Current User</option>
<option value="allusers">All Users</option>
<optgroup label="Groups:">
<option value="group1">Administrators</option>
<option value="group2">Group 2</option>
<option value="group3">Group 3</option>
</optgroup>
</select>
</td>
</tr>
<tr class="scheduled-extended">
<td>Execute Date / Time</td>
<td><input type="text" name="execute_date" id="execute_date" class="wide-input-field date-pick" readonly="readonly" /></td>
</tr>
<tr class="trigger-extended">
<td>Trigger</td>
<td><input type="text" name="trigger" id="trigger" class="wide-input-field" /></td>
</tr>
</tbody>
</table>
<table cellspacing="0" class="widefat post fixed expandable" style="margin-top:15px;">
<thead>
<tr>
<th width="150" class="toggle"><h6>Email</h6></th>
<th class="action-bar">&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td width="150">Subject Line</td>
<td><input type="text" name="subject" class="wide-input-field" style="width:100%;" /></td>
</tr>
<tr>
<td>Text Version</td>
<td><textarea name="text" class="wide-input-field" rows="10" style="width:100%;" ></textarea></td>
</tr>
<tr>
<td>HTML Version (optional)</td>
<td><textarea name="html" id="htmlversion" class="wide-input-field" rows="10" style="width:100%;"></textarea></td>
</tr>
<tr>
<td width="150">Attachments</td>
<td><input type="file" name="attachment[]" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="file" name="attachment[]" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="file" name="attachment[]" /></td>
</tr>
</tbody>
</table>
<table cellspacing="0" class="widefat post fixed expandable" style="margin-top:15px;">
<thead>
<tr>
<th width="150" class="toggle"><h6>System Message</h6></th>
<th class="action-bar">&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td>Message (Text/HTML)</td>
<td><textarea name="system" class="wide-input-field" rows="4" style="width:100%;" ></textarea></td>
</tr>
</tbody>
</table>
<table cellspacing="0" class="widefat post fixed expandable" style="margin-top:15px;">
<thead>
<tr>
<th width="150" class="toggle"><h6>SMS</h6></th>
<th class="action-bar">&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td>Text Only!</td>
<td><textarea name="sms" class="wide-input-field" rows="4" style="width:100%;" ></textarea></td>
</tr>
</tbody>
</table>
<p>
<input type="submit" value=" Save " /><input type="button" value=" Cancel " onclick="document.location.href='/wp-admin/admin.php?page=notifications';" />
</p>
</form>
</div>
<script type="text/javascript">
jQuery(document).ready(function() {
$('#execute_date').datetimepicker({
stepMinute: 15
, dateFormat: 'yy-mm-dd'
, timeFormat: 'hh:mm:ss'
});
updateNotificationType();
jQuery('table.expandable tbody').hide();
jQuery('table.expandable thead th').click(function() {
var $table = jQuery(this).parent().parent().parent();
if ( jQuery('tbody',$table).is(":visible") ) {
jQuery('thead',$table).removeClass("open");
jQuery('tbody',$table).fadeOut();
} else {
jQuery('thead',$table).addClass("open");
jQuery('tbody',$table).fadeIn();
}
});
});
function updateNotificationType() {
var type = jQuery('#notif_type').val();
if (type=="triggered") {
jQuery('.scheduled-extended').hide();
jQuery('.trigger-extended').show();
} else {
jQuery('.scheduled-extended').show();
jQuery('.trigger-extended').hide();
}
}
</script>
\ No newline at end of file
<?php
use Tz\WordPress\Tools\Notifications;
use Tz\WordPress\Tools;
?>
<!-- jQuery -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<!-- required plugins -->
<script type="text/javascript" src="<?php echo Tools\url('assets/scripts/date.js', __FILE__)?>"></script>
<!--[if IE]><script type="text/javascript" src="<?php echo Tools\url('assets/scripts/jquery.bgiframe.js', __FILE__)?>"></script><![endif]-->
<!-- jquery.datePicker.js -->
<script type="text/javascript" src="<?php echo Tools\url('assets/scripts/jquery.datePicker.js', __FILE__)?>"></script>
<link rel="stylesheet" href="<?php echo Tools\url('assets/css/datePicker.css', __FILE__)?>" />
<link rel="stylesheet" href="<?php echo Tools\url('assets/css/notifications.css', __FILE__)?>" />
<div id="" class="wrap">
<h2>Notifications - Create New</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam iaculis convallis nisi eu dignissim. Quisque malesuada augue in mi blandit at blandit tortor sollicitudin. Cras at justo mi, vel mollis est. Donec orci erat, blandit varius vehicula vitae, volutpat at lorem. Etiam tincidunt bibendum ante, non tincidunt purus faucibus sed. Suspendisse eget facilisis tellus. Nulla imperdiet leo placerat diam sollicitudin nec mattis neque mattis. Cras id lacus tellus. Phasellus volutpat vehicula porttitor. Praesent erat felis, pharetra mollis egestas sit amet, rhoncus eget nisl. Morbi interdum sapien vitae nibh pharetra scelerisque. Mauris porta accumsan velit ac aliquam. Sed sit amet dictum felis. Fusce tempus vulputate nulla, quis tincidunt velit mattis eu.</p>
<form method="post" action="/wp-admin/admin.php?page=notification&action=create">
<table cellspacing="0" class="widefat post fixed" style="margin-top:15px;">
<thead>
<tr>
<th width="150">Notification Details</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td width="150">Description</td>
<td><input type="text" name="" class="wide-input-field" /></td>
</tr>
<tr>
<td>Notification Type</td>
<td>
<select name="" class="wide-input-field">
<option value="instant">Instant</option>
<option value="queued">Batch Queue</option>
<option value="system">System</option>
</select>
</td>
</tr>
<tr>
<td>Sent To:</td>
<td>
<select name="" class="wide-input-field">
<option value="user">Current User</option>
<option value="user">All Users</option>
<optgroup label="Groups:">
<option value="group1">Administrators</option>
<option value="group2">Group 2</option>
<option value="group3">Group 3</option>
</optgroup>
</select>
</td>
</tr>
<tr>
<td>Trigger/Slug</td>
<td><input type="text" name="" class="wide-input-field" /></td>
</tr>
<tr>
<td>Execute Date / Time</td>
<td><input type="text" name="" class="wide-input-field date-pick" /></td>
</tr>
</tbody>
</table>
<table cellspacing="0" class="widefat post fixed" style="margin-top:15px;">
<thead>
<tr>
<th width="150">Notification Content</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td width="150">Subject Line</td>
<td><input type="text" name="" class="wide-input-field" style="width:100%;" /></td>
</tr>
<tr>
<td>Text Version</td>
<td><textarea class="wide-input-field" rows="10" style="width:100%;" ></textarea></td>
</tr>
<tr>
<td>HTML Version (optional)</td>
<td><textarea class="wide-input-field" rows="10" style="width:100%;"></textarea></td>
</tr>
</tbody>
</table>
<p>
<input type="submit" value=" Save " /><input type="button" value=" Cancel " onclick="document.location.href='/wp-admin/admin.php?page=notifications';" />
</p>
</form>
</div>
<script type="text/javascript">
$(function()
{
$('.date-pick').datePicker();
});
</script>
\ No newline at end of file