db = &EL_Db::get_instance();
$this->filterbar = &EL_Filterbar::get_instance();
$this->event_table = new EL_Event_Table();
$this->action = $this->event_table->current_action();
// check for real actions
if($this->action) {
switch($this->action) {
// real actions (redirect when finished)
case 'new':
if(!empty($_POST)) {
$id = $this->update_event($_POST);
$error = !$id;
$this->redirect('added', $error, array('title' => urlencode($_POST['title']), 'id' => $id));
}
case 'edited':
if(!empty($_POST)) {
$error = !$this->update_event($_POST);
$this->redirect('modified', $error, array('title' => urlencode($_POST['title']), 'id' => $_POST['id']));
}
break;
case 'delete':
if(isset($_GET['id'])) {
$error = !$this->db->delete_events(explode(',', $_GET['id']));
$this->redirect('deleted', $error, array('id' => $_GET['id']));
}
break;
// proceed with header if a bulk action was triggered (required due to "noheader" attribute for all action above)
case 'delete_bulk':
require_once(ABSPATH.'wp-admin/admin-header.php');
}
}
// cleanup query args when filter button was pressed
if(isset($_GET['filter'])) {
$this->redirect();
}
}
// show the main admin page
public function show_main() {
// check permissions
if(!current_user_can('edit_posts')) {
wp_die(__('You do not have sufficient permissions to access this page.'));
}
// TODO: add check_admin_referer to improve security (see /wp-admin/edit.php)
// is there POST data an event was edited must be updated
// check for actions
if($this->action) {
switch($this->action) {
// actions showing edit view
case 'edit':
case 'added':
case 'modified':
$this->show_edit_view($this->action);
return;
// actions showing import view
case 'import':
require_once(EL_PATH.'admin/includes/admin-import.php');
EL_Admin_Import::get_instance()->show_import();
return;
// actions showing event list
case 'deleted':
// nothing to do
break;
}
}
// proceed with normal event list page
if(!isset($_GET['orderby'])) {
// set initial sorting
$_GET['orderby'] = 'date';
$_GET['order'] = 'asc';
}
$this->show_page_header($this->action);
echo $this->show_event_table();
echo '';
}
private function show_page_header($action, $editview=false) {
if($editview) {
$duplicate_link = add_query_arg(array('id'=>$_GET['id'], 'action'=>'copy'), '?page=el_admin_new');
$header = __('Edit Event','event-list').' '.__('Duplicate','event-list').'';
}
else {
$header = __('Events','event-list');
}
$new_link = ''.__('Add New','event-list').'';
$import_link = $editview ? '' : ''.__('Import','event-list').'';
echo '
'.$header.' '.$new_link.' '.$import_link.'
';
$this->show_message($action);
}
private function show_edit_view($action) {
$this->show_page_header($action, true);
require_once(EL_PATH.'admin/includes/admin-new.php');
echo EL_Admin_New::get_instance()->edit_event();
echo '
';
}
public function embed_main_scripts() {
// If edit event is selected switch to embed admin_new
switch($this->action) {
case 'edit':
case 'added':
case 'modified':
// embed admin new script
require_once(EL_PATH.'admin/includes/admin-new.php');
EL_Admin_New::get_instance()->embed_new_scripts();
default:
// embed admin_main script
wp_enqueue_script('eventlist_admin_main_js', EL_URL.'admin/js/admin_main.js');
wp_enqueue_style('eventlist_admin_main', EL_URL.'admin/css/admin_main.css');
}
}
private function show_event_table() {
// show filterbar
$out = '';
// show event table
// the form is required for bulk actions, the page field is required for plugins to ensure that the form posts back to the current page
$out .= '';
return $out;
}
private function show_message($action) {
$error = isset($_GET['error']);
switch($action) {
case 'added':
if(!$error)
$this->show_update_message('New Event "'.esc_html(stripslashes($_GET['title'])).'" was added.');
else
$this->show_error_message('Error: New Event "'.esc_html(stripslashes($_GET['title'])).'" could not be added.');
break;
case 'modified':
if(!$error)
$this->show_update_message('Event "'.esc_html(stripslashes($_GET['title'])).'" (id: '.$_GET['id'].') was modified.');
else
$this->show_error_message('Error: Event "'.esc_html(stripslashes($_GET['title'])).'" (id: '.$_GET['id'].') could not be modified.');
break;
case 'deleted':
$num_deleted = count(explode(',', $_GET['id']));
$plural = ($num_deleted > 1) ? 's' : '';
if(!$error)
$this->show_update_message($num_deleted.' Event'.$plural.' deleted (id'.$plural.': '.$_GET['id'].').');
else
$this->show_error_message('Error while deleting '.$num_deleted.' Event'.$plural.'.');
break;
}
}
private function show_update_message($text) {
echo '
';
}
private function show_error_message($text) {
echo '
';
}
private function update_event() {
$eventdata = $_POST;
// provide correct sql start- and end-date
if(isset($eventdata['sql_start_date']) && '' != $eventdata['sql_start_date']) {
$eventdata['start_date'] = $eventdata['sql_start_date'];
}
if(isset($eventdata['sql_end_date']) && '' != $eventdata['sql_end_date']) {
$eventdata['end_date'] = $eventdata['sql_end_date'];
}
return $this->db->update_event($eventdata, true);
}
private function redirect($action=false, $error=false, $query_args=array()) {
$url = remove_query_arg(array('noheader', 'action', 'action2', 'filter', '_wpnonce', '_wp_http_referer'), $_SERVER['REQUEST_URI']);
if($action) {
$url = add_query_arg('action', $action, $url);
}
if($error) {
$url = add_query_arg('error', '1', $url);
}
$url = add_query_arg($query_args, $url);
wp_redirect($url);
exit;
}
}
?>