Events Manager - Version 3.0.91

Version Description

  • Documentation finally up to date now!
  • widget bug fixed
  • added event permissions, so users can manage their own events/locations/categories
  • improved event booking UI and management tools
  • export CSV of bookings
  • booking approvals added
  • bookings can have individual notes
  • calendar widget shows selected month if clicked on
  • custom attributes field, for atts that don't need to be in a template (e.g. pdf file url)
  • time limit for main events list and events widget (e.g. show events that occur within x months)
  • default location
  • default category
  • added extra validation so event start date/times can't be after end date/time
  • calendar navigation will pass on all arguments for following month (e.g. category, etc)
  • small map balloon fix for some rare js conflicts
Download this release

Release Info

Developer netweblogic
Plugin Icon 128x128 Events Manager
Version 3.0.91
Comparing to
See all releases

Code changes from version 3.0.9 to 3.0.91

Files changed (47) hide show
  1. admin/bookings/em-cancelled.php +133 -0
  2. admin/bookings/em-confirmed.php +133 -0
  3. admin/bookings/em-events.php +179 -0
  4. admin/bookings/em-pending.php +155 -0
  5. admin/bookings/em-person.php +150 -0
  6. admin/bookings/em-rejected.php +133 -0
  7. admin/em-admin.php +73 -21
  8. admin/em-bookings.php +264 -63
  9. admin/em-categories.php +49 -50
  10. admin/em-docs.php +14 -3
  11. admin/em-event.php +61 -63
  12. admin/em-events.php +135 -112
  13. admin/em-locations-search.php +2 -3
  14. admin/em-locations.php +113 -82
  15. admin/em-options.php +129 -8
  16. admin/em-people.php +117 -48
  17. classes/em-booking.php +263 -33
  18. classes/em-bookings.php +317 -65
  19. classes/em-calendar.php +44 -16
  20. classes/em-categories.php +154 -0
  21. classes/em-category.php +142 -9
  22. classes/em-event.php +117 -45
  23. classes/em-events.php +43 -11
  24. classes/em-location.php +28 -5
  25. classes/em-locations.php +7 -1
  26. classes/em-object.php +42 -9
  27. classes/em-person.php +43 -5
  28. em-ajax.php +88 -30
  29. em-bookings.php +162 -162
  30. em-events.php +17 -13
  31. em-functions.php +66 -9
  32. em-install.php +106 -23
  33. events-manager.php +44 -10
  34. includes/css/events_manager.css +2 -1
  35. includes/css/events_manager_admin.css +15 -0
  36. includes/js/em_admin.js +272 -221
  37. includes/js/em_calendar_ajax.js +13 -6
  38. includes/js/em_maps.js +1 -1
  39. includes/langs/dbem-nl_NL.mo +0 -0
  40. includes/langs/dbem-nl_NL.po +1577 -0
  41. includes/langs/events-manager.pot +1508 -803
  42. includes/sample-placeholers/booking-email.html +31 -0
  43. includes/sample-placeholers/event-single.html +29 -14
  44. readme.txt +25 -11
  45. widgets/em-calendar.php +9 -1
  46. widgets/em-events.php +33 -21
  47. widgets/em-locations.php +1 -1
admin/bookings/em-cancelled.php ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Generates a "widget" table of confirmed bookings for a specific event.
4
+ *
5
+ * @param int $event_id
6
+ */
7
+ function em_bookings_cancelled_table(){
8
+ global $EM_Event, $wpdb, $current_user;
9
+
10
+ $action_scope = ( !empty($_REQUEST['em_obj']) && $_REQUEST['em_obj'] == 'em_bookings_cancelled_table' );
11
+ $action = ( $action_scope && !empty($_GET ['action']) ) ? $_GET ['action']:'';
12
+ $order = ( $action_scope && !empty($_GET ['order']) ) ? $_GET ['order']:'ASC';
13
+ $limit = ( $action_scope && !empty($_GET['limit']) ) ? $_GET['limit'] : 20;//Default limit
14
+ $page = ( $action_scope && !empty($_GET['p']) ) ? $_GET['p']:1;
15
+ $offset = ( $action_scope && $page > 1 ) ? ($page-1)*$limit : 0;
16
+
17
+ if( is_object($EM_Event) ){
18
+ $bookings = $EM_Event->get_bookings()->get_cancelled_bookings();
19
+ }else{
20
+ return false;
21
+ }
22
+ $bookings_count = (is_array($bookings)) ? count($bookings):0;
23
+ ?>
24
+ <div class='wrap em_bookings_pending_table em_obj'>
25
+ <form id='bookings-filter' method='get' action='<?php bloginfo('wpurl') ?>/wp-admin/edit.php'>
26
+ <input type="hidden" name="em_obj" value="em_bookings_pending_table" />
27
+ <!--
28
+ <ul class="subsubsub">
29
+ <li>
30
+ <a href='edit.php?post_type=post' class="current">All <span class="count">(1)</span></a> |
31
+ </li>
32
+ </ul>
33
+ <p class="search-box">
34
+ <label class="screen-reader-text" for="post-search-input"><?php _e('Search'); ?>:</label>
35
+ <input type="text" id="post-search-input" name="em_search" value="<?php echo (!empty($_GET['em_search'])) ? $_GET['em_search']:''; ?>" />
36
+ <input type="submit" value="<?php _e('Search'); ?>" class="button" />
37
+ </p>
38
+ -->
39
+ <?php if ( $bookings_count >= $limit ) : ?>
40
+ <div class='tablenav'>
41
+ <!--
42
+ <div class="alignleft actions">
43
+ <select name="action">
44
+ <option value="-1" selected="selected">
45
+ <?php _e('Bulk Actions'); ?>
46
+ </option>
47
+ <option value="approve">
48
+ <?php _e('Approve', 'dbem'); ?>
49
+ </option>
50
+ <option value="decline">
51
+ <?php _e('Decline', 'dbem'); ?>
52
+ </option>
53
+ </select>
54
+ <input type="submit" id="post-query-submit" value="Filter" class="button-secondary" />
55
+ </div>
56
+ -->
57
+ <!--
58
+ <div class="view-switch">
59
+ <a href="/wp-admin/edit.php?mode=list"><img class="current" id="view-switch-list" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="List View" alt="List View" name="view-switch-list" /></a> <a href="/wp-admin/edit.php?mode=excerpt"><img id="view-switch-excerpt" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="Excerpt View" alt="Excerpt View" name="view-switch-excerpt" /></a>
60
+ </div>
61
+ -->
62
+ <?php
63
+ if ( $bookings_count >= $limit ) {
64
+ $page_link_template = em_add_get_params($_SERVER['REQUEST_URI'], array('p'=>'%PAGE%', 'em_ajax'=>0, 'em_obj'=>'em_bookings_confirmed_table'));
65
+ $bookings_nav .= em_admin_paginate( $page_link_template, $bookings_count, $limit, $page, 5);
66
+ echo $bookings_nav;
67
+ }
68
+ ?>
69
+ <div class="clear"></div>
70
+ </div>
71
+ <?php endif; ?>
72
+ <div class="clear"></div>
73
+ <?php if( $bookings_count > 0 ): ?>
74
+ <div class='table-wrap'>
75
+ <table id='dbem-bookings-table' class='widefat post fixed'>
76
+ <thead>
77
+ <tr>
78
+ <th class='manage-column column-cb check-column' scope='col'>
79
+ <input class='select-all' type="checkbox" value='1' />
80
+ </th>
81
+ <th class='manage-column' scope='col'>Booker</th>
82
+ <th class='manage-column' scope='col'>E-mail</th>
83
+ <th class='manage-column' scope='col'>Phone number</th>
84
+ <th class='manage-column' scope='col'>Spaces</th>
85
+ <th class='manage-column' scope='col'>&nbsp;</th>
86
+ </tr>
87
+ </thead>
88
+ <tbody>
89
+ <?php
90
+ $rowno = 0;
91
+ $event_count = 0;
92
+ foreach ($bookings as $EM_Booking) {
93
+ if( ($rowno < $limit || empty($limit)) && ($event_count >= $offset || $offset === 0) ) {
94
+ $rowno++;
95
+ ?>
96
+ <tr>
97
+ <th scope="row" class="check-column" style="padding:7px 0px 7px;"><input type='checkbox' value='<?php echo $EM_Booking->id ?>' name='bookings[]'/></th>
98
+ <td><a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;person_id=<?php echo $EM_Booking->person->id; ?>"><?php echo $EM_Booking->person->name ?></a></td>
99
+ <td><?php echo $EM_Booking->person->email ?></td>
100
+ <td><?php echo $EM_Booking->person->phone ?></td>
101
+ <td><?php echo $EM_Booking->seats ?></td>
102
+ <td>
103
+ <?php
104
+ $approve_url = em_add_get_params($_SERVER['REQUEST_URI'], array('action'=>'bookings_approve', 'booking_id'=>$EM_Booking->id));
105
+ $delete_url = em_add_get_params($_SERVER['REQUEST_URI'], array('action'=>'bookings_delete', 'booking_id'=>$EM_Booking->id));
106
+ ?>
107
+ <a class="em-bookings-approve" href="<?php echo $approve_url ?>"><?php _e('Approve','dbem'); ?></a> |
108
+ <a class="em-bookings-edit" href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;booking_id=<?php echo $EM_Booking->id; ?>"><?php _e('Edit'); ?></a> |
109
+ <a class="em-bookings-delete" href="<?php echo $delete_url ?>"><?php _e('Delete','dbem'); ?></a>
110
+ </td>
111
+ </tr>
112
+ <?php
113
+ }
114
+ $event_count++;
115
+ }
116
+ ?>
117
+ </tbody>
118
+ </table>
119
+ </div>
120
+ <?php else: ?>
121
+ <?php _e('No cancelled bookings.', 'dbem'); ?>
122
+ <?php endif; ?>
123
+ </form>
124
+ <?php if( $bookings >= $limit ) : ?>
125
+ <div class='tablenav'>
126
+ <?php echo $bookings_nav; ?>
127
+ <div class="clear"></div>
128
+ </div>
129
+ <?php endif; ?>
130
+ </div>
131
+ <?php
132
+ }
133
+ ?>
admin/bookings/em-confirmed.php ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Generates a "widget" table of confirmed bookings for a specific event.
5
+ *
6
+ * @param int $event_id
7
+ */
8
+ function em_bookings_confirmed_table(){
9
+ global $EM_Event, $wpdb, $current_user;
10
+
11
+ $action_scope = ( !empty($_REQUEST['em_obj']) && $_REQUEST['em_obj'] == 'em_bookings_confirmed_table' );
12
+ $action = ( $action_scope && !empty($_GET ['action']) ) ? $_GET ['action']:'';
13
+ $order = ( $action_scope && !empty($_GET ['order']) ) ? $_GET ['order']:'ASC';
14
+ $limit = ( $action_scope && !empty($_GET['limit']) ) ? $_GET['limit'] : 20;//Default limit
15
+ $page = ( $action_scope && !empty($_GET['p']) ) ? $_GET['p']:1;
16
+ $offset = ( $action_scope && $page > 1 ) ? ($page-1)*$limit : 0;
17
+
18
+ if( is_object($EM_Event) ){
19
+ $bookings = $EM_Event->get_bookings()->get_bookings();
20
+ }else{
21
+ return false;
22
+ }
23
+ $bookings_count = (is_array($bookings)) ? count($bookings):0;
24
+ ?>
25
+ <div class='wrap em_bookings_pending_table em_obj'>
26
+ <form id='bookings-filter' method='get' action='<?php bloginfo('wpurl') ?>/wp-admin/edit.php'>
27
+ <input type="hidden" name="em_obj" value="em_bookings_pending_table" />
28
+ <!--
29
+ <ul class="subsubsub">
30
+ <li>
31
+ <a href='edit.php?post_type=post' class="current">All <span class="count">(1)</span></a> |
32
+ </li>
33
+ </ul>
34
+ <p class="search-box">
35
+ <label class="screen-reader-text" for="post-search-input"><?php _e('Search'); ?>:</label>
36
+ <input type="text" id="post-search-input" name="em_search" value="<?php echo (!empty($_GET['em_search'])) ? $_GET['em_search']:''; ?>" />
37
+ <input type="submit" value="<?php _e('Search'); ?>" class="button" />
38
+ </p>
39
+ -->
40
+ <?php if ( $bookings_count >= $limit ) : ?>
41
+ <div class='tablenav'>
42
+ <!--
43
+ <div class="alignleft actions">
44
+ <select name="action">
45
+ <option value="-1" selected="selected">
46
+ <?php _e('Bulk Actions'); ?>
47
+ </option>
48
+ <option value="approve">
49
+ <?php _e('Approve', 'dbem'); ?>
50
+ </option>
51
+ <option value="decline">
52
+ <?php _e('Decline', 'dbem'); ?>
53
+ </option>
54
+ </select>
55
+ <input type="submit" id="post-query-submit" value="Filter" class="button-secondary" />
56
+ </div>
57
+ -->
58
+ <!--
59
+ <div class="view-switch">
60
+ <a href="/wp-admin/edit.php?mode=list"><img class="current" id="view-switch-list" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="List View" alt="List View" name="view-switch-list" /></a> <a href="/wp-admin/edit.php?mode=excerpt"><img id="view-switch-excerpt" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="Excerpt View" alt="Excerpt View" name="view-switch-excerpt" /></a>
61
+ </div>
62
+ -->
63
+ <?php
64
+ if ( $bookings_count >= $limit ) {
65
+ $page_link_template = em_add_get_params($_SERVER['REQUEST_URI'], array('p'=>'%PAGE%', 'em_ajax'=>0, 'em_obj'=>'em_bookings_confirmed_table'));
66
+ $bookings_nav .= em_admin_paginate( $page_link_template, $bookings_count, $limit, $page, 5);
67
+ echo $bookings_nav;
68
+ }
69
+ ?>
70
+ <div class="clear"></div>
71
+ </div>
72
+ <?php endif; ?>
73
+ <div class="clear"></div>
74
+ <?php if( $bookings_count > 0 ): ?>
75
+ <div class='table-wrap'>
76
+ <table id='dbem-bookings-table' class='widefat post fixed'>
77
+ <thead>
78
+ <tr>
79
+ <th class='manage-column column-cb check-column' scope='col'>
80
+ <input class='select-all' type="checkbox" value='1' />
81
+ </th>
82
+ <th class='manage-column' scope='col'>Booker</th>
83
+ <th class='manage-column' scope='col'>E-mail</th>
84
+ <th class='manage-column' scope='col'>Phone number</th>
85
+ <th class='manage-column' scope='col'>Spaces</th>
86
+ <th class='manage-column' scope='col'>&nbsp;</th>
87
+ </tr>
88
+ </thead>
89
+ <tbody>
90
+ <?php
91
+ $rowno = 0;
92
+ $event_count = 0;
93
+ foreach ($bookings as $EM_Booking) {
94
+ if( ($rowno < $limit || empty($limit)) && ($event_count >= $offset || $offset === 0) ) {
95
+ $rowno++;
96
+ ?>
97
+ <tr>
98
+ <th scope="row" class="check-column" style="padding:7px 0px 7px;"><input type='checkbox' value='<?php echo $EM_Booking->id ?>' name='bookings[]'/></th>
99
+ <td><a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;person_id=<?php echo $EM_Booking->person_id; ?>"><?php echo $EM_Booking->person->name ?></a></td>
100
+ <td><?php echo $EM_Booking->person->email ?></td>
101
+ <td><?php echo $EM_Booking->person->phone ?></td>
102
+ <td><?php echo $EM_Booking->seats ?></td>
103
+ <td>
104
+ <?php
105
+ $unapprove_url = em_add_get_params($_SERVER['REQUEST_URI'], array('action'=>'bookings_unapprove', 'booking_id'=>$EM_Booking->id));
106
+ ?>
107
+ <a class="em-bookings-unapprove" href="<?php echo $unapprove_url ?>"><?php _e('Unapprove','dbem'); ?></a> |
108
+ <a class="em-bookings-edit" href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;booking_id=<?php echo $EM_Booking->id; ?>"><?php _e('Edit'); ?></a>
109
+ </td>
110
+ </tr>
111
+ <?php
112
+ }
113
+ $event_count++;
114
+ }
115
+ ?>
116
+ </tbody>
117
+ </table>
118
+ </div>
119
+ <?php else: ?>
120
+ <?php _e('No confirmed bookings.', 'dbem'); ?>
121
+ <?php endif; ?>
122
+ </form>
123
+ <?php if( $bookings >= $limit ) : ?>
124
+ <div class='tablenav'>
125
+ <?php echo $bookings_nav; ?>
126
+ <div class="clear"></div>
127
+ </div>
128
+ <?php endif; ?>
129
+ </div>
130
+ <?php
131
+
132
+ }
133
+ ?>
admin/bookings/em-events.php ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Determines whether to show event page or events page, and saves any updates to the event or events
5
+ * @return null
6
+ */
7
+ function em_bookings_events_table() {
8
+ //TODO Simplify panel for events, use form flags to detect certain actions (e.g. submitted, etc)
9
+ global $wpdb;
10
+ global $EM_Event;
11
+
12
+ $scope_names = array (
13
+ 'past' => __ ( 'Past events', 'dbem' ),
14
+ 'all' => __ ( 'All events', 'dbem' ),
15
+ 'future' => __ ( 'Future events', 'dbem' )
16
+ );
17
+
18
+ $action_scope = ( !empty($_REQUEST['em_obj']) && $_REQUEST['em_obj'] == 'em_bookings_events_table' );
19
+ $action = ( $action_scope && !empty($_GET ['action']) ) ? $_GET ['action']:'';
20
+ $order = ( $action_scope && !empty($_GET ['order']) ) ? $_GET ['order']:'ASC';
21
+ $limit = ( $action_scope && !empty($_GET['limit']) ) ? $_GET['limit'] : 20;//Default limit
22
+ $page = ( $action_scope && !empty($_GET['p']) ) ? $_GET['p']:1;
23
+ $offset = ( $action_scope && $page > 1 ) ? ($page-1)*$limit : 0;
24
+ $scope = ( $action_scope && !empty($_GET ['scope']) && array_key_exists($_GET ['scope'], $scope_names) ) ? $_GET ['scope']:'future';
25
+
26
+ // No action, only showing the events list
27
+ switch ($scope) {
28
+ case "past" :
29
+ $title = __ ( 'Past Events', 'dbem' );
30
+ break;
31
+ case "all" :
32
+ $title = __ ( 'All Events', 'dbem' );
33
+ break;
34
+ default :
35
+ $title = __ ( 'Future Events', 'dbem' );
36
+ $scope = "future";
37
+ }
38
+ $events = EM_Events::get( array('scope'=>$scope, 'limit'=>0, 'order'=>$order, 'rsvp'=>true ) );
39
+ $events_count = count ( $events );
40
+
41
+ $use_events_end = get_option ( 'dbem_use_event_end' );
42
+ ?>
43
+ <div class="wrap em_bookings_events_table em_obj">
44
+ <form id="posts-filter" action="<?php echo $_SERVER['REQUEST_URI'] ?>" method="get">
45
+ <input type="hidden" name="em_obj" value="em_bookings_events_table" />
46
+ <?php if(!empty($_GET['page'])): ?>
47
+ <input type='hidden' name='page' value='events-manager-bookings' />
48
+ <?php endif; ?>
49
+ <ul class="subsubsub">
50
+ <li><a href='#' class="current"><?php _e ( 'Total', 'dbem' ); ?> <span class="count">(<?php echo (count ( $events )); ?>)</span></a></li>
51
+ </ul>
52
+ <div class="tablenav">
53
+ <div class="alignleft actions">
54
+ <!--
55
+ <select name="action">
56
+ <option value="-1" selected="selected"><?php _e ( 'Bulk Actions' ); ?></option>
57
+ <option value="deleteEvents"><?php _e ( 'Delete selected','dbem' ); ?></option>
58
+ </select>
59
+ <input type="submit" value="<?php _e ( 'Apply' ); ?>" name="doaction2" id="doaction2" class="button-secondary action" />
60
+ -->
61
+ <select name="scope">
62
+ <?php
63
+ foreach ( $scope_names as $key => $value ) {
64
+ $selected = "";
65
+ if ($key == $scope)
66
+ $selected = "selected='selected'";
67
+ echo "<option value='$key' $selected>$value</option> ";
68
+ }
69
+ ?>
70
+ </select>
71
+ <input id="post-query-submit" class="button-secondary" type="submit" value="<?php _e ( 'Filter' )?>" />
72
+ </div>
73
+ <!--
74
+ <div class="view-switch">
75
+ <a href="/wp-admin/edit.php?mode=list"><img class="current" id="view-switch-list" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="List View" alt="List View" name="view-switch-list" /></a> <a href="/wp-admin/edit.php?mode=excerpt"><img id="view-switch-excerpt" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="Excerpt View" alt="Excerpt View" name="view-switch-excerpt" /></a>
76
+ </div>
77
+ -->
78
+ <?php
79
+ if ( $events_count >= $limit ) {
80
+ $page_link_template = em_add_get_params($_SERVER['REQUEST_URI'], array('p'=>'%PAGE%', 'em_ajax'=>0, 'em_obj'=>'em_bookings_events_table'));
81
+ $events_nav .= em_admin_paginate( $page_link_template, $events_count, $limit, $page, 5);
82
+ echo $events_nav;
83
+ }
84
+ ?>
85
+ <br class="clear" />
86
+ </div>
87
+
88
+ <?php
89
+ if (empty ( $events )) {
90
+ // TODO localize
91
+ _e ( 'no events','dbem' );
92
+ } else {
93
+ ?>
94
+ <div class='table-wrap'>
95
+ <table class="widefat">
96
+ <thead>
97
+ <tr>
98
+ <th class='manage-column column-cb check-column' scope='col'>
99
+ <input class='select-all' type="checkbox" value='1' />
100
+ </th>
101
+ <th><?php _e ( 'Event', 'dbem' ); ?></th>
102
+ <th><?php _e ( 'Date and time', 'dbem' ); ?></th>
103
+ </tr>
104
+ </thead>
105
+ <tbody>
106
+ <?php
107
+ $rowno = 0;
108
+ $event_count = 0;
109
+ foreach ( $events as $event ) {
110
+ /* @var $event EM_Event */
111
+ if( ($rowno < $limit || empty($limit)) && ($event_count >= $offset || $offset === 0) ) {
112
+ $rowno++;
113
+ $class = ($rowno % 2) ? ' class="alternate"' : '';
114
+ // FIXME set to american
115
+ $localised_start_date = date_i18n('D d M Y', $event->start);
116
+ $localised_end_date = date_i18n('D d M Y', $event->end);
117
+ $style = "";
118
+ $today = date ( "Y-m-d" );
119
+
120
+ if ($event->start_date < $today && $event->end_date < $today){
121
+ $style = "style ='background-color: #FADDB7;'";
122
+ }
123
+ ?>
124
+ <tr <?php echo "$class $style"; ?>>
125
+
126
+ <td>
127
+ <input type='checkbox' class='row-selector' value='<?php echo $event->id; ?>' name='events[]' />
128
+ </td>
129
+ <td>
130
+ <strong>
131
+ <a class="row-title" href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;event_id=<?php echo $event->id ?>"><?php echo ($event->name); ?></a>
132
+ </strong>
133
+ &ndash;
134
+ <?php _e("Booked Seats",'dbem') ?>: <?php echo $event->get_bookings()->get_booked_seats()."/".$event->seats ?>
135
+ <?php if( get_option('dbem_bookings_approval') == 1 ) : ?>
136
+ | <?php _e("Pending",'dbem') ?>: <?php echo $event->get_bookings()->get_pending_seats(); ?>
137
+ <?php endif; ?>
138
+ </td>
139
+
140
+ <td>
141
+ <?php echo $localised_start_date; ?>
142
+ <?php echo ($localised_end_date != $localised_start_date) ? " - $localised_end_date":'' ?>
143
+ &ndash;
144
+ <?php
145
+ //TODO Should 00:00 - 00:00 be treated as an all day event?
146
+ echo substr ( $event->start_time, 0, 5 ) . " - " . substr ( $event->end_time, 0, 5 );
147
+ ?>
148
+ </td>
149
+ </tr>
150
+ <?php
151
+ }
152
+ $event_count++;
153
+ }
154
+ ?>
155
+ </tbody>
156
+ </table>
157
+ </div>
158
+ <?php
159
+ } // end of table
160
+ ?>
161
+ <div class='tablenav'>
162
+ <div class="alignleft actions">
163
+ <br class='clear' />
164
+ </div>
165
+ <?php if ( $events_count >= $limit ) : ?>
166
+ <div class="tablenav-pages">
167
+ <?php
168
+ echo $events_nav;
169
+ ?>
170
+ </div>
171
+ <?php endif; ?>
172
+ <br class='clear' />
173
+ </div>
174
+ </form>
175
+ </div>
176
+ <?php
177
+ }
178
+
179
+ ?>
admin/bookings/em-pending.php ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Generates a "widget" table of pending bookings with some quick admin operation options.
5
+ * If event id supplied then only pending bookings for that event will show.
6
+ *
7
+ * @param int $event_id
8
+ */
9
+ function em_bookings_pending_table($event_id = false){
10
+ global $EM_Event, $wpdb, $current_user;
11
+
12
+ if( get_option('dbem_bookings_approval') == 0 ){
13
+ return false;
14
+ }
15
+
16
+ $action_scope = ( !empty($_REQUEST['em_obj']) && $_REQUEST['em_obj'] == 'em_bookings_pending_table' );
17
+ $action = ( $action_scope && !empty($_GET ['action']) ) ? $_GET ['action']:'';
18
+ $order = ( $action_scope && !empty($_GET ['order']) ) ? $_GET ['order']:'ASC';
19
+ $limit = ( $action_scope && !empty($_GET['limit']) ) ? $_GET['limit'] : 20;//Default limit
20
+ $page = ( $action_scope && !empty($_GET['p']) ) ? $_GET['p']:1;
21
+ $offset = ( $action_scope && $page > 1 ) ? ($page-1)*$limit : 0;
22
+
23
+ if( is_object($EM_Event) ){
24
+ $bookings = $EM_Event->get_bookings()->get_pending();
25
+ }else{
26
+ //To optimize performance, we can do one query here for all pending bookings to show.
27
+ $bookings = EM_Bookings::get(array('status'=>0));
28
+ $events = array();
29
+ //Now let's create events and bookings for this:
30
+ foreach($bookings as $EM_Booking){
31
+ //create event
32
+ if( !array_key_exists($EM_Booking->event_id,$events) ){
33
+ $events[$EM_Booking->event_id] = new EM_Event($EM_Booking->event_id);
34
+ }
35
+ }
36
+ }
37
+ $bookings_count = (is_array($bookings)) ? count($bookings):0;
38
+ ?>
39
+ <div class='wrap em_bookings_pending_table em_obj'>
40
+ <form id='bookings-filter' method='get' action='<?php bloginfo('wpurl') ?>/wp-admin/edit.php'>
41
+ <input type="hidden" name="em_obj" value="em_bookings_pending_table" />
42
+ <!--
43
+ <ul class="subsubsub">
44
+ <li>
45
+ <a href='edit.php?post_type=post' class="current">All <span class="count">(1)</span></a> |
46
+ </li>
47
+ </ul>
48
+ <p class="search-box">
49
+ <label class="screen-reader-text" for="post-search-input"><?php _e('Search'); ?>:</label>
50
+ <input type="text" id="post-search-input" name="em_search" value="<?php echo (!empty($_GET['em_search'])) ? $_GET['em_search']:''; ?>" />
51
+ <input type="submit" value="<?php _e('Search'); ?>" class="button" />
52
+ </p>
53
+ -->
54
+ <?php if ( $bookings_count >= $limit ) : ?>
55
+ <div class='tablenav'>
56
+ <!--
57
+ <div class="alignleft actions">
58
+ <select name="action">
59
+ <option value="-1" selected="selected">
60
+ <?php _e('Bulk Actions'); ?>
61
+ </option>
62
+ <option value="approve">
63
+ <?php _e('Approve', 'dbem'); ?>
64
+ </option>
65
+ <option value="decline">
66
+ <?php _e('Decline', 'dbem'); ?>
67
+ </option>
68
+ </select>
69
+ <input type="submit" id="post-query-submit" value="Filter" class="button-secondary" />
70
+ </div>
71
+ -->
72
+ <!--
73
+ <div class="view-switch">
74
+ <a href="/wp-admin/edit.php?mode=list"><img class="current" id="view-switch-list" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="List View" alt="List View" name="view-switch-list" /></a> <a href="/wp-admin/edit.php?mode=excerpt"><img id="view-switch-excerpt" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="Excerpt View" alt="Excerpt View" name="view-switch-excerpt" /></a>
75
+ </div>
76
+ -->
77
+ <?php
78
+ if ( $bookings_count >= $limit ) {
79
+ $page_link_template = em_add_get_params($_SERVER['REQUEST_URI'], array('p'=>'%PAGE%', 'em_ajax'=>0, 'em_obj'=>'em_bookings_pending_table'));
80
+ $bookings_nav .= em_admin_paginate( $page_link_template, $bookings_count, $limit, $page, 5);
81
+ echo $bookings_nav;
82
+ }
83
+ ?>
84
+ <div class="clear"></div>
85
+ </div>
86
+ <?php endif; ?>
87
+ <div class="clear"></div>
88
+ <?php if( $bookings_count > 0 ): ?>
89
+ <div class='table-wrap'>
90
+ <table id='dbem-bookings-table' class='widefat post fixed'>
91
+ <thead>
92
+ <tr>
93
+ <th class='manage-column column-cb check-column' scope='col'>
94
+ <input class='select-all' type="checkbox" value='1' />
95
+ </th>
96
+ <th class='manage-column' scope='col'>Booker</th>
97
+ <?php if( !is_object($EM_Event) ): ?>
98
+ <th class='manage-column' scope="col">Event</th>
99
+ <?php endif; ?>
100
+ <th class='manage-column' scope='col'>E-mail</th>
101
+ <th class='manage-column' scope='col'>Phone number</th>
102
+ <th class='manage-column' scope='col'>Spaces</th>
103
+ <th class='manage-column' scope='col'>&nbsp;</th>
104
+ </tr>
105
+ </thead>
106
+ <tbody>
107
+ <?php
108
+ $rowno = 0;
109
+ $event_count = 0;
110
+ foreach ($bookings as $EM_Booking) {
111
+ if( ($rowno < $limit || empty($limit)) && ($event_count >= $offset || $offset === 0) ) {
112
+ $rowno++;
113
+ ?>
114
+ <tr>
115
+ <th scope="row" class="check-column" style="padding:7px 0px 7px;"><input type='checkbox' value='<?php echo $EM_Booking->id ?>' name='bookings[]'/></th>
116
+ <td><a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;person_id=<?php echo $EM_Booking->person->id; ?>"><?php echo $EM_Booking->person->name ?></a></td>
117
+ <?php if( !is_object($EM_Event) ): ?>
118
+ <td><a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;event_id=<?php echo $EM_Booking->event_id; ?>"><?php echo $events[$EM_Booking->event_id]->name ?></a></td>
119
+ <?php endif; ?>
120
+ <td><?php echo $EM_Booking->person->email ?></td>
121
+ <td><?php echo $EM_Booking->person->phone ?></td>
122
+ <td><?php echo $EM_Booking->seats ?></td>
123
+ <td>
124
+ <?php
125
+ $approve_url = em_add_get_params($_SERVER['REQUEST_URI'], array('action'=>'bookings_approve', 'booking_id'=>$EM_Booking->id));
126
+ $reject_url = em_add_get_params($_SERVER['REQUEST_URI'], array('action'=>'bookings_reject', 'booking_id'=>$EM_Booking->id));
127
+ ?>
128
+ <a class="em-bookings-approve" href="<?php echo $approve_url ?>"><?php _e('Approve','dbem'); ?></a> |
129
+ <a class="em-bookings-reject" href="<?php echo $reject_url ?>"><?php _e('Reject','dbem'); ?></a> |
130
+ <a class="em-bookings-edit" href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;booking_id=<?php echo $EM_Booking->id; ?>"><?php _e('Edit'); ?></a>
131
+ </td>
132
+ </tr>
133
+ <?php
134
+ }
135
+ $event_count++;
136
+ }
137
+ ?>
138
+ </tbody>
139
+ </table>
140
+ </div>
141
+ <?php else: ?>
142
+ <?php _e('No pending bookings.', 'dbem'); ?>
143
+ <?php endif; ?>
144
+ </form>
145
+ <?php if( $bookings >= $limit ) : ?>
146
+ <div class='tablenav'>
147
+ <?php echo $bookings_nav; ?>
148
+ <div class="clear"></div>
149
+ </div>
150
+ <?php endif; ?>
151
+ </div>
152
+ <?php
153
+
154
+ }
155
+ ?>
admin/bookings/em-person.php ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Generates a "widget" table of confirmed bookings for a specific event.
5
+ *
6
+ * @param int $event_id
7
+ */
8
+ function em_bookings_person_table(){
9
+ global $wpdb, $current_user,$EM_Person;
10
+ if(!is_object($EM_Person)){
11
+ return false;
12
+ }
13
+ $action_scope = ( !empty($_REQUEST['em_obj']) && $_REQUEST['em_obj'] == 'em_bookings_confirmed_table' );
14
+ $action = ( $action_scope && !empty($_GET ['action']) ) ? $_GET ['action']:'';
15
+ $order = ( $action_scope && !empty($_GET ['order']) ) ? $_GET ['order']:'ASC';
16
+ $limit = ( $action_scope && !empty($_GET['limit']) ) ? $_GET['limit'] : 20;//Default limit
17
+ $page = ( $action_scope && !empty($_GET['p']) ) ? $_GET['p']:1;
18
+ $offset = ( $action_scope && $page > 1 ) ? ($page-1)*$limit : 0;
19
+
20
+ $bookings = $EM_Person->get_bookings();
21
+ $bookings_count = (is_array($bookings)) ? count($bookings):0;
22
+ if($bookings_count > 0){
23
+ //Get events here in one query to speed things up
24
+ foreach($bookings as $EM_Booking){
25
+ $event_ids[] = $EM_Booking->event_id;
26
+ }
27
+ $events = EM_Events::get($event_ids);
28
+ }
29
+ ?>
30
+ <div class='wrap em_bookings_pending_table em_obj'>
31
+ <form id='bookings-filter' method='get' action='<?php bloginfo('wpurl') ?>/wp-admin/edit.php'>
32
+ <input type="hidden" name="em_obj" value="em_bookings_pending_table" />
33
+ <!--
34
+ <ul class="subsubsub">
35
+ <li>
36
+ <a href='edit.php?post_type=post' class="current">All <span class="count">(1)</span></a> |
37
+ </li>
38
+ </ul>
39
+ <p class="search-box">
40
+ <label class="screen-reader-text" for="post-search-input"><?php _e('Search'); ?>:</label>
41
+ <input type="text" id="post-search-input" name="em_search" value="<?php echo (!empty($_GET['em_search'])) ? $_GET['em_search']:''; ?>" />
42
+ <input type="submit" value="<?php _e('Search'); ?>" class="button" />
43
+ </p>
44
+ -->
45
+ <?php if ( $bookings_count >= $limit ) : ?>
46
+ <div class='tablenav'>
47
+ <!--
48
+ <div class="alignleft actions">
49
+ <select name="action">
50
+ <option value="-1" selected="selected">
51
+ <?php _e('Bulk Actions'); ?>
52
+ </option>
53
+ <option value="approve">
54
+ <?php _e('Approve', 'dbem'); ?>
55
+ </option>
56
+ <option value="decline">
57
+ <?php _e('Decline', 'dbem'); ?>
58
+ </option>
59
+ </select>
60
+ <input type="submit" id="post-query-submit" value="Filter" class="button-secondary" />
61
+ </div>
62
+ -->
63
+ <!--
64
+ <div class="view-switch">
65
+ <a href="/wp-admin/edit.php?mode=list"><img class="current" id="view-switch-list" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="List View" alt="List View" name="view-switch-list" /></a> <a href="/wp-admin/edit.php?mode=excerpt"><img id="view-switch-excerpt" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="Excerpt View" alt="Excerpt View" name="view-switch-excerpt" /></a>
66
+ </div>
67
+ -->
68
+ <?php
69
+ if ( $bookings_count >= $limit ) {
70
+ $page_link_template = em_add_get_params($_SERVER['REQUEST_URI'], array('p'=>'%PAGE%', 'em_ajax'=>0, 'em_obj'=>'em_bookings_confirmed_table'));
71
+ $bookings_nav .= em_admin_paginate( $page_link_template, $bookings_count, $limit, $page, 5);
72
+ echo $bookings_nav;
73
+ }
74
+ ?>
75
+ <div class="clear"></div>
76
+ </div>
77
+ <?php endif; ?>
78
+ <div class="clear"></div>
79
+ <?php if( $bookings_count > 0 ): ?>
80
+ <div class='table-wrap'>
81
+ <table id='dbem-bookings-table' class='widefat post fixed'>
82
+ <thead>
83
+ <tr>
84
+ <th class='manage-column column-cb check-column' scope='col'>
85
+ <input class='select-all' type="checkbox" value='1' />
86
+ </th>
87
+ <th class='manage-column' scope='col'>Event</th>
88
+ <th class='manage-column' scope='col'>Spaces</th>
89
+ <th class='manage-column' scope='col'>Status</th>
90
+ <th class='manage-column' scope='col'>&nbsp;</th>
91
+ </tr>
92
+ </thead>
93
+ <tbody>
94
+ <?php
95
+ $rowno = 0;
96
+ $event_count = 0;
97
+ foreach ($bookings as $EM_Booking) {
98
+ $EM_Event = $events[$EM_Booking->event_id];
99
+ if( $EM_Event->can_manage() && ($rowno < $limit || empty($limit)) && ($event_count >= $offset || $offset === 0) ) {
100
+ $rowno++;
101
+ ?>
102
+ <tr>
103
+ <th scope="row" class="check-column" style="padding:7px 0px 7px;"><input type='checkbox' value='<?php echo $EM_Booking->id ?>' name='bookings[]'/></th>
104
+ <td><a class="row-title" href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;event_id=<?php echo $EM_Event->id ?>"><?php echo ($EM_Event->name); ?></a></td>
105
+ <td><?php echo $EM_Booking->seats ?></td>
106
+ <td><?php echo $EM_Booking->status_array[$EM_Booking->status]; ?>
107
+ </td>
108
+ <td>
109
+ <?php
110
+ $unapprove_url = em_add_get_params($_SERVER['REQUEST_URI'], array('action'=>'bookings_unapprove', 'bookings'=>$EM_Booking->id));
111
+ $approve_url = em_add_get_params($_SERVER['REQUEST_URI'], array('action'=>'bookings_approve', 'bookings'=>$EM_Booking->id));
112
+ $reject_url = em_add_get_params($_SERVER['REQUEST_URI'], array('action'=>'bookings_reject', 'bookings'=>$EM_Booking->id));
113
+ $delete_url = em_add_get_params($_SERVER['REQUEST_URI'], array('action'=>'bookings_delete', 'bookings'=>$EM_Booking->id));
114
+ ?>
115
+ <?php if( $EM_Booking->status == 0 || $EM_Booking->status == 2 ): ?>
116
+ <a class="em-bookings-approve" href="<?php echo $approve_url ?>"><?php _e('Approve','dbem'); ?></a> |
117
+ <?php endif; ?>
118
+ <?php if( $EM_Booking->status == 2 ): ?>
119
+ <a class="em-bookings-unapprove" href="<?php echo $unapprove_url ?>"><?php _e('Unapprove','dbem'); ?></a> |
120
+ <?php endif; ?>
121
+ <?php if( $EM_Booking->status == 0 || $EM_Booking->status == 1 ): ?>
122
+ <a class="em-bookings-reject" href="<?php echo $reject_url ?>"><?php _e('Reject','dbem'); ?></a> |
123
+ <?php endif; ?>
124
+ <a class="em-bookings-edit" href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;booking_id=<?php echo $EM_Booking->id; ?>"><?php _e('Edit'); ?></a> |
125
+ <a class="em-bookings-delete" href="<?php echo $delete_url ?>"><?php _e('Delete','dbem'); ?></a>
126
+ </td>
127
+ </tr>
128
+ <?php
129
+ }
130
+ $event_count++;
131
+ }
132
+ ?>
133
+ </tbody>
134
+ </table>
135
+ </div>
136
+ <?php else: ?>
137
+ <?php _e('No confirmed bookings.', 'dbem'); ?>
138
+ <?php endif; ?>
139
+ </form>
140
+ <?php if( $bookings >= $limit ) : ?>
141
+ <div class='tablenav'>
142
+ <?php echo $bookings_nav; ?>
143
+ <div class="clear"></div>
144
+ </div>
145
+ <?php endif; ?>
146
+ </div>
147
+ <?php
148
+
149
+ }
150
+ ?>
admin/bookings/em-rejected.php ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Generates a "widget" table of confirmed bookings for a specific event.
4
+ *
5
+ * @param int $event_id
6
+ */
7
+ function em_bookings_rejected_table(){
8
+ global $EM_Event, $wpdb, $current_user;
9
+
10
+ $action_scope = ( !empty($_REQUEST['em_obj']) && $_REQUEST['em_obj'] == 'em_bookings_confirmed_table' );
11
+ $action = ( $action_scope && !empty($_GET ['action']) ) ? $_GET ['action']:'';
12
+ $order = ( $action_scope && !empty($_GET ['order']) ) ? $_GET ['order']:'ASC';
13
+ $limit = ( $action_scope && !empty($_GET['limit']) ) ? $_GET['limit'] : 20;//Default limit
14
+ $page = ( $action_scope && !empty($_GET['p']) ) ? $_GET['p']:1;
15
+ $offset = ( $action_scope && $page > 1 ) ? ($page-1)*$limit : 0;
16
+
17
+ if( is_object($EM_Event) ){
18
+ $bookings = $EM_Event->get_bookings()->get_rejected_bookings();
19
+ }else{
20
+ return false;
21
+ }
22
+ $bookings_count = (is_array($bookings)) ? count($bookings):0;
23
+ ?>
24
+ <div class='wrap em_bookings_pending_table em_obj'>
25
+ <form id='bookings-filter' method='get' action='<?php bloginfo('wpurl') ?>/wp-admin/edit.php'>
26
+ <input type="hidden" name="em_obj" value="em_bookings_pending_table" />
27
+ <!--
28
+ <ul class="subsubsub">
29
+ <li>
30
+ <a href='edit.php?post_type=post' class="current">All <span class="count">(1)</span></a> |
31
+ </li>
32
+ </ul>
33
+ <p class="search-box">
34
+ <label class="screen-reader-text" for="post-search-input"><?php _e('Search'); ?>:</label>
35
+ <input type="text" id="post-search-input" name="em_search" value="<?php echo (!empty($_GET['em_search'])) ? $_GET['em_search']:''; ?>" />
36
+ <input type="submit" value="<?php _e('Search'); ?>" class="button" />
37
+ </p>
38
+ -->
39
+ <?php if ( $bookings_count >= $limit ) : ?>
40
+ <div class='tablenav'>
41
+ <!--
42
+ <div class="alignleft actions">
43
+ <select name="action">
44
+ <option value="-1" selected="selected">
45
+ <?php _e('Bulk Actions'); ?>
46
+ </option>
47
+ <option value="approve">
48
+ <?php _e('Approve', 'dbem'); ?>
49
+ </option>
50
+ <option value="decline">
51
+ <?php _e('Decline', 'dbem'); ?>
52
+ </option>
53
+ </select>
54
+ <input type="submit" id="post-query-submit" value="Filter" class="button-secondary" />
55
+ </div>
56
+ -->
57
+ <!--
58
+ <div class="view-switch">
59
+ <a href="/wp-admin/edit.php?mode=list"><img class="current" id="view-switch-list" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="List View" alt="List View" name="view-switch-list" /></a> <a href="/wp-admin/edit.php?mode=excerpt"><img id="view-switch-excerpt" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="Excerpt View" alt="Excerpt View" name="view-switch-excerpt" /></a>
60
+ </div>
61
+ -->
62
+ <?php
63
+ if ( $bookings_count >= $limit ) {
64
+ $page_link_template = em_add_get_params($_SERVER['REQUEST_URI'], array('p'=>'%PAGE%', 'em_ajax'=>0, 'em_obj'=>'em_bookings_confirmed_table'));
65
+ $bookings_nav .= em_admin_paginate( $page_link_template, $bookings_count, $limit, $page, 5);
66
+ echo $bookings_nav;
67
+ }
68
+ ?>
69
+ <div class="clear"></div>
70
+ </div>
71
+ <?php endif; ?>
72
+ <div class="clear"></div>
73
+ <?php if( $bookings_count > 0 ): ?>
74
+ <div class='table-wrap'>
75
+ <table id='dbem-bookings-table' class='widefat post fixed'>
76
+ <thead>
77
+ <tr>
78
+ <th class='manage-column column-cb check-column' scope='col'>
79
+ <input class='select-all' type="checkbox" value='1' />
80
+ </th>
81
+ <th class='manage-column' scope='col'>Booker</th>
82
+ <th class='manage-column' scope='col'>E-mail</th>
83
+ <th class='manage-column' scope='col'>Phone number</th>
84
+ <th class='manage-column' scope='col'>Spaces</th>
85
+ <th class='manage-column' scope='col'>&nbsp;</th>
86
+ </tr>
87
+ </thead>
88
+ <tbody>
89
+ <?php
90
+ $rowno = 0;
91
+ $event_count = 0;
92
+ foreach ($bookings as $EM_Booking) {
93
+ if( ($rowno < $limit || empty($limit)) && ($event_count >= $offset || $offset === 0) ) {
94
+ $rowno++;
95
+ ?>
96
+ <tr>
97
+ <th scope="row" class="check-column" style="padding:7px 0px 7px;"><input type='checkbox' value='<?php echo $EM_Booking->id ?>' name='bookings[]'/></th>
98
+ <td><a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;person_id=<?php echo $EM_Booking->person->id; ?>"><?php echo $EM_Booking->person->name ?></a></td>
99
+ <td><?php echo $EM_Booking->person->email ?></td>
100
+ <td><?php echo $EM_Booking->person->phone ?></td>
101
+ <td><?php echo $EM_Booking->seats ?></td>
102
+ <td>
103
+ <?php
104
+ $approve_url = em_add_get_params($_SERVER['REQUEST_URI'], array('action'=>'bookings_approve', 'booking_id'=>$EM_Booking->id));
105
+ $delete_url = em_add_get_params($_SERVER['REQUEST_URI'], array('action'=>'bookings_delete', 'booking_id'=>$EM_Booking->id));
106
+ ?>
107
+ <a class="em-bookings-approve" href="<?php echo $approve_url ?>"><?php _e('Approve','dbem'); ?></a> |
108
+ <a class="em-bookings-edit" href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;booking_id=<?php echo $EM_Booking->id; ?>"><?php _e('Edit'); ?></a> |
109
+ <a class="em-bookings-delete" href="<?php echo $delete_url ?>"><?php _e('Delete','dbem'); ?></a>
110
+ </td>
111
+ </tr>
112
+ <?php
113
+ }
114
+ $event_count++;
115
+ }
116
+ ?>
117
+ </tbody>
118
+ </table>
119
+ </div>
120
+ <?php else: ?>
121
+ <?php _e('No rejected bookings.', 'dbem'); ?>
122
+ <?php endif; ?>
123
+ </form>
124
+ <?php if( $bookings >= $limit ) : ?>
125
+ <div class='tablenav'>
126
+ <?php echo $bookings_nav; ?>
127
+ <div class="clear"></div>
128
+ </div>
129
+ <?php endif; ?>
130
+ </div>
131
+ <?php
132
+ }
133
+ ?>
admin/em-admin.php CHANGED
@@ -7,33 +7,85 @@
7
  function em_admin_warnings() {
8
  //If we're editing the events page show hello to new user
9
  $events_page_id = get_option ( 'dbem_events_page' );
10
- if (isset ( $_GET ['disable_hello_to_user'] ) && $_GET ['disable_hello_to_user'] == 'true'){
11
- // Disable Hello to new user if requested
12
- update_option ( 'dbem_hello_to_user', 0 );
13
- }else{
14
- if ( preg_match( '/(post|page).php/', $_SERVER ['SCRIPT_NAME']) && isset ( $_GET ['action'] ) && $_GET ['action'] == 'edit' && isset ( $_GET ['post'] ) && $_GET ['post'] == "$events_page_id") {
15
- $message = sprintf ( __ ( "This page corresponds to <strong>Events Manager</strong> events page. Its content will be overriden by <strong>Events Manager</strong>. If you want to display your content, you can can assign another page to <strong>Events Manager</strong> in the the <a href='%s'>Settings</a>. ", 'dbem' ), 'admin.php?page=events-manager-options' );
16
- $notice = "<div class='error'><p>$message</p></div>";
17
- echo $notice;
18
- }
19
- }
20
- //If events page couldn't be created
21
- if( !empty($_GET['em_dismiss_events_page']) ){
22
- update_option('dbem_dismiss_events_page',1);
23
- }else{
24
- if ( !get_page($events_page_id) && !get_option('dbem_dismiss_events_page') ){
25
- $dismiss_link_joiner = ( count($_GET) > 0 ) ? '&amp;':'?';
26
- $advice = sprintf ( __( 'Uh Oh! For some reason wordpress could not create an events page for you (or you just deleted it). Not to worry though, all you have to do is create an empty page, name it whatever you want, and select it as your events page in your <a href="%s">options page</a>. Sorry for the extra step! If you know what you are doing, you may have done this on purpose, if so <a href="%s">ignore this message</a>', 'dbem'), get_bloginfo ( 'url' ) . '/wp-admin/admin.php?page=events-manager-options', $_SERVER['REQUEST_URI'].$dismiss_link_joiner.'em_dismiss_events_page=1' );
27
  ?>
28
- <div id="em_page_error" class="updated">
29
- <p><?php echo $advice; ?></p>
30
  </div>
31
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  }
33
  }
 
 
 
 
 
 
 
34
  }
35
  add_action ( 'admin_notices', 'em_admin_warnings' );
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  /**
38
  * Called by admin_print_scripts-(hook|page) action, created when adding menu items in events-manager.php
39
  */
@@ -202,7 +254,7 @@ function em_admin_general_script() {
202
  }
203
  return true;
204
  }
205
- $('#eventForm').bind("submit", validateEventForm);
206
  });
207
  //]]>
208
  </script>
7
  function em_admin_warnings() {
8
  //If we're editing the events page show hello to new user
9
  $events_page_id = get_option ( 'dbem_events_page' );
10
+ $dismiss_link_joiner = ( count($_GET) > 0 ) ? '&amp;':'?';
11
+
12
+ if( em_verify_admin() ){
13
+ //New User Intro
14
+ if (isset ( $_GET ['disable_hello_to_user'] ) && $_GET ['disable_hello_to_user'] == 'true'){
15
+ // Disable Hello to new user if requested
16
+ update_option ( 'dbem_hello_to_user', 0 );
17
+ }elseif ( get_option ( 'dbem_hello_to_user' ) == 1 && $_GET['page'] == 'events-manager-events' ) {
18
+ $current_user = wp_get_current_user ();
19
+ //FIXME update welcome msg with good links
20
+ $advice = sprintf ( __ ( "<p>Hey, <strong>%s</strong>, welcome to <strong>Events Manager</strong>! We hope you like it around here.</p>
21
+ <p>Now it's time to insert events lists through <a href='%s' title='Widgets page'>widgets</a>, <a href='%s' title='Template tags documentation'>template tags</a> or <a href='%s' title='Shortcodes documentation'>shortcodes</a>.</p>
22
+ <p>By the way, have you taken a look at the <a href='%s' title='Change settings'>Settings page</a>? That's where you customize the way events and locations are displayed.</p>
23
+ <p>What? Tired of seeing this advice? I hear you, <a href='%s' title='Don't show this advice again'>click here</a> and you won't see this again!</p>", 'dbem' ), $current_user->display_name, get_bloginfo ( 'url' ) . '/wp-admin/widgets.php', 'http://wp-events-plugin.com/documentation/template-tags/', 'http://wp-events-plugin.com/documentation/shortcodes/', get_bloginfo ( 'url' ) . '/wp-admin/admin.php?page=events-manager-options', get_bloginfo ( 'url' ) . '/wp-admin/admin.php?page=events-manager&disable_hello_to_user=true' );
 
 
 
24
  ?>
25
+ <div id="message" class="updated">
26
+ <?php echo $advice; ?>
27
  </div>
28
+ <?php
29
+ }
30
+
31
+ //If events page couldn't be created
32
+ if( !empty($_GET['em_dismiss_admin_notice']) ){
33
+ delete_option('dbem_admin_notice_'.$_GET['em_dismiss_admin_notice']);
34
+ }else{
35
+ if ( get_option('dbem_admin_notice_3.0.91') ){
36
+ ?>
37
+ <div class="updated">
38
+ <p><?php echo sprintf ( __( '<strong>Events Manager has some new features!</strong><ul><li>Bookings can now be approved before they count towards your event\'s space allocations.</li><li>Events now have owners, and you can restrict users so they can only manage events/locations/categories they create.<br/><br/>These new permissions are enabled by default, but since you upgraded it has been disabled to maintain the previous plugin behaviour. You can re-enable it from the <a href="%s">settings page</a>. <a href="%s">Dismiss</a>', 'dbem'), get_bloginfo ( 'url' ) . '/wp-admin/admin.php?page=events-manager-options', $_SERVER['REQUEST_URI'].$dismiss_link_joiner.'em_dismiss_admin_notice=3.0.91' ); ?></p>
39
+ </div>
40
+ <?php
41
+ }
42
+ }
43
+
44
+ //If events page couldn't be created
45
+ if( !empty($_GET['em_dismiss_events_page']) ){
46
+ update_option('dbem_dismiss_events_page',1);
47
+ }else{
48
+ if ( !get_page($events_page_id) && !get_option('dbem_dismiss_events_page') ){
49
+ ?>
50
+ <div id="em_page_error" class="updated">
51
+ <p><?php echo sprintf ( __( 'Uh Oh! For some reason wordpress could not create an events page for you (or you just deleted it). Not to worry though, all you have to do is create an empty page, name it whatever you want, and select it as your events page in your <a href="%s">settings page</a>. Sorry for the extra step! If you know what you are doing, you may have done this on purpose, if so <a href="%s">ignore this message</a>', 'dbem'), get_bloginfo ( 'url' ) . '/wp-admin/admin.php?page=events-manager-options', $_SERVER['REQUEST_URI'].$dismiss_link_joiner.'em_dismiss_events_page=1' ); ?></p>
52
+ </div>
53
+ <?php
54
+ }
55
  }
56
  }
57
+ //Warn about EM page edit
58
+ if ( preg_match( '/(post|page).php/', $_SERVER ['SCRIPT_NAME']) && isset ( $_GET ['action'] ) && $_GET ['action'] == 'edit' && isset ( $_GET ['post'] ) && $_GET ['post'] == "$events_page_id") {
59
+ $message = sprintf ( __ ( "This page corresponds to <strong>Events Manager</strong> events page. Its content will be overriden by <strong>Events Manager</strong>. If you want to display your content, you can can assign another page to <strong>Events Manager</strong> in the the <a href='%s'>Settings</a>. ", 'dbem' ), 'admin.php?page=events-manager-options' );
60
+ $notice = "<div class='error'><p>$message</p></div>";
61
+ echo $notice;
62
+ }
63
+
64
  }
65
  add_action ( 'admin_notices', 'em_admin_warnings' );
66
 
67
+ /**
68
+ * Creates a wp-admin style navigation. All this does is wrap some html around the em_paginate function result to make it style correctly in the admin area.
69
+ * @param string $link
70
+ * @param int $total
71
+ * @param int $limit
72
+ * @param int $page
73
+ * @param int $pagesToShow
74
+ * @return string
75
+ * @uses em_paginate()
76
+ */
77
+ function em_admin_paginate($link, $total, $limit, $page=1, $pagesToShow=5){
78
+ $return = '<div class="tablenav-pages">';
79
+ $return .= sprintf( '<span class="displaying-num">' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>',
80
+ number_format_i18n( ( $page - 1 ) * $limit + 1 ),
81
+ number_format_i18n( min( $page * $limit, $total ) ),
82
+ number_format_i18n( $total )
83
+ );
84
+ $return .= em_paginate($link, $total, $limit, $page, $pagesToShow);
85
+ $return .= '</div>';
86
+ return $return;
87
+ }
88
+
89
  /**
90
  * Called by admin_print_scripts-(hook|page) action, created when adding menu items in events-manager.php
91
  */
254
  }
255
  return true;
256
  }
257
+ $('#event-form').bind("submit", validateEventForm);
258
  });
259
  //]]>
260
  </script>
admin/em-bookings.php CHANGED
@@ -1,82 +1,283 @@
1
  <?php
2
  /**
3
- * Check if there's any actions to take for bookings
4
  * @return null
5
  */
6
  function em_admin_actions_bookings() {
7
  global $dbem_form_add_message;
8
  global $dbem_form_delete_message;
9
- global $wpdb;
10
-
11
- //DELETE Bookings
12
- if( isset($_POST['secondaryAction']) && $_POST['secondaryAction'] == 'delete_bookings' ){
13
- if( EM_Object::array_is_numeric($_GET['bookings']) && count($_GET['bookings']) > 0 ){
14
- $bookings = $_GET['bookings'];
15
- $sql = "DELETE FROM ". $wpdb->prefix.EM_BOOKINGS_TABLE ." WHERE booking_id = ". implode(' OR booking_id = ', $bookings);
16
- $wpdb->query($sql);
17
- $dbem_form_delete_message = __('Bookings deleted', 'dbem');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  }
19
  }
20
  }
21
- add_action('init','em_admin_actions_bookings');
22
 
23
  /**
24
- * Shows table of bookings for an event
25
- * @return null
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  */
27
- function em_bookings_table() {
28
- global $EM_Event;
 
 
 
 
 
 
 
 
 
29
  ?>
30
- <form id='bookings-filter' method='get' action='<?php bloginfo('wpurl') ?>/wp-admin/edit.php'>
31
- <input type='hidden' name='page' value='events-manager-bookings'/>
32
- <input type='hidden' name='event_id' value='<?php echo $EM_Event->id ?>'/>
33
- <input type='hidden' name='action' value='delete'/>
34
- <div class='wrap'>
35
- <h2>Bookings</h2>
36
- <table id='dbem-bookings-table' class='widefat post fixed'>
37
- <thead>
38
- <tr>
39
- <th class='manage-column column-cb check-column' scope='col'>&nbsp;</th>
40
- <th class='manage-column ' scope='col'>Booker</th>
41
- <th scope='col'>E-mail</th>
42
- <th scope='col'>Phone number</th>
43
- <th scope='col'>Seats</th>
44
- </tr>
45
- </thead>
46
- <tbody>
47
- <?php
48
- foreach ($EM_Event->get_bookings()->bookings as $EM_Booking) {
49
- ?>
50
- <tr>
51
- <td><input type='checkbox' value='<?php echo $EM_Booking->id ?>' name='bookings[]'/></td>
52
- <td><?php echo $EM_Booking->name ?></td>
53
- <td><?php echo $EM_Booking->email ?></td>
54
- <td><?php echo $EM_Booking->phone ?></td>
55
- <td><?php echo $EM_Booking->seats ?></td>
56
- </tr>
57
- <?php
58
- }
59
- ?>
60
- </tbody>
61
- <tfoot>
62
- <tr>
63
- <th scope='row' colspan='4'>Booked seats:</th>
64
- <td class='booking-result' id='booked-seats'><?php echo $EM_Event->get_bookings()->get_booked_seats() ?></td>
65
- </tr>
66
- <tr>
67
- <th scope='row' colspan='4'>Available seats:</th>
68
- <td class='booking-result' id='available-seats'><?php echo $EM_Event->get_bookings()->get_booked_seats() ?></td>
69
- </tr>
70
- </tfoot>
71
- </table>
72
  </div>
73
- <div class='tablenav'>
74
- <div class='alignleft actions'>
75
- <input class='button-secondary action' type='submit' name='doaction2' value='Delete'/>
76
- <br class='clear'/>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  </div>
78
- <br class='clear'/>
79
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  </form>
81
  <?php
82
  }
1
  <?php
2
  /**
3
+ * Check if there's any admin-related actions to take for bookings. All actions are caught here.
4
  * @return null
5
  */
6
  function em_admin_actions_bookings() {
7
  global $dbem_form_add_message;
8
  global $dbem_form_delete_message;
9
+ global $wpdb, $EM_Booking, $EM_Event;
10
+
11
+ if( current_user_can(EM_MIN_CAPABILITY) && is_object($EM_Booking) && !empty($_REQUEST['action']) ) {
12
+ if( $_REQUEST['action'] == 'bookings_delete' ){
13
+ //Delete
14
+ if( isset($_POST['booking_id']) ){
15
+ $EM_Booking = new EM_Booking($_POST['booking_id']);
16
+ $EM_Booking->delete();
17
+ }
18
+ }elseif( $_REQUEST['action'] == 'bookings_edit' ){
19
+ //Edit Booking
20
+ $validation = $EM_Booking->get_post();
21
+ if ( $validation ) { //EM_Event gets the event if submitted via POST and validates it (safer than to depend on JS)
22
+ //Save
23
+ if( $EM_Booking->save() ) {
24
+ function em_booking_save_notification(){ global $EM_Booking; ?><div class="updated"><p><strong><?php echo $EM_Booking->feedback_message; ?></strong></p></div><?php }
25
+ }else{
26
+ function em_booking_save_notification(){ global $EM_Booking; ?><div class="error"><p><strong><?php echo $EM_Booking->feedback_message; ?></strong></p></div><?php }
27
+ }
28
+ }else{
29
+ //TODO make errors clearer when saving person
30
+ function em_booking_save_notification(){ global $EM_Booking; ?><div class="error"><p><strong><?php echo $EM_Booking->feedback_message; ?></strong></p></div><?php }
31
+ }
32
+ add_action ( 'admin_notices', 'em_booking_save_notification' );
33
+ }elseif( $_REQUEST['action'] == 'bookings_approve' || $_REQUEST['action'] == 'bookings_reject' || $_REQUEST['action'] == 'bookings_unapprove' ){
34
+ //Booking Approvals
35
+ $status_array = array('bookings_unapprove' => 0,'bookings_approve' => 1,'bookings_reject' => 2, 'bookings_cancel' => 3);
36
+ if( $EM_Booking->set_status( $status_array[$_REQUEST['action']] ) ) {
37
+ function em_booking_save_notification(){ global $EM_Booking; ?><div class="updated"><p><strong><?php echo $EM_Booking->feedback_message; ?></strong></p></div><?php }
38
+ }else{
39
+ function em_booking_save_notification(){ global $EM_Booking; ?><div class="error"><p><strong><?php echo $EM_Booking->feedback_message; ?></strong></p></div><?php }
40
+ }
41
+ add_action ( 'admin_notices', 'em_booking_save_notification' );
42
+ }elseif( $_REQUEST['action'] == 'bookings_add_note' ){
43
+ $EM_Booking->add_note($_REQUEST['booking_note']);
44
+ function em_booking_save_notification(){ global $EM_Booking; ?><div class="updated"><p><strong><?php echo $EM_Booking->feedback_message; ?></strong></p></div><?php }
45
+ add_action ( 'admin_notices', 'em_booking_save_notification' );
46
+ }
47
+ }elseif( current_user_can(EM_MIN_CAPABILITY) && is_object($EM_Event) && !empty($_REQUEST['action']) ){
48
+ if( $_REQUEST['action'] == 'export_csv' ){
49
+ $EM_Event->get_bookings()->export_csv();
50
+ exit();
51
  }
52
  }
53
  }
54
+ add_action('admin_init','em_admin_actions_bookings',100);
55
 
56
  /**
57
+ * Decide what content to show in the bookings section.
58
+ */
59
+ function em_bookings_page(){
60
+ //First any actions take priority
61
+ if( !empty($_REQUEST['booking_id']) ){
62
+ em_bookings_single();
63
+ }elseif( !empty($_REQUEST['person_id']) ){
64
+ em_bookings_person();
65
+ }elseif( !empty($_REQUEST['event_id']) ){
66
+ em_bookings_event();
67
+ }else{
68
+ em_bookings_dashboard();
69
+ }
70
+ }
71
+
72
+ /**
73
+ * Generates the bookings dashboard, showing information on all events
74
+ */
75
+ function em_bookings_dashboard(){
76
+ ?>
77
+ <div class='wrap'>
78
+ <div id='icon-users' class='icon32'>
79
+ <br/>
80
+ </div>
81
+ <h2>
82
+ <?php _e('Event Bookings Dashboard', 'dbem'); ?>
83
+ </h2>
84
+ <h2><?php _e('Pending Bookings','dbem'); ?></h2>
85
+ <?php em_bookings_pending_table(); ?>
86
+ <h2><?php _e('Events With Bookings Enabled','dbem'); ?></h2>
87
+ <?php em_bookings_events_table(); ?>
88
+ </div>
89
+ <?php
90
+ }
91
+
92
+ /**
93
+ * Shows all booking data for a single event
94
  */
95
+ function em_bookings_event(){
96
+ global $EM_Event,$EM_Person;
97
+ //check that user can access this page
98
+ if( is_object($EM_Event) && !$EM_Event->can_manage() ){
99
+ ?>
100
+ <div class="wrap"><h2><?php _e('Unauthorized Access','dbem'); ?></h2><p><?php _e('You do not have the rights to manage this event.','dbem'); ?></p></div>
101
+ <?php
102
+ return false;
103
+ }
104
+ $localised_start_date = date_i18n('D d M Y', $EM_Event->start);
105
+ $localised_end_date = date_i18n('D d M Y', $EM_Event->end);
106
  ?>
107
+ <div class='wrap'>
108
+ <div id='icon-users' class='icon32'>
109
+ <br/>
110
+ </div>
111
+ <h2>
112
+ <?php echo sprintf(__('Manage %s Bookings', 'dbem'), "'{$EM_Event->name}'"); ?>
113
+ <a href="admin.php?page=events-manager-event&event_id=<?php echo $EM_Event->id; ?>" class="button add-new-h2"><?php _e('View/Edit Event','dbem') ?></a>
114
+ </h2>
115
+ <div><a href='<?php echo get_bloginfo('wpurl') . "/wp-admin/admin.php?page=events-manager-bookings&action=export_csv&event_id=".$EM_Event->id ?>'><?php _e('export csv','dbem')?></a></div>
116
+ <div>
117
+ <p><strong><?php _e('Event Name','dbem'); ?></strong> : <?php echo ($EM_Event->name); ?></p>
118
+ <p><strong>Availability :</strong> <?php echo $EM_Event->get_bookings()->get_booked_seats() . '/'. $EM_Event->seats ." ". __('Seats confirmed','dbem'); ?></p>
119
+ <p>
120
+ <strong><?php _e('Date','dbem'); ?></strong> :
121
+ <?php echo $localised_start_date; ?>
122
+ <?php echo ($localised_end_date != $localised_start_date) ? " - $localised_end_date":'' ?>
123
+ <?php echo substr ( $EM_Event->start_time, 0, 5 ) . " - " . substr ( $EM_Event->end_time, 0, 5 ); ?>
124
+ </p>
125
+ <p>
126
+ <strong><?php _e('Location','dbem'); ?></strong> :
127
+ <a class="row-title" href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-locations&amp;location_id=<?php echo $EM_Event->location->id ?>"><?php echo ($EM_Event->location->name); ?></a>
128
+ </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  </div>
130
+ <h2><?php _e('Pending Bookings','dbem'); ?></h2>
131
+ <?php em_bookings_pending_table(); ?>
132
+ <h2><?php _e('Confirmed Bookings','dbem'); ?></h2>
133
+ <?php em_bookings_confirmed_table(); ?>
134
+ <h2><?php _e('Rejected Bookings','dbem'); ?></h2>
135
+ <?php em_bookings_rejected_table(); ?>
136
+ <h2><?php _e('Cancelled Bookings','dbem'); ?></h2>
137
+ <?php em_bookings_cancelled_table(); ?>
138
+ </div>
139
+ <?php
140
+ }
141
+
142
+ /**
143
+ * Shows a single booking for a single person.
144
+ */
145
+ function em_bookings_single(){
146
+ global $EM_Booking;
147
+ //check that user can access this page
148
+ if( is_object($EM_Booking) && !$EM_Booking->can_manage() ){
149
+ ?>
150
+ <div class="wrap"><h2><?php _e('Unauthorized Access','dbem'); ?></h2><p><?php _e('You do not have the rights to manage this event.','dbem'); ?></p></div>
151
+ <?php
152
+ return false;
153
+ }
154
+ ?>
155
+ <div class='wrap'>
156
+ <div id='icon-users' class='icon32'>
157
+ <br/>
158
+ </div>
159
+ <h2>
160
+ <?php _e('Edit Booking', 'dbem'); ?>
161
+ </h2>
162
+ <div id="poststuff" class="metabox-holder has-right-sidebar">
163
+ <div id="post-body">
164
+ <div id="post-body-content">
165
+ <div id="event_name" class="stuffbox">
166
+ <h3>
167
+ <?php _e ( 'Booking Details', 'dbem' ); ?>
168
+ </h3>
169
+ <div class="inside">
170
+ <?php em_bookings_edit_form(); ?>
171
+ </div>
172
+ </div>
173
+ </div>
174
+ </div>
175
+ </div>
176
+ <br style="clear:both;" />
177
+ <div id="poststuff" class="metabox-holder has-right-sidebar">
178
+ <div id="post-body">
179
+ <div id="post-body-content">
180
+ <div id="event_name" class="stuffbox">
181
+ <h3>
182
+ <?php _e ( 'Booking Notes', 'dbem' ); ?>
183
+ </h3>
184
+ <div class="inside">
185
+ <p><?php _e('You can add private notes below for internal reference that only event managers will see.','dbem'); ?></p>
186
+ <?php foreach( $EM_Booking->notes as $note ):
187
+ $user = get_userdata($note['author']);
188
+ ?>
189
+ <div>
190
+ <?php echo date(get_option('date_format'), $note['timestamp']) .' - '. $user->display_name; ?> <?php _e('wrote','dbem'); ?>:
191
+ <p style="background:#efefef; padding:5px;"><?php echo nl2br($note['note']); ?></p>
192
+ </div>
193
+ <?php endforeach; ?>
194
+ <form method="post" action="" style="padding:5px;">
195
+ <textarea class="widefat" rows="5" name="booking_note"></textarea>
196
+ <input type="hidden" name="action" value="bookings_add_note" />
197
+ <input type="submit" value="Add Note" />
198
+ </form>
199
+ </div>
200
+ </div>
201
+ </div>
202
  </div>
203
+ </div>
204
+ <br style="clear:both;" />
205
+ <?php do_action('em_bookings_single_footer'); ?>
206
+ </div>
207
+ <?php
208
+
209
+ }
210
+
211
+ /**
212
+ * Shows all bookings made by one person.
213
+ */
214
+ function em_bookings_person(){
215
+ global $EM_Person;
216
+ ?>
217
+ <div class='wrap'>
218
+ <div id='icon-users' class='icon32'>
219
+ <br/>
220
+ </div>
221
+ <h2>
222
+ <?php _e('Manage Person\'s Booking', 'dbem'); ?>
223
+ <a href="admin.php?page=events-manager-bookings&action=person_delete&person_id=<?php echo $EM_Person->id; ?>" onclick="if( !confirm('<?php _e('Are you sure you want to delete this person? All bookings corresponding to this person will be deleted and this is not reversible.','dbem') ?>') ){ return false; }" class="button add-new-h2"><?php _e('Delete Person','dbem') ?></a>
224
+ </h2>
225
+ <div id="poststuff" class="metabox-holder has-right-sidebar">
226
+ <div id="post-body">
227
+ <div id="post-body-content">
228
+ <div id="event_name" class="stuffbox">
229
+ <h3>
230
+ <?php _e ( 'Personal Details', 'dbem' ); ?>
231
+ </h3>
232
+ <div class="inside">
233
+ <?php em_person_edit_form(); ?>
234
+ </div>
235
+ </div>
236
+ </div>
237
+ </div>
238
+ </div>
239
+ <br style="clear:both;" />
240
+ <h3><?php _e('Past And Present Bookings','dbem'); ?></h3>
241
+ <?php em_bookings_person_table(); ?>
242
+ </div>
243
+ <?php
244
+ }
245
+
246
+ function em_bookings_edit_form(){
247
+ global $EM_Booking;
248
+ $EM_Event = new EM_Event($EM_Booking->event_id);
249
+ $localised_start_date = date_i18n('D d M Y', $EM_Event->start);
250
+ $localised_end_date = date_i18n('D d M Y', $EM_Event->end);
251
+ ?>
252
+ <form action="" method="post" id="em-person-form">
253
+ <h4>Event Details</h4>
254
+ <table>
255
+ <tr><td><strong><?php _e('Name','dbem'); ?></strong></td><td><a class="row-title" href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;event_id=<?php echo $EM_Event->id ?>"><?php echo ($EM_Event->name); ?></a></td></tr>
256
+ <tr>
257
+ <td><strong><?php _e('Date/Time','dbem'); ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></td>
258
+ <td>
259
+ <?php echo $localised_start_date; ?>
260
+ <?php echo ($localised_end_date != $localised_start_date) ? " - $localised_end_date":'' ?>
261
+ <?php echo substr ( $EM_Event->start_time, 0, 5 ) . " - " . substr ( $EM_Event->end_time, 0, 5 ); ?>
262
+ </td>
263
+ </tr>
264
+ </table>
265
+ <h4>Personal Details</h4>
266
+ <table>
267
+ <tr><td><strong><?php _e('Name','dbem'); ?> </strong></td><td><a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-bookings&amp;person_id=<?php echo $EM_Booking->person_id; ?>"><?php echo $EM_Booking->person->name ?></a></td></tr>
268
+ <tr><td><strong><?php _e('Phone','dbem'); ?> </strong></td><td><?php echo $EM_Booking->person->phone; ?></td></tr>
269
+ <tr><td><strong><?php _e('E-mail','dbem'); ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></td><td><?php echo $EM_Booking->person->email; ?></td></tr>
270
+ </table>
271
+ <h4>Booking Details</h4>
272
+ <table>
273
+ <tr><td><strong><?php _e('Spaces','dbem'); ?> </strong></td><td><input type="text" name="booking_seats" value="<?php echo $EM_Booking->seats; ?>" /></td></tr>
274
+ <tr><td><strong><?php _e('Comment','dbem'); ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></td><td><textarea name="booking_comment"><?php echo $EM_Booking->comment; ?></textarea></td></tr>
275
+ </table>
276
+ <p class="submit">
277
+ <input type="submit" name="events_update" value="<?php _e ( 'Save' ); ?> &raquo;" />
278
+ </p>
279
+ <input type="hidden" name="action" value="bookings_edit" />
280
+ <input type="hidden" name="booking_id" value="<?php echo $EM_Booking->id; ?>" />
281
  </form>
282
  <?php
283
  }
admin/em-categories.php CHANGED
@@ -1,52 +1,42 @@
1
  <?php
2
  function em_admin_categories_page() {
3
- global $wpdb;
4
 
5
- if(isset($_GET['action']) && $_GET['action'] == "edit") {
6
- // edit category
7
- em_categories_edit_layout();
8
- } else {
9
- // Insert/Update/Delete Record
10
- $categories_table = $wpdb->prefix.EM_CATEGORIES_TABLE;
11
- if( isset($_POST['action']) && $_POST['action'] == "edit" ) {
12
- // category update required
13
- $category = array();
14
- $category['category_name'] = $_POST['category_name'];
15
- $validation_result = $wpdb->update( $categories_table, $category, array('category_id' => $_POST['category_ID']) );
16
- } elseif( isset($_POST['action']) && $_POST['action'] == "add" ) {
17
- // Add a new category
18
- $category = array();
19
- $category['category_name'] = $_POST['category_name'];
20
- $validation_result = $wpdb->insert($categories_table, $category);
21
- } elseif( isset($_POST['action']) && $_POST['action'] == "delete" ) {
22
- // Delete category or multiple
23
- $categories = $_POST['categories'];
24
- if(is_array($categories)){
25
- //Run the query if we have an array of category ids with at least one value
26
- if( EM_Object::array_is_numeric($categories) ){
27
- $validation_result = $wpdb->query( "DELETE FROM $categories_table WHERE category_id =". implode(" OR category_id =", $categories) );
28
- }else{
29
- $validation_result = false;
30
- $message = "Couldn't delete the categories. Incorrect category IDs supplied. Please try agian.";
31
- }
32
  }
33
- }
34
- //die(print_r($_POST));
35
- if ( isset($validation_result) && is_numeric($validation_result) ) {
36
- $message = (isset($message)) ? $message : __("Successfully {$_POST['action']}ed category", "dbem");
37
- em_categories_table_layout($message);
38
- } elseif ( isset($validation_result) && $validation_result === false ) {
39
- $message = (isset($message)) ? $message : __("There was a problem {$_POST['action']}ing your category, please try again.");
40
- em_categories_table_layout($message);
41
- } else {
42
- // no action, just a categories list
43
- em_categories_table_layout();
 
 
 
 
 
 
 
 
44
  }
45
  }
 
46
  }
47
 
48
  function em_categories_table_layout($message = "") {
49
- $categories = EM_Category::get();
50
  $destination = get_bloginfo('url')."/wp-admin/admin.php";
51
  ?>
52
  <div class='wrap nosubsub'>
@@ -84,11 +74,11 @@ function em_categories_table_layout($message = "") {
84
  </tr>
85
  </tfoot>
86
  <tbody>
87
- <?php foreach ($categories as $this_category) : ?>
88
  <tr>
89
- <td><input type='checkbox' class ='row-selector' value='<?php echo $this_category['category_id'] ?>' name='categories[]'/></td>
90
- <td><a href='<?php echo get_bloginfo('wpurl') ?>/wp-admin/admin.php?page=events-manager-categories&amp;action=edit&amp;category_ID=<?php echo $this_category['category_id'] ?>'><?php echo htmlspecialchars($this_category['category_id'], ENT_QUOTES); ?></a></td>
91
- <td><a href='<?php echo get_bloginfo('wpurl') ?>/wp-admin/admin.php?page=events-manager-categories&amp;action=edit&amp;category_ID=<?php echo $this_category['category_id'] ?>'><?php echo htmlspecialchars($this_category['category_name'], ENT_QUOTES); ?></a></td>
92
  </tr>
93
  <?php endforeach; ?>
94
  </tbody>
@@ -117,7 +107,7 @@ function em_categories_table_layout($message = "") {
117
  <div id='ajax-response'>
118
  <h3><?php echo __('Add category', 'dbem') ?></h3>
119
  <form name='add' id='add' method='post' action='admin.php?page=events-manager-categories' class='add:the-list: validate'>
120
- <input type='hidden' name='action' value='add' />
121
  <div class='form-field form-required'>
122
  <label for='category_name'><?php echo __('Category name', 'dbem') ?></label>
123
  <input id='category-name' name='category_name' id='category_name' type='text' size='40' />
@@ -137,8 +127,17 @@ function em_categories_table_layout($message = "") {
137
 
138
 
139
  function em_categories_edit_layout($message = "") {
140
- $category_id = $_GET['category_ID'];
141
- $category = EM_Category::get($category_id);
 
 
 
 
 
 
 
 
 
142
  ?>
143
  <div class='wrap'>
144
  <div id='icon-edit' class='icon32'>
@@ -156,13 +155,13 @@ function em_categories_edit_layout($message = "") {
156
  <div id='ajax-response'></div>
157
 
158
  <form name='editcat' id='editcat' method='post' action='admin.php?page=events-manager-categories' class='validate'>
159
- <input type='hidden' name='action' value='edit' />
160
- <input type='hidden' name='category_ID' value='<?php echo $category['category_id'] ?>'/>
161
 
162
  <table class='form-table'>
163
  <tr class='form-field form-required'>
164
  <th scope='row' valign='top'><label for='category_name'><?php echo __('Category name', 'dbem') ?></label></th>
165
- <td><input name='category_name' id='category-name' type='text' value='<?php echo $category['category_name'] ?>' size='40' /><br />
166
  <?php echo __('The name of the category', 'dbem') ?></td>
167
  </tr>
168
  </table>
1
  <?php
2
  function em_admin_categories_page() {
3
+ global $wpdb, $EM_Category;
4
 
5
+ if( !empty($_REQUEST['action']) ){
6
+ if( $_REQUEST['action'] == "save") {
7
+ // save (add/update) category
8
+ if( empty($EM_Category) || !is_object($EM_Category) ){
9
+ $EM_Category = new EM_Category(); //blank category
10
+ $success_message = __('The category has been added.', 'dbem');
11
+ }else{
12
+ $success_message = __('The category has been updated.', 'dbem');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  }
14
+ $EM_Category->get_post();
15
+ if ( $EM_Category->validate() ) {
16
+ $EM_Category->save(); //FIXME better handling of db write fails when saving category
17
+ $message = $success_message;
18
+ } else {
19
+ ?>
20
+ <div id='message' class='error '>
21
+ <p>
22
+ <strong><?php _e( "Ach, there's a problem here:", "dbem" ) ?></strong><br /><br /><?php echo implode('<br />', $EM_Category->errors); ?>
23
+ </p>
24
+ </div>
25
+ <?php
26
+ unset($EM_Category);
27
+ }
28
+ } elseif( $_REQUEST['action'] == "delete" ){
29
+ //delelte category
30
+ EM_Categories::delete($_REQUEST['categories']);
31
+ //FIXME no result verification when deleting various categories
32
+ $message = __('Categories Deleted', "dbem" );
33
  }
34
  }
35
+ em_categories_table_layout($message);
36
  }
37
 
38
  function em_categories_table_layout($message = "") {
39
+ $categories = EM_Categories::get();
40
  $destination = get_bloginfo('url')."/wp-admin/admin.php";
41
  ?>
42
  <div class='wrap nosubsub'>
74
  </tr>
75
  </tfoot>
76
  <tbody>
77
+ <?php foreach ($categories as $EM_Category) : ?>
78
  <tr>
79
+ <td><input type='checkbox' class ='row-selector' value='<?php echo $EM_Category->id ?>' name='categories[]'/></td>
80
+ <td><a href='<?php echo get_bloginfo('wpurl') ?>/wp-admin/admin.php?page=events-manager-categories&amp;action=edit&amp;category_id=<?php echo $EM_Category->id ?>'><?php echo htmlspecialchars($EM_Category->id, ENT_QUOTES); ?></a></td>
81
+ <td><a href='<?php echo get_bloginfo('wpurl') ?>/wp-admin/admin.php?page=events-manager-categories&amp;action=edit&amp;category_id=<?php echo $EM_Category->id ?>'><?php echo htmlspecialchars($EM_Category->name, ENT_QUOTES); ?></a></td>
82
  </tr>
83
  <?php endforeach; ?>
84
  </tbody>
107
  <div id='ajax-response'>
108
  <h3><?php echo __('Add category', 'dbem') ?></h3>
109
  <form name='add' id='add' method='post' action='admin.php?page=events-manager-categories' class='add:the-list: validate'>
110
+ <input type='hidden' name='action' value='save' />
111
  <div class='form-field form-required'>
112
  <label for='category_name'><?php echo __('Category name', 'dbem') ?></label>
113
  <input id='category-name' name='category_name' id='category_name' type='text' size='40' />
127
 
128
 
129
  function em_categories_edit_layout($message = "") {
130
+ global $EM_Category;
131
+ if( !is_object($EM_Category) ){
132
+ $EM_Category = new EM_Category();
133
+ }
134
+ //check that user can access this page
135
+ if( is_object($EM_Category) && !$EM_Category->can_manage() ){
136
+ ?>
137
+ <div class="wrap"><h2><?php _e('Unauthorized Access','dbem'); ?></h2><p><?php _e('You do not have the rights to manage this event.','dbem'); ?></p></div>
138
+ <?php
139
+ return false;
140
+ }
141
  ?>
142
  <div class='wrap'>
143
  <div id='icon-edit' class='icon32'>
155
  <div id='ajax-response'></div>
156
 
157
  <form name='editcat' id='editcat' method='post' action='admin.php?page=events-manager-categories' class='validate'>
158
+ <input type='hidden' name='action' value='save' />
159
+ <input type='hidden' name='category_ID' value='<?php echo $EM_Category->id ?>'/>
160
 
161
  <table class='form-table'>
162
  <tr class='form-field form-required'>
163
  <th scope='row' valign='top'><label for='category_name'><?php echo __('Category name', 'dbem') ?></label></th>
164
+ <td><input name='category_name' id='category-name' type='text' value='<?php echo $EM_Category->name ?>' size='40' /><br />
165
  <?php echo __('The name of the category', 'dbem') ?></td>
166
  </tr>
167
  </table>
admin/em-docs.php CHANGED
@@ -54,9 +54,15 @@ function em_docs_init(){
54
  '#_NAME' => array( 'desc' => 'Displays the name of the event.' ),
55
  '#_NOTES' => array( 'desc' => 'Shows the description of the event.' ),
56
  '#_EXCERPT' => array( 'desc' => 'If you added a <a href="http://en.support.wordpress.com/splitting-content/more-tag/">more tag</a> to your event description, only the content before this tag will show (currently, no read more link is added).' ),
57
- '#_CATEGORY' => array( 'desc' => 'Shows the category name of the event.' )
58
  )
59
  ),
 
 
 
 
 
 
60
  'Time' => array(
61
  'desc' => '',
62
  'placeholders' => array(
@@ -101,9 +107,13 @@ function em_docs_init(){
101
  'desc' => 'The values here are taken from the chosen contact for the specific event, or the default contact in the settings page.',
102
  'placeholders' => array(
103
  '#_CONTACTNAME' => array( 'desc' => 'Name of the contact person for this event (as shown in the dropdown when adding an event).' ),
 
104
  '#_CONTACTEMAIL' => array( 'desc' => 'E-mail of the contact person for this event.' ),
105
  '#_CONTACTPHONE' => array( 'desc' => 'Phone number of the contact person for this event. Can be set in the user profile page.' ),
106
- '#_CONTACTAVATAR' => array( 'desc' => 'Contact person\'s avatar.' )
 
 
 
107
  )
108
  ),
109
  ),
@@ -117,7 +127,8 @@ function em_docs_init(){
117
  '#_LOCATIONMAP' => array( 'desc' => 'Displays a google map showing where the event is located (Will not show if maps are disabled in the settings page)' ),
118
  '#_LOCATIONNOTES' => array( 'desc' => 'Shows the location description.' ),
119
  '#_LOCATIONEXCERPT' => array( 'desc' => 'If you added a <a href="http://en.support.wordpress.com/splitting-content/more-tag/">more tag</a> to your location description, only the content before this tag will show (currently, no read more link is added).' ),
120
- '#_LOCATIONIMAGE' => array( 'desc' => 'Shows the location image.' )
 
121
  )
122
  ),
123
  'Links' => array(
54
  '#_NAME' => array( 'desc' => 'Displays the name of the event.' ),
55
  '#_NOTES' => array( 'desc' => 'Shows the description of the event.' ),
56
  '#_EXCERPT' => array( 'desc' => 'If you added a <a href="http://en.support.wordpress.com/splitting-content/more-tag/">more tag</a> to your event description, only the content before this tag will show (currently, no read more link is added).' ),
57
+ '#_EVENTID' => array( 'desc' => 'Shows the event\'s corresponding ID number in the database table.' )
58
  )
59
  ),
60
+ 'Category Details' => array(
61
+ 'placeholders' => array(
62
+ '#_CATEGORYNAME' => array( 'desc' => 'Shows the category name of the event.' ),
63
+ '#_CATEGORYID' => array( 'desc' => 'Shows the category ID of the event.' )
64
+ )
65
+ ),
66
  'Time' => array(
67
  'desc' => '',
68
  'placeholders' => array(
107
  'desc' => 'The values here are taken from the chosen contact for the specific event, or the default contact in the settings page.',
108
  'placeholders' => array(
109
  '#_CONTACTNAME' => array( 'desc' => 'Name of the contact person for this event (as shown in the dropdown when adding an event).' ),
110
+ '#_CONTACTUSERNAME' => array( 'desc' => 'Contact person\'s username.' ),
111
  '#_CONTACTEMAIL' => array( 'desc' => 'E-mail of the contact person for this event.' ),
112
  '#_CONTACTPHONE' => array( 'desc' => 'Phone number of the contact person for this event. Can be set in the user profile page.' ),
113
+ '#_CONTACTAVATAR' => array( 'desc' => 'Contact person\'s avatar.' ),
114
+ '#_CONTACTPROFILELINK' => array( 'desc' => 'Contact person\'s "Profile" link. Only works with BuddyPress enabled.' ),
115
+ '#_CONTACTPROFILEURL' => array( 'desc' => 'Contact person\'s profile url. Only works with BuddyPress enabled.' ),
116
+ '#_CONTACTID' => array( 'desc' => 'Contact person\'s wordpress user ID.')
117
  )
118
  ),
119
  ),
127
  '#_LOCATIONMAP' => array( 'desc' => 'Displays a google map showing where the event is located (Will not show if maps are disabled in the settings page)' ),
128
  '#_LOCATIONNOTES' => array( 'desc' => 'Shows the location description.' ),
129
  '#_LOCATIONEXCERPT' => array( 'desc' => 'If you added a <a href="http://en.support.wordpress.com/splitting-content/more-tag/">more tag</a> to your location description, only the content before this tag will show (currently, no read more link is added).' ),
130
+ '#_LOCATIONIMAGE' => array( 'desc' => 'Shows the location image.' ),
131
+ '#_LOCATIONID' => array( 'desc' => 'Displays the location ID number.' )
132
  )
133
  ),
134
  'Links' => array(
admin/em-event.php CHANGED
@@ -45,8 +45,16 @@ add_action('admin_init', 'em_admin_event_actions');
45
  * @return null
46
  */
47
  function em_admin_event_page() {
48
- global $EM_Event;
49
- global $localised_date_formats;
 
 
 
 
 
 
 
 
50
 
51
  if( is_object($EM_Event) && $EM_Event->id > 0 ){
52
  if($EM_Event->is_recurring()){
@@ -55,8 +63,19 @@ function em_admin_event_page() {
55
  $title = __ ( "Edit Event", 'dbem' ) . " '" . $EM_Event->name . "'";
56
  }
57
  } else {
58
- $EM_Event = new EM_Event();
59
  $title = __ ( "Insert New Event", 'dbem' );
 
 
 
 
 
 
 
 
 
 
 
60
  }
61
 
62
  $use_select_for_locations = get_option('dbem_use_select_for_locations');
@@ -64,7 +83,7 @@ function em_admin_event_page() {
64
  $pref = "event_";
65
 
66
  $locale_code = substr ( get_locale (), 0, 2 );
67
- $localised_date_format = $localised_date_formats [$locale_code];
68
 
69
  //FIXME time useage is very flimsy imho
70
  $hours_locale_regexp = "H:i";
@@ -89,7 +108,7 @@ function em_admin_event_page() {
89
  <p><?php echo !empty($EM_Event->feedback_message) ? $EM_Event->feedback_message : $_GET['message']; ?></p>
90
  </div>
91
  <?php endif; ?>
92
- <form id="eventForm" method="post" action="">
93
  <div class="wrap">
94
  <div id="icon-events" class="icon32"><br /></div>
95
  <h2><?php echo $title; ?></h2>
@@ -185,7 +204,7 @@ function em_admin_event_page() {
185
  <p>
186
  <?php echo $EM_Event->get_recurrence_description(); ?>
187
  <br />
188
- <a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/edit.php?page=events-manager&amp;action=edit_event&amp;event_id=<?php echo $EM_Event->recurrence_id; ?>">
189
  <?php _e ( 'Reschedule', 'dbem' ); ?>
190
  </a>
191
  <input type="hidden" name="recurrence_id" value="<?php echo $EM_Event->recurrence_id; ?>" />
@@ -199,6 +218,7 @@ function em_admin_event_page() {
199
  <?php endif; ?>
200
  <?php if(get_option('dbem_rsvp_enabled')) : ?>
201
  <!-- START RSVP -->
 
202
  <div class="postbox ">
203
  <div class="handlediv" title="Fare clic per cambiare."><br />
204
  </div>
@@ -207,10 +227,15 @@ function em_admin_event_page() {
207
  </span></h3>
208
  <div class="inside">
209
  <p><?php _e('Contact','dbem'); ?>
210
- <?php wp_dropdown_users ( array ('name' => 'event_contactperson_id', 'show_option_none' => __ ( "Select...", 'dbem' ), 'selected' => $EM_Event->contactperson_id ) ); ?>
 
 
211
  </p>
212
  </div>
213
  </div>
 
 
 
214
  <div class="postbox ">
215
  <div class="handlediv" title="Fare clic per cambiare."><br />
216
  </div>
@@ -241,52 +266,18 @@ function em_admin_event_page() {
241
  if ( count($EM_Event->get_bookings()->bookings) > 0 ) {
242
  ?>
243
  <div class='wrap'>
244
- <h4><?php echo $booked_seats ?> <?php echo __('responses so far') ?></h4>
245
-
246
- <table id='dbem-bookings-table-<?php echo $EM_Event->id ?>' class='widefat post fixed'>
247
- <thead>
248
- <tr>
249
- <th class='manage-column column-cb check-column' scope='col'>&nbsp;</th>
250
- <th class='manage-column ' scope='col'><?php _e('Responder', 'dbem') ?></th>
251
- <th scope='col'><?php _e('Spaces', 'dbem') ?></th>
252
- </tr>
253
- </thead>
254
- <tbody>
255
- <?php
256
- foreach ($EM_Event->get_bookings()->bookings as $EM_Booking) {
257
- ?>
258
- <tr id='booking-<?php echo $EM_Booking->id ?>'>
259
- <td>
260
- <?php if($EM_Booking->comment) : ?>
261
- <img src='../wp-content/plugins/events-manager/includes/images/baloon.png' title='<?php _e('Comment:','dbem'); ?> <?php echo $EM_Booking->comment ?>' alt='comment'/>
262
- <?php endif; ?>
263
- <a id='booking-check-<?php echo $EM_Booking->id ?>' class='bookingdelbutton'>X</a>
264
- </td>
265
- <td><a title='<?php echo $EM_Booking->person->email ?> - <?php echo $EM_Booking->person->phone ?>'><?php echo $EM_Booking->person->name ?></a></td>
266
- <td><?php echo $EM_Booking->seats ?></td>
267
- </tr>
268
- <?php
269
- }
270
- ?>
271
- </tbody>
272
- <tfoot>
273
- <tr>
274
- <th scope='row' colspan='2'><?php _e('Booked spaces','dbem') ?>:</th>
275
- <td class='booking-result' id='booked-seats'><?php echo $booked_seats ?></td>
276
- </tr>
277
- <tr>
278
- <th scope='row' colspan='2'><?php _e('Available spaces','dbem') ?>:</th>
279
- <td class='booking-result' id='available-seats'><?php echo $available_seats ?></td>
280
- </tr>
281
- </tfoot>
282
- </table>
283
  </div>
284
 
285
  <br class='clear'/>
286
 
287
  <div id='major-publishing-actions'>
288
  <div id='publishing-action'>
289
- <a id='printable' target='_blank' href='<?php echo get_bloginfo('wpurl') . "/wp-admin/admin.php?page=events-manager-people&action=printable&event_id=".$EM_Event->id ?>'><?php _e('Printable view','dbem')?></a>
 
 
290
  <br class='clear'/>
291
  </div>
292
  <br class='clear'/>
@@ -314,20 +305,26 @@ function em_admin_event_page() {
314
  <?php _e ( 'Category', 'dbem' ); ?>
315
  </span></h3>
316
  <div class="inside">
317
- <p><?php _e ( 'Category:', 'dbem' ); ?>
318
- <select name="event_category_id">
319
- <?php
320
- $categories = EM_Category::get();
321
- foreach ( $categories as $category ){
322
- $selected = ($category['category_id'] == $EM_Event->category_id) ? "selected='selected'": '';
 
 
 
 
 
 
 
 
323
  ?>
324
- <option value="<?php echo $category['category_id'] ?>" <?php echo $selected ?>>
325
- <?php echo $category['category_name'] ?>
326
- </option>
327
- <?php
328
- } ?>
329
- </select>
330
- </p>
331
  </div>
332
  </div>
333
  <!-- END Categories -->
@@ -342,7 +339,7 @@ function em_admin_event_page() {
342
  <?php _e ( 'Name', 'dbem' ); ?>
343
  </h3>
344
  <div class="inside">
345
- <input type="text" name="event_name" value="<?php echo htmlspecialchars($EM_Event->name,ENT_QUOTES); ?>" />
346
  <br />
347
  <?php _e ( 'The event name. Example: Birthday party', 'dbem' )?>
348
  </div>
@@ -496,7 +493,8 @@ function em_admin_event_page() {
496
  get_option ( 'dbem_rss_description_format' ).
497
  get_option ( 'dbem_rss_title_format' ).
498
  get_option ( 'dbem_single_event_format' ).
499
- get_option ( 'dbem_single_location_format' );
 
500
  //We now have one long string of formats, get all the attribute placeholders
501
  preg_match_all('/#_ATT\{.+?\}(\{.+?\})?/', $formats, $placeholders);
502
  //Now grab all the unique attributes we can use in our event.
@@ -604,7 +602,7 @@ function em_admin_event_page() {
604
  jQuery(document).ready( function($) {
605
  <?php if( $EM_Event->is_recurring() ): ?>
606
  //Recurrence Warnings
607
- $('#eventForm').submit( function(event){
608
  confirmation = confirm('<?php _e('Are you sure you want to reschedule this recurring event? If you do this, you will lose all booking information and the old recurring events will be deleted.', 'dbem'); ?>');
609
  if( confirmation == false ){
610
  event.preventDefault();
45
  * @return null
46
  */
47
  function em_admin_event_page() {
48
+ global $EM_Event, $current_user;
49
+ global $localised_date_formats;
50
+
51
+ //check that user can access this page
52
+ if( is_object($EM_Event) && !$EM_Event->can_manage() ){
53
+ ?>
54
+ <div class="wrap"><h2><?php _e('Unauthorized Access','dbem'); ?></h2><p><?php _e('You do not have the rights to manage this event.','dbem'); ?></p></div>
55
+ <?php
56
+ return false;
57
+ }
58
 
59
  if( is_object($EM_Event) && $EM_Event->id > 0 ){
60
  if($EM_Event->is_recurring()){
63
  $title = __ ( "Edit Event", 'dbem' ) . " '" . $EM_Event->name . "'";
64
  }
65
  } else {
66
+ $EM_Event = ( is_object($EM_Event) && get_class($EM_Event) == 'EM_Event') ? $EM_Event : new EM_Event();
67
  $title = __ ( "Insert New Event", 'dbem' );
68
+ //Give a default location & category
69
+ $default_cat = get_option('dbem_default_category');
70
+ $default_loc = get_option('dbem_default_location');
71
+ if( is_numeric($default_cat) && $default_cat > 0 ){
72
+ $EM_Event->category_id = $default_cat;
73
+ $EM_Event->category = new EM_Category($default_cat);
74
+ }
75
+ if( is_numeric($default_loc) && $default_loc > 0 && ( empty($EM_Event->location->id) && empty($EM_Event->location->name) && empty($EM_Event->location->address) && empty($EM_Event->location->town) ) ){
76
+ $EM_Event->location_id = $default_loc;
77
+ $EM_Event->location = new EM_Location($default_loc);
78
+ }
79
  }
80
 
81
  $use_select_for_locations = get_option('dbem_use_select_for_locations');
83
  $pref = "event_";
84
 
85
  $locale_code = substr ( get_locale (), 0, 2 );
86
+ $localised_date_format = $localised_date_formats[$locale_code];
87
 
88
  //FIXME time useage is very flimsy imho
89
  $hours_locale_regexp = "H:i";
108
  <p><?php echo !empty($EM_Event->feedback_message) ? $EM_Event->feedback_message : $_GET['message']; ?></p>
109
  </div>
110
  <?php endif; ?>
111
+ <form id="event-form" method="post" action="">
112
  <div class="wrap">
113
  <div id="icon-events" class="icon32"><br /></div>
114
  <h2><?php echo $title; ?></h2>
204
  <p>
205
  <?php echo $EM_Event->get_recurrence_description(); ?>
206
  <br />
207
+ <a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-event&amp;event_id=<?php echo $EM_Event->recurrence_id; ?>">
208
  <?php _e ( 'Reschedule', 'dbem' ); ?>
209
  </a>
210
  <input type="hidden" name="recurrence_id" value="<?php echo $EM_Event->recurrence_id; ?>" />
218
  <?php endif; ?>
219
  <?php if(get_option('dbem_rsvp_enabled')) : ?>
220
  <!-- START RSVP -->
221
+ <?php if ( em_verify_admin() ): ?>
222
  <div class="postbox ">
223
  <div class="handlediv" title="Fare clic per cambiare."><br />
224
  </div>
227
  </span></h3>
228
  <div class="inside">
229
  <p><?php _e('Contact','dbem'); ?>
230
+ <?php
231
+ wp_dropdown_users ( array ('name' => 'event_contactperson_id', 'show_option_none' => __ ( "Select...", 'dbem' ), 'selected' => $EM_Event->contactperson_id ) );
232
+ ?>
233
  </p>
234
  </div>
235
  </div>
236
+ <?php else: ?>
237
+ <input type="hidden" name="event_contactperson_id" value="<?php get_current_user_id() ?>" />
238
+ <?php endif; ?>
239
  <div class="postbox ">
240
  <div class="handlediv" title="Fare clic per cambiare."><br />
241
  </div>
266
  if ( count($EM_Event->get_bookings()->bookings) > 0 ) {
267
  ?>
268
  <div class='wrap'>
269
+ <p><strong><?php echo __('Available Spaces','dbem').': '.$EM_Event->get_bookings()->get_available_seats(); ?></strong></p>
270
+ <p><strong><?php echo __('Confirmed Spaces','dbem').': '.$EM_Event->get_bookings()->get_booked_seats(); ?></strong></p>
271
+ <p><strong><?php echo __('Pending Spaces','dbem').': '.$EM_Event->get_bookings()->get_pending_seats(); ?></strong></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  </div>
273
 
274
  <br class='clear'/>
275
 
276
  <div id='major-publishing-actions'>
277
  <div id='publishing-action'>
278
+ <a id='printable' href='<?php echo get_bloginfo('wpurl') . "/wp-admin/admin.php?page=events-manager-bookings&event_id=".$EM_Event->id ?>'><?php _e('manage bookings','dbem')?></a><br />
279
+ <a target='_blank' href='<?php echo get_bloginfo('wpurl') . "/wp-admin/admin.php?page=events-manager-bookings&action=bookings_report&event_id=".$EM_Event->id ?>'><?php _e('printable view','dbem')?></a>
280
+ <a href='<?php echo get_bloginfo('wpurl') . "/wp-admin/admin.php?page=events-manager-bookings&action=export_csv&event_id=".$EM_Event->id ?>'><?php _e('export csv','dbem')?></a>
281
  <br class='clear'/>
282
  </div>
283
  <br class='clear'/>
305
  <?php _e ( 'Category', 'dbem' ); ?>
306
  </span></h3>
307
  <div class="inside">
308
+ <?php $categories = EM_Categories::get(array('orderby'=>'category_name')); ?>
309
+ <?php if( count($categories) > 0 ): ?>
310
+ <p><?php _e ( 'Category:', 'dbem' ); ?>
311
+ <select name="event_category_id">
312
+ <option value="" <?php echo ($EM_Event->category_id == '') ? "selected='selected'":'' ?>><?php _e('no category','dbem') ?></option>
313
+ <?php
314
+ foreach ( $categories as $EM_Category ){
315
+ $selected = ($EM_Category->id == $EM_Event->category_id) ? "selected='selected'": '';
316
+ ?>
317
+ <option value="<?php echo $EM_Category->id ?>" <?php echo $selected ?>>
318
+ <?php echo $EM_Category->name ?>
319
+ </option>
320
+ <?php
321
+ }
322
  ?>
323
+ </select>
324
+ </p>
325
+ <?php else: ?>
326
+ <p><?php sprintf(__('No categories available, <a href="%s">create one here first</a>','dbem'), get_bloginfo('wpurl').'/wp-admin/admin.php?page=events-manager-categories'); ?></p>
327
+ <?php endif; ?>
 
 
328
  </div>
329
  </div>
330
  <!-- END Categories -->
339
  <?php _e ( 'Name', 'dbem' ); ?>
340
  </h3>
341
  <div class="inside">
342
+ <input type="text" name="event_name" id="event-name" value="<?php echo htmlspecialchars($EM_Event->name,ENT_QUOTES); ?>" />
343
  <br />
344
  <?php _e ( 'The event name. Example: Birthday party', 'dbem' )?>
345
  </div>
493
  get_option ( 'dbem_rss_description_format' ).
494
  get_option ( 'dbem_rss_title_format' ).
495
  get_option ( 'dbem_single_event_format' ).
496
+ get_option ( 'dbem_single_location_format' ).
497
+ get_option ( 'dbem_placeholders_custom' );
498
  //We now have one long string of formats, get all the attribute placeholders
499
  preg_match_all('/#_ATT\{.+?\}(\{.+?\})?/', $formats, $placeholders);
500
  //Now grab all the unique attributes we can use in our event.
602
  jQuery(document).ready( function($) {
603
  <?php if( $EM_Event->is_recurring() ): ?>
604
  //Recurrence Warnings
605
+ $('#event_form').submit( function(event){
606
  confirmation = confirm('<?php _e('Are you sure you want to reschedule this recurring event? If you do this, you will lose all booking information and the old recurring events will be deleted.', 'dbem'); ?>');
607
  if( confirmation == false ){
608
  event.preventDefault();
admin/em-events.php CHANGED
@@ -38,7 +38,11 @@ function em_admin_events_page() {
38
  $title = __ ( 'Future Events', 'dbem' );
39
  $scope = "future";
40
  }
41
- $events = EM_Events::get( array('scope'=>$scope, 'limit'=>0, 'order'=>$order ) );
 
 
 
 
42
  $events_count = count ( $events );
43
 
44
  $use_events_end = get_option ( 'dbem_use_event_end' );
@@ -48,11 +52,9 @@ function em_admin_events_page() {
48
  </div>
49
  <h2>
50
  <?php echo $title; ?>
51
- <a href="admin.php?page=events-manager-event" class="button add-new-h2"><?php _e('Add New') ?></a>
52
  </h2>
53
- <?php
54
- em_hello_to_new_user ();
55
-
56
  $link = array ();
57
  $link ['past'] = "<a href='" . get_bloginfo ( 'wpurl' ) . "/wp-admin/admin.php?page=events-manager&amp;scope=past&amp;order=desc'>" . __ ( 'Past events', 'dbem' ) . "</a>";
58
  $link ['all'] = " <a href='" . get_bloginfo ( 'wpurl' ) . "/wp-admin/admin.php?page=events-manager&amp;scope=all&amp;order=desc'>" . __ ( 'All events', 'dbem' ) . "</a>";
@@ -72,7 +74,11 @@ function em_admin_events_page() {
72
  <ul class="subsubsub">
73
  <li><a href='#' class="current"><?php _e ( 'Total', 'dbem' ); ?> <span class="count">(<?php echo (count ( $events )); ?>)</span></a></li>
74
  </ul>
75
-
 
 
 
 
76
  <div class="tablenav">
77
 
78
  <div class="alignleft actions">
@@ -92,122 +98,139 @@ function em_admin_events_page() {
92
  ?>
93
  </select>
94
  <input id="post-query-submit" class="button-secondary" type="submit" value="<?php _e ( 'Filter' )?>" />
95
- <?php
96
- //Pagination (if needed/requested)
97
- if( $events_count >= $limit ){
98
- //Show the pagination links (unless there's less than 10 events
99
- $page_link_template = preg_replace('/(&|\?)p=\d+/i','',$_SERVER['REQUEST_URI']);
100
- $page_link_template = em_add_get_params($page_link_template, array('p'=>'%PAGE%'));
101
- $events_nav = em_paginate( $page_link_template, $events_count, $limit, $page);
102
- echo $events_nav;
103
- }
104
- ?>
105
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
106
  <br class="clear" />
 
107
 
108
- <?php
109
- if (empty ( $events )) {
110
- // TODO localize
111
- _e ( 'no events','dbem' );
112
- } else {
113
- ?>
114
-
115
- <table class="widefat">
116
- <thead>
117
- <tr>
118
- <th class='manage-column column-cb check-column' scope='col'>
119
- <input class='select-all' type="checkbox" value='1' />
120
- </th>
121
- <th><?php _e ( 'Name', 'dbem' ); ?></th>
122
- <th>&nbsp;</th>
123
- <th><?php _e ( 'Location', 'dbem' ); ?></th>
124
- <th colspan="2"><?php _e ( 'Date and time', 'dbem' ); ?></th>
125
- </tr>
126
- </thead>
127
- <tbody>
128
- <?php
129
- $rowno = 0;
130
- $event_count = 0;
131
- foreach ( $events as $event ) {
132
- if( ($rowno < $limit || empty($limit)) && ($event_count >= $offset || $offset === 0) ) {
133
- $rowno++;
134
- $class = ($rowno % 2) ? ' class="alternate"' : '';
135
- // FIXME set to american
136
- $localised_start_date = date_i18n('D d M Y', $event->start);
137
- $localised_end_date = date_i18n('D d M Y', $event->end);
138
- $style = "";
139
- $today = date ( "Y-m-d" );
140
- $location_summary = "<b>" . $event->location->name . "</b><br/>" . $event->location->address . " - " . $event->location->town;
141
- $category = EM_Category::get($event->id);
142
-
143
- if ($event->start_date < $today && $event->end_date < $today){
144
- $style = "style ='background-color: #FADDB7;'";
145
- }
146
- ?>
147
- <tr <?php echo "$class $style"; ?>>
148
 
149
- <td>
150
- <input type='checkbox' class='row-selector' value='<?php echo $event->id; ?>' name='events[]' />
151
- </td>
152
- <td>
153
- <strong>
154
- <a class="row-title" href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-event&amp;event_id=<?php echo $event->id ?>&amp;scope=<?php echo $scope ?>&amp;p=<?php echo $page ?>"><?php echo ($event->name); ?></a>
155
- </strong>
156
- <?php if($category) : ?>
157
- <br/><span title='<?php _e( 'Category', 'dbem' ).": ".$category['category_name'] ?>'><?php $category['category_name'] ?></span>
158
- <?php endif; ?>
159
- </td>
160
- <td>
161
- <a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-event&amp;action=duplicate&amp;event_id=<?php echo $event->id; ?>&amp;scope=<?php echo $scope ?>&amp;p=<?php echo $page ?>" title="<?php _e ( 'Duplicate this event', 'dbem' ); ?>">
162
- <strong>+</strong>
163
- </a>
164
- </td>
165
- <td>
166
- <?php echo $location_summary; ?>
167
- </td>
 
 
 
 
 
 
 
 
 
168
 
169
- <td>
170
- <?php echo $localised_start_date; ?>
171
- <?php echo ($localised_end_date != $localised_start_date) ? " - $localised_end_date":'' ?>
172
- <br />
173
- <?php
174
- //TODO Should 00:00 - 00:00 be treated as an all day event?
175
- echo substr ( $event->start_time, 0, 5 ) . " - " . substr ( $event->end_time, 0, 5 );
176
- ?>
177
- </td>
178
- <td>
179
- <?php
180
- if ( $event->is_recurrence() ) {
181
- ?>
182
- <strong>
183
- <?php echo $event->get_recurrence_description(); ?> <br />
184
- <a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-event&amp;event_id=<?php echo $event->recurrence_id ?>&amp;scope=<?php echo $scope ?>&amp;p=<?php echo $page ?>"><?php _e ( 'Reschedule', 'dbem' ); ?></a>
185
- </strong>
186
- <?php
 
 
 
 
187
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188
  ?>
189
- </td>
190
- </tr>
191
- <?php
192
- }
193
- $event_count++;
 
 
 
 
 
194
  }
195
- ?>
196
- </tbody>
197
- </table>
198
- <?php
199
- } // end of table
200
- ?>
201
-
202
- <div class='tablenav'>
203
- <div class="alignleft actions">
204
- <?php echo ( !empty($events_nav) ) ? $events_nav:''; ?>
205
- <br class='clear' />
206
- </div>
207
- <br class='clear' />
 
 
 
 
208
  </div>
 
 
209
  </div>
210
- </form>
211
  </div>
212
  <?php
213
  }
38
  $title = __ ( 'Future Events', 'dbem' );
39
  $scope = "future";
40
  }
41
+ $args = array('scope'=>$scope, 'limit'=>0, 'order'=>$order );
42
+ if( !get_option('dbem_permissions_events') && !em_verify_admin() ){
43
+ $args['owner'] = get_current_user_id();
44
+ }
45
+ $events = EM_Events::get( $args );
46
  $events_count = count ( $events );
47
 
48
  $use_events_end = get_option ( 'dbem_use_event_end' );
52
  </div>
53
  <h2>
54
  <?php echo $title; ?>
55
+ <a href="admin.php?page=events-manager-event" class="button add-new-h2"><?php _e('Add New','dbem'); ?></a>
56
  </h2>
57
+ <?php
 
 
58
  $link = array ();
59
  $link ['past'] = "<a href='" . get_bloginfo ( 'wpurl' ) . "/wp-admin/admin.php?page=events-manager&amp;scope=past&amp;order=desc'>" . __ ( 'Past events', 'dbem' ) . "</a>";
60
  $link ['all'] = " <a href='" . get_bloginfo ( 'wpurl' ) . "/wp-admin/admin.php?page=events-manager&amp;scope=all&amp;order=desc'>" . __ ( 'All events', 'dbem' ) . "</a>";
74
  <ul class="subsubsub">
75
  <li><a href='#' class="current"><?php _e ( 'Total', 'dbem' ); ?> <span class="count">(<?php echo (count ( $events )); ?>)</span></a></li>
76
  </ul>
77
+ <p class="search-box">
78
+ <label class="screen-reader-text" for="post-search-input"><?php _e('Search Events','dbem'); ?>:</label>
79
+ <input type="text" id="post-search-input" name="em_search" value="<?php echo (!empty($_GET['em_search'])) ? $_GET['em_search']:''; ?>" />
80
+ <input type="submit" value="<?php _e('Search Events','dbem'); ?>" class="button" />
81
+ </p>
82
  <div class="tablenav">
83
 
84
  <div class="alignleft actions">
98
  ?>
99
  </select>
100
  <input id="post-query-submit" class="button-secondary" type="submit" value="<?php _e ( 'Filter' )?>" />
 
 
 
 
 
 
 
 
 
 
101
  </div>
102
+ <!--
103
+ <div class="view-switch">
104
+ <a href="/wp-admin/edit.php?mode=list"><img class="current" id="view-switch-list" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="List View" alt="List View" name="view-switch-list" /></a> <a href="/wp-admin/edit.php?mode=excerpt"><img id="view-switch-excerpt" src="http://wordpress.lan/wp-includes/images/blank.gif" width="20" height="20" title="Excerpt View" alt="Excerpt View" name="view-switch-excerpt" /></a>
105
+ </div>
106
+ -->
107
+ <?php
108
+ if ( $events_count >= $limit ) {
109
+ $page_link_template = em_add_get_params($_SERVER['REQUEST_URI'], array('p'=>'%PAGE%'));
110
+ $events_nav .= em_admin_paginate( $page_link_template, $events_count, $limit, $page, 5);
111
+ echo $events_nav;
112
+ }
113
+ ?>
114
  <br class="clear" />
115
+ </div>
116
 
117
+ <?php
118
+ if (empty ( $events )) {
119
+ // TODO localize
120
+ _e ( 'no events','dbem' );
121
+ } else {
122
+ ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
 
124
+ <table class="widefat">
125
+ <thead>
126
+ <tr>
127
+ <th class='manage-column column-cb check-column' scope='col'>
128
+ <input class='select-all' type="checkbox" value='1' />
129
+ </th>
130
+ <th><?php _e ( 'Name', 'dbem' ); ?></th>
131
+ <th>&nbsp;</th>
132
+ <th><?php _e ( 'Location', 'dbem' ); ?></th>
133
+ <th colspan="2"><?php _e ( 'Date and time', 'dbem' ); ?></th>
134
+ </tr>
135
+ </thead>
136
+ <tbody>
137
+ <?php
138
+ $rowno = 0;
139
+ $event_count = 0;
140
+ foreach ( $events as $event ) {
141
+ /* @var $event EM_Event */
142
+ if( ($rowno < $limit || empty($limit)) && ($event_count >= $offset || $offset === 0) ) {
143
+ $rowno++;
144
+ $class = ($rowno % 2) ? ' class="alternate"' : '';
145
+ // FIXME set to american
146
+ $localised_start_date = date_i18n('D d M Y', $event->start);
147
+ $localised_end_date = date_i18n('D d M Y', $event->end);
148
+ $style = "";
149
+ $today = date ( "Y-m-d" );
150
+ $location_summary = "<b>" . $event->location->name . "</b><br/>" . $event->location->address . " - " . $event->location->town;
151
+ $category = new EM_Category($event->category_id);
152
 
153
+ if ($event->start_date < $today && $event->end_date < $today){
154
+ $style = "style ='background-color: #FADDB7;'";
155
+ }
156
+ ?>
157
+ <tr <?php echo "$class $style"; ?>>
158
+
159
+ <td>
160
+ <input type='checkbox' class='row-selector' value='<?php echo $event->id; ?>' name='events[]' />
161
+ </td>
162
+ <td>
163
+ <strong>
164
+ <a class="row-title" href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-event&amp;event_id=<?php echo $event->id ?>&amp;scope=<?php echo $scope ?>&amp;p=<?php echo $page ?>"><?php echo ($event->name); ?></a>
165
+ </strong>
166
+ <?php if( is_object($category) ) : ?>
167
+ <br/><span title='<?php echo __( 'Category', 'dbem' ).": ".$category->name ?>'><?php echo $category->name ?></span>
168
+ <?php endif; ?>
169
+ <?php
170
+ if( get_option('dbem_rsvp_enabled') == 1 && $event->rsvp == 1 ){
171
+ echo "<br/>";
172
+ echo __("Booked Seats",'dbem').": ". $event->get_bookings()->get_booked_seats()."/".$event->seats;
173
+ if( get_option('dbem_bookings_approval') == 1 ){
174
+ echo " | ". __("Pending",'dbem').": ". $event->get_bookings()->get_pending_seats();
175
  }
176
+ }
177
+ ?>
178
+ </td>
179
+ <td>
180
+ <a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-event&amp;action=duplicate&amp;event_id=<?php echo $event->id; ?>&amp;scope=<?php echo $scope ?>&amp;p=<?php echo $page ?>" title="<?php _e ( 'Duplicate this event', 'dbem' ); ?>">
181
+ <strong>+</strong>
182
+ </a>
183
+ </td>
184
+ <td>
185
+ <?php echo $location_summary; ?>
186
+ </td>
187
+
188
+ <td>
189
+ <?php echo $localised_start_date; ?>
190
+ <?php echo ($localised_end_date != $localised_start_date) ? " - $localised_end_date":'' ?>
191
+ <br />
192
+ <?php
193
+ //TODO Should 00:00 - 00:00 be treated as an all day event?
194
+ echo substr ( $event->start_time, 0, 5 ) . " - " . substr ( $event->end_time, 0, 5 );
195
+ ?>
196
+ </td>
197
+ <td>
198
+ <?php
199
+ if ( $event->is_recurrence() ) {
200
  ?>
201
+ <strong>
202
+ <?php echo $event->get_recurrence_description(); ?> <br />
203
+ <a href="<?php bloginfo ( 'wpurl' )?>/wp-admin/admin.php?page=events-manager-event&amp;event_id=<?php echo $event->recurrence_id ?>&amp;scope=<?php echo $scope ?>&amp;p=<?php echo $page ?>"><?php _e ( 'Reschedule', 'dbem' ); ?></a>
204
+ </strong>
205
+ <?php
206
+ }
207
+ ?>
208
+ </td>
209
+ </tr>
210
+ <?php
211
  }
212
+ $event_count++;
213
+ }
214
+ ?>
215
+ </tbody>
216
+ </table>
217
+ <?php
218
+ } // end of table
219
+ ?>
220
+ <div class='tablenav'>
221
+ <div class="alignleft actions">
222
+ <br class='clear' />
223
+ </div>
224
+ <?php if ( $events_count >= $limit ) : ?>
225
+ <div class="tablenav-pages">
226
+ <?php
227
+ echo $events_nav;
228
+ ?>
229
  </div>
230
+ <?php endif; ?>
231
+ <br class='clear' />
232
  </div>
233
+ </form>
234
  </div>
235
  <?php
236
  }
admin/em-locations-search.php CHANGED
@@ -4,10 +4,10 @@
4
  * or will search for events by name via the GET "q" variable.
5
  */
6
  require_once('../../../../wp-load.php');
7
-
8
  global $wpdb;
9
 
10
  $locations_table = $wpdb->prefix . EM_LOCATIONS_TABLE;
 
11
 
12
  $term = (isset($_GET['term'])) ? '%'.$_GET['term'].'%' : '%'.$_GET['q'].'%';
13
  $sql = $wpdb->prepare("
@@ -18,11 +18,10 @@ $sql = $wpdb->prepare("
18
  location_town AS `town`,
19
  location_id AS `id`
20
  FROM $locations_table
21
- WHERE ( `location_name` LIKE %s ) LIMIT 10
22
  ", $term);
23
 
24
  $locations_array = $wpdb->get_results($sql);
25
-
26
  echo EM_Object::json_encode($locations_array);
27
  /*
28
  $return_string_array = array();
4
  * or will search for events by name via the GET "q" variable.
5
  */
6
  require_once('../../../../wp-load.php');
 
7
  global $wpdb;
8
 
9
  $locations_table = $wpdb->prefix . EM_LOCATIONS_TABLE;
10
+ $location_cond = ( get_option('dbem_permissions_events') < 1 && !em_verify_admin() ) ? "AND location_owner=".get_current_user_id() : '';
11
 
12
  $term = (isset($_GET['term'])) ? '%'.$_GET['term'].'%' : '%'.$_GET['q'].'%';
13
  $sql = $wpdb->prepare("
18
  location_town AS `town`,
19
  location_id AS `id`
20
  FROM $locations_table
21
+ WHERE ( `location_name` LIKE %s ) $location_cond LIMIT 10
22
  ", $term);
23
 
24
  $locations_array = $wpdb->get_results($sql);
 
25
  echo EM_Object::json_encode($locations_array);
26
  /*
27
  $return_string_array = array();
admin/em-locations.php CHANGED
@@ -6,9 +6,8 @@
6
  function em_admin_locations_page() {
7
  //TODO EM_Location is globalized, use it fully here
8
  global $EM_Location;
9
-
10
  //Take actions
11
- if( !empty($_REQUEST['action']) ){
12
  if( $_REQUEST['action'] == "edit" || $_REQUEST['action'] == "add" ) {
13
  //edit/add location
14
  em_admin_location();
@@ -139,6 +138,13 @@ function em_admin_locations($message='', $fill_fields = false) {
139
 
140
  function em_admin_location($message = "") {
141
  global $EM_Location;
 
 
 
 
 
 
 
142
  if( empty($EM_Location) || !is_object($EM_Location) ){
143
  $title = __('Add location', 'dbem');
144
  $EM_Location = new EM_Location();
@@ -146,91 +152,116 @@ function em_admin_location($message = "") {
146
  $title = __('Edit location', 'dbem');
147
  }
148
  ?>
149
- <div class='wrap'>
150
- <div id='icon-edit' class='icon32'>
151
- <br/>
152
- </div>
153
- <h2><?php echo $title ?></h2>
154
-
155
- <?php if($message != "") : ?>
156
- <div id='message' class='updated fade below-h2' style='background-color: rgb(255, 251, 204);'>
157
- <p><?php echo $message ?></p>
158
  </div>
159
- <?php endif; ?>
160
- <div id='ajax-response'></div>
161
-
162
- <form enctype='multipart/form-data' name='editcat' id='locationForm' method='post' action='admin.php?page=events-manager-locations' class='validate'>
163
- <input type='hidden' name='action' value='save' />
164
- <input type='hidden' name='location_id' value='<?php echo $EM_Location->id ?>'/>
165
- <table class='form-table'>
166
- <tr class='form-field form-required'>
167
- <th scope='row' valign='top'><label for='location_name'><?php _e('Location name', 'dbem') ?></label></th>
168
- <td><input name='location_name' id='location-name' type='text' value='<?php echo htmlspecialchars($EM_Location->name, ENT_QUOTES); ?>' size='40' /><br />
169
- <?php _e('The name of the location', 'dbem') ?></td>
170
- </tr>
171
-
172
- <tr class='form-field'>
173
- <th scope='row' valign='top'><label for='location_address'><?php _e('Location address', 'dbem') ?></label></th>
174
- <td><input name='location_address' id='location-address' type='text' value='<?php echo htmlspecialchars($EM_Location->address, ENT_QUOTES); ?>' size='40' /><br />
175
- <?php _e('The address of the location', 'dbem') ?>.</td>
176
-
177
- </tr>
178
-
179
- <tr class='form-field'>
180
- <th scope='row' valign='top'> <label for='location_town'><?php _e('Location town', 'dbem') ?></label></th>
181
- <td><input name='location_town' id='location-town' type='text' value='<?php echo htmlspecialchars($EM_Location->town, ENT_QUOTES); ?>' size='40' /><br />
182
- <?php _e('The town where the location is located', 'dbem') ?>.</td>
183
-
184
- </tr>
185
-
186
- <tr style='display:none;'>
187
- <td>Coordinates</td>
188
- <td><input id='location-latitude' name='location_latitude' id='location_latitude' type='text' value='<?php echo $EM_Location->latitude ?>' size='15' />
189
- <input id='location-longitude' name='location_longitude' id='location_longitude' type='text' value='<?php echo $EM_Location->longitude ?>' size='15' /></td>
190
- </tr>
191
-
192
- <?php if (get_option('dbem_gmap_is_active')) { ?>
193
- <tr>
194
- <th scope='row' valign='top'><label for='location_map'><?php _e('Location map', 'dbem') ?></label></th>
195
- <td>
196
- <div id='em-map-404' style='width: 450px; height: 350px; vertical-align:middle; text-align: center;'>
197
- <p><em><?php _e ( 'Location not found', 'dbem' ); ?></em></p>
198
  </div>
199
- <div id='em-map' style='width: 450px; height: 350px; display: none;'></div>
200
- </td>
201
- </tr>
202
- <?php
203
- }
204
- ?>
205
- <tr class='form-field'>
206
- <th scope='row' valign='top'><label for='location_description'><?php _e('Location description', 'dbem') ?></label></th>
207
- <td>
208
- <div class="inside">
209
- <div id="<?php echo user_can_richedit() ? 'postdivrich' : 'postdiv'; ?>" class="postarea">
210
- <?php the_editor($EM_Location->description); ?>
211
  </div>
212
- <?php _e('A description of the Location. You may include any kind of info here.', 'dbem') ?>
213
  </div>
214
- </td>
215
- </tr>
216
- <tr class='form-field'>
217
- <th scope='row' valign='top'><label for='location_picture'><?php _e('Location image', 'dbem') ?></label></th>
218
- <td>
219
- <?php if ($EM_Location->image_url != '') : ?>
220
- <img src='<?php echo $EM_Location->image_url; ?>' alt='<?php echo $EM_Location->name ?>'/>
221
- <?php else : ?>
222
- <?php _e('No image uploaded for this location yet', 'debm') ?>
223
- <?php endif; ?>
224
- </td>
225
- </tr>
226
- <tr>
227
- <th scope='row' valign='top'><label for='location_image'><?php _e('Upload/change picture', 'dbem') ?></label></th>
228
- <td><input id='location-image' name='location_image' id='location_image' type='file' size='40' /></td>
229
- </tr>
230
- </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  <p class='submit'><input type='submit' class='button-primary' name='submit' value='<?php _e('Update location', 'dbem') ?>' /></p>
232
- </form>
233
- </div>
234
  <?php
235
  }
236
 
6
  function em_admin_locations_page() {
7
  //TODO EM_Location is globalized, use it fully here
8
  global $EM_Location;
 
9
  //Take actions
10
+ if( !empty($_REQUEST['action']) || !empty($_REQUEST['location_id']) ){
11
  if( $_REQUEST['action'] == "edit" || $_REQUEST['action'] == "add" ) {
12
  //edit/add location
13
  em_admin_location();
138
 
139
  function em_admin_location($message = "") {
140
  global $EM_Location;
141
+ //check that user can access this page
142
+ if( is_object($EM_Location) && !$EM_Location->can_manage() ){
143
+ ?>
144
+ <div class="wrap"><h2><?php _e('Unauthorized Access','dbem'); ?></h2><p><?php _e('You do not have the rights to manage this location.','dbem'); ?></p></div>
145
+ <?php
146
+ return false;
147
+ }
148
  if( empty($EM_Location) || !is_object($EM_Location) ){
149
  $title = __('Add location', 'dbem');
150
  $EM_Location = new EM_Location();
152
  $title = __('Edit location', 'dbem');
153
  }
154
  ?>
155
+ <form enctype='multipart/form-data' name='editcat' id='locationForm' method='post' action='admin.php?page=events-manager-locations' class='validate'>
156
+ <input type='hidden' name='action' value='save' />
157
+ <input type='hidden' name='location_id' value='<?php echo $EM_Location->id ?>'/>
158
+ <div class='wrap'>
159
+ <div id='icon-edit' class='icon32'>
160
+ <br/>
 
 
 
161
  </div>
162
+ <h2><?php echo $title ?></h2>
163
+
164
+ <?php if($message != "") : ?>
165
+ <div id='message' class='updated fade below-h2' style='background-color: rgb(255, 251, 204);'>
166
+ <p><?php echo $message ?></p>
167
+ </div>
168
+ <?php endif; ?>
169
+ <div id='ajax-response'></div>
170
+
171
+ <div id="poststuff" class="metabox-holder">
172
+ <div id="post-body">
173
+ <div id="post-body-content">
174
+ <div id="location_name" class="stuffbox">
175
+ <h3>
176
+ <?php _e ( 'Location Name', 'dbem' ); ?>
177
+ </h3>
178
+ <div class="inside">
179
+ <input name='location_name' id='location-name' type='text' value='<?php echo htmlspecialchars($EM_Location->name, ENT_QUOTES); ?>' size='40' />
180
+ <br />
181
+ <?php _e('The name of the location', 'dbem') ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  </div>
183
+ </div>
184
+ <div id="location_coordinates" class="stuffbox" style='display: none;'>
185
+ <h3>
186
+ <?php _e ( 'Coordinates', 'dbem' ); ?>
187
+ </h3>
188
+ <div class="inside">
189
+ <input id='location-latitude' name='location_latitude' type='text' value='<?php echo $EM_Event->latitude; ?>' size='15' />
190
+ -
191
+ <input id='location-longitude' name='location_longitude' type='text' value='<?php echo $EM_Event->longitude; ?>' size='15' />
 
 
 
192
  </div>
 
193
  </div>
194
+ <div id="location_info" class="stuffbox">
195
+ <h3>
196
+ <?php _e ( 'Location', 'dbem' ); ?>
197
+ </h3>
198
+ <div class="inside">
199
+ <table id="dbem-location-data">
200
+ <tr>
201
+ <td style="padding-right:20px">
202
+ <table>
203
+ <tr>
204
+ <th><?php _e ( 'Address:' )?>&nbsp;</th>
205
+ <td>
206
+ <input id="location-address" type="text" name="location_address" value="<?php echo htmlspecialchars($EM_Location->address, ENT_QUOTES); ; ?>" />
207
+ <p><?php _e ( 'The address of the location where the event takes place. Example: 21, Dominick Street', 'dbem' )?></p>
208
+ </td>
209
+ </tr>
210
+ <tr>
211
+ <th><?php _e ( 'Town:' )?>&nbsp;</th>
212
+ <td>
213
+ <input id="location-town" type="text" name="location_town" value="<?php echo htmlspecialchars($EM_Location->town, ENT_QUOTES); ?>" />
214
+ <p><?php _e ( 'The town where the location is located. If you\'re using the Google Map integration and want to avoid geotagging ambiguities include the country in the town field. Example: Verona, Italy.', 'dbem' )?></p>
215
+ </td>
216
+ </tr>
217
+ </table>
218
+ </td>
219
+ <?php if ( get_option ( 'dbem_gmap_is_active' ) ) : ?>
220
+ <td width="400">
221
+ <div id='em-map-404' style='width: 400px; vertical-align:middle; text-align: center;'>
222
+ <p><em><?php _e ( 'Location not found', 'dbem' ); ?></em></p>
223
+ </div>
224
+ <div id='em-map' style='width: 400px; height: 300px; display: none;'></div>
225
+ </td>
226
+ <?php endif; ?>
227
+ </tr>
228
+ </table>
229
+ </div>
230
+ </div>
231
+
232
+ <div id="location_description" class="postbox">
233
+ <h3>
234
+ <?php _e ( 'Details', 'dbem' ); ?>
235
+ </h3>
236
+ <div class="inside">
237
+ <div id="<?php echo user_can_richedit() ? 'postdivrich' : 'postdiv'; ?>" class="postarea">
238
+ <?php the_editor($EM_Location->description ); ?>
239
+ </div>
240
+ <br />
241
+ <?php _e ( 'Details about the location', 'dbem' )?>
242
+ </div>
243
+ </div>
244
+
245
+ <div id="location_description" class="stuffbox">
246
+ <h3>
247
+ <?php _e ( 'Location image', 'dbem' ); ?>
248
+ </h3>
249
+ <div class="inside" style="padding:10px;">
250
+ <?php if ($EM_Location->image_url != '') : ?>
251
+ <img src='<?php echo $EM_Location->image_url; ?>' alt='<?php echo $EM_Location->name ?>'/>
252
+ <?php else : ?>
253
+ <?php _e('No image uploaded for this location yet', 'debm') ?>
254
+ <?php endif; ?>
255
+ <br /><br />
256
+ <label for='location_image'><?php _e('Upload/change picture', 'dbem') ?></label> <input id='location-image' name='location_image' id='location_image' type='file' size='40' />
257
+ </div>
258
+ </div>
259
+ </div>
260
+ </div>
261
+ </div>
262
  <p class='submit'><input type='submit' class='button-primary' name='submit' value='<?php _e('Update location', 'dbem') ?>' /></p>
263
+ </div>
264
+ </form>
265
  <?php
266
  }
267
 
admin/em-options.php CHANGED
@@ -34,9 +34,10 @@ function em_admin_options_page() {
34
  //TODO place all options into an array
35
  $events_placeholders = '<a href="admin.php?page=events-manager-help#event-placeholders">'. __('Event Related Placeholders','dbem') .'</a>';
36
  $locations_placeholders = '<a href="admin.php?page=events-manager-help#location-placeholders">'. __('Location Related Placeholders','dbem') .'</a>';
37
- $events_placeholder_tip = " ". sprintf(__('This textbox accepts %s and %s placeholders.','dbem'),$events_placeholders, $locations_placeholders);
38
- $locations_placeholder_tip = " ". sprintf(__('This textbox accepts %s placeholders.','dbem'), $locations_placeholders);
39
- $bookings_placeholder_tip = " ". sprintf(__('This textbox accepts %s placeholders.','dbem'), $bookings_placeholders);
 
40
 
41
  $save_button = '<tr><th>&nbsp;</th><td><p class="submit" style="margin:0px; padding:0px; text-align:right;"><input type="submit" id="dbem_options_submit" name="Submit" value="'. __( 'Save Changes' ) .' ('. __('All','dbem') .')" /></p></ts></td></tr>';
42
  ?>
@@ -91,12 +92,33 @@ function em_admin_options_page() {
91
  em_options_radio_binary ( __( 'Use RSVP?' ), 'dbem_rsvp_enabled', __( 'Select yes to enable the RSVP feature','dbem' ) );
92
  em_options_radio_binary ( __( 'Use categories?' ), 'dbem_categories_enabled', __( 'Select yes to enable the category features','dbem' ) );
93
  em_options_radio_binary ( __( 'Use attributes?' ), 'dbem_attributes_enabled', __( 'Select yes to enable the attributes feature','dbem' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  echo $save_button;
95
  ?>
96
  </table>
97
 
98
  </div> <!-- . inside -->
99
- </div> <!-- .postbox -->
100
 
101
  <div class="postbox " >
102
  <div class="handlediv" title="<?php __('Click to toggle'); ?>"><br /></div><h3 class='hndle'><span><?php _e ( 'Events page', 'dbem' ); ?> </span></h3>
@@ -162,9 +184,33 @@ function em_admin_options_page() {
162
  <?php endforeach; ?>
163
  </select>
164
  <br/>
165
- <?php _e('When Events Manager displays lists of events the default behaviour is ordering by start date in ascending order. To change this, modify the values above.','dbem'); ?>
166
  </td>
167
  </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  <?php
169
  echo $save_button;
170
  ?>
@@ -265,12 +311,47 @@ function em_admin_options_page() {
265
  <table class='form-table'>
266
  <?php
267
  em_options_select ( __( 'Default contact person', 'dbem' ), 'dbem_default_contact_person', em_get_wp_users (), __( 'Select the default contact person. This user will be employed whenever a contact person is not explicitly specified for an event', 'dbem' ) );
268
- em_options_radio_binary ( __( 'Email contact person?', 'dbem' ), 'dbem_rsvp_notify_contact', __( 'Check this option if you want the event contact to receive an email when someone books places.', 'dbem' ) );
269
- em_options_textarea ( __( 'Contact person email format', 'dbem' ), 'dbem_contactperson_email_body', __( 'The format of the email which will be sent to the contact person.', 'dbem' ).$bookings_placeholder_tip );
270
- em_options_textarea ( __( 'Booking email format', 'dbem' ), 'dbem_respondent_email_body', __( 'The format of the email which will be sent to respondent.', 'dbem' ).$bookings_placeholder_tip );
271
  em_options_input_text ( __( 'Email events admin?', 'dbem' ), 'dbem_bookings_notify_admin', __( "If you would like every event booking confirmation email sent to an administrator write their email here (leave blank to not send an email).", 'dbem' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  echo $save_button;
273
  ?>
 
 
 
 
 
 
274
  </table>
275
  </div> <!-- . inside -->
276
  </div> <!-- .postbox -->
@@ -302,10 +383,50 @@ function em_admin_options_page() {
302
  em_options_input_text ( __( 'Maximum width (px)', 'dbem' ), 'dbem_image_max_width', __( 'The maximum allowed width for images uploades', 'dbem' ) );
303
  em_options_input_text ( __( 'Maximum height (px)', 'dbem' ), 'dbem_image_max_height', __( "The maximum allowed height for images uploaded, in pixels", 'dbem' ) );
304
  em_options_input_text ( __( 'Maximum size (bytes)', 'dbem' ), 'dbem_image_max_size', __( "The maximum allowed size for images uploaded, in pixels", 'dbem' ) );
 
305
  ?>
306
  </table>
307
  </div> <!-- . inside -->
308
  </div> <!-- .postbox -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
309
 
310
  <p class="submit">
311
  <input type="submit" id="dbem_options_submit" name="Submit" value="<?php _e ( 'Save Changes' )?>" />
34
  //TODO place all options into an array
35
  $events_placeholders = '<a href="admin.php?page=events-manager-help#event-placeholders">'. __('Event Related Placeholders','dbem') .'</a>';
36
  $locations_placeholders = '<a href="admin.php?page=events-manager-help#location-placeholders">'. __('Location Related Placeholders','dbem') .'</a>';
37
+ $bookings_placeholders = '<a href="admin.php?page=events-manager-help#booking-placeholders">'. __('Booking Related Placeholders','dbem') .'</a>';
38
+ $events_placeholder_tip = " ". sprintf(__('This accepts %s and %s placeholders.','dbem'),$events_placeholders, $locations_placeholders);
39
+ $locations_placeholder_tip = " ". sprintf(__('This accepts %s placeholders.','dbem'), $locations_placeholders);
40
+ $bookings_placeholder_tip = " ". sprintf(__('This accepts %s, %s and %s placeholders.','dbem'), $bookings_placeholders, $events_placeholders, $locations_placeholders);
41
 
42
  $save_button = '<tr><th>&nbsp;</th><td><p class="submit" style="margin:0px; padding:0px; text-align:right;"><input type="submit" id="dbem_options_submit" name="Submit" value="'. __( 'Save Changes' ) .' ('. __('All','dbem') .')" /></p></ts></td></tr>';
43
  ?>
92
  em_options_radio_binary ( __( 'Use RSVP?' ), 'dbem_rsvp_enabled', __( 'Select yes to enable the RSVP feature','dbem' ) );
93
  em_options_radio_binary ( __( 'Use categories?' ), 'dbem_categories_enabled', __( 'Select yes to enable the category features','dbem' ) );
94
  em_options_radio_binary ( __( 'Use attributes?' ), 'dbem_attributes_enabled', __( 'Select yes to enable the attributes feature','dbem' ) );
95
+
96
+ /*default category*/
97
+ $category_options = array();
98
+ $category_options[0] = __('no default category','dbem');
99
+ $EM_Categories = EM_Categories::get();
100
+ foreach($EM_Categories as $EM_Category){
101
+ $category_options[$EM_Category->id] = $EM_Category->name;
102
+ }
103
+ em_options_select ( __( 'Default Category' ), 'dbem_default_category', $category_options, __( 'This option allows you to select the default category when adding an event.','dbem' )." ".__('(not applicable with event ownership on presently, coming soon!)','dbem') );
104
+
105
+ /*default location*/
106
+ $location_options = array();
107
+ $location_options[0] = __('no default location','dbem');
108
+ $EM_Locations = EM_Locations::get();
109
+ foreach($EM_Locations as $EM_Location){
110
+ $location_options[$EM_Location->id] = $EM_Location->name;
111
+ }
112
+ em_options_select ( __( 'Default Location' ), 'dbem_default_location', $location_options, __( 'This option allows you to select the default location when adding an event.','dbem' )." ".__('(not applicable with event ownership on presently, coming soon!)','dbem') );
113
+
114
+ em_options_textarea ( __( 'Custom Placeholders', 'dbem' ), 'dbem_placeholders_custom', sprintf(__( "You can add custom placeholders here, one per line in this format <code>#_ATT{key}</code>. They will not appear on event pages unless you insert them into another template below, but you may want to store extra information about an event for other uses. <a href='%s'>More information on placeholders.</a>", 'dbem' ), 'wp-events-plugin.com/documentation/the-em-templates-syntax/') );
115
+
116
  echo $save_button;
117
  ?>
118
  </table>
119
 
120
  </div> <!-- . inside -->
121
+ </div> <!-- .postbox -->
122
 
123
  <div class="postbox " >
124
  <div class="handlediv" title="<?php __('Click to toggle'); ?>"><br /></div><h3 class='hndle'><span><?php _e ( 'Events page', 'dbem' ); ?> </span></h3>
184
  <?php endforeach; ?>
185
  </select>
186
  <br/>
187
+ <em><?php _e('When Events Manager displays lists of events the default behaviour is ordering by start date in ascending order. To change this, modify the values above.','dbem'); ?></em>
188
  </td>
189
  </tr>
190
+ <tr valign="top" id='dbem_events_display_time_limit'>
191
+ <th scope="row"><?php _e('Event list range limit','dbem'); ?></th>
192
+ <td>
193
+ <select name="dbem_events_page_time_limit" >
194
+ <?php
195
+ $limit_options = apply_filters('em_settings_events_page_time_limit_ddm', array(
196
+ '0' => __('no limit','dbem'),
197
+ '1' => __('This month','dbem'),
198
+ '2' => __('Next two months','dbem'),
199
+ '3' => __('Next three months','dbem'),
200
+ '6' => __('Next six months','dbem'),
201
+ '12' => __('Next twelve months','dbem')
202
+ ));
203
+ ?>
204
+ <?php foreach( $limit_options as $key => $value) : ?>
205
+ <option value='<?php echo $key ?>' <?php echo ($key == get_option('dbem_events_page_time_limit')) ? "selected='selected'" : ''; ?>>
206
+ <?php echo $value; ?>
207
+ </option>
208
+ <?php endforeach; ?>
209
+ </select>
210
+ <br />
211
+ <em><?php _e('Only show events starting within a certain time limit on the events page. Default is no time limit is applied.','dbem'); ?></em>
212
+ </td>
213
+ </tr>
214
  <?php
215
  echo $save_button;
216
  ?>
311
  <table class='form-table'>
312
  <?php
313
  em_options_select ( __( 'Default contact person', 'dbem' ), 'dbem_default_contact_person', em_get_wp_users (), __( 'Select the default contact person. This user will be employed whenever a contact person is not explicitly specified for an event', 'dbem' ) );
314
+ em_options_radio_binary ( __( 'Approval Required?', 'dbem' ), 'dbem_bookings_approval', __( 'Bookings will not be confirmed until the event administrator approves it.', 'dbem' ) );
 
 
315
  em_options_input_text ( __( 'Email events admin?', 'dbem' ), 'dbem_bookings_notify_admin', __( "If you would like every event booking confirmation email sent to an administrator write their email here (leave blank to not send an email).", 'dbem' ) );
316
+ em_options_radio_binary ( __( 'Email contact person?', 'dbem' ), 'dbem_bookings_contact_email', __( 'Check this option if you want the event contact to receive an email when someone books places. An email will be sent when a booking is first made (regardless if confirmed or pending)', 'dbem' ) );
317
+ ?>
318
+ <tr><td colspan='2'><h4><?php _e('Contact person booking confirmed','dbem') ?></h4></td></tr>
319
+ <tr><td colspan='2'><?php echo __('An email will be sent to the event contact when a booking is first made.','dbem').$bookings_placeholder_tip ?></td></tr>
320
+ <?php
321
+ em_options_input_text ( __( 'Contact person email subject', 'dbem' ), 'dbem_bookings_contact_email_subject', '' );
322
+ em_options_textarea ( __( 'Contact person email', 'dbem' ), 'dbem_bookings_contact_email_body', '' );
323
+ ?>
324
+ <tr><td colspan='2'><h4><?php _e('Contact person booking cancelled','dbem') ?></h4></td></tr>
325
+ <tr><td colspan='2'><?php echo __('An email will be sent to the event contact if someone cancels their booking.','dbem').$bookings_placeholder_tip ?></td></tr>
326
+ <?php
327
+ em_options_input_text ( __( 'Contact person cancellation subject', 'dbem' ), 'dbem_contactperson_email_cancelled_subject', '' );
328
+ em_options_textarea ( __( 'Contact person cancellation email', 'dbem' ), 'dbem_contactperson_email_cancelled_body', '' );
329
+ ?>
330
+ <tr><td colspan='2'><h4><?php _e('Confirmed booking email','dbem') ?></h4></td></tr>
331
+ <tr><td colspan='2'><?php echo __('This is sent when a person\'s booking is confirmed. This will be sent automatically if approvals are required and the booking is approved. If approvals are disabled, this is sent out when a user first submits their booking.','dbem').$bookings_placeholder_tip ?></td></tr>
332
+ <?php
333
+ em_options_input_text ( __( 'Booking confirmed email subject', 'dbem' ), 'dbem_bookings_email_confirmed_subject', '' );
334
+ em_options_textarea ( __( 'Booking confirmed email', 'dbem' ), 'dbem_bookings_email_confirmed_body', '' );
335
+ ?>
336
+ <tr><td colspan='2'><h4><?php _e('Pending booking email','dbem') ?></h4></td></tr>
337
+ <tr><td colspan='2'><?php echo __( 'This will be sent to the person when they first submit their booking. Not relevant if bookings don\'t require approval.', 'dbem' ).$bookings_placeholder_tip ?></td></tr>
338
+ <?php
339
+ em_options_input_text ( __( 'Booking pending email subject', 'dbem' ), 'dbem_bookings_email_pending_subject', '');
340
+ em_options_textarea ( __( 'Booking pending email', 'dbem' ), 'dbem_bookings_email_pending_body','') ;
341
+ ?>
342
+ <tr><td colspan='2'><h4><?php _e('Rejected booking email','dbem') ?></h4></td></tr>
343
+ <tr><td colspan='2'><?php echo __( 'This will be sent automatically when a booking is rejected. Not relevant if bookings don\'t require approval.', 'dbem' ).$bookings_placeholder_tip ?></td></tr>
344
+ <?php
345
+ em_options_input_text ( __( 'Booking rejected email subject', 'dbem' ), 'dbem_bookings_email_rejected_subject', __( "The subject of the email sent to the person making a booking that is awaiting administrator approval. Not relevant if bookings don't require approval.", 'dbem' ).$bookings_placeholder_tip );
346
+ em_options_textarea ( __( 'Booking rejected email', 'dbem' ), 'dbem_bookings_email_rejected_body', __( 'The body of the email which will be sent to the person if the booking is rejected. Not relevant if bookings don\'t require approval.', 'dbem' ).$bookings_placeholder_tip );
347
  echo $save_button;
348
  ?>
349
+ <tr><td colspan='2'><h4><?php _e('Booking cancelled','dbem') ?></h4></td></tr>
350
+ <tr><td colspan='2'><?php echo __('This will be sent when a user cancels their booking.','dbem').$bookings_placeholder_tip ?></td></tr>
351
+ <?php
352
+ em_options_input_text ( __( 'Booking cancelled email subject', 'dbem' ), 'dbem_bookings_email_cancelled_subject', '' );
353
+ em_options_textarea ( __( 'Booking cancelled email', 'dbem' ), 'dbem_bookings_email_cancelled_body', '' );
354
+ ?>
355
  </table>
356
  </div> <!-- . inside -->
357
  </div> <!-- .postbox -->
383
  em_options_input_text ( __( 'Maximum width (px)', 'dbem' ), 'dbem_image_max_width', __( 'The maximum allowed width for images uploades', 'dbem' ) );
384
  em_options_input_text ( __( 'Maximum height (px)', 'dbem' ), 'dbem_image_max_height', __( "The maximum allowed height for images uploaded, in pixels", 'dbem' ) );
385
  em_options_input_text ( __( 'Maximum size (bytes)', 'dbem' ), 'dbem_image_max_size', __( "The maximum allowed size for images uploaded, in pixels", 'dbem' ) );
386
+ echo $save_button;
387
  ?>
388
  </table>
389
  </div> <!-- . inside -->
390
  </div> <!-- .postbox -->
391
+
392
+ <div class="postbox " >
393
+ <div class="handlediv" title="<?php __('Click to toggle'); ?>"><br /></div><h3 class='hndle'><span><?php _e ( 'Management Permission Options', 'dbem' ); ?> </span></h3>
394
+ <div class="inside">
395
+ <table class="form-table">
396
+ <tr><td colspan="2">
397
+ <strong><?php _e('Warning: Changing these values may result in exposing previously hidden information to all users.')?></strong><br />
398
+ <em><?php _e('Note that currently "users" are considered as wordpress contributor users upwards, as they can create and manage events (we\'re working on that). Wordpress administrators can control all events/locations/categories/etc. on Events Manager.','dbem'); ?></em>
399
+ </td></tr>
400
+ <tr><th colspan="2"><strong><?php _e('Event Permissions','dbem'); ?></strong></th></tr>
401
+ <?php
402
+ $location_privacy_options = array(
403
+ '0' => __('Every user can create and manage their own events. Users can\'t view or modify each others\' events and booking data','dbem'),
404
+ '1' => __('Every user can create/edit/delete any event on this site. (not recommended)','dbem')
405
+ );
406
+ em_options_radio ( 'dbem_permissions_events', $location_privacy_options );
407
+ ?>
408
+ <tr><th colspan="2"><strong><?php _e('Location Permissions','dbem'); ?></strong></th></tr>
409
+ <?php
410
+ $location_privacy_options = array(
411
+ '0' => __('Every user can create and manage their own location.','dbem')." ".__('In future releases of Events Manager, sharing locations with more than one user will be possible in this option, as well as connecting different user defined locations to prevent duplicate listings.','dbem'),
412
+ '1' => __('Only event administrators can create and edit locations. User must choose from these available locations.','dbem'),
413
+ '2' => __('Everyone can create/edit/delete all locations on this site. (not recommended)','dbem')
414
+ );
415
+ em_options_radio ( 'dbem_permissions_locations', $location_privacy_options );
416
+ ?>
417
+ <tr><th colspan="2"><strong><?php _e('Category Permissions','dbem'); ?></strong></th></tr>
418
+ <?php
419
+ $category_privacy_options = array(
420
+ '0' => __('Every user can create and manage their own category.','dbem'),
421
+ '1' => __('Only event administrators can create and edit categories. User must choose from these available categories.','dbem'),
422
+ '2' => __('Everyone can create/edit/delete all categories on the system. (not recommended)','dbem')
423
+ );
424
+ em_options_radio ( 'dbem_permissions_categories', $category_privacy_options );
425
+ ?>
426
+ </table>
427
+
428
+ </div> <!-- . inside -->
429
+ </div> <!-- .postbox -->
430
 
431
  <p class="submit">
432
  <input type="submit" id="dbem_options_submit" name="Submit" value="<?php _e ( 'Save Changes' )?>" />
admin/em-people.php CHANGED
@@ -1,24 +1,130 @@
1
  <?php
2
- function em_admin_people_page() {
3
- // Managing AJAX booking removal
4
- if(isset($_GET['action']) && $_GET['action'] == 'remove_booking') {
5
- if(isset($_POST['booking_id'])){
6
- $EM_Booking = new EM_Booking($_POST['booking_id']);
7
- $EM_Booking->delete();
8
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  ?>
11
  <div class='wrap'>
12
  <div id="icon-users" class="icon32"><br/></div>
13
  <h2>People</h2>
14
- <?php em_people_table(); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  </div>
16
  <?php
17
  }
18
 
19
  function em_printable_booking_report() {
20
  global $EM_Event;
21
- if(isset($_GET['action']) && $_GET['action'] == 'printable' && is_object($EM_Event)){
 
 
 
 
 
 
 
22
  ?>
23
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
24
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@@ -26,7 +132,7 @@ function em_printable_booking_report() {
26
  <head>
27
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
28
  <title>Bookings for <?php echo $EM_Event->name; ?></title>
29
- <link rel="stylesheet" href="<?php echo bloginfo('wpurl') ?>/wp-content/plugins/events-manager/includes/css/events_manager.css" type="text/css" media="screen" />
30
  </head>
31
  <body id="printable">
32
  <div id="container">
@@ -70,44 +176,7 @@ function em_printable_booking_report() {
70
  die();
71
  }
72
  }
73
- add_action('init', 'em_printable_booking_report');
74
-
75
- function em_people_table() {
76
- $EM_People = EM_People::get();
77
- if (count($EM_People) < 1 ) {
78
- _e("No people have responded to your events yet!", 'dbem');
79
- } else {
80
- ?>
81
- <p><?php _e('This table collects the data about the people who responded to your events', 'dbem') ?></p>
82
- <table id='dbem-people-table' class='widefat post fixed'>
83
- <thead>
84
- <tr>
85
- <th class='manage-column column-cb check-column' scope='col'>&nbsp;</th>
86
- <th class='manage-column ' scope='col'>Name</th>
87
- <th scope='col'>E-mail</th>
88
- <th scope='col'>Phone number</th>
89
- </tr>
90
- </thead>
91
- <tfoot>
92
- <tr>
93
- <th class='manage-column column-cb check-column' scope='col'>&nbsp;</th>
94
- <th class='manage-column ' scope='col'>Name</th>
95
- <th scope='col'>E-mail</th>
96
- <th scope='col'>Phone number</th>
97
- </tr>
98
- </tfoot>
99
- <?php foreach ($EM_People as $EM_Person): ?>
100
- <tr>
101
- <td>&nbsp;</td>
102
- <td><?php echo $EM_Person->name ?></td>
103
- <td><?php echo $EM_Person->email ?></td>
104
- <td><?php echo $EM_Person->phone ?></td>
105
- </tr>
106
- <?php endforeach; ?>
107
- </table>
108
- <?php
109
- }
110
- }
111
 
112
  /**
113
  * Adds phone number to contact info of users, compatible with previous phone field method
1
  <?php
2
+ /**
3
+ * Check for flags to save personal data
4
+ */
5
+ function em_person_actions(){
6
+ global $EM_Person;
7
+ if( !empty($_REQUEST['action']) && is_object($EM_Person) ){
8
+ if( $_REQUEST['action'] == 'edit_person' ){
9
+ $validation = $EM_Person->get_post();
10
+ if ( $validation ) { //EM_Event gets the event if submitted via POST and validates it (safer than to depend on JS)
11
+ //Save
12
+ if( $EM_Person->save() ) {
13
+ function em_person_save_notification(){
14
+ global $EM_Person;
15
+ ?><div class="updated"><p><strong><?php echo $EM_Person->feedback_message; ?></strong></p></div><?php
16
+ }
17
+ }else{
18
+ function em_person_save_notification(){
19
+ global $EM_Person;
20
+ ?><div class="error"><p><strong><?php echo $EM_Person->feedback_message; ?></strong></p></div><?php
21
+ }
22
+ }
23
+ }else{
24
+ //TODO make errors clearer when saving person
25
+ function em_person_save_notification(){
26
+ global $EM_Person;
27
+ ?><div class="error"><p><strong><?php echo $EM_Person->feedback_message; ?></strong></p></div><?php
28
+ }
29
+ }
30
+ add_action ( 'admin_notices', 'em_person_save_notification' );
31
+ }
32
+ if( $_REQUEST['action'] == 'person_delete' ){
33
+ if( $EM_Person->delete() ){
34
+ //TODO delete person needs confirmation
35
+ wp_redirect( get_bloginfo('wpurl').'/wp-admin/admin.php?page=events-manager-bookings');
36
+ exit();
37
+ }else{
38
+ function em_person_delete_notification(){
39
+ global $EM_Person;
40
+ ?><div class="error"><p><strong><?php echo $EM_Person->feedback_message; ?></strong></p></div><?php
41
+ }
42
+ }
43
+ add_action ( 'admin_notices', 'em_person_delete_notification' );
44
+ }
45
  }
46
+ }
47
+ add_action('admin_init','em_person_actions');
48
+
49
+ /**
50
+ * Generate an edit form for person details.
51
+ */
52
+ function em_person_edit_form(){
53
+ global $EM_Person;
54
+ ?>
55
+ <form action="" method="post" id="em-person-form">
56
+ <table>
57
+ <tr><td><strong><?php _e('Name','dbem'); ?></strong></td><td><input type="text" name="person_name" size="60" value="<?php echo $EM_Person->name; ?>" /></td></tr>
58
+ <tr><td><strong><?php _e('Phone','dbem'); ?></strong></td><td><input type="text" name="person_phone" size="60" value="<?php echo $EM_Person->phone; ?>" /></td></tr>
59
+ <tr><td><strong><?php _e('E-mail','dbem'); ?></strong></td><td><input type="text" name="person_email" size="60" value="<?php echo $EM_Person->email; ?>" /></td></tr>
60
+ </table>
61
+ <p class="submit">
62
+ <input type="submit" name="events_update" value="<?php _e ( 'Save' ); ?> &raquo;" />
63
+ </p>
64
+ <input type="hidden" name="action" value="person_edit" />
65
+ <input type="hidden" name="person_id" value="<?php echo $EM_Person->id; ?>" />
66
+ </form>
67
+ <?php
68
+ }
69
+
70
+ /**
71
+ * Depreciated page... for now at least.
72
+ */
73
+ function em_admin_people_page() {
74
  ?>
75
  <div class='wrap'>
76
  <div id="icon-users" class="icon32"><br/></div>
77
  <h2>People</h2>
78
+ <?php
79
+ $EM_People = EM_People::get();
80
+ if (count($EM_People) < 1 ) {
81
+ _e("No people have responded to your events yet!", 'dbem');
82
+ } else {
83
+ ?>
84
+ <p><?php _e('This table collects the data about the people who responded to your events', 'dbem') ?></p>
85
+ <table id='dbem-people-table' class='widefat post fixed'>
86
+ <thead>
87
+ <tr>
88
+ <th class='manage-column column-cb check-column' scope='col'>&nbsp;</th>
89
+ <th class='manage-column ' scope='col'>Name</th>
90
+ <th scope='col'>E-mail</th>
91
+ <th scope='col'>Phone number</th>
92
+ </tr>
93
+ </thead>
94
+ <tfoot>
95
+ <tr>
96
+ <th class='manage-column column-cb check-column' scope='col'>&nbsp;</th>
97
+ <th class='manage-column ' scope='col'>Name</th>
98
+ <th scope='col'>E-mail</th>
99
+ <th scope='col'>Phone number</th>
100
+ </tr>
101
+ </tfoot>
102
+ <?php foreach ($EM_People as $EM_Person): ?>
103
+ <tr>
104
+ <td>&nbsp;</td>
105
+ <td><?php echo $EM_Person->name ?></td>
106
+ <td><?php echo $EM_Person->email ?></td>
107
+ <td><?php echo $EM_Person->phone ?></td>
108
+ </tr>
109
+ <?php endforeach; ?>
110
+ </table>
111
+ <?php
112
+ }
113
+ ?>
114
  </div>
115
  <?php
116
  }
117
 
118
  function em_printable_booking_report() {
119
  global $EM_Event;
120
+ //check that user can access this page
121
+ if( isset($_GET['page']) && $_GET['page']=='events-manager-bookings' && isset($_GET['action']) && $_GET['action'] == 'bookings_report' && is_object($EM_Event)){
122
+ if( is_object($EM_Event) && !$EM_Event->can_manage() ){
123
+ ?>
124
+ <div class="wrap"><h2><?php _e('Unauthorized Access','dbem'); ?></h2><p><?php _e('You do not have the rights to manage this event.','dbem'); ?></p></div>
125
+ <?php
126
+ return false;
127
+ }
128
  ?>
129
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
130
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
132
  <head>
133
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
134
  <title>Bookings for <?php echo $EM_Event->name; ?></title>
135
+ <link rel="stylesheet" href="<?php echo bloginfo('wpurl') ?>/wp-content/plugins/events-manager/includes/css/events_manager.css" type="text/css" media="screen" />
136
  </head>
137
  <body id="printable">
138
  <div id="container">
176
  die();
177
  }
178
  }
179
+ add_action('admin_init', 'em_printable_booking_report');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
 
181
  /**
182
  * Adds phone number to contact info of users, compatible with previous phone field method
classes/em-booking.php CHANGED
@@ -6,20 +6,32 @@ class EM_Booking extends EM_Object{
6
  var $person_id;
7
  var $seats;
8
  var $comment;
9
- var $approved = 0;
10
- //Other Vars
11
  var $fields = array(
12
  'booking_id' => array('name'=>'id','type'=>'%d'),
13
  'event_id' => array('name'=>'event_id','type'=>'%d'),
14
  'person_id' => array('name'=>'person_id','type'=>'%d'),
15
  'booking_seats' => array('name'=>'seats','type'=>'%d'),
16
  'booking_comment' => array('name'=>'comment','type'=>'%s'),
17
- 'booking_approved' => array('name'=>'approved','type'=>'%d')
18
  );
 
 
19
  var $person;
20
  var $required_fields = array('booking_id', 'event_id', 'person_id', 'booking_seats');
21
  var $feedback_message = "";
22
  var $errors = array();
 
 
 
 
 
 
 
 
 
 
23
 
24
  /**
25
  * Creates booking object and retreives booking data (default is a blank booking object). Accepts either array of booking data (from db) or a booking id.
@@ -34,17 +46,33 @@ class EM_Booking extends EM_Object{
34
  $booking = $booking_data;
35
  //Also create a person out of this...
36
  $this->person = new EM_Person($booking_data);
37
- }elseif( $booking_data > 0 ){
 
 
 
38
  //Retreiving from the database
39
  global $wpdb;
40
  $sql = "SELECT * FROM ". $wpdb->prefix . EM_BOOKINGS_TABLE ." WHERE booking_id ='$booking_data'";
41
  $booking = $wpdb->get_row($sql, ARRAY_A);
42
  //Get the person for this booking
43
  $this->person = new EM_Person($booking['person_id']);
 
 
 
 
 
44
  }
45
  //Save into the object
46
  $this->to_object($booking);
 
47
  }
 
 
 
 
 
 
 
48
  }
49
 
50
  /**
@@ -54,36 +82,38 @@ class EM_Booking extends EM_Object{
54
  function save(){
55
  global $wpdb;
56
  $table = $wpdb->prefix.EM_BOOKINGS_TABLE;
 
57
  //First the person
58
- //Does this person exist?
59
- $person_result = $this->person->save();
60
- if( $person_result === false ){
61
- $this->errors = array_merge($this->errors, $this->person->errors);
62
- return false;
63
- }
64
- $this->person_id = $this->person->id;
65
-
66
- //Now we save the booking
67
- $data = $this->to_array();
68
- if($this->id != ''){
69
- $where = array( 'booking_id' => $this->id );
70
- $result = $wpdb->update($table, $data, $where, $this->get_types($data));
 
 
 
 
 
 
 
 
 
 
 
 
71
  }else{
72
- $result = $wpdb->insert($table, $data, $this->get_types($data));
73
- $this->id = $wpdb->insert_id;
74
- }
75
- if( $result === false ){
76
  $this->errors[] = __('There was a problem saving the booking.', 'dbem');
 
77
  }
78
-
79
- //Give feedback on result
80
- if( count($this->errors) == 0 ){
81
- //Success
82
- $this->feedback_message = __('Your booking has been recorded','dbem');
83
- return true;
84
- }else{
85
- return false;
86
- }
87
  return true;
88
  }
89
 
@@ -112,6 +142,47 @@ class EM_Booking extends EM_Object{
112
  }
113
  }
114
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  /**
116
  * I wonder what this does....
117
  * @return boolean
@@ -119,15 +190,174 @@ class EM_Booking extends EM_Object{
119
  function delete(){
120
  global $wpdb;
121
  $sql = $wpdb->prepare("DELETE FROM ". $wpdb->prefix.EM_BOOKINGS_TABLE . " WHERE booking_id=%d", $this->id);
122
- return ( $wpdb->query( $sql ) !== false );
 
 
 
 
 
 
 
 
 
 
123
  }
124
 
125
  /**
126
  * Approve a booking.
 
127
  */
128
  function approve(){
129
- $this->approved = 1;
130
- return $this->save();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  }
132
 
133
  /**
6
  var $person_id;
7
  var $seats;
8
  var $comment;
9
+ var $status = 0;
10
+ var $notes = array();
11
  var $fields = array(
12
  'booking_id' => array('name'=>'id','type'=>'%d'),
13
  'event_id' => array('name'=>'event_id','type'=>'%d'),
14
  'person_id' => array('name'=>'person_id','type'=>'%d'),
15
  'booking_seats' => array('name'=>'seats','type'=>'%d'),
16
  'booking_comment' => array('name'=>'comment','type'=>'%s'),
17
+ 'booking_status' => array('name'=>'status','type'=>'%d')
18
  );
19
+ //Other Vars
20
+ var $timestamp;
21
  var $person;
22
  var $required_fields = array('booking_id', 'event_id', 'person_id', 'booking_seats');
23
  var $feedback_message = "";
24
  var $errors = array();
25
+ /**
26
+ * If saved in this instance, you can see what previous approval status was.
27
+ * @var int
28
+ */
29
+ var $previous_status;
30
+ /**
31
+ * The booking approval status number corresponds to a state in this array.
32
+ * @var unknown_type
33
+ */
34
+ var $status_array = array();
35
 
36
  /**
37
  * Creates booking object and retreives booking data (default is a blank booking object). Accepts either array of booking data (from db) or a booking id.
46
  $booking = $booking_data;
47
  //Also create a person out of this...
48
  $this->person = new EM_Person($booking_data);
49
+ if($booking['person_id'] != $this->person->id){
50
+ $this->person = new EM_Person($booking['booking_id']);
51
+ }
52
+ }elseif( is_numeric($booking_data) ){
53
  //Retreiving from the database
54
  global $wpdb;
55
  $sql = "SELECT * FROM ". $wpdb->prefix . EM_BOOKINGS_TABLE ." WHERE booking_id ='$booking_data'";
56
  $booking = $wpdb->get_row($sql, ARRAY_A);
57
  //Get the person for this booking
58
  $this->person = new EM_Person($booking['person_id']);
59
+ //Booking notes
60
+ $notes = $wpdb->get_results("SELECT * FROM ". $wpdb->prefix . EM_META_TABLE ." WHERE meta_key='booking-note' AND object_id ='$booking_data'", ARRAY_A);
61
+ foreach($notes as $note){
62
+ $this->notes[] = unserialize($note['meta_value']);
63
+ }
64
  }
65
  //Save into the object
66
  $this->to_object($booking);
67
+ $this->timestamp = strtotime($booking['booking_date']);
68
  }
69
+ //Do it here so things appear in the po file.
70
+ $this->status_array = array(
71
+ 0 => __('Pending','dbem'),
72
+ 1 => __('Approved','dbem'),
73
+ 2 => __('Rejected','dbem'),
74
+ 3 => __('Cacncelled','dbem')
75
+ );
76
  }
77
 
78
  /**
82
  function save(){
83
  global $wpdb;
84
  $table = $wpdb->prefix.EM_BOOKINGS_TABLE;
85
+ do_action('em_booking_save_pre',$this);
86
  //First the person
87
+ if($this->validate()){
88
+ //Does this person exist?
89
+ $person_result = $this->person->save();
90
+ if( $person_result === false ){
91
+ $this->errors = array_merge($this->errors, $this->person->errors);
92
+ return false;
93
+ }
94
+ $this->person_id = $this->person->id;
95
+
96
+ //Now we save the booking
97
+ $data = $this->to_array();
98
+ if($this->id != ''){
99
+ $where = array( 'booking_id' => $this->id );
100
+ $result = $wpdb->update($table, $data, $where, $this->get_types($data));
101
+ $this->feedback_message = __('Changes saved');
102
+ }else{
103
+ $result = $wpdb->insert($table, $data, $this->get_types($data));
104
+ $this->id = $wpdb->insert_id;
105
+ $this->feedback_message = __('Your booking has been recorded','dbem');
106
+ }
107
+ if( $result === false ){
108
+ $this->feedback_message = __('There was a problem saving the booking.', 'dbem');
109
+ $this->errors[] = __('There was a problem saving the booking.', 'dbem');
110
+ }
111
+ return apply_filters('em_booking_save', ( count($this->errors) == 0 ), $this);
112
  }else{
113
+ $this->feedback_message = __('There was a problem saving the booking.', 'dbem');
 
 
 
114
  $this->errors[] = __('There was a problem saving the booking.', 'dbem');
115
+ return apply_filters('em_booking_save', false, $this);
116
  }
 
 
 
 
 
 
 
 
 
117
  return true;
118
  }
119
 
142
  }
143
  }
144
 
145
+ /**
146
+ * Get posted data and save it into the object (not db)
147
+ * @return boolean
148
+ */
149
+ function get_post(){
150
+ //Currently, only editing allowed, so here we are.
151
+ $this->comment = (!empty($_REQUEST['booking_comment'])) ? $_REQUEST['booking_comment']:'';
152
+ $this->seats = (!empty($_REQUEST['booking_seats'])) ? $_REQUEST['booking_seats']:'';
153
+ return apply_filters('em_booking_get_post',$this->validate(),$this);
154
+ }
155
+
156
+ function validate(){
157
+ return (
158
+ (empty($this->event_id) || is_numeric($this->event_id)) &&
159
+ (empty($this->person_id) || is_numeric($this->person_id)) &&
160
+ is_numeric($this->seats)
161
+ );
162
+ }
163
+
164
+ /**
165
+ * Smart event locator, saves a database read if possible.
166
+ */
167
+ function get_event(){
168
+ global $EM_Event;
169
+ if( is_object($this->event) && get_class($this->event)=='EM_Event' && $this->event->id == $this->event_id ){
170
+ return $this->event;
171
+ }elseif( is_object($EM_Event) && $EM_Event->id == $this->event_id ){
172
+ $this->event = $EM_Event;
173
+ }else{
174
+ $this->event = new EM_Event($this->event_id);
175
+ }
176
+ return $this->event;
177
+ }
178
+
179
+ /**
180
+ * Returns a string representation of the booking's status
181
+ * @return string
182
+ */
183
+ function get_status(){
184
+ return $this->status_array[$this->status];
185
+ }
186
  /**
187
  * I wonder what this does....
188
  * @return boolean
190
  function delete(){
191
  global $wpdb;
192
  $sql = $wpdb->prepare("DELETE FROM ". $wpdb->prefix.EM_BOOKINGS_TABLE . " WHERE booking_id=%d", $this->id);
193
+ $result = $wpdb->query( $sql );
194
+ if( $result !== false ){
195
+ $this->previous_status = $this->status;
196
+ $this->status == false;
197
+ $this->email();
198
+ }
199
+ return ( $result !== false );
200
+ }
201
+
202
+ function cancel(){
203
+ return $this->set_status(3);
204
  }
205
 
206
  /**
207
  * Approve a booking.
208
+ * @return bool
209
  */
210
  function approve(){
211
+ return $this->set_status(1);
212
+ }
213
+ /**
214
+ * Reject a booking and save
215
+ * @return bool
216
+ */
217
+ function reject(){
218
+ return $this->set_status(2);
219
+ }
220
+ /**
221
+ * Unpprove a booking.
222
+ * @return bool
223
+ */
224
+ function unapprove(){
225
+ return $this->set_status(0);
226
+ }
227
+
228
+ /**
229
+ * Change the status of the booking. This will save to the Database too.
230
+ * @param unknown_type $status
231
+ * @return string|string|string
232
+ */
233
+ function set_status($status){
234
+ $this->previous_status = $this->status;
235
+ $this->status = $status;
236
+ $result = $this->save();
237
+ $action_string = strtolower($this->status_array[$status]);
238
+ if($result){
239
+ $this->feedback_message = sprintf(__('Booking %s.','dbem'), $action_string);
240
+ if( $this->email() ){
241
+ $this->feedback_message .= " ".__('Mail Sent.','dbem');
242
+ }elseif( $this->previous_status == 0 ){
243
+ //extra errors may be logged by email() in EM_Object
244
+ $this->feedback_message .= ' <span style="color:red">'.__('ERROR : Mail Not Sent.','dbem').'</span>';
245
+ return false;
246
+ }
247
+ return true;
248
+ }else{
249
+ //errors should be logged by save()
250
+ $this->feedback_message = sprintf(__('Booking could not be %s.','dbem'), $action_string);
251
+ return false;
252
+ }
253
+ }
254
+
255
+ /**
256
+ * Add a booking note to this booking. returns wpdb result or false if use can't manage this event.
257
+ * @param string $note
258
+ * @return mixed
259
+ */
260
+ function add_note( $note_text ){
261
+ global $wpdb;
262
+ if( $this->can_manage() ){
263
+ $note = array('author'=>get_current_user_id(),'note'=>$note_text,'timestamp'=>current_time('timestamp'));
264
+ $this->notes[] = $note;
265
+ $this->feedback_message = __('Booking note successfully added.','dbem');
266
+ return $wpdb->insert($wpdb->prefix.EM_META_TABLE, array('object_id'=>$this->id, 'meta_key'=>'booking-note', 'meta_value'=> serialize($note)),array('%d','%s','%s'));
267
+ }
268
+ return false;
269
+ }
270
+
271
+ /**
272
+ * @param EM_Booking $EM_Booking
273
+ * @param EM_Event $event
274
+ * @return boolean
275
+ */
276
+ function email(){
277
+ global $EM_Mailer;
278
+ $EM_Event = $this->get_event(); //We NEED event details here.
279
+ //Make sure event matches booking, and that booking used to be approved.
280
+ if( $this->previous_status == 0 || $this->status == 3 ){
281
+ $contact_id = ( $EM_Event->contactperson_id != "") ? $EM_Event->contactperson_id : get_option('dbem_default_contact_person');
282
+
283
+ $contact_subject = get_option('dbem_bookings_contact_email_subject');
284
+ $contact_body = get_option('dbem_bookings_contact_email_body');
285
+
286
+ if( get_option('dbem_bookings_approval') == 0 || $this->status == 1 ){
287
+ $booker_subject = get_option('dbem_bookings_email_confirmed_subject');
288
+ $booker_body = get_option('dbem_bookings_email_confirmed_body');
289
+ }elseif( $this->status == 0 ){
290
+ $booker_subject = get_option('dbem_bookings_email_pending_subject');
291
+ $booker_body = get_option('dbem_bookings_email_pending_body');
292
+ }elseif( $this->status == 2 ){
293
+ $booker_subject = get_option('dbem_bookings_email_rejected_subject');
294
+ $booker_body = get_option('dbem_bookings_email_rejected_body');
295
+ }elseif( $this->status == 3 ){
296
+ $booker_subject = get_option('dbem_bookings_email_cancelled_subject');
297
+ $booker_body = get_option('dbem_bookings_email_cancelled_body');
298
+ $contact_subject = get_option('dbem_contactperson_email_cancelled_subject');
299
+ $contact_body = get_option('dbem_contactperson_email_cancelled_body');
300
+ }
301
+
302
+ // email specific placeholders
303
+ $placeholders = array(
304
+ '#_RESPNAME' => '#_BOOKINGNAME',//Depreciated
305
+ '#_RESPEMAIL' => '#_BOOKINGEMAIL',//Depreciated
306
+ '#_RESPPHONE' => '#_BOOKINGPHONE',//Depreciated
307
+ '#_COMMENT' => '#_BOOKINGCOMMENT',//Depreciated
308
+ '#_RESERVEDSPACES' => '#_BOOKEDSPACES',//Depreciated
309
+ '#_BOOKINGNAME' => $this->person->name,
310
+ '#_BOOKINGEMAIL' => $this->person->email,
311
+ '#_BOOKINGPHONE' => $this->person->phone,
312
+ '#_BOOKINGSPACES' => $this->seats,
313
+ '#_BOOKINGCOMMENT' => $this->comment,
314
+ );
315
+ foreach($placeholders as $key => $value) {
316
+ $contact_subject = str_replace($key, $value, $contact_subject);
317
+ $contact_body = str_replace($key, $value, $contact_body);
318
+ $booker_subject = str_replace($key, $value, $booker_subject);
319
+ $booker_body = str_replace($key, $value, $booker_body);
320
+ }
321
+
322
+ $booker_subject = $EM_Event->output($booker_subject, 'email');
323
+ $booker_body = $EM_Event->output($booker_body, 'email');
324
+
325
+ //Send to the person booking
326
+ if( !$this->email_send( $booker_subject,$booker_body, $this->person->email) ){
327
+ return false;
328
+ }
329
+
330
+ //Send admin emails
331
+ if( (get_option('dbem_bookings_approval') == 0 || $this->status == 0) && (get_option('dbem_bookings_contact_email') == 1 || get_option('dbem_bookings_notify_admin') != '') ){
332
+ //Only gets sent if this is a pending booking, unless approvals are disabled.
333
+ $contact_subject = $EM_Event->output($contact_subject, 'email');
334
+ $contact_body = $EM_Event->output($contact_body, 'email');
335
+
336
+ if( get_option('dbem_bookings_contact_email') == 1 ){
337
+ if( !$this->email_send( $contact_subject, $contact_body, $EM_Event->contact->user_email) && current_user_can('activate_plugins')){
338
+ $this->errors[] = __('Confirmation email could not be sent to contact person. Registrant should have gotten their email (only admin see this warning).','dbem');
339
+ return false;
340
+ }
341
+ }
342
+
343
+ if( get_option('dbem_bookings_notify_admin') != '' && preg_match('/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$/', get_option('dbem_bookings_notify_admin')) ){
344
+ if( !$this->email_send( $contact_subject, $contact_body, get_option('dbem_bookings_notify_admin')) ){
345
+ $this->errors[] = __('Confirmation email could not be sent to admin. Registrant should have gotten their email (only admin see this warning).','dbem');
346
+ return false;
347
+ }
348
+ }
349
+ }
350
+ return true;
351
+ }
352
+ return false;
353
+ //TODO need error checking for booking mail send
354
+ }
355
+
356
+ /**
357
+ * Can the user manage this event?
358
+ */
359
+ function can_manage(){
360
+ return ( get_option('dbem_permissions_events') || $this->get_event()->author == get_current_user_id() || em_verify_admin() );
361
  }
362
 
363
  /**
classes/em-bookings.php CHANGED
@@ -5,7 +5,6 @@
5
  *
6
  */
7
  class EM_Bookings extends EM_Object{
8
- //TODO Bookings needs redoing
9
 
10
  /**
11
  * Array of EM_Booking objects for a specific event
@@ -31,8 +30,7 @@ class EM_Bookings extends EM_Object{
31
  * @param EM_Event $event
32
  * @return null
33
  */
34
- function EM_Bookings( $event ){
35
- //TODO maybe not load bookings here (for speed), and have an init() function called by all functions?
36
  if( is_object($event) && get_class($event) == "EM_Event" ){ //Creates a blank bookings object if needed
37
  global $wpdb;
38
  $this->event_id = $event->id;
@@ -51,7 +49,7 @@ class EM_Bookings extends EM_Object{
51
  * @return boolean
52
  */
53
  function add( $EM_Booking ){
54
- global $wpdb,$EM_Mailer;
55
  if ( $this->get_available_seats() >= $EM_Booking->seats ) {
56
  $EM_Booking->event_id = $this->event_id;
57
  // checking whether the booker has already booked places
@@ -69,19 +67,23 @@ class EM_Bookings extends EM_Object{
69
  if($booking->id == $EM_Booking->id){ unset($this->bookings[$key]); }
70
  }
71
  $this->bookings[] = $EM_Booking;
72
- $email = $this->email($EM_Booking);
73
  }
74
  } else {
75
  //New booking, so let's save the booking
76
  $result = $EM_Booking->save();
77
  if($result){
78
  $this->bookings[] = $EM_Booking;
79
- $email = $this->email($EM_Booking);
80
  }
81
  }
82
  if($result){
83
  //Success
84
- $this->feedback_message = __('Booking successful.', 'dbem');
 
 
 
 
85
  if(!$email){
86
  $this->feedback_message .= ' '.__('However, there were some problems whilst sending confirmation emails to you and/or the event contact person. You may want to contact them directly and letting them know of this error.', 'dbem');
87
  if( current_user_can('activate_plugins') ){
@@ -113,30 +115,173 @@ class EM_Bookings extends EM_Object{
113
  return ($result);
114
  }
115
 
 
 
 
 
 
 
 
 
 
 
 
116
  /**
117
- * Returns number of available seats for this event
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  * @return int
119
  */
120
  function get_available_seats(){
121
  $booked_seats = 0;
122
- foreach ( $this->bookings as $booking ){
123
- $booked_seats += $booking->seats;
 
 
124
  }
125
- return $this->seats - $booked_seats;
126
  }
127
 
128
  /**
129
- * Returns number of booked seats for this event
130
  * @return int
131
  */
132
  function get_booked_seats(){
133
  $booked_seats = 0;
134
  foreach ( $this->bookings as $booking ){
135
- $booked_seats += $booking->seats;
 
 
136
  }
137
  return $booked_seats;
138
  }
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  /**
141
  * Checks if a person with similar details has booked for this before
142
  * @param $person_id
@@ -157,71 +302,178 @@ class EM_Bookings extends EM_Object{
157
  return false;
158
  }
159
 
 
160
  /**
161
- * @param $EM_Booking
162
- * @return boolean
163
  */
164
- function email($EM_Booking){
165
- global $EM_Event, $EM_Mailer;
166
-
167
- $contact_id = ( $EM_Event->contactperson_id != "") ? $EM_Event->contactperson_id : get_option('dbem_default_contact_person');
168
-
169
- $contact_body = get_option('dbem_contactperson_email_body');
170
- $booker_body = get_option('dbem_respondent_email_body');
171
-
172
- // email specific placeholders
173
- // TODO make placeholders for RSVP consistent, we shouldn't need some of these as they're on the main events output function
174
- $placeholders = array(
175
- '#_RESPNAME' => '#_BOOKINGNAME',//Depreciated
176
- '#_RESPEMAIL' => '#_BOOKINGEMAIL',//Depreciated
177
- '#_RESPPHONE' => '#_BOOKINGPHONE',//Depreciated
178
- '#_COMMENT' => '#_BOOKINGCOMMENT',//Depreciated
179
- '#_RESERVEDSPACES' => '#_BOOKEDSPACES',//Depreciated
180
- '#_BOOKINGNAME' => $EM_Booking->person->name,
181
- '#_BOOKINGEMAIL' => $EM_Booking->person->email,
182
- '#_BOOKINGPHONE' => $EM_Booking->person->phone,
183
- '#_BOOKINGSPACES' => $EM_Booking->seats,
184
- '#_BOOKINGCOMMENT' => $EM_Booking->comment,
185
- );
186
- foreach($placeholders as $key => $value) {
187
- $contact_body= str_replace($key, $value, $contact_body);
188
- $booker_body= str_replace($key, $value, $booker_body);
189
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
190
 
191
- $booker_body = $EM_Event->output( $booker_body );
192
- $contact_body = ( get_option('dbem_bookings_notify_admin') || get_option('dbem_rsvp_notify_contact') ) ? $EM_Event->output( $contact_body ):$contact_body;
193
-
194
- //TODO offer subject changes
195
- if( !$EM_Mailer->send(__('Reservation confirmed','dbem'),$booker_body, $EM_Booking->person->email) ){
196
- foreach($EM_Mailer->errors as $error){
197
- $this->errors[] = $error;
 
 
 
 
 
198
  }
199
- return false;
200
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
 
202
- if( get_option('dbem_rsvp_notify_contact') == 1 ){
203
- if( !$EM_Mailer->send(__("New booking",'dbem'), $contact_body, $EM_Event->contact->user_email) && current_user_can('activate_plugins')){
204
- foreach($EM_Mailer->errors as $error){
205
- $this->errors[] = $error;
206
- }
207
- $this->errors[] = __('Confirmation email could not be sent to contact person. Registrant should have gotten their email (only admin see this warning).','dbem');
208
- return false;
209
- }
210
  }
 
 
 
 
 
 
 
 
 
 
 
211
 
212
- if( get_option('dbem_bookings_notify_admin') != '' && preg_match('/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$/', get_option('dbem_bookings_notify_admin')) ){
213
- if( !$EM_Mailer->send(__("New booking",'dbem'), $contact_body, get_option('dbem_bookings_notify_admin')) ){
214
- foreach($EM_Mailer->errors as $error){
215
- $this->errors[] = $error;
216
- }
217
- $this->errors[] = __('Confirmation email could not be sent to admin. Registrant should have gotten their email (only admin see this warning).','dbem');
218
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
219
  }
 
220
  }
221
 
222
- //TODO need error checking for booking mail send
223
- return true;
 
224
  }
225
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
226
  }
227
  ?>
5
  *
6
  */
7
  class EM_Bookings extends EM_Object{
 
8
 
9
  /**
10
  * Array of EM_Booking objects for a specific event
30
  * @param EM_Event $event
31
  * @return null
32
  */
33
+ function EM_Bookings( $event = false ){
 
34
  if( is_object($event) && get_class($event) == "EM_Event" ){ //Creates a blank bookings object if needed
35
  global $wpdb;
36
  $this->event_id = $event->id;
49
  * @return boolean
50
  */
51
  function add( $EM_Booking ){
52
+ global $wpdb,$EM_Mailer;
53
  if ( $this->get_available_seats() >= $EM_Booking->seats ) {
54
  $EM_Booking->event_id = $this->event_id;
55
  // checking whether the booker has already booked places
67
  if($booking->id == $EM_Booking->id){ unset($this->bookings[$key]); }
68
  }
69
  $this->bookings[] = $EM_Booking;
70
+ $email = $EM_Booking->email();
71
  }
72
  } else {
73
  //New booking, so let's save the booking
74
  $result = $EM_Booking->save();
75
  if($result){
76
  $this->bookings[] = $EM_Booking;
77
+ $email = $EM_Booking->email();
78
  }
79
  }
80
  if($result){
81
  //Success
82
+ if( get_option('dbem_bookings_approval') == 1 ){
83
+ $this->feedback_message = __('Booking successful, pending confirmation (you will also receive an email once confirmed).', 'dbem');
84
+ }else{
85
+ $this->feedback_message = __('Booking successful.', 'dbem');
86
+ }
87
  if(!$email){
88
  $this->feedback_message .= ' '.__('However, there were some problems whilst sending confirmation emails to you and/or the event contact person. You may want to contact them directly and letting them know of this error.', 'dbem');
89
  if( current_user_can('activate_plugins') ){
115
  return ($result);
116
  }
117
 
118
+
119
+ /**
120
+ * Will approve all supplied booking ids, which must be in the form of a numeric array or a single number.
121
+ * @param array|int $booking_ids
122
+ * @return boolean
123
+ */
124
+ function approve( $booking_ids ){
125
+ $this->set_status(1, $booking_ids);
126
+ return false;
127
+ }
128
+
129
  /**
130
+ * Will reject all supplied booking ids, which must be in the form of a numeric array or a single number.
131
+ * @param array|int $booking_ids
132
+ * @return boolean
133
+ */
134
+ function reject( $booking_ids ){
135
+ return $this->set_status(2, $booking_ids);
136
+ }
137
+
138
+ /**
139
+ * Will unapprove all supplied booking ids, which must be in the form of a numeric array or a single number.
140
+ * @param array|int $booking_ids
141
+ * @return boolean
142
+ */
143
+ function unapprove( $booking_ids ){
144
+ return $this->set_status(0, $booking_ids);
145
+ }
146
+
147
+ /**
148
+ * @param int $status
149
+ * @param array|int $booking_ids
150
+ * @return bool
151
+ */
152
+ function set_status($status, $booking_ids){
153
+ //FIXME there is a vulnerability where any user can approve/reject bookings if they know the ID
154
+ if( EM_Object::array_is_numeric($booking_ids) ){
155
+ //Get all the bookings
156
+ $results = array();
157
+ $mails = array();
158
+ foreach( $booking_ids as $booking_id ){
159
+ $EM_Booking = new EM_Booking($booking_id);
160
+ $results[] = $EM_Booking->set_status($status);
161
+ }
162
+ if( !in_array('false',$results) ){
163
+ $this->feedback_message = __('Bookings %s. Mails Sent.', 'dbem');
164
+ return true;
165
+ }else{
166
+ //TODO Better error handling needed if some bookings fail approval/failure
167
+ $this->feedback_message = __('An error occurred.', 'dbem');
168
+ return false;
169
+ }
170
+ }elseif( is_numeric($booking_ids) || is_object($booking_ids) ){
171
+ $EM_Booking = ( is_object($booking_ids) && get_class($booking_ids) == 'EM_Booking') ? $booking_ids : new EM_Booking($booking_ids);
172
+ $result = $EM_Booking->set_status($status);
173
+ $this->feedback_message = $EM_Booking->feedback_message;
174
+ return $result;
175
+ }
176
+ return false;
177
+ }
178
+
179
+ /**
180
+ * Returns number of available seats for this event. If approval of bookings is on, will include pending bookings depending on em option.
181
  * @return int
182
  */
183
  function get_available_seats(){
184
  $booked_seats = 0;
185
+ if( get_option('dbem_bookings_approval_reserved') == 1 ){
186
+ return $this->seats - $this->get_booked_seats() - $this->get_pending_seats();
187
+ }else{
188
+ return $this->seats - $this->get_booked_seats();
189
  }
 
190
  }
191
 
192
  /**
193
+ * Returns number of booked seats for this event. If approval of bookings is on, will return number of booked confirmed seats.
194
  * @return int
195
  */
196
  function get_booked_seats(){
197
  $booked_seats = 0;
198
  foreach ( $this->bookings as $booking ){
199
+ if( $booking->status != 3 && (get_option('dbem_bookings_approval') == 0 || $booking->status == 1) ){
200
+ $booked_seats += $booking->seats;
201
+ }
202
  }
203
  return $booked_seats;
204
  }
205
 
206
+ /**
207
+ * Gets number of pending seats awaiting approval. Will return 0 if booking approval is not enabled.
208
+ * @return int
209
+ */
210
+ function get_pending_seats(){
211
+ if( get_option('dbem_bookings_approval') == 0 ){
212
+ return 0;
213
+ }
214
+ $pending = 0;
215
+ foreach ( $this->bookings as $booking ){
216
+ if($booking->status == 0){
217
+ $pending += $booking->seats;
218
+ }
219
+ }
220
+ return $pending;
221
+ }
222
+
223
+ /**
224
+ * Gets number of bookings (not seats). If booking approval is enabled, only the number of approved bookings will be shown.
225
+ * @return array EM_Booking
226
+ */
227
+ function get_bookings(){
228
+ $confirmed = array();
229
+ foreach ( $this->bookings as $booking ){
230
+ if( $booking->status == 1 || (get_option('dbem_bookings_approval') == 0 && $booking->status != 3) ){
231
+ $confirmed[] = $booking;
232
+ }
233
+ }
234
+ return $confirmed;
235
+ }
236
+
237
+ /**
238
+ * Get pending bookings. If booking approval is disabled, will return no bookings.
239
+ * @return array EM_Booking
240
+ */
241
+ function get_pending_bookings(){
242
+ if( get_option('dbem_bookings_approval') == 0 ){
243
+ return array();
244
+ }
245
+ $pending = array();
246
+ foreach ( $this->bookings as $booking ){
247
+ if($booking->status == 0){
248
+ $pending[] = $booking;
249
+ }
250
+ }
251
+ return $pending;
252
+ }
253
+
254
+ /**
255
+ * Get rejected bookings. If booking approval is disabled, will return no bookings.
256
+ * @return array EM_Booking
257
+ */
258
+ function get_rejected_bookings(){
259
+ if( get_option('dbem_bookings_approval') == 0 ){
260
+ return array();
261
+ }
262
+ $pending = array();
263
+ foreach ( $this->bookings as $booking ){
264
+ if($booking->status == 2){
265
+ $pending[] = $booking;
266
+ }
267
+ }
268
+ return $pending;
269
+ }
270
+
271
+ /**
272
+ * Get cancelled bookings.
273
+ * @return array EM_Booking
274
+ */
275
+ function get_cancelled_bookings(){
276
+ $pending = array();
277
+ foreach ( $this->bookings as $booking ){
278
+ if($booking->status == 3){
279
+ $pending[] = $booking;
280
+ }
281
+ }
282
+ return $pending;
283
+ }
284
+
285
  /**
286
  * Checks if a person with similar details has booked for this before
287
  * @param $person_id
302
  return false;
303
  }
304
 
305
+
306
  /**
307
+ * Get all pending bookings for this event
 
308
  */
309
+ function get_pending(){
310
+ $pending = array();
311
+ foreach($this->bookings as $booking){
312
+ if($booking->status == 0){
313
+ $pending[] = $booking;
314
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
315
  }
316
+ return $pending;
317
+ }
318
+
319
+ /**
320
+ * Gets the pending number of bookings as a raw associative array.
321
+ * @return array
322
+ */
323
+ function get( $args = array() ){
324
+ global $wpdb,$current_user;
325
+ $bookings_table = $wpdb->prefix . EM_BOOKINGS_TABLE;
326
+ $events_table = $wpdb->prefix . EM_EVENTS_TABLE;
327
+ $people_table = $wpdb->prefix . EM_PEOPLE_TABLE;
328
+ $locations_table = $wpdb->prefix . EM_LOCATIONS_TABLE;
329
 
330
+ //Quick version, we can accept an array of IDs, which is easy to retrieve
331
+ if( self::array_is_numeric($args) ){ //Array of numbers, assume they are event IDs to retreive
332
+ //We can just get all the events here and return them
333
+ $sql = "
334
+ SELECT * FROM $bookings_table b
335
+ LEFT JOIN $events_table e ON e.event_id=b.event_id
336
+ LEFT JOIN $people_table p ON p.person_id=b.person_id
337
+ WHERE booking_id".implode(" OR booking_id=", $args);
338
+ $results = $wpdb->get_results(apply_filters('em_bookings_get_sql',$sql),ARRAY_A);
339
+ $bookings = array();
340
+ foreach($results as $result){
341
+ $bookings[$result['event_id']] = new EM_Event($result);
342
  }
343
+ return $bookings; //We return all the events matched as an EM_Event array.
344
  }
345
+
346
+ //We assume it's either an empty array or array of search arguments to merge with defaults
347
+ $args = self::get_default_search($args);
348
+ $limit = ( $args['limit'] && is_numeric($args['limit'])) ? "LIMIT {$args['limit']}" : '';
349
+ $offset = ( $limit != "" && is_numeric($args['offset']) ) ? "OFFSET {$args['offset']}" : '';
350
+
351
+ //Get the default conditions
352
+ $conditions = self::build_sql_conditions($args);
353
+ //Put it all together
354
+ $where = ( count($conditions) > 0 ) ? " WHERE " . implode ( " AND ", $conditions ):'';
355
+
356
+ //Get ordering instructions
357
+ $EM_Booking = new EM_Booking();
358
+ $accepted_fields = $EM_Booking->get_fields(true);
359
+ $orderby = self::build_sql_orderby($args, $accepted_fields);
360
+ //Now, build orderby sql
361
+ $orderby_sql = ( count($orderby) > 0 ) ? 'ORDER BY '. implode(', ', $orderby) : '';
362
+
363
+ //Create the SQL statement and execute
364
+ $sql = "
365
+ SELECT * FROM $bookings_table
366
+ LEFT JOIN $events_table ON {$events_table}.event_id={$bookings_table}.event_id
367
+ LEFT JOIN $people_table ON {$people_table}.person_id={$bookings_table}.person_id
368
+ LEFT JOIN $locations_table ON {$locations_table}.location_id={$events_table}.location_id
369
+ $where
370
+ $orderby_sql
371
+ $limit $offset
372
+ ";
373
+
374
+ $results = $wpdb->get_results( apply_filters('em_events_get_sql',$sql, $args), ARRAY_A);
375
 
376
+ //If we want results directly in an array, why not have a shortcut here?
377
+ if( $args['array'] == true ){
378
+ return $results;
 
 
 
 
 
379
  }
380
+
381
+ //Make returned results EM_Booking objects
382
+ $results = (is_array($results)) ? $results:array();
383
+ $bookings = array();
384
+ foreach ( $results as $booking ){
385
+ $bookings[] = new EM_Booking($booking);
386
+ }
387
+
388
+ return apply_filters('em_bookings_get', $bookings);
389
+ }
390
+
391
 
392
+ //List of patients in the patient database, that a user can choose and go on to edit any previous treatment data, or add a new admission.
393
+ function export_csv() {
394
+ global $EM_Event;
395
+ if($EM_Event->id != $this->event_id ){
396
+ $event = new EM_Event($this->event_id);
397
+ $event_name = $event->name;
398
+ }else{
399
+ $event_name = $EM_Event->name;
400
+ }
401
+ // The name of the file on the user's pc
402
+ $file_name = sanitize_title($event_name). "-bookings.csv";
403
+
404
+ header("Content-Type: application/octet-stream");
405
+ header("Content-Disposition: Attachment; filename=$file_name");
406
+
407
+ //Headers
408
+ $labels = array(
409
+ 'ID',
410
+ 'Name',
411
+ 'Email',
412
+ 'Phone',
413
+ 'Date',
414
+ 'Status',
415
+ 'Spaces',
416
+ 'Comment'
417
+ );
418
+ $file = sprintf(__('Booking details for "%s" as of %s','dbem'),$event_name, date_i18n('D d M Y h:i', current_time('timestamp'))) . "\n";
419
+ $file = '"'. implode('","', $labels). '"' . "\n";
420
+
421
+ //Rows
422
+ foreach( $this->bookings as $EM_Booking ) {
423
+ $row = array(
424
+ $EM_Booking->id,
425
+ $EM_Booking->person->name,
426
+ $EM_Booking->person->email,
427
+ $EM_Booking->person->phone,
428
+ date('Y-m-d h:i', $EM_Booking->timestamp),
429
+ $EM_Booking->seats,
430
+ $EM_Booking->get_status(),
431
+ $EM_Booking->comment
432
+ );
433
+ //Display all values
434
+ foreach($row as $value){
435
+ $value = str_replace('"', '""', $value);
436
+ $value = str_replace("=", "", $value);
437
+ $file .= '"' . preg_replace("/\n\r|\r\n|\n|\r/", ". ", $value) . '",';
438
  }
439
+ $file .= "\n";
440
  }
441
 
442
+ // $file holds the data
443
+ echo $file;
444
+ $file = "";
445
  }
446
 
447
+ /* Overrides EM_Object method to apply a filter to result
448
+ * @see wp-content/plugins/events-manager/classes/EM_Object#build_sql_conditions()
449
+ */
450
+ function build_sql_conditions( $args = array() ){
451
+ $conditions = apply_filters( 'em_bookings_build_sql_conditions', parent::build_sql_conditions($args), $args );
452
+ if( is_numeric($args['status']) ){
453
+ $conditions['status'] = 'booking_status='.$args['status'];
454
+ }
455
+ return apply_filters('em_bookings_build_sql_conditions', $conditions, $args);
456
+ }
457
+
458
+ /* Overrides EM_Object method to apply a filter to result
459
+ * @see wp-content/plugins/events-manager/classes/EM_Object#build_sql_orderby()
460
+ */
461
+ function build_sql_orderby( $args, $accepted_fields, $default_order = 'ASC' ){
462
+ return apply_filters( 'em_bookings_build_sql_orderby', parent::build_sql_orderby($args, $accepted_fields, get_option('dbem_events_default_order')), $args, $accepted_fields, $default_order );
463
+ }
464
+
465
+ /*
466
+ * Adds custom Events search defaults
467
+ * @param array $array
468
+ * @return array
469
+ * @uses EM_Object#get_default_search()
470
+ */
471
+ function get_default_search( $array = array() ){
472
+ $defaults = array(
473
+ 'status' => false,
474
+ 'person' => true //to add later, search by person's bookings...
475
+ );
476
+ return apply_filters('em_bookings_get_default_search', parent::get_default_search($defaults,$array), $array, $defaults);
477
+ }
478
  }
479
  ?>
classes/em-calendar.php CHANGED
@@ -117,25 +117,32 @@ class EM_Calendar extends EM_Object {
117
 
118
  // Build Previous and Next Links
119
  $base_link = "?".$_SERVER['QUERY_STRING']."&amp;";
120
-
 
 
 
 
 
121
  if($month == 1){
122
  $back_month = 12;
123
  $back_year = $year-1;
124
  } else {
125
  $back_month = $month -1;
126
  $back_year = $year;
127
- }
128
- $full ? $link_extra_class = "full-link" : $link_extra_class = '';
129
- $previous_link = "<a class='em-calnav $link_extra_class' href='?ajaxCalendar=1&amp;month={$back_month}&amp;year={$back_year}&amp;long_events={$long_events}&amp;full={$full}'>&lt;&lt;</a>";
130
-
131
  if($month == 12){
132
- $next_month = 1;
133
- $next_year = $year+1;
134
  } else {
135
- $next_month = $month + 1;
136
- $next_year = $year;
137
  }
138
- $next_link = "<a class='em-calnav $link_extra_class' href='?ajaxCalendar=1&amp;month={$next_month}&amp;year={$next_year}&amp;long_events={$long_events}&amp;full={$full}'>&gt;&gt;</a>";
 
 
139
  $class = ($full) ? 'dbem-calendar-full' : 'dbem-calendar';
140
  $calendar="<div class='$class'><div style='display:none' class='month_n'>$month</div><div class='year_n' style='display:none' >$year</div>";
141
 
@@ -155,7 +162,7 @@ class EM_Calendar extends EM_Object {
155
  // Build the heading portion of the calendar table
156
  $calendar .= "<table class='dbem-calendar-table $fullclass'>\n".
157
  "<thead>\n<tr>\n".
158
- "<td>$previous_link</td><td class='month_name' colspan='5'>". ucfirst(date_i18n('M', $month_start))." $year</td><td>$next_link</td>\n".
159
  "</tr>\n</thead>\n".
160
  "<tr class='days-names'>\n".
161
  $days_initials.
@@ -165,7 +172,8 @@ class EM_Calendar extends EM_Object {
165
  // into a week and create a new table row for each
166
  // week with the days of that week in the table data
167
 
168
- $i = 0;
 
169
  foreach ( $weeks as $week ) {
170
  $calendar .= "<tr>\n";
171
  foreach ( $week as $d ) {
@@ -174,8 +182,9 @@ class EM_Calendar extends EM_Object {
174
  }
175
  if (($i >= $offset_count) && ($i < ($num_weeks * 7) - $outset)) { // if it is THIS month
176
  $fullday = $d;
177
- $d = date ( 'j', $d );
178
- if ( date('Y-m-d', current_time('timestamp')) == "$year-$month-$d" ) {
 
179
  $calendar .= "<td class='eventless-today'>$d</td>\n";
180
  } else {
181
  $calendar .= "<td class='eventless'>$d</td>\n";
@@ -261,7 +270,7 @@ class EM_Calendar extends EM_Object {
261
  foreach($events as $event) {
262
  $events_titles[] = $event->output($event_title_format);
263
  }
264
- $link_title = EM_Events::output($events, array('format'=>$event_title_format));
265
 
266
  $events_page_id = get_option('dbem_events_page');
267
  $event_page_link = get_permalink($events_page_id);
@@ -280,7 +289,7 @@ class EM_Calendar extends EM_Object {
280
  }
281
  $cells[$day_key]['cell'] .= "</ul>";
282
  }
283
- }
284
 
285
  if($events){
286
  foreach($cells as $cell) {
@@ -319,6 +328,25 @@ class EM_Calendar extends EM_Object {
319
  return substr(__($string), 0, $length);
320
  }
321
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
322
  function get_default_search($array=array()){
323
  //These defaults aren't for db queries, but flags for what to display in calendar output
324
  $defaults = array(
117
 
118
  // Build Previous and Next Links
119
  $base_link = "?".$_SERVER['QUERY_STRING']."&amp;";
120
+
121
+ $full ? $link_extra_class = "full-link" : $link_extra_class = '';
122
+ //Get an array of arguments that don't include default valued args
123
+ $link_args = self::get_link_args($args);
124
+
125
+ //Get the previous link
126
  if($month == 1){
127
  $back_month = 12;
128
  $back_year = $year-1;
129
  } else {
130
  $back_month = $month -1;
131
  $back_year = $year;
132
+ }
133
+ $previous_link = "<a class='em-calnav $link_extra_class' href='?ajaxCalendar=1&amp;month={$back_month}&amp;year={$back_year}&amp;{$link_args}'>&lt;&lt;</a>";
134
+
135
+ //Now the next
136
  if($month == 12){
137
+ $next_month = 1;
138
+ $next_year = $year+1;
139
  } else {
140
+ $next_month = $month + 1;
141
+ $next_year = $year;
142
  }
143
+ $next_link = "<a class='em-calnav $link_extra_class' href='?ajaxCalendar=1&amp;month={$next_month}&amp;year={$next_year}&amp;{$link_args}'>&gt;&gt;</a>";
144
+
145
+
146
  $class = ($full) ? 'dbem-calendar-full' : 'dbem-calendar';
147
  $calendar="<div class='$class'><div style='display:none' class='month_n'>$month</div><div class='year_n' style='display:none' >$year</div>";
148
 
162
  // Build the heading portion of the calendar table
163
  $calendar .= "<table class='dbem-calendar-table $fullclass'>\n".
164
  "<thead>\n<tr>\n".
165
+ "<td>$previous_link</td><td class='month_name' colspan='5'>". apply_filters('dbem_calendar_output_month', ucfirst(date_i18n('M', $month_start)), $month_start, $args)." $year</td><td>$next_link</td>\n".
166
  "</tr>\n</thead>\n".
167
  "<tr class='days-names'>\n".
168
  $days_initials.
172
  // into a week and create a new table row for each
173
  // week with the days of that week in the table data
174
 
175
+ $i = 0;
176
+ $current_date = date('Y-m-d', current_time('timestamp'));
177
  foreach ( $weeks as $week ) {
178
  $calendar .= "<tr>\n";
179
  foreach ( $week as $d ) {
182
  }
183
  if (($i >= $offset_count) && ($i < ($num_weeks * 7) - $outset)) { // if it is THIS month
184
  $fullday = $d;
185
+ $d = date ( 'j', $d );
186
+ $month_string = ($month < 10) ? '0'.$month : $month;
187
+ if ( $current_date == "$year-". $month_string ."-$d" ) {
188
  $calendar .= "<td class='eventless-today'>$d</td>\n";
189
  } else {
190
  $calendar .= "<td class='eventless'>$d</td>\n";
270
  foreach($events as $event) {
271
  $events_titles[] = $event->output($event_title_format);
272
  }
273
+ $link_title = implode( $event_title_separator_format, $events_titles);
274
 
275
  $events_page_id = get_option('dbem_events_page');
276
  $event_page_link = get_permalink($events_page_id);
289
  }
290
  $cells[$day_key]['cell'] .= "</ul>";
291
  }
292
+ }
293
 
294
  if($events){
295
  foreach($cells as $cell) {
328
  return substr(__($string), 0, $length);
329
  }
330
 
331
+ /**
332
+ * Helper function to create a link querystring from array which contains arguments with only values that aren't defuaults.
333
+ */
334
+ function get_link_args($args = array(), $html_entities=true){
335
+ unset($args['month']); unset($args['year']);
336
+ $default_args = self::get_default_search(array());
337
+ foreach($default_args as $arg_key => $arg_value){
338
+ if( !isset($args[$arg_key]) || $args[$arg_key] == $arg_value ){
339
+ unset($args[$arg_key]);
340
+ }
341
+ }
342
+ $qs_array = array();
343
+ foreach($args as $key => $value){
344
+ $qs_array[] = "$key=".urlencode($value);
345
+ }
346
+ return ($html_entities) ? implode('&amp;', $qs_array) : implode('&', $qs_array);
347
+ }
348
+
349
+
350
  function get_default_search($array=array()){
351
  //These defaults aren't for db queries, but flags for what to display in calendar output
352
  $defaults = array(
classes/em-categories.php ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class EM_Categories extends EM_Object {
3
+
4
+ function get( $args = array() ) {
5
+ global $wpdb;
6
+ $categories_table = $wpdb->prefix.EM_CATEGORIES_TABLE;
7
+ $events_table = $wpdb->prefix.EM_EVENTS_TABLE;
8
+
9
+ //Quick version, we can accept an array of IDs, which is easy to retrieve
10
+ if( self::array_is_numeric($args) ){ //Array of numbers, assume they are event IDs to retreive
11
+ //We can just get all the events here and return them
12
+ $sql = "SELECT * FROM $categories_table WHERE category_id=".implode(" OR category_id=", $args);
13
+ $results = $wpdb->get_results(apply_filters('em_categories_get_sql',$sql),ARRAY_A);
14
+ $categories = array();
15
+ foreach($results as $result){
16
+ $categories[$result['category_id']] = new EM_Event($result);
17
+ }
18
+ return $categories; //We return all the categories matched as an EM_Event array.
19
+ }
20
+
21
+ //We assume it's either an empty array or array of search arguments to merge with defaults
22
+ $args = self::get_default_search($args);
23
+ $limit = ( $args['limit'] && is_numeric($args['limit'])) ? "LIMIT {$args['limit']}" : '';
24
+ $offset = ( $limit != "" && is_numeric($args['offset']) ) ? "OFFSET {$args['offset']}" : '';
25
+
26
+ //Get the default conditions
27
+ $conditions = self::build_sql_conditions($args);
28
+ //Put it all together
29
+ $where = ( count($conditions) > 0 ) ? " WHERE " . implode ( " AND ", $conditions ):'';
30
+
31
+ //Get ordering instructions
32
+ $EM_Category = new EM_Category();
33
+ $accepted_fields = $EM_Category->get_fields(true);
34
+ $orderby = self::build_sql_orderby($args, $accepted_fields, get_option('dbem_categories_default_order'));
35
+ //Now, build orderby sql
36
+ $orderby_sql = ( count($orderby) > 0 ) ? 'ORDER BY '. implode(', ', $orderby) : '';
37
+
38
+ //Create the SQL statement and execute
39
+ $sql = "
40
+ SELECT * FROM $categories_table
41
+ LEFT JOIN $events_table ON {$events_table}.event_category_id={$categories_table}.category_id
42
+ $where
43
+ GROUP BY category_id
44
+ $orderby_sql
45
+ $limit $offset
46
+ ";
47
+ $results = $wpdb->get_results( apply_filters('em_categories_get_sql',$sql, $args), ARRAY_A);
48
+ //If we want results directly in an array, why not have a shortcut here?
49
+ if( $args['array'] == true ){
50
+ return $results;
51
+ }
52
+
53
+ //Make returned results EM_Event objects
54
+ $results = (is_array($results)) ? $results:array();
55
+ $categories = array();
56
+ foreach ( $results as $category_array ){
57
+ $categories[$category_array['category_id']] = new EM_Category($category_array);
58
+ }
59
+
60
+ return apply_filters('em_categories_get', $categories);
61
+ }
62
+
63
+ /**
64
+ * Will delete given an array of category_ids or EM_Event objects
65
+ * @param unknown_type $id_array
66
+ */
67
+ function delete( $array ){
68
+ global $wpdb;
69
+ //Detect array type and generate SQL for event IDs
70
+ $category_ids = array();
71
+ if( @get_class(current($array)) == 'EM_Category' ){
72
+ foreach($array as $EM_Category){
73
+ $category_ids[] = $EM_Category->id;
74
+ }
75
+ }else{
76
+ $category_ids = $array;
77
+ }
78
+ if(self::array_is_numeric($category_ids)){
79
+ apply_filters('em_categories_delete', $category_ids);
80
+ $condition = implode(" OR category_id=", $category_ids);
81
+ //Delete all the bookings
82
+ $result_bookings = $wpdb->query("DELETE FROM ". $wpdb->prefix . EM_BOOKINGS_TABLE ." WHERE category_id=$condition;");
83
+ //Now delete the categories
84
+ $result = $wpdb->query ( "DELETE FROM ". $wpdb->prefix . EM_CATEGORIES_TABLE ." WHERE category_id=$condition;" );
85
+ do_action('em_categories_delete', $category_ids);
86
+ }
87
+ //TODO add error detection on categories delete fails
88
+ return apply_filters('em_categories_delete', true, $category_ids);
89
+ }
90
+
91
+ /* Overrides EM_Object method to apply a filter to result
92
+ * @see wp-content/plugins/categories-manager/classes/EM_Object#build_sql_conditions()
93
+ */
94
+ function build_sql_conditions( $args = array() ){
95
+ global $wpdb;
96
+ $events_table = $wpdb->prefix . EM_EVENTS_TABLE;
97
+ $locations_table = $wpdb->prefix . EM_LOCATIONS_TABLE;
98
+
99
+ //FIXME EM_Categories doesn't build sql conditions in EM_Object
100
+ $conditions = array();
101
+ //eventful locations
102
+ if( true == $args['eventful'] ){
103
+ $conditions['eventful'] = "{$events_table}.event_id IS NOT NULL";
104
+ }elseif( true == $args['eventless'] ){
105
+ $conditions['eventless'] = "{$events_table}.event_id IS NULL";
106
+ }
107
+ //owner lookup
108
+ if( is_numeric($args['owner']) ){
109
+ $conditions['owner'] = "category_owner=".get_current_user_id();
110
+ }elseif( preg_match('/^([0-9],?)+$/', $args['owner']) ){
111
+ $conditions['owner'] = "category_owner IN (".explode(',', $args['owner']).")";
112
+ }
113
+ return apply_filters( 'em_categories_build_sql_conditions', $conditions, $args );
114
+ }
115
+
116
+ /* Overrides EM_Object method to apply a filter to result
117
+ * @see wp-content/plugins/categories-manager/classes/EM_Object#build_sql_orderby()
118
+ */
119
+ function build_sql_orderby( $args, $accepted_fields, $default_order = 'ASC' ){
120
+ return apply_filters( 'em_categories_build_sql_orderby', parent::build_sql_orderby($args, $accepted_fields, get_option('dbem_categories_default_order')), $args, $accepted_fields, $default_order );
121
+ }
122
+
123
+ /*
124
+ * Adds custom categories search defaults
125
+ * @param array $array
126
+ * @return array
127
+ * @uses EM_Object#get_default_search()
128
+ */
129
+ function get_default_search( $array = array() ){
130
+ $defaults = array(
131
+ 'scope'=>false,
132
+ 'eventful' => false, //cats that have an event (scope will also play a part here
133
+ 'eventless' => false, //cats WITHOUT events, eventful takes precedence
134
+ );
135
+ //by default, we only get categories the owner can manage
136
+ switch( get_option('dbem_permissions_categories') ){
137
+ case 0:
138
+ $defaults['owner'] = get_current_user_id();
139
+ break;
140
+ case 1:
141
+ $wp_user_search = new WP_User_Search(null, null, 'administrator');
142
+ $users = $wp_user_search->get_results();
143
+ $users[] = get_current_user_id();
144
+ $users[] = 0;
145
+ $defaults['owner'] = implode(',', $users);
146
+ break;
147
+ case 2:
148
+ $defaults['owner'] = false;
149
+ break;
150
+ }
151
+ return apply_filters('em_categories_get_default_search', parent::get_default_search($defaults,$array), $array, $defaults);
152
+ }
153
+
154
+ }
classes/em-category.php CHANGED
@@ -1,17 +1,150 @@
1
  <?php
2
  //TODO expand em_category to be like other classes
3
- class EM_Category extends EM_Object {
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
- function get( $category_id = false ){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  global $wpdb;
7
- $categories_table = $wpdb->prefix.EM_CATEGORIES_TABLE;
8
- if( $category_id === false ){
9
- //No id supplied, so we return everything
10
- return $wpdb->get_results("SELECT * FROM $categories_table", ARRAY_A);
 
 
 
11
  }else{
12
- $sql = "SELECT * FROM $categories_table WHERE category_id ='$category_id'";
13
- $category = $wpdb->get_row($sql, ARRAY_A);
14
- return $category;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  }
16
  }
17
  }
1
  <?php
2
  //TODO expand em_category to be like other classes
3
+ class EM_Category extends EM_Object {
4
+ //DB Fields
5
+ var $id = '';
6
+ var $owner = '';
7
+ var $name = '';
8
+ //Other Vars
9
+ var $fields = array(
10
+ 'category_id' => array('name'=>'id','type'=>'%d'),
11
+ 'category_owner' => array('name'=>'owner','type'=>'%d'),
12
+ 'category_name' => array('name'=>'name','type'=>'%s')
13
+ );
14
+ var $required_fields;
15
+ var $feedback_message = "";
16
+ var $errors = array();
17
 
18
+ /**
19
+ * Gets data from POST (default), supplied array, or from the database if an ID is supplied
20
+ * @param $location_data
21
+ * @return null
22
+ */
23
+ function EM_Category( $category_data = false ) {
24
+ //Initialize
25
+ $this->required_fields = array("category_name" => __('The category name', 'dbem'));
26
+ if( $category_data != false ){
27
+ //Load location data
28
+ if( is_array($category_data) && isset($category_data['category_name']) ){
29
+ $category = $category_data;
30
+ }elseif( is_numeric($category_data) ){
31
+ //Retreiving from the database
32
+ global $wpdb;
33
+ $sql = "SELECT * FROM ". $wpdb->prefix.EM_CATEGORIES_TABLE ." WHERE category_id ='{$category_data}'";
34
+ $category = $wpdb->get_row($sql, ARRAY_A);
35
+ }
36
+ //Save into the object
37
+ $this->to_object($category);
38
+ }
39
+ }
40
+
41
+ function get_post(){
42
+ //We are getting the values via POST or GET
43
+ do_action('em_location_get_post_pre', $this);
44
+ $category = array();
45
+ $category['category_id'] = ( !empty($_POST['category_id']) ) ? $_POST['category_id']:'';
46
+ $category['category_name'] = ( !empty($_POST['category_name']) ) ? stripslashes($_POST['category_name']):'';
47
+ $category['category_owner'] = ( !empty($_POST['category_owner']) && is_numeric($_POST['category_owner']) ) ? $_POST['category_owner']:get_current_user_id();
48
+ $this->to_object( apply_filters('em_category_get_post', $category, $this) );
49
+ }
50
+
51
+ function save(){
52
  global $wpdb;
53
+ do_action('em_category_save_pre', $this);
54
+ $table = $wpdb->prefix.EM_CATEGORIES_TABLE;
55
+ $data = $this->to_array();
56
+ unset($data['category_id']);
57
+ if($this->id != ''){
58
+ $where = array( 'category_id' => $this->id );
59
+ $wpdb->update($table, $data, $where, $this->get_types($data));
60
  }else{
61
+ $wpdb->insert($table, $data, $this->get_types($data));
62
+ $this->id = $wpdb->insert_id;
63
+ }
64
+ return apply_filters('em_category_save', ( $this->id > 0 && $image_upload ), $this, $image_upload);
65
+ }
66
+
67
+ function delete(){
68
+ global $wpdb;
69
+ do_action('em_category_delete_pre', $this);
70
+ $table_name = $wpdb->prefix.EM_CATEGORIES_TABLE;
71
+ $sql = "DELETE FROM $table_name WHERE category_id = '{$this->id}';";
72
+ $result = $wpdb->query($sql);
73
+ return apply_filters('em_category_delete', $result, $this);
74
+ }
75
+
76
+ /**
77
+ * Validates the category. Should be run during any form submission or saving operation.
78
+ * @return boolean
79
+ */
80
+ function validate(){
81
+ $missing_fields = Array ();
82
+ foreach ( $this->required_fields as $key => $field ) {
83
+ $true_field = $this->fields[$key]['name'];
84
+ if ( $this->$true_field == "") {
85
+ $missing_fields[] = $field;
86
+ }
87
+ }
88
+ if ( count($missing_fields) > 0){
89
+ // TODO Create friendly equivelant names for missing fields notice in validation
90
+ $this->errors[] = __ ( 'Missing fields: ' ) . implode ( ", ", $missing_fields ) . ". ";
91
+ }
92
+ return apply_filters('em_category_validate', ( count($this->errors) == 0 ), $this);
93
+ }
94
+
95
+ function has_events(){
96
+ global $wpdb;
97
+ $events_table = $wpdb->prefix.EM_EVENTS_TABLE;
98
+ $sql = "SELECT count(event_id) as events_no FROM $events_table WHERE category_id = {$this->id}";
99
+ $affected_events = $wpdb->get_row($sql);
100
+ return apply_filters('em_category_has_events', (count($affected_events) > 0), $this);
101
+ }
102
+
103
+ function output_single($target = 'html'){
104
+ $format = get_option ( 'dbem_single_category_format' );
105
+ return apply_filters('em_category_output_single', $this->output($format, $target), $this, $target);
106
+ }
107
+
108
+ function output($format, $target="html") {
109
+ $category_string = $format;
110
+ preg_match_all("/#_[A-Za-z]+/", $format, $placeholders);
111
+ foreach($placeholders[0] as $result) {
112
+ $match = true;
113
+ $replace = '';
114
+ switch( $result ){
115
+ case '#_CATEGORYNAME':
116
+ $replace = $this->name;
117
+ break;
118
+ case '#_CATEGORYID':
119
+ $replace = $this->id;
120
+ break;
121
+ default:
122
+ $match = false;
123
+ break;
124
+ }
125
+ if($match){ //if true, we've got a placeholder that needs replacing
126
+ //TODO FILTER - placeholder filter
127
+ $replace = apply_filters('em_category_output_placeholder', $replace, $this, $result, $target); //USE WITH CAUTION! THIS MIGHT GET RENAMED
128
+ $category_string = str_replace($result, $replace , $category_string );
129
+ }
130
+ }
131
+ $name_filter = ($target == "html") ? 'dbem_general':'dbem_general_rss'; //TODO remove dbem_ filters
132
+ $category_string = str_replace('#_CATEGORY', apply_filters($name_filter, $this->name) , $category_string ); //Depreciated
133
+ return apply_filters('em_category_output', $category_string, $this, $format, $target);
134
+ }
135
+
136
+ function can_manage(){
137
+ return ( get_option('dbem_permissions_categories') == 2 || $this->owner == get_current_user_id() || empty($this->id) || em_verify_admin() );
138
+ }
139
+
140
+ function can_use(){
141
+ switch( get_option('dbem_permissions_locations') ){
142
+ case 0:
143
+ return $this->owner == get_current_user_id();
144
+ case 1:
145
+ return em_verify_admin($this->owner);
146
+ case 2:
147
+ return true;
148
  }
149
  }
150
  }
classes/em-event.php CHANGED
@@ -85,6 +85,11 @@ class EM_Event extends EM_Object{
85
  * @var WP_User
86
  */
87
  var $contact;
 
 
 
 
 
88
  /**
89
  * If there are any errors, they will be added here.
90
  * @var array
@@ -116,18 +121,22 @@ class EM_Event extends EM_Object{
116
  //Accepts a raw array that'll just be imported directly into the object with no DB lookups (same for event and recurrence)
117
  $event = $event_data;
118
  $this->location = new EM_Location( $event );
 
119
  }elseif( is_numeric($event_data) && $event_data > 0 ){
120
  //Retreiving from the database
121
  $events_table = $wpdb->prefix . EM_EVENTS_TABLE;
122
  $locations_table = $wpdb->prefix . EM_LOCATIONS_TABLE;
 
123
  $sql = "
124
  SELECT * FROM $events_table
125
  LEFT JOIN $locations_table ON {$locations_table}.location_id={$events_table}.location_id
 
126
  WHERE event_id = $event_data
127
  "; //We get event and location data here to avoid extra queries
128
  $event = $wpdb->get_row ( $sql, ARRAY_A );
129
  //Sort Location
130
  $this->location = new EM_Location ( $event );
 
131
  }
132
  //Sort out attributes
133
  if( !empty($event['event_attributes']) ){
@@ -162,6 +171,7 @@ class EM_Event extends EM_Object{
162
  }
163
  }else{
164
  $this->location = new EM_Location(); //blank location
 
165
  }
166
  }
167
 
@@ -253,6 +263,9 @@ class EM_Event extends EM_Object{
253
  function save(){
254
  //FIXME Event doesn't save title when inserting first time
255
  global $wpdb, $current_user;
 
 
 
256
  do_action('em_event_save_pre', $this);
257
  get_currentuserinfo();
258
  $events_table = $wpdb->prefix.EM_EVENTS_TABLE;
@@ -262,8 +275,13 @@ class EM_Event extends EM_Object{
262
  return apply_filters('em_event_save', false, $this);
263
  }
264
  $this->location_id = $this->location->id;
265
- //TODO make contactperson_id NULL if not used
266
- $this->contactperson_id = ( $this->contactperson_id > 0 ) ? $this->contactperson_id:0;
 
 
 
 
 
267
  //Now save the event
268
  if ( !$this->id ) {
269
  // Insert New Event
@@ -271,6 +289,7 @@ class EM_Event extends EM_Object{
271
  $event = $this->to_array(false, true);
272
  $event['event_attributes'] = serialize($this->attributes);
273
  $event['recurrence_id'] = ( is_numeric($this->recurrence_id) ) ? $this->recurrence_id : 0;
 
274
  $result = $wpdb->insert ( $events_table, $event, $this->get_types($event) );
275
  if($result !== false){
276
  $this->id = $wpdb->insert_id;
@@ -301,6 +320,7 @@ class EM_Event extends EM_Object{
301
  $this->recurrence_id = 0; // If it's saved here, it becomes individual
302
  $event = $this->to_array();
303
  $event['event_attributes'] = serialize($event['event_attributes']);
 
304
  $result = $wpdb->update ( $events_table, $event, array('event_id' => $this->id), $this->get_types($event) );
305
  if($result !== false){ //Can't just do $result since if you don't make an actual record details change, it'll return 0 for no changes made
306
  //Deal with recurrences
@@ -333,15 +353,17 @@ class EM_Event extends EM_Object{
333
  */
334
  function delete(){
335
  global $wpdb;
336
- //TODO when only php5, no need to pass by reference
337
  do_action('em_event_delete_pre', $this);
338
- if( $this->is_recurring() ){
339
- //Delete the recurrences then this recurrence event
340
- $this->delete_events();
341
- }
342
- $result = $wpdb->query ( $wpdb->prepare("DELETE FROM ". $wpdb->prefix . EM_EVENTS_TABLE ." WHERE event_id=%d", $this->id) );
343
- if($result !== false){
344
- $result = $this->get_bookings()->delete();
 
 
 
345
  }
346
  return apply_filters('em_event_delete', $result, $this);
347
  }
@@ -353,17 +375,18 @@ class EM_Event extends EM_Object{
353
  function duplicate(){
354
  global $wpdb, $EZSQL_ERROR;
355
  //First, duplicate.
356
- $event_table_name = $wpdb->prefix . EM_EVENTS_TABLE;
357
- $eventArray = $this->to_array(true);
358
- unset($eventArray['event_id']);
359
- $EM_Event = new EM_Event( $eventArray );
360
- if( $EM_Event->save() ){
361
- $EM_Event->feedback_message = __("You are now viewing the duplicated event", 'dbem');
362
- return apply_filters('em_event_duplicate', $EM_Event, $this);
363
- }else{
364
- //TODO add error notifications for duplication failures.
365
- return apply_filters('em_event_duplicate', false, $this);;
366
  }
 
 
367
  }
368
 
369
 
@@ -386,6 +409,13 @@ class EM_Event extends EM_Object{
386
  if ( !empty($_POST['repeated_event']) && $_POST['repeated_event'] == "1" && $this->end_date == "" ){
387
  $this->errors[] = __ ( 'Since the event is repeated, you must specify an event date.', 'dbem' );
388
  }
 
 
 
 
 
 
 
389
  if( !$this->location->validate() ){
390
  $this->errors = array_merge($this->errors, $this->location->errors);
391
  }
@@ -398,7 +428,16 @@ class EM_Event extends EM_Object{
398
  * Returns an array with category id and name (in that order) of the EM_Event instance.
399
  * @return array
400
  */
401
- function get_category() {
 
 
 
 
 
 
 
 
 
402
  global $wpdb;
403
  $sql = "SELECT category_id, category_name FROM ".$wpdb->prefix.EM_EVENTS_TABLE." LEFT JOIN ".$wpdb->prefix.EM_CATEGORIES_TABLE." ON category_id=event_category_id WHERE event_id ='".$this->id."'";
404
  $category = $wpdb->get_row($sql, ARRAY_A);
@@ -411,7 +450,10 @@ class EM_Event extends EM_Object{
411
  function delete_bookings(){
412
  global $wpdb;
413
  do_action('em_event_delete_bookings_pre', $this);
414
- $result = $wpdb->query( $wpdb->prepare("DELETE FROM ".$wpdb->prefix.EM_BOOKINGS_TABLE." WHERE event_id=%d", $this->id) );
 
 
 
415
  return apply_filters('em_event_delete_bookings', $result, $this);
416
  }
417
 
@@ -465,6 +507,9 @@ class EM_Event extends EM_Object{
465
  $replace = '';
466
  switch( $result ){
467
  //Event Details
 
 
 
468
  case '#_NAME':
469
  $replace = $this->name;
470
  break;
@@ -477,10 +522,6 @@ class EM_Event extends EM_Object{
477
  $replace = $matches[0];
478
  }
479
  break;
480
- case '#_CATEGORY':
481
- $category = EM_Category::get($this->category_id);
482
- $replace = $category['category_name'];
483
- break;
484
  //Times
485
  case '#_24HSTARTTIME':
486
  case '#_24HENDTIME':
@@ -506,7 +547,7 @@ class EM_Event extends EM_Object{
506
  }
507
  break;
508
  case '#_EDITEVENTLINK':
509
- if(is_user_logged_in()){
510
  //TODO user should have permission to edit the event
511
  $replace = "<a href='".get_bloginfo('wpurl')."/wp-admin/admin.php?page=events-manager-event&amp;event_id={$this->id}'>".__('Edit').' '.__('Event', 'dbem')."</a>";
512
  }
@@ -548,9 +589,15 @@ class EM_Event extends EM_Object{
548
  case '#_CONTACTPERSON': //Depreciated (your call, I think name is better)
549
  $replace = $this->contact->display_name;
550
  break;
 
 
 
551
  case '#_CONTACTEMAIL':
552
  case '#_CONTACTMAIL': //Depreciated
553
- $replace = em_ascii_encode($this->contact->user_email);
 
 
 
554
  break;
555
  case '#_CONTACTPHONE':
556
  $replace = ( $this->contact->phone != '') ? $this->contact->phone : __('N/A', 'dbem');
@@ -558,15 +605,21 @@ class EM_Event extends EM_Object{
558
  case '#_CONTACTAVATAR':
559
  $replace = get_avatar( $this->contact->ID, $size = '50' );
560
  break;
 
 
 
 
 
 
 
 
 
561
  default:
562
- $match = false;
563
  break;
564
  }
565
- if($match){ //if true, we've got a placeholder that needs replacing
566
- //TODO FILTER - placeholder filter
567
- $replace = apply_filters('em_event_output_placeholder', $replace, $this, $result, $target);
568
- $event_string = str_replace($result, $replace , $event_string );
569
- }
570
  }
571
  //Time placeholders
572
  foreach($placeholders[0] as $result) {
@@ -613,12 +666,14 @@ class EM_Event extends EM_Object{
613
  //Check to see if we have a second set of braces;
614
  $attString = substr( $results[1][$resultKey], 1, strlen(trim($results[1][$resultKey]))-2 );
615
  }
 
616
  }
617
  $event_string = str_replace($result, $attString ,$event_string );
618
  }
619
 
620
  //Now do dependent objects
621
- $event_string = $this->location->output($event_string, $target);
 
622
  return apply_filters('em_event_output', $event_string, $this, $target);
623
  }
624
 
@@ -631,7 +686,7 @@ class EM_Event extends EM_Object{
631
  * @return boolean
632
  */
633
  function save_events() {
634
- if( $this->is_recurring() ){
635
  do_action('em_event_save_events_pre', $this); //actions/filters only run if event is recurring
636
  global $wpdb;
637
  $event_saves = array();
@@ -657,7 +712,7 @@ class EM_Event extends EM_Object{
657
  }
658
  return apply_filters('em_event_save_events', !in_array(false, $event_saves), $this);
659
  }
660
- return false;
661
  }
662
 
663
  /**
@@ -669,14 +724,18 @@ class EM_Event extends EM_Object{
669
  global $wpdb;
670
  do_action('em_event_delete_events_pre', $this);
671
  //So we don't do something we'll regret later, we could just supply the get directly into the delete, but this is safer
672
- $EM_Events = EM_Events::get( array('recurrence_id'=>$this->id) );
673
- $event_ids = array();
674
- foreach($EM_Events as $EM_Event){
675
- if($EM_Event->recurrence_id == $this->id){
676
- $event_ids[] = $EM_Event->id; //ONLY ADD if id's match - hard coded
 
 
 
677
  }
 
678
  }
679
- EM_Events::delete( $event_ids );
680
  }
681
 
682
  /**
@@ -704,6 +763,17 @@ class EM_Event extends EM_Object{
704
  return ( !$this->is_recurring() && !$this->is_recurrence() );
705
  }
706
 
 
 
 
 
 
 
 
 
 
 
 
707
  /**
708
  * Returns the days that match the recurrance array passed (unix timestamps)
709
  * @param array $recurrence
@@ -894,9 +964,11 @@ class EM_Event extends EM_Object{
894
  * @param string $target
895
  * @return mixed
896
  */
897
- function em_event_output_placeholder($result,$event,$placeholder,$target='html'){
898
  if( ($placeholder == "#_EXCERPT" || $placeholder == "#_LOCATIONEXCERPT") && $target == 'html' ){
899
  $result = apply_filters('dbem_notes_excerpt', $result);
 
 
900
  }elseif( $placeholder == "#_NOTES" || $placeholder == "#_EXCERPT" || $placeholder == "#_LOCATIONEXCERPT" ){
901
  if($target == 'html'){
902
  $result = apply_filters('dbem_notes', $result);
@@ -915,5 +987,5 @@ function em_event_output_placeholder($result,$event,$placeholder,$target='html')
915
  }
916
  return $result;
917
  }
918
- add_filter('em_event_output_placeholder','em_event_output_placeholder',1,3);
919
  ?>
85
  * @var WP_User
86
  */
87
  var $contact;
88
+ /**
89
+ * The category object
90
+ * @var EM_Category
91
+ */
92
+ var $category;
93
  /**
94
  * If there are any errors, they will be added here.
95
  * @var array
121
  //Accepts a raw array that'll just be imported directly into the object with no DB lookups (same for event and recurrence)
122
  $event = $event_data;
123
  $this->location = new EM_Location( $event );
124
+ $this->category = new EM_Category( $event );
125
  }elseif( is_numeric($event_data) && $event_data > 0 ){
126
  //Retreiving from the database
127
  $events_table = $wpdb->prefix . EM_EVENTS_TABLE;
128
  $locations_table = $wpdb->prefix . EM_LOCATIONS_TABLE;
129
+ $categories_table = $wpdb->prefix . EM_CATEGORIES_TABLE;
130
  $sql = "
131
  SELECT * FROM $events_table
132
  LEFT JOIN $locations_table ON {$locations_table}.location_id={$events_table}.location_id
133
+ LEFT JOIN $categories_table ON {$categories_table}.category_id={$events_table}.event_category_id
134
  WHERE event_id = $event_data
135
  "; //We get event and location data here to avoid extra queries
136
  $event = $wpdb->get_row ( $sql, ARRAY_A );
137
  //Sort Location
138
  $this->location = new EM_Location ( $event );
139
+ $this->category = new EM_Category( $event );
140
  }
141
  //Sort out attributes
142
  if( !empty($event['event_attributes']) ){
171
  }
172
  }else{
173
  $this->location = new EM_Location(); //blank location
174
+ $this->category = new EM_Category(); //blank category
175
  }
176
  }
177
 
263
  function save(){
264
  //FIXME Event doesn't save title when inserting first time
265
  global $wpdb, $current_user;
266
+ if( !$this->can_manage(true) ){
267
+ return apply_filters('em_event_save', false, $this);
268
+ }
269
  do_action('em_event_save_pre', $this);
270
  get_currentuserinfo();
271
  $events_table = $wpdb->prefix.EM_EVENTS_TABLE;
275
  return apply_filters('em_event_save', false, $this);
276
  }
277
  $this->location_id = $this->location->id;
278
+ //Contact person can be anyone the admin wants, but the creator if not.
279
+ if( em_verify_admin() ){
280
+ $this->contactperson_id = ( $this->contactperson_id > 0 ) ? $this->contactperson_id:0;
281
+ }else{
282
+ //force
283
+ $this->contactperson_id = get_current_user_id();
284
+ }
285
  //Now save the event
286
  if ( !$this->id ) {
287
  // Insert New Event
289
  $event = $this->to_array(false, true);
290
  $event['event_attributes'] = serialize($this->attributes);
291
  $event['recurrence_id'] = ( is_numeric($this->recurrence_id) ) ? $this->recurrence_id : 0;
292
+ $event = apply_filters('em_event_save_pre',$event,$this);
293
  $result = $wpdb->insert ( $events_table, $event, $this->get_types($event) );
294
  if($result !== false){
295
  $this->id = $wpdb->insert_id;
320
  $this->recurrence_id = 0; // If it's saved here, it becomes individual
321
  $event = $this->to_array();
322
  $event['event_attributes'] = serialize($event['event_attributes']);
323
+ $event = apply_filters('em_event_save_pre',$event,$this);
324
  $result = $wpdb->update ( $events_table, $event, array('event_id' => $this->id), $this->get_types($event) );
325
  if($result !== false){ //Can't just do $result since if you don't make an actual record details change, it'll return 0 for no changes made
326
  //Deal with recurrences
353
  */
354
  function delete(){
355
  global $wpdb;
 
356
  do_action('em_event_delete_pre', $this);
357
+ $result = false;
358
+ if( $this->can_manage(true) ){
359
+ if( $this->is_recurring() ){
360
+ //Delete the recurrences then this recurrence event
361
+ $this->delete_events();
362
+ }
363
+ $result = $wpdb->query ( $wpdb->prepare("DELETE FROM ". $wpdb->prefix . EM_EVENTS_TABLE ." WHERE event_id=%d", $this->id) );
364
+ if($result !== false){
365
+ $result = $this->get_bookings()->delete();
366
+ }
367
  }
368
  return apply_filters('em_event_delete', $result, $this);
369
  }
375
  function duplicate(){
376
  global $wpdb, $EZSQL_ERROR;
377
  //First, duplicate.
378
+ if( $this->can_manage(true) ){
379
+ $event_table_name = $wpdb->prefix . EM_EVENTS_TABLE;
380
+ $eventArray = $this->to_array(true);
381
+ unset($eventArray['event_id']);
382
+ $EM_Event = new EM_Event( $eventArray );
383
+ if( $EM_Event->save() ){
384
+ $EM_Event->feedback_message = __("You are now viewing the duplicated event", 'dbem');
385
+ return apply_filters('em_event_duplicate', $EM_Event, $this);
386
+ }
 
387
  }
388
+ //TODO add error notifications for duplication failures.
389
+ return apply_filters('em_event_duplicate', false, $this);;
390
  }
391
 
392
 
409
  if ( !empty($_POST['repeated_event']) && $_POST['repeated_event'] == "1" && $this->end_date == "" ){
410
  $this->errors[] = __ ( 'Since the event is repeated, you must specify an event date.', 'dbem' );
411
  }
412
+ if( preg_match('/\d{4}-\d{2}-\d{2}/', $this->start_date) && preg_match('/\d{4}-\d{2}-\d{2}/', $this->end_date) ){
413
+ if( strtotime($this->start_date . $this->start_time) > strtotime($this->end_date . $this->end_time) ){
414
+ $this->errors[] = __('Events cannot start after they end.','dbem');
415
+ }
416
+ }else{
417
+ $this->errors[] = __('Dates must have correct formatting. Please use the date picker provided.','dbem');
418
+ }
419
  if( !$this->location->validate() ){
420
  $this->errors = array_merge($this->errors, $this->location->errors);
421
  }
428
  * Returns an array with category id and name (in that order) of the EM_Event instance.
429
  * @return array
430
  */
431
+ function get_category() {
432
+ global $EM_Category;
433
+ if( is_object($this->category) && get_class($this->category)=='EM_Category' && $this->category_id == $this->category->id ){
434
+ return $this->category;
435
+ }elseif( is_object($EM_Category) && $EM_Category->id == $this->category_id ){
436
+ $this->category = $EM_Category;
437
+ }else{
438
+ $this->category = new EM_Category($this->category_id);
439
+ }
440
+ return $this->event;
441
  global $wpdb;
442
  $sql = "SELECT category_id, category_name FROM ".$wpdb->prefix.EM_EVENTS_TABLE." LEFT JOIN ".$wpdb->prefix.EM_CATEGORIES_TABLE." ON category_id=event_category_id WHERE event_id ='".$this->id."'";
443
  $category = $wpdb->get_row($sql, ARRAY_A);
450
  function delete_bookings(){
451
  global $wpdb;
452
  do_action('em_event_delete_bookings_pre', $this);
453
+ $result = false;
454
+ if( $this->can_manage(true) ){
455
+ $result = $wpdb->query( $wpdb->prepare("DELETE FROM ".$wpdb->prefix.EM_BOOKINGS_TABLE." WHERE event_id=%d", $this->id) );
456
+ }
457
  return apply_filters('em_event_delete_bookings', $result, $this);
458
  }
459
 
507
  $replace = '';
508
  switch( $result ){
509
  //Event Details
510
+ case '#_EVENTID':
511
+ $replace = $this->name;
512
+ break;
513
  case '#_NAME':
514
  $replace = $this->name;
515
  break;
522
  $replace = $matches[0];
523
  }
524
  break;
 
 
 
 
525
  //Times
526
  case '#_24HSTARTTIME':
527
  case '#_24HENDTIME':
547
  }
548
  break;
549
  case '#_EDITEVENTLINK':
550
+ if( $this->can_manage() ){
551
  //TODO user should have permission to edit the event
552
  $replace = "<a href='".get_bloginfo('wpurl')."/wp-admin/admin.php?page=events-manager-event&amp;event_id={$this->id}'>".__('Edit').' '.__('Event', 'dbem')."</a>";
553
  }
589
  case '#_CONTACTPERSON': //Depreciated (your call, I think name is better)
590
  $replace = $this->contact->display_name;
591
  break;
592
+ case '#_CONTACTUSERNAME':
593
+ $replace = $this->contact->user_login;
594
+ break;
595
  case '#_CONTACTEMAIL':
596
  case '#_CONTACTMAIL': //Depreciated
597
+ $replace = $this->contact->user_email;
598
+ break;
599
+ case '#_CONTACTID':
600
+ $replace = $this->contact->ID;
601
  break;
602
  case '#_CONTACTPHONE':
603
  $replace = ( $this->contact->phone != '') ? $this->contact->phone : __('N/A', 'dbem');
605
  case '#_CONTACTAVATAR':
606
  $replace = get_avatar( $this->contact->ID, $size = '50' );
607
  break;
608
+ case '#_CONTACTPROFILELINK':
609
+ case '#_CONTACTPROFILEURL':
610
+ if( function_exists('bp_core_get_user_domain') ){
611
+ $replace = bp_core_get_user_domain($this->contact->ID);
612
+ if( $result == '#_CONTACTPROFILELINK' ){
613
+ $replace = '<a href="'.$replace.'">'.__('Profile').'</a>';
614
+ }
615
+ }
616
+ break;
617
  default:
618
+ $replace = $result;
619
  break;
620
  }
621
+ $replace = apply_filters('em_event_output_placeholder', $replace, $this, $result, $target);
622
+ $event_string = str_replace($result, $replace , $event_string );
 
 
 
623
  }
624
  //Time placeholders
625
  foreach($placeholders[0] as $result) {
666
  //Check to see if we have a second set of braces;
667
  $attString = substr( $results[1][$resultKey], 1, strlen(trim($results[1][$resultKey]))-2 );
668
  }
669
+ $attString = apply_filters('em_event_output_placeholder', $attString, $this, $result, $target);
670
  }
671
  $event_string = str_replace($result, $attString ,$event_string );
672
  }
673
 
674
  //Now do dependent objects
675
+ $event_string = $this->location->output($event_string, $target);
676
+ $event_string = $this->category->output($event_string, $target);
677
  return apply_filters('em_event_output', $event_string, $this, $target);
678
  }
679
 
686
  * @return boolean
687
  */
688
  function save_events() {
689
+ if( $this->is_recurring() && $this->can_manage() ){
690
  do_action('em_event_save_events_pre', $this); //actions/filters only run if event is recurring
691
  global $wpdb;
692
  $event_saves = array();
712
  }
713
  return apply_filters('em_event_save_events', !in_array(false, $event_saves), $this);
714
  }
715
+ return apply_filters('em_event_save_events', false, $this);;
716
  }
717
 
718
  /**
724
  global $wpdb;
725
  do_action('em_event_delete_events_pre', $this);
726
  //So we don't do something we'll regret later, we could just supply the get directly into the delete, but this is safer
727
+ $result = false;
728
+ if( $this->can_manage(true) ){
729
+ $EM_Events = EM_Events::get( array('recurrence_id'=>$this->id) );
730
+ $event_ids = array();
731
+ foreach($EM_Events as $EM_Event){
732
+ if($EM_Event->recurrence_id == $this->id){
733
+ $event_ids[] = $EM_Event->id; //ONLY ADD if id's match - hard coded
734
+ }
735
  }
736
+ $result = EM_Events::delete( $event_ids );
737
  }
738
+ return apply_filters('delete_events', $result, $this);
739
  }
740
 
741
  /**
763
  return ( !$this->is_recurring() && !$this->is_recurrence() );
764
  }
765
 
766
+ /**
767
+ * Can the user manage this event?
768
+ */
769
+ function can_manage( $error_msg = false ){
770
+ $can_manage = ( get_option('dbem_permissions_events') || $this->author == get_current_user_id() || empty($this->id) || em_verify_admin() );
771
+ if($error_msg && !$can_manage){
772
+ $this->errors[] = __('You do not have permission to manage this event.','dbem');
773
+ }
774
+ return apply_filters('em_event_can_manage', $can_manage, $this);
775
+ }
776
+
777
  /**
778
  * Returns the days that match the recurrance array passed (unix timestamps)
779
  * @param array $recurrence
964
  * @param string $target
965
  * @return mixed
966
  */
967
+ function em_event_output_placeholder($result,$event,$placeholder,$target='html'){
968
  if( ($placeholder == "#_EXCERPT" || $placeholder == "#_LOCATIONEXCERPT") && $target == 'html' ){
969
  $result = apply_filters('dbem_notes_excerpt', $result);
970
+ }elseif( $placeholder == '#_CONTACTEMAIL' && $target == 'html' ){
971
+ $result = em_ascii_encode($event->contact->user_email);
972
  }elseif( $placeholder == "#_NOTES" || $placeholder == "#_EXCERPT" || $placeholder == "#_LOCATIONEXCERPT" ){
973
  if($target == 'html'){
974
  $result = apply_filters('dbem_notes', $result);
987
  }
988
  return $result;
989
  }
990
+ add_filter('em_event_output_placeholder','em_event_output_placeholder',1,4);
991
  ?>
classes/em-events.php CHANGED
@@ -17,6 +17,7 @@ class EM_Events extends EM_Object {
17
  global $wpdb;
18
  $events_table = $wpdb->prefix . EM_EVENTS_TABLE;
19
  $locations_table = $wpdb->prefix . EM_LOCATIONS_TABLE;
 
20
 
21
  //Quick version, we can accept an array of IDs, which is easy to retrieve
22
  if( self::array_is_numeric($args) ){ //Array of numbers, assume they are event IDs to retreive
@@ -24,9 +25,10 @@ class EM_Events extends EM_Object {
24
  $sql = "
25
  SELECT * FROM $events_table
26
  LEFT JOIN $locations_table ON {$locations_table}.location_id={$events_table}.location_id
 
27
  WHERE event_id=".implode(" OR event_id=", $args)."
28
  ";
29
- $results = $wpdb->get_results(apply_filters('em_events_get_sql',$sql));
30
  $events = array();
31
  foreach($results as $result){
32
  $events[$result['event_id']] = new EM_Event($result);
@@ -55,6 +57,7 @@ class EM_Events extends EM_Object {
55
  $sql = "
56
  SELECT * FROM $events_table
57
  LEFT JOIN $locations_table ON {$locations_table}.location_id={$events_table}.location_id
 
58
  $where
59
  $orderby_sql
60
  $limit $offset
@@ -105,15 +108,20 @@ class EM_Events extends EM_Object {
105
  $event_ids = $array;
106
  }
107
  if(self::array_is_numeric($event_ids)){
108
- apply_filters('em_events_delete', $event_ids);
109
- $condition = implode(" OR event_id=", $event_ids);
110
- //Delete all the bookings
111
- $result_bookings = $wpdb->query("DELETE FROM ". $wpdb->prefix . EM_BOOKINGS_TABLE ." WHERE event_id=$condition;");
112
- //Now delete the events
113
- $result = $wpdb->query ( "DELETE FROM ". $wpdb->prefix . EM_EVENTS_TABLE ." WHERE event_id=$condition;" );
114
- do_action('em_events_delete', $event_ids);
 
 
 
 
 
115
  }
116
- //TODO add error detection on events delete fails
117
  return apply_filters('em_events_delete', true, $event_ids);
118
  }
119
 
@@ -187,6 +195,20 @@ class EM_Events extends EM_Object {
187
  $output = apply_filters('em_events_output', $output, $events, $args);
188
  return $output;
189
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
 
191
  /* Overrides EM_Object method to apply a filter to result
192
  * @see wp-content/plugins/events-manager/classes/EM_Object#build_sql_conditions()
@@ -209,10 +231,20 @@ class EM_Events extends EM_Object {
209
  * @uses EM_Object#get_default_search()
210
  */
211
  function get_default_search( $array = array() ){
212
- $defaults = array(
213
  'orderby' => get_option('dbem_events_default_orderby'),
214
- 'order' => get_option('dbem_events_default_order')
 
215
  );
 
 
 
 
 
 
 
 
 
216
  return apply_filters('em_events_get_default_search', parent::get_default_search($defaults,$array), $array, $defaults);
217
  }
218
  }
17
  global $wpdb;
18
  $events_table = $wpdb->prefix . EM_EVENTS_TABLE;
19
  $locations_table = $wpdb->prefix . EM_LOCATIONS_TABLE;
20
+ $categories_table = $wpdb->prefix . EM_CATEGORIES_TABLE;
21
 
22
  //Quick version, we can accept an array of IDs, which is easy to retrieve
23
  if( self::array_is_numeric($args) ){ //Array of numbers, assume they are event IDs to retreive
25
  $sql = "
26
  SELECT * FROM $events_table
27
  LEFT JOIN $locations_table ON {$locations_table}.location_id={$events_table}.location_id
28
+ LEFT JOIN $categories_table ON {$categories_table}.category_id={$events_table}.event_category_id
29
  WHERE event_id=".implode(" OR event_id=", $args)."
30
  ";
31
+ $results = $wpdb->get_results(apply_filters('em_events_get_sql',$sql),ARRAY_A);
32
  $events = array();
33
  foreach($results as $result){
34
  $events[$result['event_id']] = new EM_Event($result);
57
  $sql = "
58
  SELECT * FROM $events_table
59
  LEFT JOIN $locations_table ON {$locations_table}.location_id={$events_table}.location_id
60
+ LEFT JOIN $categories_table ON {$categories_table}.category_id={$events_table}.event_category_id
61
  $where
62
  $orderby_sql
63
  $limit $offset
108
  $event_ids = $array;
109
  }
110
  if(self::array_is_numeric($event_ids)){
111
+ //First we have to check that they're all deletable by this user.
112
+ if ( self::can_manage($event_ids) ) {
113
+ apply_filters('em_events_delete_pre', $event_ids);
114
+ $condition = implode(" OR event_id=", $event_ids);
115
+ //Delete all the bookings
116
+ $result_bookings = $wpdb->query("DELETE FROM ". $wpdb->prefix . EM_BOOKINGS_TABLE ." WHERE event_id=$condition;");
117
+ //Now delete the events
118
+ $result = $wpdb->query ( "DELETE FROM ". $wpdb->prefix . EM_EVENTS_TABLE ." WHERE event_id=$condition;" );
119
+ return apply_filters('em_events_delete', true, $event_ids);
120
+ }else{
121
+ return apply_filters('em_events_delete', true, $event_ids);
122
+ }
123
  }
124
+ //TODO add better error feedback on events delete fails
125
  return apply_filters('em_events_delete', true, $event_ids);
126
  }
127
 
195
  $output = apply_filters('em_events_output', $output, $events, $args);
196
  return $output;
197
  }
198
+
199
+ function can_manage($event_ids){
200
+ global $wpdb;
201
+ if( em_verify_admin() ){
202
+ return apply_filters('em_events_can_manage', true, $event_ids);
203
+ }
204
+ if( EM_Object::array_is_numeric($event_ids) ){
205
+ $condition = implode(" OR event_id=", $event_ids);
206
+ //Delete all the bookings
207
+ $results = $wpdb->query("SELECT event_author FROM ". $wpdb->prefix . EM_BOOKINGS_TABLE ." WHERE author_id != '". get_current_user_id() ."' event_id=$condition;");
208
+ return apply_filters('em_events_can_manage', (count($results) > 0), $event_ids);
209
+ }
210
+ return apply_filters('em_events_can_manage', false, $event_ids);
211
+ }
212
 
213
  /* Overrides EM_Object method to apply a filter to result
214
  * @see wp-content/plugins/events-manager/classes/EM_Object#build_sql_conditions()
231
  * @uses EM_Object#get_default_search()
232
  */
233
  function get_default_search( $array = array() ){
234
+ $defaults = array(
235
  'orderby' => get_option('dbem_events_default_orderby'),
236
+ 'order' => get_option('dbem_events_default_order'),
237
+ 'rsvp' => false //if set to true, only events with bookings enabled are returned
238
  );
239
+ //figure out default owning permissions
240
+ switch( get_option('dbem_permissions_categories') ){
241
+ case 0:
242
+ $defaults['owner'] = get_current_user_id();
243
+ break;
244
+ case 1:
245
+ $defaults['owner'] = false;
246
+ break;
247
+ }
248
  return apply_filters('em_events_get_default_search', parent::get_default_search($defaults,$array), $array, $defaults);
249
  }
250
  }
classes/em-location.php CHANGED
@@ -13,6 +13,7 @@ class EM_Location extends EM_Object {
13
  var $longitude = '';
14
  var $description = '';
15
  var $image_url = '';
 
16
  //Other Vars
17
  var $fields = array(
18
  'location_id' => array('name'=>'id','type'=>'%d'),
@@ -22,7 +23,8 @@ class EM_Location extends EM_Object {
22
  //Not Used - 'location_province' => array('name'=>'province','type'=>'%s'),
23
  'location_latitude' => array('name'=>'latitude','type'=>'%f'),
24
  'location_longitude' => array('name'=>'longitude','type'=>'%f'),
25
- 'location_description' => array('name'=>'description','type'=>'%s')
 
26
  );
27
  var $required_fields;
28
  var $feedback_message = "";
@@ -73,16 +75,19 @@ class EM_Location extends EM_Object {
73
  }
74
 
75
  function save(){
76
- global $wpdb;
 
77
  do_action('em_location_save_pre', $this);
78
  $table = $wpdb->prefix.EM_LOCATIONS_TABLE;
79
  $data = $this->to_array();
80
  unset($data['location_id']);
81
  unset($data['location_image_url']);
82
  if($this->id != ''){
83
- $where = array( 'location_id' => $this->id );
84
  $wpdb->update($table, $data, $where, $this->get_types($data));
85
  }else{
 
 
 
86
  $wpdb->insert($table, $data, $this->get_types($data));
87
  $this->id = $wpdb->insert_id;
88
  }
@@ -193,11 +198,26 @@ class EM_Location extends EM_Object {
193
  function has_events(){
194
  global $wpdb;
195
  $events_table = $wpdb->prefix.EM_EVENTS_TABLE;
196
- $sql = "SELECT event_id FROM $events_table WHERE location_id = {$this->id}";
197
- $affected_events = $wpdb->get_results($sql);
198
  return apply_filters('em_location_has_events', (count($affected_events) > 0), $this);
199
  }
200
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
  function output_single($target = 'html'){
202
  $format = get_option ( 'dbem_single_location_format' );
203
  return apply_filters('em_location_output_single', $this->output($format, $target), $this, $target);
@@ -267,6 +287,9 @@ class EM_Location extends EM_Object {
267
  case '#_LOCATIONTOWN':
268
  $replace = $this->town;
269
  break;
 
 
 
270
  default:
271
  $match = false;
272
  break;
13
  var $longitude = '';
14
  var $description = '';
15
  var $image_url = '';
16
+ var $owner = '';
17
  //Other Vars
18
  var $fields = array(
19
  'location_id' => array('name'=>'id','type'=>'%d'),
23
  //Not Used - 'location_province' => array('name'=>'province','type'=>'%s'),
24
  'location_latitude' => array('name'=>'latitude','type'=>'%f'),
25
  'location_longitude' => array('name'=>'longitude','type'=>'%f'),
26
+ 'location_description' => array('name'=>'description','type'=>'%s'),
27
+ 'location_owner' => array('name'=>'owner','type'=>'%d')
28
  );
29
  var $required_fields;
30
  var $feedback_message = "";
75
  }
76
 
77
  function save(){
78
+ global $wpdb, $current_user;
79
+ get_currentuserinfo();
80
  do_action('em_location_save_pre', $this);
81
  $table = $wpdb->prefix.EM_LOCATIONS_TABLE;
82
  $data = $this->to_array();
83
  unset($data['location_id']);
84
  unset($data['location_image_url']);
85
  if($this->id != ''){
 
86
  $wpdb->update($table, $data, $where, $this->get_types($data));
87
  }else{
88
+ $this->owner = $current_user->ID; //Record creator of event
89
+ $data['location_owner'] = $this->owner;
90
+ $where = array( 'location_id' => $this->id );
91
  $wpdb->insert($table, $data, $this->get_types($data));
92
  $this->id = $wpdb->insert_id;
93
  }
198
  function has_events(){
199
  global $wpdb;
200
  $events_table = $wpdb->prefix.EM_EVENTS_TABLE;
201
+ $sql = "SELECT count(event_id) as events_no FROM $events_table WHERE location_id = {$this->id}";
202
+ $affected_events = $wpdb->get_row($sql);
203
  return apply_filters('em_location_has_events', (count($affected_events) > 0), $this);
204
  }
205
 
206
+ function can_manage(){
207
+ return ( get_option('dbem_permissions_locations') == 2 || $this->owner == get_current_user_id() || empty($this->id) || em_verify_admin() );
208
+ }
209
+
210
+ function can_use(){
211
+ switch( get_option('dbem_permissions_locations') ){
212
+ case 0:
213
+ return $this->owner == get_current_user_id();
214
+ case 1:
215
+ return em_verify_admin($this->owner);
216
+ case 2:
217
+ return true;
218
+ }
219
+ }
220
+
221
  function output_single($target = 'html'){
222
  $format = get_option ( 'dbem_single_location_format' );
223
  return apply_filters('em_location_output_single', $this->output($format, $target), $this, $target);
287
  case '#_LOCATIONTOWN':
288
  $replace = $this->town;
289
  break;
290
+ case '#_LOCATIONID':
291
+ $replace = $this->id;
292
+ break;
293
  default:
294
  $match = false;
295
  break;
classes/em-locations.php CHANGED
@@ -20,7 +20,7 @@ class EM_Locations extends EM_Object {
20
  if( self::array_is_numeric($args) && count() ){ //Array of numbers, assume they are event IDs to retreive
21
  //We can just get all the events here and return them
22
  $sql = "SELECT * FROM $locations_table WHERE location_id=".implode(" OR location_id=", $args);
23
- $results = $wpdb->get_results($sql);
24
  $events = array();
25
  foreach($results as $result){
26
  $locations[$result['location_id']] = new EM_Location($result);
@@ -158,6 +158,12 @@ class EM_Locations extends EM_Object {
158
  }elseif( true == $args['eventless'] ){
159
  $conditions['eventless'] = "{$events_table}.event_id IS NULL";
160
  }
 
 
 
 
 
 
161
  return apply_filters('em_locations_build_sql_conditions', $conditions, $args);
162
  }
163
 
20
  if( self::array_is_numeric($args) && count() ){ //Array of numbers, assume they are event IDs to retreive
21
  //We can just get all the events here and return them
22
  $sql = "SELECT * FROM $locations_table WHERE location_id=".implode(" OR location_id=", $args);
23
+ $results = $wpdb->get_results($sql,ARRAY_A);
24
  $events = array();
25
  foreach($results as $result){
26
  $locations[$result['location_id']] = new EM_Location($result);
158
  }elseif( true == $args['eventless'] ){
159
  $conditions['eventless'] = "{$events_table}.event_id IS NULL";
160
  }
161
+ //owner lookup
162
+ if( !empty($args['owner']) ){
163
+ if ( get_option('dbem_permissions_locations') < 1 && !em_verify_admin() ){
164
+ $conditions['owner'] = "location_owner=".get_current_user_id();
165
+ }
166
+ }
167
  return apply_filters('em_locations_build_sql_conditions', $conditions, $args);
168
  }
169
 
classes/em-object.php CHANGED
@@ -18,7 +18,7 @@ class EM_Object {
18
  //Create minimal defaults array, merge it with supplied defaults array
19
  $super_defaults = array(
20
  'limit' => false,
21
- 'scope' => 'future',
22
  'order' => 'ASC', //hard-coded at end of this function
23
  'orderby' => false,
24
  'format' => '',
@@ -32,7 +32,9 @@ class EM_Object {
32
  'month'=>'',
33
  'year'=>'',
34
  'pagination'=>false,
35
- 'array'=>false
 
 
36
  );
37
  //Return default if nothing passed
38
  if( empty($defaults) && empty($array) ){
@@ -94,6 +96,7 @@ class EM_Object {
94
  $defaults['limit'] = (is_numeric($defaults['limit'])) ? $defaults['limit']:$super_defaults['limit'];
95
  $defaults['offset'] = (is_numeric($defaults['offset'])) ? $defaults['offset']:$super_defaults['offset'];
96
  $defaults['recurring'] = ($defaults['recurring'] == true);
 
97
  //Calculate offset in event page is set
98
  if($defaults['page'] > 1){
99
  $defaults['offset'] = $defaults['limit'] * ($defaults['page']-1);
@@ -121,6 +124,8 @@ class EM_Object {
121
  $recurrence = $args['recurrence'];
122
  $category = $args['category'];
123
  $location = $args['location'];
 
 
124
  $event = $args['event'];
125
  $month = $args['month'];
126
  $year = $args['year'];
@@ -212,7 +217,15 @@ class EM_Object {
212
  }elseif( self::array_is_numeric($category) ){
213
  $conditions['category'] = "( event_category_id = ". implode(' OR event_category_id = ', $category).")";
214
  }
215
-
 
 
 
 
 
 
 
 
216
  return apply_filters('em_object_build_sql_conditions', $conditions);
217
  }
218
 
@@ -262,13 +275,15 @@ class EM_Object {
262
  */
263
  function to_object( $array = array(), $addslashes = false ){
264
  //Save core data
265
- $array = apply_filters('em_to_object', $array);
266
- foreach ( $this->fields as $key => $val ) {
267
- if(array_key_exists($key, $array)){
268
- if( !is_object($array[$key]) && !is_array($array[$key]) ){
269
- $array[$key] = ($addslashes) ? stripslashes($array[$key]):$array[$key];
 
 
 
270
  }
271
- $this->$val['name'] = $array[$key];
272
  }
273
  }
274
  }
@@ -366,6 +381,24 @@ class EM_Object {
366
  }
367
  return $array;
368
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
369
 
370
  /**
371
  * Will return true if this is a simple (non-assoc) numeric array, meaning it has at one or more numeric entries and nothing else
18
  //Create minimal defaults array, merge it with supplied defaults array
19
  $super_defaults = array(
20
  'limit' => false,
21
+ 'scope' => 'future',
22
  'order' => 'ASC', //hard-coded at end of this function
23
  'orderby' => false,
24
  'format' => '',
32
  'month'=>'',
33
  'year'=>'',
34
  'pagination'=>false,
35
+ 'array'=>false,
36
+ 'owner'=>false,
37
+ 'rsvp'=>false
38
  );
39
  //Return default if nothing passed
40
  if( empty($defaults) && empty($array) ){
96
  $defaults['limit'] = (is_numeric($defaults['limit'])) ? $defaults['limit']:$super_defaults['limit'];
97
  $defaults['offset'] = (is_numeric($defaults['offset'])) ? $defaults['offset']:$super_defaults['offset'];
98
  $defaults['recurring'] = ($defaults['recurring'] == true);
99
+ $defaults['owner'] = (is_numeric($defaults['owner'])) ? $defaults['owner']:$super_defaults['owner'];
100
  //Calculate offset in event page is set
101
  if($defaults['page'] > 1){
102
  $defaults['offset'] = $defaults['limit'] * ($defaults['page']-1);
124
  $recurrence = $args['recurrence'];
125
  $category = $args['category'];
126
  $location = $args['location'];
127
+ $rsvp = $args['rsvp'];
128
+ $owner = $args['owner'];
129
  $event = $args['event'];
130
  $month = $args['month'];
131
  $year = $args['year'];
217
  }elseif( self::array_is_numeric($category) ){
218
  $conditions['category'] = "( event_category_id = ". implode(' OR event_category_id = ', $category).")";
219
  }
220
+
221
+ //If we want rsvped items, we usually check the event
222
+ if( $rsvp == 1 ){
223
+ $conditions['rsvp'] = 'event_rsvp=1';
224
+ }
225
+ //Default ownership belongs to an event, child objects can just overwrite this if needed.
226
+ if( is_numeric($owner) ){
227
+ $conditions['owner'] = 'event_author='.$owner;
228
+ }
229
  return apply_filters('em_object_build_sql_conditions', $conditions);
230
  }
231
 
275
  */
276
  function to_object( $array = array(), $addslashes = false ){
277
  //Save core data
278
+ if( is_array($array) ){
279
+ $array = apply_filters('em_to_object', $array);
280
+ foreach ( $this->fields as $key => $val ) {
281
+ if(array_key_exists($key, $array)){
282
+ if( !is_object($array[$key]) && !is_array($array[$key]) ){
283
+ $array[$key] = ($addslashes) ? stripslashes($array[$key]):$array[$key];
284
+ }
285
+ $this->$val['name'] = $array[$key];
286
  }
 
287
  }
288
  }
289
  }
381
  }
382
  return $array;
383
  }
384
+
385
+ /**
386
+ * Send an email and log errors in this object
387
+ * @param string $subject
388
+ * @param string $body
389
+ * @param string $email
390
+ * @return string
391
+ */
392
+ function email_send($subject, $body, $email){
393
+ global $EM_Mailer;
394
+ if( !$EM_Mailer->send($subject,$body,$email) ){
395
+ foreach($EM_Mailer->errors as $error){
396
+ $this->errors[] = $error;
397
+ }
398
+ return false;
399
+ }
400
+ return true;
401
+ }
402
 
403
  /**
404
  * Will return true if this is a simple (non-assoc) numeric array, meaning it has at one or more numeric entries and nothing else
classes/em-person.php CHANGED
@@ -3,12 +3,14 @@
3
  class EM_Person extends EM_Object{
4
  //DB Fields
5
  var $id = '';
 
6
  var $name = '';
7
  var $email = '';
8
  var $phone = '';
9
  //Other Vars
10
  var $fields = array(
11
  'person_id' => array('name'=>'id','type'=>'%d'),
 
12
  'person_name' => array('name'=>'name','type'=>'%s'),
13
  'person_email' => array('name'=>'email','type'=>'%s'),
14
  'person_phone' => array('name'=>'phone','type'=>'%s')
@@ -23,7 +25,7 @@ class EM_Person extends EM_Object{
23
  $person = array();
24
  if( is_array($person_data) ){
25
  $person = $person_data;
26
- }elseif( $person_data > 0 ){
27
  //Retreiving from the database
28
  global $wpdb;
29
  $sql = "SELECT * FROM ". $wpdb->prefix . EM_PEOPLE_TABLE ." WHERE person_id ='$person_data'";
@@ -58,8 +60,16 @@ class EM_Person extends EM_Object{
58
  }
59
  }
60
 
 
 
 
 
 
 
 
61
  function save(){
62
  global $wpdb;
 
63
  if($this->validate()){
64
  //Does this person already exist?
65
  $this->load_similar();
@@ -68,17 +78,28 @@ class EM_Person extends EM_Object{
68
  unset($data['person_id']);
69
  if($this->id != ''){
70
  $where = array( 'person_id' => $this->id );
71
- $wpdb->update($table, $data, $where);
72
  }else{
73
- $wpdb->insert($table, $data);
74
  $this->id = $wpdb->insert_id;
75
  }
76
- return ($wpdb->insert_id);
 
77
  }else{
78
- return false;
 
79
  }
80
  }
81
 
 
 
 
 
 
 
 
 
 
82
  function validate(){
83
  if( !preg_match('/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/', $this->email) ){
84
  $this->errors[] = __('Please provide a valid email address.', 'dbem');
@@ -87,6 +108,16 @@ class EM_Person extends EM_Object{
87
  return true;
88
  }
89
 
 
 
 
 
 
 
 
 
 
 
90
  /**
91
  * Checks agains the database to see if this user exists already
92
  * @return boolean|int
@@ -112,6 +143,13 @@ class EM_Person extends EM_Object{
112
  return true;
113
  }
114
  return false;
 
 
 
 
 
 
 
115
  }
116
  }
117
  ?>
3
  class EM_Person extends EM_Object{
4
  //DB Fields
5
  var $id = '';
6
+ var $owner = '';
7
  var $name = '';
8
  var $email = '';
9
  var $phone = '';
10
  //Other Vars
11
  var $fields = array(
12
  'person_id' => array('name'=>'id','type'=>'%d'),
13
+ 'person_owner' => array('name'=>'owner','type'=>'%d'),
14
  'person_name' => array('name'=>'name','type'=>'%s'),
15
  'person_email' => array('name'=>'email','type'=>'%s'),
16
  'person_phone' => array('name'=>'phone','type'=>'%s')
25
  $person = array();
26
  if( is_array($person_data) ){
27
  $person = $person_data;
28
+ }elseif( is_numeric($person_data) ){
29
  //Retreiving from the database
30
  global $wpdb;
31
  $sql = "SELECT * FROM ". $wpdb->prefix . EM_PEOPLE_TABLE ." WHERE person_id ='$person_data'";
60
  }
61
  }
62
 
63
+ function get_post(){
64
+ $this->name = ( !empty($_REQUEST['person_name']) ) ? stripslashes($_REQUEST['person_name']) : '' ;
65
+ $this->email = ( !empty($_REQUEST['person_email']) ) ? $_REQUEST['person_email'] : '';
66
+ $this->phone = ( !empty($_REQUEST['person_phone']) ) ? $_REQUEST['person_phone'] : '';
67
+ return apply_filters('em_person_get_post', $this->validate(), $this);
68
+ }
69
+
70
  function save(){
71
  global $wpdb;
72
+ do_action('em_person_save_pre',$this);
73
  if($this->validate()){
74
  //Does this person already exist?
75
  $this->load_similar();
78
  unset($data['person_id']);
79
  if($this->id != ''){
80
  $where = array( 'person_id' => $this->id );
81
+ $result = $wpdb->update($table, $data, $where);
82
  }else{
83
+ $result = $wpdb->insert($table, $data);
84
  $this->id = $wpdb->insert_id;
85
  }
86
+ $this->feedback_message = ($result) ? __('Changes saved.'): __('Could not edit person details.','dbem');
87
+ return apply_filters('em_save_delete', $result, $this);
88
  }else{
89
+ $this->feedback_message = __('Could not edit person details.','dbem');
90
+ return apply_filters('em_save_delete', false, $this);
91
  }
92
  }
93
 
94
+ function delete(){
95
+ global $wpdb;
96
+ do_action('em_person_delete_pre', $this);
97
+ $results = array();
98
+ $results[] = $wpdb->query ( $wpdb->prepare("DELETE FROM ". $wpdb->prefix . EM_PEOPLE_TABLE ." WHERE person_id=%d", $this->id) );
99
+ $results[] = $wpdb->query ( $wpdb->prepare("DELETE FROM ". $wpdb->prefix . EM_BOOKINGS_TABLE ." WHERE person_id=%d", $this->id) );
100
+ return apply_filters('em_event_delete', !in_array(false,$results), $this);
101
+ }
102
+
103
  function validate(){
104
  if( !preg_match('/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/', $this->email) ){
105
  $this->errors[] = __('Please provide a valid email address.', 'dbem');
108
  return true;
109
  }
110
 
111
+ function get_bookings(){
112
+ global $wpdb;
113
+ $results = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix.EM_BOOKINGS_TABLE." WHERE person_id={$this->id}",ARRAY_A);
114
+ $bookings = array();
115
+ foreach($results as $booking_data){
116
+ $bookings[] = new EM_Booking($booking_data);
117
+ }
118
+ return $bookings;
119
+ }
120
+
121
  /**
122
  * Checks agains the database to see if this user exists already
123
  * @return boolean|int
143
  return true;
144
  }
145
  return false;
146
+ }
147
+
148
+ /**
149
+ * Can the user manage this event?
150
+ */
151
+ function can_manage(){
152
+ return ( get_option('dbem_permissions_events') || $this->owner == get_current_user_id() || em_verify_admin() );
153
  }
154
  }
155
  ?>
em-ajax.php CHANGED
@@ -2,37 +2,95 @@
2
  //AJAX function
3
  function em_ajax_actions() {
4
  //TODO Clean this up.... use a uniformed way of calling EM Ajax actions
5
- if(isset($_REQUEST['dbem_ajax_action']) && $_REQUEST['dbem_ajax_action'] == 'booking_data') {
6
- if(isset($_REQUEST['id'])){
7
- $EM_Event = new EM_Event($_REQUEST['id']);
8
- echo "[{bookedSeats:".$EM_Event->get_bookings()->get_booked_seats().", availableSeats:".$EM_Event->get_bookings()->get_available_seats()."}]";
9
- }
10
- die();
11
- }
12
- if(isset($_REQUEST['em_ajax_action']) && $_REQUEST['em_ajax_action'] == 'get_location') {
13
- if(isset($_REQUEST['id'])){
14
- $EM_Location = new EM_Location($_REQUEST['id']);
15
- $location_array = $EM_Location->to_array();
16
- $location_array['location_balloon'] = $EM_Location->output(get_option('dbem_location_baloon_format'));
17
- echo EM_Object::json_encode($location_array);
18
- }
19
- die();
20
- }
21
- if(isset($_REQUEST['query']) && $_REQUEST['query'] == 'GlobalMapData') {
22
- $locations = EM_Locations::get( $_REQUEST );
23
- $json_locations = array();
24
- foreach($locations as $location_key => $location) {
25
- $json_locations[$location_key] = $location->to_array();
26
- $json_locations[$location_key]['location_balloon'] = $location->output(get_option('dbem_map_text_format'));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  }
28
- echo EM_Object::json_encode($json_locations);
29
- die();
30
- }
31
-
32
- if(isset($_REQUEST['ajaxCalendar']) && $_REQUEST['ajaxCalendar']) {
33
- //FIXME if long events enabled originally, this won't show up on ajax call
34
- echo EM_Calendar::output($_REQUEST);
35
- die();
36
  }
37
  }
38
  add_action('init','em_ajax_actions');
2
  //AJAX function
3
  function em_ajax_actions() {
4
  //TODO Clean this up.... use a uniformed way of calling EM Ajax actions
5
+ if( !empty($_REQUEST['em_ajax']) || !empty($_REQUEST['em_ajax_action']) ){
6
+ if(isset($_REQUEST['dbem_ajax_action']) && $_REQUEST['dbem_ajax_action'] == 'booking_data') {
7
+ if(isset($_REQUEST['id'])){
8
+ $EM_Event = new EM_Event($_REQUEST['id']);
9
+ echo "[{bookedSeats:".$EM_Event->get_bookings()->get_booked_seats().", availableSeats:".$EM_Event->get_bookings()->get_available_seats()."}]";
10
+ }
11
+ die();
12
+ }
13
+ if(isset($_REQUEST['em_ajax_action']) && $_REQUEST['em_ajax_action'] == 'get_location') {
14
+ if(isset($_REQUEST['id'])){
15
+ $EM_Location = new EM_Location($_REQUEST['id']);
16
+ $location_array = $EM_Location->to_array();
17
+ $location_array['location_balloon'] = $EM_Location->output(get_option('dbem_location_baloon_format'));
18
+ echo EM_Object::json_encode($location_array);
19
+ }
20
+ die();
21
+ }
22
+ if(isset($_REQUEST['query']) && $_REQUEST['query'] == 'GlobalMapData') {
23
+ $locations = EM_Locations::get( $_REQUEST );
24
+ $json_locations = array();
25
+ foreach($locations as $location_key => $location) {
26
+ $json_locations[$location_key] = $location->to_array();
27
+ $json_locations[$location_key]['location_balloon'] = $location->output(get_option('dbem_map_text_format'));
28
+ }
29
+ echo EM_Object::json_encode($json_locations);
30
+ die();
31
+ }
32
+
33
+ if(isset($_REQUEST['ajaxCalendar']) && $_REQUEST['ajaxCalendar']) {
34
+ //FIXME if long events enabled originally, this won't show up on ajax call
35
+ echo EM_Calendar::output($_REQUEST);
36
+ die();
37
+ }
38
+
39
+ //EM Ajax requests require this flag.
40
+ if( is_admin() ){
41
+ //Admin operations
42
+ //Booking Actions
43
+ global $EM_Booking;
44
+ if( !empty($_REQUEST['bookings']) || is_object($EM_Booking) ){
45
+ if( is_object($EM_Booking) ){
46
+ $_REQUEST['bookings'] = $EM_Booking; //small hack to prevent unecessary db reads
47
+ }
48
+ $EM_Bookings = new EM_Bookings(); //Empty, not bound to event.
49
+ if( $_REQUEST['action'] == 'bookings_approve' ){
50
+ $EM_Bookings->approve($_REQUEST['bookings']);
51
+ echo $EM_Bookings->feedback_message;
52
+ die();
53
+ }elseif($_REQUEST['action'] == 'bookings_reject'){
54
+ $EM_Bookings->reject($_REQUEST['bookings']);
55
+ echo $EM_Bookings->feedback_message;
56
+ die();
57
+ }elseif($_REQUEST['action'] == 'bookings_unapprove'){
58
+ $EM_Bookings->unapprove($_REQUEST['bookings']);
59
+ echo $EM_Bookings->feedback_message;
60
+ die();
61
+ }elseif($_REQUEST['action'] == 'bookings_delete'){
62
+ //Just do it here, since we may be deleting bookings of different events.
63
+ if(EM_Object::array_is_numeric($_REQUEST['bookings'])){
64
+ $results = array();
65
+ foreach($booking_ids as $booking_id){
66
+ $EM_Booking = new EM_Booking($booking_ids);
67
+ $results[] = $EM_Booking->delete();
68
+ }
69
+ $result = !in_array(false,$results);
70
+ }elseif(is_numeric($booking_ids)){
71
+ $EM_Booking = new EM_Booking($booking_ids);
72
+ $result = $EM_Booking->delete();
73
+ }
74
+ if( $result ){
75
+ echo __('Booking Deleted','dbem');
76
+ }else{
77
+ echo '<span style="color:red">'.__('Booking deletion unsuccessful','dbem').'</span>';
78
+ }
79
+ die();
80
+ }
81
+ }
82
+ //Specific Oject Ajax
83
+ if( !empty($_REQUEST['em_obj']) ){
84
+ switch( $_REQUEST['em_obj'] ){
85
+ case 'em_bookings_events_table':
86
+ case 'em_bookings_pending_table':
87
+ case 'em_bookings_confirmed_table':
88
+ call_user_func($_REQUEST['em_obj']);
89
+ break;
90
+ }
91
+ die();
92
+ }
93
  }
 
 
 
 
 
 
 
 
94
  }
95
  }
96
  add_action('init','em_ajax_actions');
em-bookings.php CHANGED
@@ -1,163 +1,163 @@
1
- <?php
2
- /* Contains functions to handle save and delete requests on the front-end for bookings */
3
- global $dbem_form_messages_booking_delete;
4
- $dbem_form_messages_booking_delete = array();
5
- global $dbem_form_messages_booking_add;
6
- $dbem_form_messages_booking_add = array();
7
-
8
- /**
9
- * Check if there's any actions to take for bookings
10
- * @return null
11
- */
12
- function em_actions_bookings() {
13
- global $dbem_form_messages_booking_delete, $dbem_form_messages_booking_add;
14
- global $wpdb;
15
- global $EM_Event;
16
-
17
- if( @get_class($EM_Event) == 'EM_Event' ){
18
- //ADD/EDIT Booking
19
- if (isset($_POST['eventAction']) && $_POST['eventAction'] == 'add_booking') {
20
- //$EM_Event->get_bookings();
21
- if( $EM_Event->get_bookings()->add( new EM_Booking($_POST) ) ){
22
- $dbem_form_messages_booking_add['success'] = $EM_Event->get_bookings()->feedback_message;
23
- }else{
24
- $dbem_form_messages_booking_add['error'] = implode('<br />', $EM_Event->get_bookings()->errors);
25
- }
26
- }
27
- //DELETE Booking
28
- if (isset($_POST['eventAction']) && $_POST['eventAction'] == 'delete_booking') {
29
- $EM_Person = new EM_Person();
30
- if( $EM_Person->get(array('person_name' => $_POST['person_name'], 'person_email' => $_POST['person_email'])) ){
31
- $deleted = 0;
32
- foreach($EM_Event->get_bookings()->bookings as $EM_Booking){
33
- if($EM_Booking->person->id == $EM_Person->id ){
34
- $EM_Booking->delete();
35
- $deleted++;
36
- }
37
- }
38
- }
39
- if($deleted > 0){
40
- $dbem_form_messages_booking_delete['success'] = __('Booking deleted', 'dbem');
41
- }else{
42
- $dbem_form_messages_booking_delete['error'] = __('There are no bookings associated to this name and e-mail', 'dbem');
43
- }
44
- }
45
- }
46
- }
47
- add_action('init','em_actions_bookings');
48
-
49
- /**
50
- * Returns the booking form for the front-end, displayed when using placeholder #_ADDBOOKINGFORM
51
- * @return string
52
- */
53
- function em_add_booking_form() {
54
- global $dbem_form_messages_booking_add, $EM_Event;
55
-
56
- $destination = "?".$_SERVER['QUERY_STRING']."#dbem-rsvp";
57
- $booked_places_options = array();
58
- for ( $i = 1; $i <= 10; $i++ ) {
59
- $booking_seats = (!empty($_POST['booking_seats']) && $_POST['booking_seats'] == $i) ? 'selected="selected"':'';
60
- array_push($booked_places_options, "<option value='$i' $booking_seats>$i</option>");
61
- }
62
- ob_start();
63
- ?>
64
- <div id="dbem-rsvp">
65
- <a name="dbem-rsvp"></a>
66
- <h3><?php _e('Book now!','dbem') ?></h3>
67
-
68
- <?php if( !empty($dbem_form_messages_booking_add['success']) ) : ?>
69
- <div class='dbem-rsvp-message-success'><?php echo $dbem_form_messages_booking_add['success'] ?></div>
70
- <?php elseif( !empty($dbem_form_messages_booking_add['error']) ) : ?>
71
- <div class='dbem-rsvp-message-error'><?php echo $dbem_form_messages_booking_add['error'] ?></div>
72
- <?php elseif( !empty($dbem_form_messages_booking_add['message']) ) : ?>
73
- <div class='dbem-rsvp-message'><?php echo $dbem_form_messages_booking_add['message'] ?></div>
74
- <?php endif; ?>
75
-
76
- <form id='dbem-rsvp-form' name='booking-form' method='post' action='<?php echo $destination ?>'>
77
- <table class='dbem-rsvp-form'>
78
- <tr><th scope='row'><?php _e('Name', 'dbem') ?>:</th><td><input type='text' name='person_name' value='<?php echo !empty($_POST['person_name']) ? $_POST['person_name'] : ''; ?>'/></td></tr>
79
- <tr><th scope='row'><?php _e('E-Mail', 'dbem') ?>:</th><td><input type='text' name='person_email' value='<?php echo !empty($_POST['person_email']) ? $_POST['person_email'] : ''; ?>'/></td></tr>
80
- <tr><th scope='row'><?php _e('Phone number', 'dbem') ?>:</th><td><input type='text' name='person_phone' value='<?php echo !empty($_POST['person_phone']) ? $_POST['person_phone'] : ''; ?>'/></td></tr>
81
- <tr>
82
- <th scope='row'><?php _e('Seats', 'dbem') ?>:</th>
83
- <td>
84
- <select name='booking_seats' >
85
- <?php
86
- foreach($booked_places_options as $option) {
87
- echo $option ."\n";
88
- }
89
- ?>
90
- </select>
91
- </td>
92
- </tr>
93
- <tr><th scope='row'><?php _e('Comment', 'dbem') ?>:</th><td><textarea name='booking_comment'><?php echo !empty($_POST['booking_comment']) ? $_POST['booking_comment']:'' ?></textarea></td></tr>
94
- </table>
95
- <p>
96
- <input type='submit' value='<?php _e('Send your booking', 'dbem') ?>'/>&nbsp;&nbsp;&nbsp;&nbsp;
97
- <input type='hidden' name='eventAction' value='add_booking'/>
98
- <input type='hidden' name='event_id' value='<?php echo $EM_Event->id; ?>'/>
99
- </p>
100
- </form>
101
- </div>
102
- <script type="text/javascript">
103
- jQuery(document).ready( function($){
104
- if( $('#dbem-booking-delete').size() > 0 ){
105
- var triggerText = '<?php ($_POST['eventAction'] == 'delete_booking') ? _e('Hide cancellation form', 'dbem') : _e('Cancel a booking', 'dbem'); ?>';
106
- $('#dbem-rsvp input[type=submit]').after(' <a href="#" id="dbem-booking-cancel">'+triggerText+'</a>');
107
- if( $('#dbem-booking-cancel').html() == '<?php _e('Cancel a booking', 'dbem'); ?>' ) { $('#dbem-booking-delete').hide(); }
108
- $('#dbem-booking-cancel').click( function(event){
109
- event.preventDefault();
110
- if( $('#dbem-booking-cancel').html() == '<?php _e('Cancel a booking', 'dbem'); ?>' ){
111
- $('#dbem-booking-cancel').html('<?php _e('Hide cancellation form', 'dbem'); ?>');
112
- $('#dbem-booking-delete').slideDown();
113
- }else{
114
- $('#dbem-booking-cancel').html('<?php _e('Cancel a booking', 'dbem'); ?>');
115
- $('#dbem-booking-delete').slideUp();
116
- }
117
- });
118
- }
119
- });
120
- </script>
121
- <?php
122
- return ob_get_clean();
123
- }
124
-
125
- /**
126
- * Booking removal in front end, called by placeholder #_REMOVEBOOKINGFORM
127
- * @return string
128
- */
129
- function em_delete_booking_form() {
130
- global $dbem_form_messages_booking_delete, $EM_Event;
131
- $destination = "?".$_SERVER['QUERY_STRING'];
132
- ob_start();
133
- ?>
134
- <div id="dbem-booking-delete">
135
- <a name="dbem-booking-delete"></a>
136
- <h3><?php _e('Cancel your booking', 'dbem') ?></h3>
137
-
138
- <?php if( !empty($dbem_form_messages_booking_delete['success']) ) : ?>
139
- <div class='dbem-rsvp-message-success'><?php echo $dbem_form_messages_booking_delete['success'] ?></div>
140
- <?php elseif( !empty($dbem_form_messages_booking_delete['error']) ) : ?>
141
- <div class='dbem-rsvp-message-error'><?php echo $dbem_form_messages_booking_delete['error'] ?></div>
142
- <?php elseif( !empty($dbem_form_messages_booking_delete['message']) ) : ?>
143
- <div class='dbem-rsvp-message'><?php echo $dbem_form_messages_booking_delete['message'] ?></div>
144
- <?php endif; ?>
145
-
146
- <form name='booking-delete-form' method='post' action='<?php echo $destination ?>#dbem-booking-delete'>
147
- <table class='dbem-rsvp-form'>
148
- <tr>
149
- <th scope='row'><?php _e('Name', 'dbem') ?>:</th><td><input type='text' name='person_name' value='<?php echo !empty($_POST['person_name']) ? $_POST['person_name'] : ''; ?>'/></td>
150
- </tr>
151
- <tr>
152
- <th scope='row'><?php _e('E-Mail', 'dbem') ?>:</th><td><input type='text' name='person_email' value='<?php echo !empty($_POST['person_email']) ? $_POST['person_email'] : ''; ?>'/></td>
153
- </tr>
154
- </table>
155
- <input type='hidden' name='eventAction' value='delete_booking'/>
156
- <input type='hidden' name='event_id' value='<?php echo $EM_Event->id; ?>'/>
157
- <input type='submit' value='<?php _e('Cancel your booking', 'dbem') ?>'/>
158
- </form>
159
- </div>
160
- <?php
161
- return ob_get_clean();
162
- }
163
  ?>
1
+ <?php
2
+ /* Contains functions to handle save and delete requests on the front-end for bookings */
3
+ global $dbem_form_messages_booking_delete;
4
+ $dbem_form_messages_booking_delete = array();
5
+ global $dbem_form_messages_booking_add;
6
+ $dbem_form_messages_booking_add = array();
7
+
8
+ /**
9
+ * Check if there's any actions to take for bookings
10
+ * @return null
11
+ */
12
+ function em_actions_bookings() {
13
+ global $dbem_form_messages_booking_delete, $dbem_form_messages_booking_add;
14
+ global $wpdb;
15
+ global $EM_Event;
16
+
17
+ if( @get_class($EM_Event) == 'EM_Event' ){
18
+ //ADD/EDIT Booking
19
+ if (isset($_POST['eventAction']) && $_POST['eventAction'] == 'add_booking') {
20
+ //$EM_Event->get_bookings();
21
+ if( $EM_Event->get_bookings()->add( new EM_Booking($_POST) ) ){
22
+ $dbem_form_messages_booking_add['success'] = $EM_Event->get_bookings()->feedback_message;
23
+ }else{
24
+ $dbem_form_messages_booking_add['error'] = implode('<br />', $EM_Event->get_bookings()->errors);
25
+ }
26
+ }
27
+ //DELETE Booking
28
+ if (isset($_POST['eventAction']) && $_POST['eventAction'] == 'delete_booking') {
29
+ $EM_Person = new EM_Person();
30
+ if( $EM_Person->get(array('person_name' => $_POST['person_name'], 'person_email' => $_POST['person_email'])) ){
31
+ $deleted = 0;
32
+ foreach($EM_Event->get_bookings()->bookings as $EM_Booking){
33
+ if($EM_Booking->person->id == $EM_Person->id ){
34
+ $EM_Booking->cancel();
35
+ $deleted++;
36
+ }
37
+ }
38
+ }
39
+ if($deleted > 0){
40
+ $dbem_form_messages_booking_delete['success'] = __('Booking deleted', 'dbem');
41
+ }else{
42
+ $dbem_form_messages_booking_delete['error'] = __('There are no bookings associated to this name and e-mail', 'dbem');
43
+ }
44
+ }
45
+ }
46
+ }
47
+ add_action('init','em_actions_bookings');
48
+
49
+ /**
50
+ * Returns the booking form for the front-end, displayed when using placeholder #_ADDBOOKINGFORM
51
+ * @return string
52
+ */
53
+ function em_add_booking_form() {
54
+ global $dbem_form_messages_booking_add, $EM_Event;
55
+
56
+ $destination = "?".$_SERVER['QUERY_STRING']."#dbem-rsvp";
57
+ $booked_places_options = array();
58
+ for ( $i = 1; $i <= 10; $i++ ) {
59
+ $booking_seats = (!empty($_POST['booking_seats']) && $_POST['booking_seats'] == $i) ? 'selected="selected"':'';
60
+ array_push($booked_places_options, "<option value='$i' $booking_seats>$i</option>");
61
+ }
62
+ ob_start();
63
+ ?>
64
+ <div id="dbem-rsvp">
65
+ <a name="dbem-rsvp"></a>
66
+ <h3><?php _e('Book now!','dbem') ?></h3>
67
+
68
+ <?php if( !empty($dbem_form_messages_booking_add['success']) ) : ?>
69
+ <div class='dbem-rsvp-message-success'><?php echo $dbem_form_messages_booking_add['success'] ?></div>
70
+ <?php elseif( !empty($dbem_form_messages_booking_add['error']) ) : ?>
71
+ <div class='dbem-rsvp-message-error'><?php echo $dbem_form_messages_booking_add['error'] ?></div>
72
+ <?php elseif( !empty($dbem_form_messages_booking_add['message']) ) : ?>
73
+ <div class='dbem-rsvp-message'><?php echo $dbem_form_messages_booking_add['message'] ?></div>
74
+ <?php endif; ?>
75
+
76
+ <form id='dbem-rsvp-form' name='booking-form' method='post' action='<?php echo $destination ?>'>
77
+ <table class='dbem-rsvp-form'>
78
+ <tr><th scope='row'><?php _e('Name', 'dbem') ?>:</th><td><input type='text' name='person_name' value='<?php echo !empty($_POST['person_name']) ? $_POST['person_name'] : ''; ?>'/></td></tr>
79
+ <tr><th scope='row'><?php _e('E-Mail', 'dbem') ?>:</th><td><input type='text' name='person_email' value='<?php echo !empty($_POST['person_email']) ? $_POST['person_email'] : ''; ?>'/></td></tr>
80
+ <tr><th scope='row'><?php _e('Phone number', 'dbem') ?>:</th><td><input type='text' name='person_phone' value='<?php echo !empty($_POST['person_phone']) ? $_POST['person_phone'] : ''; ?>'/></td></tr>
81
+ <tr>
82
+ <th scope='row'><?php _e('Seats', 'dbem') ?>:</th>
83
+ <td>
84
+ <select name='booking_seats' >
85
+ <?php
86
+ foreach($booked_places_options as $option) {
87
+ echo $option ."\n";
88
+ }
89
+ ?>
90
+ </select>
91
+ </td>
92
+ </tr>
93
+ <tr><th scope='row'><?php _e('Comment', 'dbem') ?>:</th><td><textarea name='booking_comment'><?php echo !empty($_POST['booking_comment']) ? $_POST['booking_comment']:'' ?></textarea></td></tr>
94
+ </table>
95
+ <p>
96
+ <input type='submit' value='<?php _e('Send your booking', 'dbem') ?>'/>&nbsp;&nbsp;&nbsp;&nbsp;
97
+ <input type='hidden' name='eventAction' value='add_booking'/>
98
+ <input type='hidden' name='event_id' value='<?php echo $EM_Event->id; ?>'/>
99
+ </p>
100
+ </form>
101
+ </div>
102
+ <script type="text/javascript">
103
+ jQuery(document).ready( function($){
104
+ if( $('#dbem-booking-delete').size() > 0 ){
105
+ var triggerText = '<?php ($_POST['eventAction'] == 'delete_booking') ? _e('Hide cancellation form', 'dbem') : _e('Cancel a booking', 'dbem'); ?>';
106
+ $('#dbem-rsvp input[type=submit]').after(' <a href="#" id="dbem-booking-cancel">'+triggerText+'</a>');
107
+ if( $('#dbem-booking-cancel').html() == '<?php _e('Cancel a booking', 'dbem'); ?>' ) { $('#dbem-booking-delete').hide(); }
108
+ $('#dbem-booking-cancel').click( function(event){
109
+ event.preventDefault();
110
+ if( $('#dbem-booking-cancel').html() == '<?php _e('Cancel a booking', 'dbem'); ?>' ){
111
+ $('#dbem-booking-cancel').html('<?php _e('Hide cancellation form', 'dbem'); ?>');
112
+ $('#dbem-booking-delete').slideDown();
113
+ }else{
114
+ $('#dbem-booking-cancel').html('<?php _e('Cancel a booking', 'dbem'); ?>');
115
+ $('#dbem-booking-delete').slideUp();
116
+ }
117
+ });
118
+ }
119
+ });
120
+ </script>
121
+ <?php
122
+ return ob_get_clean();
123
+ }
124
+
125
+ /**
126
+ * Booking removal in front end, called by placeholder #_REMOVEBOOKINGFORM
127
+ * @return string
128
+ */
129
+ function em_delete_booking_form() {
130
+ global $dbem_form_messages_booking_delete, $EM_Event;
131
+ $destination = "?".$_SERVER['QUERY_STRING'];
132
+ ob_start();
133
+ ?>
134
+ <div id="dbem-booking-delete">
135
+ <a name="dbem-booking-delete"></a>
136
+ <h3><?php _e('Cancel your booking', 'dbem') ?></h3>
137
+
138
+ <?php if( !empty($dbem_form_messages_booking_delete['success']) ) : ?>
139
+ <div class='dbem-rsvp-message-success'><?php echo $dbem_form_messages_booking_delete['success'] ?></div>
140
+ <?php elseif( !empty($dbem_form_messages_booking_delete['error']) ) : ?>
141
+ <div class='dbem-rsvp-message-error'><?php echo $dbem_form_messages_booking_delete['error'] ?></div>
142
+ <?php elseif( !empty($dbem_form_messages_booking_delete['message']) ) : ?>
143
+ <div class='dbem-rsvp-message'><?php echo $dbem_form_messages_booking_delete['message'] ?></div>
144
+ <?php endif; ?>
145
+
146
+ <form name='booking-delete-form' method='post' action='<?php echo $destination ?>#dbem-booking-delete'>
147
+ <table class='dbem-rsvp-form'>
148
+ <tr>
149
+ <th scope='row'><?php _e('Name', 'dbem') ?>:</th><td><input type='text' name='person_name' value='<?php echo !empty($_POST['person_name']) ? $_POST['person_name'] : ''; ?>'/></td>
150
+ </tr>
151
+ <tr>
152
+ <th scope='row'><?php _e('E-Mail', 'dbem') ?>:</th><td><input type='text' name='person_email' value='<?php echo !empty($_POST['person_email']) ? $_POST['person_email'] : ''; ?>'/></td>
153
+ </tr>
154
+ </table>
155
+ <input type='hidden' name='eventAction' value='delete_booking'/>
156
+ <input type='hidden' name='event_id' value='<?php echo $EM_Event->id; ?>'/>
157
+ <input type='submit' value='<?php _e('Cancel your booking', 'dbem') ?>'/>
158
+ </form>
159
+ </div>
160
+ <?php
161
+ return ob_get_clean();
162
+ }
163
  ?>
em-events.php CHANGED
@@ -14,14 +14,16 @@ function em_content($content) {
14
  global $wpdb, $EM_Event;
15
  //TODO FILTER - filter em page content before placeholder replacing
16
  //TODO any loop should put the current $EM_Event etc. into the global variable
 
 
 
 
 
 
 
17
  if ( !empty($_REQUEST['calendar_day']) ) {
18
  //Events for a specific day
19
- $args = array(
20
- 'orderby' => get_option('dbem_events_default_orderby'),
21
- 'order' => get_option('dbem_events_default_order'),
22
- 'scope'=> $_REQUEST['calendar_day'],
23
- 'pagination' => 1
24
- );
25
  $page = ( !empty($_GET['page']) && is_numeric($_GET['page']) )? $_GET['page'] : 1;
26
  $events = EM_Events::get( apply_filters('em_content_calendar_day_args', $args) ); //Get events first, so we know how many there are in advance
27
  if ( count($events) > 1 || $page > 1 || get_option('dbem_display_calendar_day_single') == 1 ) {
@@ -46,11 +48,7 @@ function em_content($content) {
46
  // Multiple events page
47
  $scope = ( !empty($_REQUEST['scope']) ) ? EM_Object::sanitize($_REQUEST['scope']) : "future";
48
  //If we have a $_GET['page'] var, use it to calculate the offset/limit ratios (safer than offset/limit get vars)
49
- $args = array(
50
- 'orderby' => get_option('dbem_events_default_orderby'),
51
- 'order' => get_option('dbem_events_default_order'),
52
- 'scope' => $scope
53
- );
54
  if ( !empty($_REQUEST['category_id']) ) $args['category'] = $_REQUEST['category_id'];
55
  if (get_option ( 'dbem_display_calendar_in_events_page' )){
56
  $args['full'] = 1;
@@ -58,8 +56,14 @@ function em_content($content) {
58
  $content = EM_Calendar::output( apply_filters('em_content_calendar_args', $args) );
59
  }else{
60
  $args['limit'] = get_option('dbem_events_default_limit');
61
- $args['pagination'] = 1;
62
  $args['page'] = ( !empty($_GET['page']) && is_numeric($_GET['page']) )? $_GET['page'] : 1;
 
 
 
 
 
 
 
63
  $content = EM_Events::output( apply_filters('em_content_events_args', $args) );
64
  }
65
  }
@@ -86,7 +90,7 @@ function em_events_page_title($content) {
86
 
87
  if ( $post->ID == $events_page_id && $events_page_id != 0 ) {
88
  if (isset ( $_REQUEST['calendar_day'] ) && $_REQUEST['calendar_day'] != '') {
89
- $events = EM_Events::get(array('limit'=>2,'scope'=>$_REQUEST['calendar_day']));
90
  if ( count($events) != 1 || get_option('dbem_display_calendar_day_single') == 1 ) {
91
  //We only support dates for the calendar day list title, so we do a simple filter for the supplied calendar_day
92
  $content = get_option ('dbem_list_date_title');
14
  global $wpdb, $EM_Event;
15
  //TODO FILTER - filter em page content before placeholder replacing
16
  //TODO any loop should put the current $EM_Event etc. into the global variable
17
+ //general defaults
18
+ $args = array(
19
+ 'orderby' => get_option('dbem_events_default_orderby'),
20
+ 'order' => get_option('dbem_events_default_order'),
21
+ 'owner' => false,
22
+ 'pagination' => 1
23
+ );
24
  if ( !empty($_REQUEST['calendar_day']) ) {
25
  //Events for a specific day
26
+ $args['scope'] = $_REQUEST['calendar_day'];
 
 
 
 
 
27
  $page = ( !empty($_GET['page']) && is_numeric($_GET['page']) )? $_GET['page'] : 1;
28
  $events = EM_Events::get( apply_filters('em_content_calendar_day_args', $args) ); //Get events first, so we know how many there are in advance
29
  if ( count($events) > 1 || $page > 1 || get_option('dbem_display_calendar_day_single') == 1 ) {
48
  // Multiple events page
49
  $scope = ( !empty($_REQUEST['scope']) ) ? EM_Object::sanitize($_REQUEST['scope']) : "future";
50
  //If we have a $_GET['page'] var, use it to calculate the offset/limit ratios (safer than offset/limit get vars)
51
+ $args['scope'] = $scope;
 
 
 
 
52
  if ( !empty($_REQUEST['category_id']) ) $args['category'] = $_REQUEST['category_id'];
53
  if (get_option ( 'dbem_display_calendar_in_events_page' )){
54
  $args['full'] = 1;
56
  $content = EM_Calendar::output( apply_filters('em_content_calendar_args', $args) );
57
  }else{
58
  $args['limit'] = get_option('dbem_events_default_limit');
 
59
  $args['page'] = ( !empty($_GET['page']) && is_numeric($_GET['page']) )? $_GET['page'] : 1;
60
+
61
+ /*calculate event list time range */
62
+ $time_limit = get_option('dbem_events_page_time_limit');
63
+ if ( is_numeric($time_limit) && $time_limit > 0 ){
64
+ $args['scope'] = date('Y-m-d').",".date('Y-m-t', strtotime('+'.($time_limit-1).' month'));
65
+ }
66
+
67
  $content = EM_Events::output( apply_filters('em_content_events_args', $args) );
68
  }
69
  }
90
 
91
  if ( $post->ID == $events_page_id && $events_page_id != 0 ) {
92
  if (isset ( $_REQUEST['calendar_day'] ) && $_REQUEST['calendar_day'] != '') {
93
+ $events = EM_Events::get(array('limit'=>2,'scope'=>$_REQUEST['calendar_day'],'owner'=>false));
94
  if ( count($events) != 1 || get_option('dbem_display_calendar_day_single') == 1 ) {
95
  //We only support dates for the calendar day list title, so we do a simple filter for the supplied calendar_day
96
  $content = get_option ('dbem_list_date_title');
em-functions.php CHANGED
@@ -1,4 +1,18 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  function em_hello_to_new_user() {
3
  if ( get_option ( 'dbem_hello_to_user' ) == 1 ) {
4
  $current_user = wp_get_current_user ();
@@ -30,19 +44,19 @@ function em_paginate($link, $total, $limit, $page=1, $pagesToShow=10){
30
  $placeholder = urlencode('%PAGE%');
31
  $link = str_replace('%PAGE%', urlencode('%PAGE%'), $link); //To avoid url encoded/non encoded placeholders
32
  //Add the back and first buttons
33
- $string = ($page>1) ? '<a href="'.str_replace($placeholder,1,$link).'">&lt;&lt;</a> ' : '&lt;&lt; ';
34
- $string .= ($page>1) ? ' <a href="'.str_replace($placeholder,$page-1,$link).'">&lt;</a> ' : '&lt; ';
35
  //Loop each page and create a link or just a bold number if its the current page
36
  for ($i = $startPage ; $i < $startPage+$pagesToShow && $i <= $maxPages ; $i++){
37
  if($i == $page){
38
- $string .= " <strong>$i</strong>";
39
  }else{
40
- $string .= ' <a href="'.str_replace($placeholder,$i,$link).'">'.$i.'</a> ';
41
  }
42
  }
43
  //Add the forward and last buttons
44
- $string .= ($page < $maxPages) ? ' <a href="'.str_replace($placeholder,$page+1,$link).'">&gt;</a> ' :' &gt; ' ;
45
- $string .= ($i-1 < $maxPages) ? ' <a href="'.str_replace($placeholder,$maxPages,$link).'">&gt;&gt;</a> ' : '&gt;&gt; ';
46
  //Return the string
47
  return $string;
48
  }
@@ -52,13 +66,37 @@ function em_paginate($link, $total, $limit, $page=1, $pagesToShow=10){
52
  * Takes a url and appends GET params (supplied as an assoc array), it automatically detects if you already have a querystring there
53
  * @param string $url
54
  * @param array $params
 
 
 
55
  */
56
- function em_add_get_params($url, $params=array(), $html=true, $encode=true){
57
- $has_querystring = (stristr($url, "?"));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  $count = 0;
59
  foreach($params as $key=>$value){
60
  $value = ($encode) ? urlencode($value):$value;
61
- if( $count == 0 && !$has_querystring ){
62
  $url .= "?{$key}=".$value;
63
  }else{
64
  $url .= ($html) ? "&amp;{$key}=".$value:"&{$key}=".$value;
@@ -159,6 +197,24 @@ function em_options_textarea($title, $name, $description) {
159
  <?php
160
  }
161
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  function em_options_radio_binary($title, $name, $description) {
163
  $list_events_page = get_option($name); ?>
164
 
@@ -172,6 +228,7 @@ function em_options_radio_binary($title, $name, $description) {
172
  </tr>
173
  <?php
174
  }
 
175
  function em_options_select($title, $name, $list, $description) {
176
  $option_value = get_option($name);
177
  if( $name == 'dbem_events_page' && !is_object(get_page($option_value)) ){
1
  <?php
2
+
3
+
4
+ /**
5
+ * Currently, just is_super_admin() but allows scalability of permissions now.
6
+ * @param int $user_id
7
+ * @return boolean
8
+ */
9
+ function em_verify_admin( $user_id = false ){
10
+ return is_super_admin($user_id);
11
+ }
12
+
13
+ /**
14
+ * Intro paragraph to new users.
15
+ */
16
  function em_hello_to_new_user() {
17
  if ( get_option ( 'dbem_hello_to_user' ) == 1 ) {
18
  $current_user = wp_get_current_user ();
44
  $placeholder = urlencode('%PAGE%');
45
  $link = str_replace('%PAGE%', urlencode('%PAGE%'), $link); //To avoid url encoded/non encoded placeholders
46
  //Add the back and first buttons
47
+ $string = ($page>1 && $startPage != 1) ? '<a class="prev page-numbers" href="'.str_replace($placeholder,1,$link).'">&lt;&lt;</a> ' : '';
48
+ $string .= ($page>1) ? ' <a class="prev page-numbers" href="'.str_replace($placeholder,$page-1,$link).'">&lt;</a> ' : '';
49
  //Loop each page and create a link or just a bold number if its the current page
50
  for ($i = $startPage ; $i < $startPage+$pagesToShow && $i <= $maxPages ; $i++){
51
  if($i == $page){
52
+ $string .= ' <strong><span class="page-numbers current">'.$i.'</span></strong>';
53
  }else{
54
+ $string .= ' <a class="page-numbers" href="'.str_replace($placeholder,$i,$link).'">'.$i.'</a> ';
55
  }
56
  }
57
  //Add the forward and last buttons
58
+ $string .= ($page < $maxPages) ? ' <a class="next page-numbers" href="'.str_replace($placeholder,$page+1,$link).'">&gt;</a> ' :' ' ;
59
+ $string .= ($i-1 < $maxPages) ? ' <a class="next page-numbers" href="'.str_replace($placeholder,$maxPages,$link).'">&gt;&gt;</a> ' : ' ';
60
  //Return the string
61
  return $string;
62
  }
66
  * Takes a url and appends GET params (supplied as an assoc array), it automatically detects if you already have a querystring there
67
  * @param string $url
68
  * @param array $params
69
+ * @param bool $html
70
+ * @param bool $encode
71
+ * @return string
72
  */
73
+ function em_add_get_params($url, $params=array(), $html=true, $encode=true){
74
+ //Splig the url up to get the params and the page location
75
+ $url_parts = explode('?', $url);
76
+ $url = $url_parts[0];
77
+ $url_params_dirty = array();
78
+ if(count($url_parts) > 1){
79
+ $url_params_dirty = $url_parts[1];
80
+ }
81
+ //get the get params as an array
82
+ if( strstr($url_params_dirty, '&amp;') !== false ){
83
+ $url_params_dirty = explode('&amp;', $url_params_dirty);
84
+ }else{
85
+ $url_params_dirty = explode('&', $url_params_dirty);
86
+ }
87
+ //split further into associative array
88
+ $url_params = array();
89
+ foreach($url_params_dirty as $url_param){
90
+ $url_param = explode('=', $url_param);
91
+ $url_params[$url_param[0]] = $url_param[1];
92
+ }
93
+ //Merge it together
94
+ $params = array_merge($url_params, $params);
95
+ //Now build the array back up.
96
  $count = 0;
97
  foreach($params as $key=>$value){
98
  $value = ($encode) ? urlencode($value):$value;
99
+ if( $count == 0 ){
100
  $url .= "?{$key}=".$value;
101
  }else{
102
  $url .= ($html) ? "&amp;{$key}=".$value:"&{$key}=".$value;
197
  <?php
198
  }
199
 
200
+ function em_options_radio($name, $options) {
201
+ $option = get_option($name);
202
+ ?>
203
+ <tr valign="top" id='<?php echo $name;?>_row'>
204
+ <td colspan="2">
205
+ <table>
206
+ <?php foreach($options as $value => $text): ?>
207
+ <tr>
208
+ <td><input id="<?php echo $name ?>_<?php echo $value; ?>" name="<?php echo $name ?>" type="radio" value="<?php echo $value; ?>" <?php if($option == $value) echo "checked='checked'"; ?> /></td>
209
+ <td><?php echo $text ?></td>
210
+ </tr>
211
+ <?php endforeach; ?>
212
+ </table>
213
+ </td>
214
+ </tr>
215
+ <?php
216
+ }
217
+
218
  function em_options_radio_binary($title, $name, $description) {
219
  $list_events_page = get_option($name); ?>
220
 
228
  </tr>
229
  <?php
230
  }
231
+
232
  function em_options_select($title, $name, $list, $description) {
233
  $option_value = get_option($name);
234
  if( $name == 'dbem_events_page' && !is_object(get_page($option_value)) ){
em-install.php CHANGED
@@ -13,6 +13,7 @@ function em_install() {
13
  if( EM_VERSION > $old_version || $old_version == '' ){
14
  // Creates the events table if necessary
15
  em_create_events_table();
 
16
  em_create_locations_table();
17
  em_create_bookings_table();
18
  em_create_people_table();
@@ -82,6 +83,28 @@ function em_create_events_table() {
82
  }
83
  }
84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  function em_create_locations_table() {
86
 
87
  global $wpdb, $user_level;
@@ -91,6 +114,7 @@ function em_create_locations_table() {
91
  $sql = "CREATE TABLE ".$table_name." (
92
  location_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
93
  location_name tinytext NOT NULL,
 
94
  location_address tinytext NOT NULL,
95
  location_town tinytext NOT NULL,
96
  location_province tinytext,
@@ -127,6 +151,7 @@ function em_create_bookings_table() {
127
  booking_seats int(5) NOT NULL,
128
  booking_comment text DEFAULT NULL,
129
  booking_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 
130
  PRIMARY KEY (booking_id)
131
  ) DEFAULT CHARSET=utf8 ;";
132
  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
@@ -140,6 +165,7 @@ function em_create_people_table() {
140
 
141
  $sql = "CREATE TABLE ".$table_name." (
142
  person_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
 
143
  person_name tinytext NOT NULL,
144
  person_email tinytext NOT NULL,
145
  person_phone tinytext NOT NULL,
@@ -158,6 +184,7 @@ function em_create_categories_table() {
158
  // Creating the events table
159
  $sql = "CREATE TABLE ".$table_name." (
160
  category_id bigint(20) unsigned NOT NULL auto_increment,
 
161
  category_name tinytext NOT NULL,
162
  PRIMARY KEY (category_id)
163
  ) DEFAULT CHARSET=utf8 ;";
@@ -175,67 +202,123 @@ function em_create_categories_table() {
175
 
176
 
177
  function em_add_options() {
178
- $contact_person_email_body_localizable = __("#_BOOKINGNAME (#_BOOKINGEMAIL) will attend #_NAME on #m #d, #Y. He wants to reserve #_BOOKINGSPACES spaces.<br/> Now there are #_BOOKEDSPACES spaces reserved, #_AVAILABLESPACES are still available.<br/>Yours faithfully,<br/>Events Manager",'dbem') ;
179
- $respondent_email_body_localizable = __("Dear #_BOOKINGNAME, <br/>you have successfully reserved #_BOOKEDSPACES space/spaces for #_NAME.<br/>Yours faithfully,<br/>#_CONTACTNAME",'dbem');
 
 
 
 
180
 
181
  $dbem_options = array(
 
 
 
 
 
 
 
 
 
 
 
 
182
  'dbem_event_list_item_format' => '<li>#j #M #Y - #H:#i<br/> #_EVENTLINK<br/>#_LOCATIONTOWN </li>',
183
  'dbem_display_calendar_in_events_page' => 0,
184
  'dbem_single_event_format' => '<h3>#_NAME</h3><p>#j #M #Y - #H:#i</p><p>#_LOCATIONTOWN</p>',
185
  'dbem_event_page_title_format' => '#_NAME',
186
- 'dbem_list_events_page' => 1,
187
- 'dbem_events_page_title' => __('Events','dbem'),
188
  'dbem_no_events_message' => __('No events','dbem'),
 
189
  'dbem_location_page_title_format' => '#_LOCATIONNAME',
190
- 'dbem_location_baloon_format' => "<strong>#_LOCATIONNAME</strong><br/>#_LOCATIONADDRESS - #_LOCATIONTOWN<br/><a href='#_LOCATIONPAGEURL'>Details</a>",
191
  'dbem_location_event_list_item_format' => "<li>#_LOCATIONNAME - #j #M #Y - #H:#i</li>",
192
  'dbem_location_list_item_format' => '#_LOCATIONLINK<ul><li>#_LOCATIONADDRESS</li><li>#_LOCATIONTOWN</li></ul>',
193
  'dbem_location_no_events_message' => __('<li>No events in this location</li>', 'dbem'),
194
  'dbem_single_location_format' => '<p>#_LOCATIONADDRESS</p><p>#_LOCATIONTOWN</p>',
195
- 'dbem_map_text_format' => '<strong>#_LOCATION</strong><p>#_LOCATIONADDRESS</p><p>#_LOCATIONTOWN</p>',
196
  'dbem_rss_main_title' => get_bloginfo('title')." - ".__('Events'),
197
  'dbem_rss_main_description' => get_bloginfo('description')." - ".__('Events'),
198
  'dbem_rss_description_format' => "#j #M #y - #H:#i <br/>#_LOCATION <br/>#_LOCATIONADDRESS <br/>#_LOCATIONTOWN",
199
  'dbem_rss_title_format' => "#_NAME",
 
200
  'dbem_gmap_is_active'=> 1,
201
- 'dbem_default_contact_person' => 1,
202
- 'dbem_rsvp_notify_contact' => 1 ,
203
- 'dbem_contactperson_email_body' => __(str_replace("<br/>", "\n\r", $contact_person_email_body_localizable)),
204
- 'dbem_respondent_email_body' => __(str_replace("<br/>", "\n\r", $respondent_email_body_localizable)),
205
  'dbem_rsvp_mail_port' => 465,
206
  'dbem_smtp_host' => 'localhost',
207
  'dbem_mail_sender_name' => '',
208
  'dbem_rsvp_mail_send_method' => 'smtp',
209
  'dbem_rsvp_mail_SMTPAuth' => 1,
 
210
  'dbem_image_max_width' => 700,
211
  'dbem_image_max_height' => 700,
212
  'dbem_image_max_size' => 204800,
 
213
  'dbem_list_date_title' => __('Events', 'dbem').' - #j #M #y',
214
  'dbem_full_calendar_event_format' => '<li>#_EVENTLINK</li>',
215
  'dbem_full_calendar_long_events' => '0',
216
  'dbem_small_calendar_event_title_format' => "#_NAME",
217
  'dbem_small_calendar_event_title_separator' => ", ",
218
- 'dbem_hello_to_user' => 1,
219
- 'dbem_use_select_for_locations' => false,
220
- 'dbem_attributes_enabled' => true,
221
- 'dbem_recurrence_enabled'=> true,
222
- 'dbem_rsvp_enabled'=> true,
223
- 'dbem_categories_enabled'=> true,
 
 
 
 
 
 
224
  'dbem_disable_title_rewrites'=> false,
225
  'dbem_title_html' => '<h2>#_PAGETITLE</h2>',
226
- 'dbem_events_default_orderby' => 'start_date,start_time,name',
227
- 'dbem_events_default_order' => 'ASC',
228
- 'dbem_events_default_limit' => 10,
229
- //'dbem_bookings_approval' => 1,
230
- 'dbem_bookings_notify_admin' => ''
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  );
232
 
233
  foreach($dbem_options as $key => $value){
234
  add_option($key, $value);
235
  }
236
  //Customization for new options on updated plugins (not new installs)
237
- if( get_option('dbem_version') != '' ){
238
- //update_option('dbem_bookings_approval',0); //Previously in <3.0.9 bookings were never approvable
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  }
240
  }
241
 
13
  if( EM_VERSION > $old_version || $old_version == '' ){
14
  // Creates the events table if necessary
15
  em_create_events_table();
16
+ em_create_events_meta_table();
17
  em_create_locations_table();
18
  em_create_bookings_table();
19
  em_create_people_table();
83
  }
84
  }
85
 
86
+ function em_create_events_meta_table(){
87
+ global $wpdb, $user_level;
88
+ $table_name = $wpdb->prefix.EM_META_TABLE;
89
+
90
+ // Creating the events table
91
+ $sql = "CREATE TABLE ".$table_name." (
92
+ meta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
93
+ object_id bigint(20) unsigned NOT NULL,
94
+ meta_key varchar(255) DEFAULT NULL,
95
+ meta_value longtext,
96
+ meta_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
97
+ KEY post_id (object_id),
98
+ KEY meta_key (meta_key),
99
+ PRIMARY KEY (meta_id)
100
+ ) DEFAULT CHARSET=utf8 ";
101
+
102
+ require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
103
+
104
+ $old_table_name = $wpdb->prefix.EM_OLD_LOCATIONS_TABLE;
105
+ dbDelta($sql);
106
+ }
107
+
108
  function em_create_locations_table() {
109
 
110
  global $wpdb, $user_level;
114
  $sql = "CREATE TABLE ".$table_name." (
115
  location_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
116
  location_name tinytext NOT NULL,
117
+ location_owner bigint(20) unsigned DEFAULT 0 NOT NULL,
118
  location_address tinytext NOT NULL,
119
  location_town tinytext NOT NULL,
120
  location_province tinytext,
151
  booking_seats int(5) NOT NULL,
152
  booking_comment text DEFAULT NULL,
153
  booking_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
154
+ booking_status bool NOT NULL DEFAULT 1,
155
  PRIMARY KEY (booking_id)
156
  ) DEFAULT CHARSET=utf8 ;";
157
  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
165
 
166
  $sql = "CREATE TABLE ".$table_name." (
167
  person_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
168
+ person_owner bigint(20) unsigned DEFAULT 0 NOT NULL,
169
  person_name tinytext NOT NULL,
170
  person_email tinytext NOT NULL,
171
  person_phone tinytext NOT NULL,
184
  // Creating the events table
185
  $sql = "CREATE TABLE ".$table_name." (
186
  category_id bigint(20) unsigned NOT NULL auto_increment,
187
+ category_owner bigint(20) unsigned DEFAULT 0 NOT NULL,
188
  category_name tinytext NOT NULL,
189
  PRIMARY KEY (category_id)
190
  ) DEFAULT CHARSET=utf8 ;";
202
 
203
 
204
  function em_add_options() {
205
+ $contact_person_email_body_localizable = __("#_BOOKINGNAME (#_BOOKINGEMAIL) will attend #_NAME on #F #j, #Y. He wants to reserve #_BOOKINGSPACES spaces.<br/> Now there are #_BOOKEDSPACES spaces reserved, #_AVAILABLESPACES are still available.<br/>Yours faithfully,<br/>Events Manager - http://wp-events-plugin.com",'dbem').__('<br/><br/>-------------------------------<br/>Powered by Events Manager - http://wp-events-plugin.com','dbem');
206
+ $contact_person_email_cancelled_body_localizable = __("#_BOOKINGNAME (#_BOOKINGEMAIL) cancelled his booking at #_NAME on #F #j, #Y. He wanted to reserve #_BOOKINGSPACES spaces.<br/> Now there are #_BOOKEDSPACES spaces reserved, #_AVAILABLESPACES are still available.<br/>Yours faithfully,<br/>Events Manager - http://wp-events-plugin.com",'dbem').__('<br/><br/>-------------------------------<br/>Powered by Events Manager - http://wp-events-plugin.com','dbem');
207
+ $respondent_email_body_localizable = __("Dear #_BOOKINGNAME, <br/>you have successfully reserved #_BOOKINGSPACES space/spaces for #_NAME.<br/>Yours faithfully,<br/>#_CONTACTNAME",'dbem').__('<br/><br/>-------------------------------<br/>Powered by Events Manager - http://wp-events-plugin.com','dbem');
208
+ $respondent_email_pending_body_localizable = __("Dear #_BOOKINGNAME, <br/>You have requested #_BOOKEDSPACES space/spaces for #_NAME.<br/>Your booking is currently pending approval by our administrators. Once approved you will receive an automatic confrimation.<br/>Yours faithfully,<br/>#_CONTACTNAME",'dbem').__('<br/><br/>-------------------------------<br/>Powered by Events Manager - http://wp-events-plugin.com','dbem');
209
+ $respondent_email_rejected_body_localizable = __("Dear #_BOOKINGNAME, <br/>Your requested booking for #_BOOKINGSPACES spaces at #_NAME on #F #j, #Y has been rejected.<br/>Yours faithfully,<br/>#_CONTACTNAME",'dbem').__('<br/><br/>-------------------------------<br/>Powered by Events Manager - http://wp-events-plugin.com','dbem');
210
+ $respondent_email_cancelled_body_localizable = __("Dear #_BOOKINGNAME, <br/>Your requested booking for #_BOOKINGSPACES spaces at #_NAME on #F #j, #Y has been cancelled.<br/>Yours faithfully,<br/>#_CONTACTNAME",'dbem').__('<br/><br/>-------------------------------<br/>Powered by Events Manager - http://wp-events-plugin.com','dbem');
211
 
212
  $dbem_options = array(
213
+ //defaults
214
+ 'dbem_default_category'=>0,
215
+ 'dbem_default_location'=>0,
216
+ //Event List Options
217
+ 'dbem_events_default_orderby' => 'start_date,start_time,name',
218
+ 'dbem_events_default_order' => 'ASC',
219
+ 'dbem_events_default_limit' => 10,
220
+ 'dbem_permissions_events' => 0, //can others view other's events
221
+ 'dbem_list_events_page' => 1,
222
+ //Event Formatting
223
+ 'dbem_events_page_title' => __('Events','dbem'),
224
+ 'dbem_events_page_time_limit' => 0,
225
  'dbem_event_list_item_format' => '<li>#j #M #Y - #H:#i<br/> #_EVENTLINK<br/>#_LOCATIONTOWN </li>',
226
  'dbem_display_calendar_in_events_page' => 0,
227
  'dbem_single_event_format' => '<h3>#_NAME</h3><p>#j #M #Y - #H:#i</p><p>#_LOCATIONTOWN</p>',
228
  'dbem_event_page_title_format' => '#_NAME',
 
 
229
  'dbem_no_events_message' => __('No events','dbem'),
230
+ //Location Formatting
231
  'dbem_location_page_title_format' => '#_LOCATIONNAME',
 
232
  'dbem_location_event_list_item_format' => "<li>#_LOCATIONNAME - #j #M #Y - #H:#i</li>",
233
  'dbem_location_list_item_format' => '#_LOCATIONLINK<ul><li>#_LOCATIONADDRESS</li><li>#_LOCATIONTOWN</li></ul>',
234
  'dbem_location_no_events_message' => __('<li>No events in this location</li>', 'dbem'),
235
  'dbem_single_location_format' => '<p>#_LOCATIONADDRESS</p><p>#_LOCATIONTOWN</p>',
236
+ //RSS Stuff
237
  'dbem_rss_main_title' => get_bloginfo('title')." - ".__('Events'),
238
  'dbem_rss_main_description' => get_bloginfo('description')." - ".__('Events'),
239
  'dbem_rss_description_format' => "#j #M #y - #H:#i <br/>#_LOCATION <br/>#_LOCATIONADDRESS <br/>#_LOCATIONTOWN",
240
  'dbem_rss_title_format' => "#_NAME",
241
+ //Google Maps
242
  'dbem_gmap_is_active'=> 1,
243
+ 'dbem_location_baloon_format' => "<strong>#_LOCATIONNAME</strong><br/>#_LOCATIONADDRESS - #_LOCATIONTOWN<br/><a href='#_LOCATIONPAGEURL'>Details</a>",
244
+ 'dbem_map_text_format' => '<strong>#_LOCATION</strong><p>#_LOCATIONADDRESS</p><p>#_LOCATIONTOWN</p>',
245
+ //Email Config
 
246
  'dbem_rsvp_mail_port' => 465,
247
  'dbem_smtp_host' => 'localhost',
248
  'dbem_mail_sender_name' => '',
249
  'dbem_rsvp_mail_send_method' => 'smtp',
250
  'dbem_rsvp_mail_SMTPAuth' => 1,
251
+ //Image Manipulation
252
  'dbem_image_max_width' => 700,
253
  'dbem_image_max_height' => 700,
254
  'dbem_image_max_size' => 204800,
255
+ //Calendar Options
256
  'dbem_list_date_title' => __('Events', 'dbem').' - #j #M #y',
257
  'dbem_full_calendar_event_format' => '<li>#_EVENTLINK</li>',
258
  'dbem_full_calendar_long_events' => '0',
259
  'dbem_small_calendar_event_title_format' => "#_NAME",
260
  'dbem_small_calendar_event_title_separator' => ", ",
261
+ //General Settings
262
+ 'dbem_use_select_for_locations' => 0,
263
+ 'dbem_attributes_enabled' => 1,
264
+ 'dbem_recurrence_enabled'=> 1,
265
+ 'dbem_rsvp_enabled'=> 1,
266
+ 'dbem_categories_enabled'=> 1,
267
+ 'dbem_placeholders_custom' => '',
268
+ //Privacy Settings
269
+ 'dbem_permissions_events' => 0,
270
+ 'dbem_permissions_locations' => 0,
271
+ 'dbem_permissions_categories' => 0,
272
+ //Title rewriting compatability
273
  'dbem_disable_title_rewrites'=> false,
274
  'dbem_title_html' => '<h2>#_PAGETITLE</h2>',
275
+ //Bookings
276
+ 'dbem_bookings_approval' => 1,
277
+ 'dbem_bookings_notify_admin' => 0,
278
+ 'dbem_default_contact_person' => 1,
279
+ 'dbem_bookings_contact_email' => 1,
280
+ 'dbem_contactperson_email_subject' => __("New booking",'dbem'),
281
+ 'dbem_contactperson_email_body' => str_replace("<br/>", "\n\r", $contact_person_email_body_localizable),
282
+ 'dbem_contactperson_email_cancelled_subject' => __("Booking Cancelled",'dbem'),
283
+ 'dbem_contactperson_email_cancelled_body' => str_replace("<br/>", "\n\r", $contact_person_email_cancelled_body_localizable),
284
+ 'dbem_bookings_email_pending_subject' => __("Reservation Pending",'dbem'),
285
+ 'dbem_bookings_email_pending_body' => str_replace("<br/>", "\n\r", $respondent_email_pending_body_localizable),
286
+ 'dbem_bookings_email_rejected_subject' => __("Reservation Rejected",'dbem'),
287
+ 'dbem_bookings_email_rejected_body' => str_replace("<br/>", "\n\r", $respondent_email_rejected_body_localizable),
288
+ 'dbem_bookings_email_confirmed_subject' => __('Booking Confirmed','dbem'),
289
+ 'dbem_bookings_email_confirmed_body' => str_replace("<br/>", "\n\r", $respondent_email_body_localizable),
290
+ 'dbem_bookings_email_cancelled_subject' => __('Booking Cancelled','dbem'),
291
+ 'dbem_bookings_email_cancelled_body' => str_replace("<br/>", "\n\r", $respondent_email_cancelled_body_localizable),
292
+ //Flags
293
+ 'dbem_hello_to_user' => 1,
294
  );
295
 
296
  foreach($dbem_options as $key => $value){
297
  add_option($key, $value);
298
  }
299
  //Customization for new options on updated plugins (not new installs)
300
+ if( get_option('dbem_version') != '' && get_option('dbem_version') <= 3.091){
301
+ //New options, defaults for updates
302
+ add_option('dbem_admin_notice_3.0.91',1);
303
+ update_option('dbem_bookings_approval',0); //Previously in <3.0.9 bookings were never approvable
304
+ update_option('dbem_bookings_approval_warning',1); //One off warning for old EM users to activate this new feature
305
+ update_option('dbem_permissions_events',1); //set to 2, so updaters don't get a surprise!
306
+ update_option('dbem_permissions_locations',2); //set to 2, so updaters don't get a surprise!
307
+ update_option('dbem_permissions_categories',2); //set to 2, so updaters don't get a surprise!
308
+ //Contact person email flag
309
+ update_option('dbem_bookings_contact_email',get_option('dbem_rsvp_notify_contact'));
310
+ //Booking emails
311
+ if( get_option('dbem_respondent_email_body') != '' ){
312
+ update_option('dbem_bookings_email_confirmed_body', get_option('dbem_respondent_email_body'));
313
+ }
314
+ update_option('dbem_bookings_contact_email_subject', get_option('dbem_contactperson_email_subject'));
315
+ update_option('dbem_bookings_contact_email_body', get_option('dbem_contactperson_email_body'));
316
+ /* deleted options (won't do this in case some need to revert)
317
+ delete_option('dbem_rsvp_notify_contact');
318
+ delete_option('dbem_contactperson_email_subject');
319
+ delete_option('dbem_contactperson_email_body');
320
+ delete_option('dbem_respondent_email_body');
321
+ */
322
  }
323
  }
324
 
events-manager.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
  Plugin Name: Events Manager
4
- Version: 3.0.9
5
  Plugin URI: http://wp-events-plugin.com
6
  Description: Manage events specifying precise spatial data (Location, Town, Province, etc).
7
  Author: Davide Benini, Marcus Sykes
@@ -62,6 +62,7 @@ include_once('classes/em-booking.php');
62
  include_once('classes/em-bookings.php');
63
  include_once('classes/em-calendar.php');
64
  include_once('classes/em-category.php');
 
65
  include_once('classes/em-event.php');
66
  include_once('classes/em-events.php');
67
  include_once('classes/em-location.php');
@@ -82,13 +83,21 @@ if( is_admin() ){
82
  include_once('admin/em-locations.php');
83
  include_once('admin/em-options.php');
84
  include_once('admin/em-people.php');
 
 
 
 
 
 
 
85
  }
86
 
87
 
88
  // Setting constants
89
- define('EM_VERSION', 3.09); //self expanatory
90
  define('EM_CATEGORIES_TABLE', 'em_categories'); //TABLE NAME
91
  define('EM_EVENTS_TABLE','em_events'); //TABLE NAME
 
92
  define('EM_RECURRENCE_TABLE','dbem_recurrence'); //TABLE NAME
93
  define('EM_LOCATIONS_TABLE','em_locations'); //TABLE NAME
94
  define('EM_BOOKINGS_TABLE','em_bookings'); //TABLE NAME
@@ -136,16 +145,27 @@ load_plugin_textdomain('dbem', false, dirname( plugin_basename( __FILE__ ) ).'/i
136
  * @return null
137
  */
138
  function em_load_event(){
139
- global $EM_Event, $EM_Recurrences, $EM_Location, $EM_Mailer;
140
  $EM_Recurrences = array();
141
  if( isset( $_REQUEST['event_id'] ) && is_numeric($_REQUEST['event_id']) ){
142
  $EM_Event = new EM_Event($_REQUEST['event_id']);
143
- }elseif( isset($_REQUEST['recurrence_id']) && is_numeric($_REQUEST['recurrence_id']) ){
 
144
  //Eventually we can just remove this.... each event has an event_id regardless of what it is.
145
  $EM_Event = new EM_Event($_REQUEST['recurrence_id']);
146
- }elseif( isset($_REQUEST['location_id']) && is_numeric($_REQUEST['location_id']) ){
 
147
  $EM_Location = new EM_Location($_REQUEST['location_id']);
148
  }
 
 
 
 
 
 
 
 
 
149
  $EM_Mailer = new EM_Mailer();
150
  define('EM_URI', get_permalink(get_option("dbem_events_page"))); //PAGE URI OF EM
151
  define('EM_RSS_URI', get_bloginfo('wpurl')."/?dbem_rss=main"); //RSS PAGE URI
@@ -175,15 +195,29 @@ add_filter( 'plugin_row_meta', 'em_set_plugin_meta', 10, 2 );
175
  // Create the Manage Events and the Options submenus
176
  function em_create_events_submenu () {
177
  if(function_exists('add_submenu_page')) {
178
- //TODO Add flexible permissions
179
- add_object_page(__('Events', 'dbem'),__('Events', 'dbem'),EM_MIN_CAPABILITY,'events-manager','em_admin_events_page', '../wp-content/plugins/events-manager/includes/images/calendar-16.png');
 
 
 
 
 
 
 
 
180
  // Add a submenu to the custom top-level menu:
181
  $plugin_pages = array();
182
  $plugin_pages[] = add_submenu_page('events-manager', __('Edit'),__('Edit'),EM_MIN_CAPABILITY,'events-manager','em_admin_events_page');
183
  $plugin_pages[] = add_submenu_page('events-manager', __('Add new', 'dbem'), __('Add new','dbem'), EM_MIN_CAPABILITY, 'events-manager-event', "em_admin_event_page");
184
- $plugin_pages[] = add_submenu_page('events-manager', __('Locations', 'dbem'), __('Locations', 'dbem'), EM_MIN_CAPABILITY, 'events-manager-locations', "em_admin_locations_page");
185
- $plugin_pages[] = add_submenu_page('events-manager', __('People', 'dbem'), __('People', 'dbem'), EM_MIN_CAPABILITY, 'events-manager-people', "em_admin_people_page");
186
- $plugin_pages[] = add_submenu_page('events-manager', __('Event Categories','dbem'),__('Categories','dbem'), EM_SETTING_CAPABILITY, "events-manager-categories", 'em_admin_categories_page');
 
 
 
 
 
 
187
  $plugin_pages[] = add_submenu_page('events-manager', __('Events Manager Settings','dbem'),__('Settings','dbem'), EM_SETTING_CAPABILITY, "events-manager-options", 'em_admin_options_page');
188
  $plugin_pages[] = add_submenu_page('events-manager', __('Getting Help for Events Manager','dbem'),__('Help','dbem'), EM_SETTING_CAPABILITY, "events-manager-help", 'em_admin_help_page');
189
  foreach($plugin_pages as $plugin_page){
1
  <?php
2
  /*
3
  Plugin Name: Events Manager
4
+ Version: 3.0.91
5
  Plugin URI: http://wp-events-plugin.com
6
  Description: Manage events specifying precise spatial data (Location, Town, Province, etc).
7
  Author: Davide Benini, Marcus Sykes
62
  include_once('classes/em-bookings.php');
63
  include_once('classes/em-calendar.php');
64
  include_once('classes/em-category.php');
65
+ include_once('classes/em-categories.php');
66
  include_once('classes/em-event.php');
67
  include_once('classes/em-events.php');
68
  include_once('classes/em-location.php');
83
  include_once('admin/em-locations.php');
84
  include_once('admin/em-options.php');
85
  include_once('admin/em-people.php');
86
+ //bookings folder
87
+ include_once('admin/bookings/em-cancelled.php');
88
+ include_once('admin/bookings/em-confirmed.php');
89
+ include_once('admin/bookings/em-events.php');
90
+ include_once('admin/bookings/em-rejected.php');
91
+ include_once('admin/bookings/em-pending.php');
92
+ include_once('admin/bookings/em-person.php');
93
  }
94
 
95
 
96
  // Setting constants
97
+ define('EM_VERSION', 3.091); //self expanatory
98
  define('EM_CATEGORIES_TABLE', 'em_categories'); //TABLE NAME
99
  define('EM_EVENTS_TABLE','em_events'); //TABLE NAME
100
+ define('EM_META_TABLE','em_meta'); //TABLE NAME
101
  define('EM_RECURRENCE_TABLE','dbem_recurrence'); //TABLE NAME
102
  define('EM_LOCATIONS_TABLE','em_locations'); //TABLE NAME
103
  define('EM_BOOKINGS_TABLE','em_bookings'); //TABLE NAME
145
  * @return null
146
  */
147
  function em_load_event(){
148
+ global $EM_Event, $EM_Recurrences, $EM_Location, $EM_Mailer, $EM_Person, $EM_Booking, $EM_Category;
149
  $EM_Recurrences = array();
150
  if( isset( $_REQUEST['event_id'] ) && is_numeric($_REQUEST['event_id']) ){
151
  $EM_Event = new EM_Event($_REQUEST['event_id']);
152
+ }
153
+ if( isset($_REQUEST['recurrence_id']) && is_numeric($_REQUEST['recurrence_id']) ){
154
  //Eventually we can just remove this.... each event has an event_id regardless of what it is.
155
  $EM_Event = new EM_Event($_REQUEST['recurrence_id']);
156
+ }
157
+ if( isset($_REQUEST['location_id']) && is_numeric($_REQUEST['location_id']) ){
158
  $EM_Location = new EM_Location($_REQUEST['location_id']);
159
  }
160
+ if( isset($_REQUEST['person_id']) && is_numeric($_REQUEST['person_id']) ){
161
+ $EM_Person = new EM_Person($_REQUEST['person_id']);
162
+ }
163
+ if( isset($_REQUEST['booking_id']) && is_numeric($_REQUEST['booking_id']) ){
164
+ $EM_Booking = new EM_Booking($_REQUEST['booking_id']);
165
+ }
166
+ if( isset($_REQUEST['category_id']) && is_numeric($_REQUEST['category_id']) ){
167
+ $EM_Category = new EM_Category($_REQUEST['category_id']);
168
+ }
169
  $EM_Mailer = new EM_Mailer();
170
  define('EM_URI', get_permalink(get_option("dbem_events_page"))); //PAGE URI OF EM
171
  define('EM_RSS_URI', get_bloginfo('wpurl')."/?dbem_rss=main"); //RSS PAGE URI
195
  // Create the Manage Events and the Options submenus
196
  function em_create_events_submenu () {
197
  if(function_exists('add_submenu_page')) {
198
+ //Count pending bookings
199
+ $num = '';
200
+ if( get_option('dbem_bookings_approval') == 1){
201
+ $bookings_pending_count = count(EM_Bookings::get(array('status'=>0)));
202
+ //TODO Add flexible permissions
203
+ if($bookings_pending_count > 0){
204
+ $num = '<span class="update-plugins count-'.$bookings_pending_count.'"><span class="plugin-count">'.$bookings_pending_count.'</span></span>';
205
+ }
206
+ }
207
+ add_object_page(__('Events', 'dbem'),__('Events', 'dbem').$num,EM_MIN_CAPABILITY,'events-manager','em_admin_events_page', '../wp-content/plugins/events-manager/includes/images/calendar-16.png');
208
  // Add a submenu to the custom top-level menu:
209
  $plugin_pages = array();
210
  $plugin_pages[] = add_submenu_page('events-manager', __('Edit'),__('Edit'),EM_MIN_CAPABILITY,'events-manager','em_admin_events_page');
211
  $plugin_pages[] = add_submenu_page('events-manager', __('Add new', 'dbem'), __('Add new','dbem'), EM_MIN_CAPABILITY, 'events-manager-event', "em_admin_event_page");
212
+ if( get_option('dbem_permissions_locations') != 1 || em_verify_admin() ){
213
+ $plugin_pages[] = add_submenu_page('events-manager', __('Locations', 'dbem'), __('Locations', 'dbem'), EM_MIN_CAPABILITY, 'events-manager-locations', "em_admin_locations_page");
214
+ }
215
+ if(get_option('dbem_rsvp_enabled') == 1){
216
+ $plugin_pages[] = add_submenu_page('events-manager', __('Bookings', 'dbem'), __('Bookings', 'dbem').$num, EM_MIN_CAPABILITY, 'events-manager-bookings', "em_bookings_page");
217
+ }
218
+ if( get_option('dbem_permissions_categories') != 1 || em_verify_admin() ){
219
+ $plugin_pages[] = add_submenu_page('events-manager', __('Event Categories','dbem'),__('Categories','dbem'), EM_MIN_CAPABILITY, "events-manager-categories", 'em_admin_categories_page');
220
+ }
221
  $plugin_pages[] = add_submenu_page('events-manager', __('Events Manager Settings','dbem'),__('Settings','dbem'), EM_SETTING_CAPABILITY, "events-manager-options", 'em_admin_options_page');
222
  $plugin_pages[] = add_submenu_page('events-manager', __('Getting Help for Events Manager','dbem'),__('Help','dbem'), EM_SETTING_CAPABILITY, "events-manager-help", 'em_admin_help_page');
223
  foreach($plugin_pages as $plugin_page){
includes/css/events_manager.css CHANGED
@@ -141,7 +141,8 @@ Please edit your theme's CSS to override this
141
  .em-map-balloon .em-map-balloon-content {
142
  margin:0px 0px 0px 0px !important;
143
  padding:0px 0px 20px 0px !important;
144
- font-size:12px !important;
 
145
  width:auto !important;
146
  max-width:none !important;
147
  height:auto !important;
141
  .em-map-balloon .em-map-balloon-content {
142
  margin:0px 0px 0px 0px !important;
143
  padding:0px 0px 20px 0px !important;
144
+ font-size:12px !important;
145
+ color:#000000 !important;
146
  width:auto !important;
147
  max-width:none !important;
148
  height:auto !important;
includes/css/events_manager_admin.css CHANGED
@@ -52,6 +52,21 @@ div#icon-events{
52
  background:url('../images/calendar-32.png') no-repeat center;
53
  }
54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  /*Help Docs*/
56
  .em-docs h3 a { font-size:16px; padding:20px 0px 10px; text-decoration:underline; display:block; }
57
  .em-docs dl, .em-docs h2, .em-docs h3, .em-docs h4, .em-docs dl { clear:left; }
52
  background:url('../images/calendar-32.png') no-repeat center;
53
  }
54
 
55
+ /* Events Add Page */
56
+ #event-form #event-name, #location-form, #location-name { margin: 2px 0 7px; padding: 6px 5px; width: 100%; }
57
+
58
+ /* Google Map Object */
59
+ #location-balloon-content h3 { background:none; text-shadow:none; }
60
+
61
+ /* Options Page */
62
+ #dbem_options_form td, #dbem_options_form th { vertical-align:top; }
63
+
64
+ /* Widget Tables CSS */
65
+ .em_obj .table-wrap{
66
+ position:relative;
67
+ }
68
+ .em_obj #em-loading { position:absolute; width:100%; height:100%; background:#FFFFFF url(../images/loading.gif) 50% 50% no-repeat; left:0px; top:0px; opacity:0.8; filter:alpha(opacity=80)}
69
+
70
  /*Help Docs*/
71
  .em-docs h3 a { font-size:16px; padding:20px 0px 10px; text-decoration:underline; display:block; }
72
  .em-docs dl, .em-docs h2, .em-docs h3, .em-docs h4, .em-docs dl { clear:left; }
includes/js/em_admin.js CHANGED
@@ -1,221 +1,272 @@
1
- jQuery(document).ready( function($) {
2
- // Managing bookings delete operations
3
- $('a.bookingdelbutton').click( function(){
4
- eventId = (jQuery(this).parents('table:first').attr('id').split("-"))[3];
5
- idToRemove = (jQuery(this).parents('tr:first').attr('id').split("-"))[1];
6
- $.ajax({
7
- type: "POST",
8
- url: "admin.php?page=events-manager-people&action=remove_booking",
9
- data: "booking_id="+ idToRemove,
10
- success: function(){
11
- $('tr#booking-' + idToRemove).fadeOut('slow');
12
- $.getJSON("admin.php?page=events-manager-people&dbem_ajax_action=booking_data",{id: eventId, ajax: 'true'}, function(data){
13
- booked = data[0].bookedSeats;
14
- available = data[0].availableSeats;
15
- $('td#booked-seats').text(booked);
16
- $('td#available-seats').text(available);
17
- });
18
- }
19
- });
20
- });
21
-
22
- //Attributes
23
- $('#mtm_add_tag').click( function(event){
24
- event.preventDefault();
25
- //Get All meta rows
26
- var metas = $('#mtm_body').children();
27
- //Copy first row and change values
28
- var metaCopy = $(metas[0]).clone(true);
29
- newId = metas.length + 1;
30
- metaCopy.attr('id', 'mtm_'+newId);
31
- metaCopy.find('a').attr('rel', newId);
32
- metaCopy.find('[name=mtm_1_ref]').attr({
33
- name:'mtm_'+newId+'_ref' ,
34
- value:''
35
- });
36
- metaCopy.find('[name=mtm_1_content]').attr({
37
- name:'mtm_'+newId+'_content' ,
38
- value:''
39
- });
40
- metaCopy.find('[name=mtm_1_name]').attr({
41
- name:'mtm_'+newId+'_name' ,
42
- value:''
43
- });
44
- //Insert into end of file
45
- $('#mtm_body').append(metaCopy);
46
- //Duplicate the last entry, remove values and rename id
47
- });
48
- $('#mtm_body a').click( function(event){
49
- event.preventDefault();
50
- //Only remove if there's more than 1 meta tag
51
- if($('#mtm_body').children().length > 1){
52
- //Remove the item
53
- var parents = $(this).parents('#mtm_body tr').first().remove();
54
- //Renumber all the items
55
- $('#mtm_body').children().each( function(i){
56
- metaCopy = $(this);
57
- oldId = metaCopy.attr('id').replace('mtm_','');
58
- newId = i+1;
59
- metaCopy.attr('id', 'mtm_'+newId);
60
- metaCopy.find('a').attr('rel', newId);
61
- metaCopy.find('[name=mtm_'+ oldId +'_ref]').attr('name', 'mtm_'+newId+'_ref');
62
- metaCopy.find('[name=mtm_'+ oldId +'_content]').attr('name', 'mtm_'+newId+'_content');
63
- metaCopy.find('[name=mtm_'+ oldId +'_name]').attr( 'name', 'mtm_'+newId+'_name');
64
- });
65
- }else{
66
- metaCopy = $(this).parents('#mtm_body tr').first();
67
- metaCopy.find('[name=mtm_1_ref]').attr('value', '');
68
- metaCopy.find('[name=mtm_1_content]').attr('value', '');
69
- metaCopy.find('[name=mtm_1_name]').attr( 'value', '');
70
- alert("If you don't want any meta tags, just leave the text boxes blank and submit");
71
- }
72
- });
73
-
74
- //Datepicker
75
- if( $('#date-to-submit').length > 0 ){
76
- $("#localised-date").datepicker({
77
- altField: "#date-to-submit",
78
- altFormat: "yy-mm-dd",
79
- changeMonth: true,
80
- changeYear: true
81
- });
82
- $("#localised-end-date").datepicker({
83
- altField: "#end-date-to-submit",
84
- altFormat: "yy-mm-dd",
85
- changeMonth: true,
86
- changeYear: true
87
- });
88
- if( $('#date-to-submit').val() != '' ){
89
- date_dateFormat = $("#localised-date").datepicker('option', 'dateFormat');
90
- start_date_formatted = $.datepicker.formatDate( date_dateFormat, $.datepicker.parseDate('yy-mm-dd', $('#date-to-submit').val()) );
91
- end_date_formatted = $.datepicker.formatDate( date_dateFormat, $.datepicker.parseDate('yy-mm-dd', $('#end-date-to-submit').val()) );
92
- $("#localised-date").val(start_date_formatted);
93
- $("#localised-end-date").val(end_date_formatted);
94
- }
95
- }
96
-
97
-
98
- //Location stuff - only needed if inputs for location exist
99
- if( $('select#location-select-id, input#location-name').length > 0 ){
100
- //Autocomplete
101
- /* for jquery-ui-1.8.5
102
- $( "#eventForm input#location-name" ).autocomplete({
103
- source: '../wp-content/plugins/events-manager/admin/locations-search.php',
104
- minLength: 2,
105
- select: function( event, ui ) {
106
- $("input#location-address").val(ui.item.address);
107
- $("input#location-town").val(ui.item.town);
108
- if($('#em-map').length > 0){
109
- get_map_by_id(ui.item.id);
110
- }
111
- }
112
- });
113
- */
114
- $( "#eventForm input#location-name" ).autocomplete( '../wp-content/plugins/events-manager/admin/em-locations-search.php', {
115
- multiple: true,
116
- width: 350,
117
- scroll:false,
118
- selectFirst: false,
119
- dataType: "json",
120
- parse: function(data) {
121
- return $.map(data, function(row) {
122
- return {
123
- data: row,
124
- value: row.value,
125
- result: row.value
126
- }
127
- });
128
- },
129
- formatItem: function(item) {
130
- return item.value + '<br><span style="font-size:11px"><em>'+ item.address + ', ' + item.town;
131
- },
132
- formatResult: function(item){
133
- return item.value;
134
- }
135
- }).result(function(e, item) {
136
- e.preventDefault();
137
- $( "input#location-name" ).val(item.value);
138
- $('input#location-address').val(item.address);
139
- $('input#location-town').val(item.town);
140
- get_map_by_id(item.id);
141
- });
142
-
143
- //Load map
144
- if($('#em-map').length > 0){
145
- var em_LatLng = new google.maps.LatLng(0, 0);
146
- var map = new google.maps.Map( document.getElementById('em-map'), {
147
- zoom: 14,
148
- center: em_LatLng,
149
- mapTypeId: google.maps.MapTypeId.ROADMAP,
150
- mapTypeControl: false
151
- });
152
- var marker = new google.maps.Marker({
153
- position: em_LatLng,
154
- map: map
155
- });
156
- var infoWindow = new google.maps.InfoWindow({
157
- content: ''
158
- });
159
- var geocoder = new google.maps.Geocoder();
160
- google.maps.event.addListener(infoWindow, 'domready', function() {
161
- document.getElementById('location-balloon-content').parentNode.style.overflow='';
162
- document.getElementById('location-balloon-content').parentNode.parentNode.style.overflow='';
163
- });
164
- }
165
-
166
- //Add listeners for changes to address
167
- var get_map_by_id = function(id){
168
- if($('#em-map').length > 0){
169
- $.getJSON(document.URL,{ em_ajax_action:'get_location', id:id }, function(data){
170
- if( data.location_latitude!=0 && data.location_longitude!=0 ){
171
- loc_latlng = new google.maps.LatLng(data.location_latitude, data.location_longitude);
172
- marker.setPosition(loc_latlng);
173
- marker.setTitle( data.location_name );
174
- $('#em-map').show();
175
- $('#em-map-404').hide();
176
- map.setCenter(loc_latlng);
177
- map.panBy(40,-55);
178
- infoWindow.setContent( '<div id="location-balloon-content">'+ data.location_balloon +'</div>');
179
- infoWindow.open(map, marker);
180
- google.maps.event.trigger(map, 'resize');
181
- }else{
182
- $('#em-map').hide();
183
- $('#em-map-404').show();
184
- }
185
- });
186
- }
187
- }
188
- $('#location-select-id').change( function(){get_map_by_id($(this).val())} );
189
- $('#location-town, #location-address').change( function(){
190
- var address = $('#location-address').val() + ', ' + $('#location-town').val();
191
- if( address != '' && $('#em-map').length > 0 ){
192
- geocoder.geocode( { 'address': address }, function(results, status) {
193
- if (status == google.maps.GeocoderStatus.OK) {
194
- marker.setPosition(results[0].geometry.location);
195
- marker.setTitle( $('#location-name, #location-select-id').first().val() );
196
- $('#location-latitude').val(results[0].geometry.location.lat());
197
- $('#location-longitude').val(results[0].geometry.location.lng());
198
- $('#em-map').show();
199
- $('#em-map-404').hide();
200
- google.maps.event.trigger(map, 'resize');
201
- map.setCenter(results[0].geometry.location);
202
- map.panBy(40,-55);
203
- infoWindow.setContent(
204
- '<div id="location-balloon-content"><strong>' +
205
- $('#location-name').val() +
206
- '</strong><br/>' +
207
- $('#location-address').val() +
208
- '<br/>' + $('#location-town').val()+
209
- '</div>'
210
- );
211
- infoWindow.open(map, marker);
212
- } else {
213
- $('#em-map').hide();
214
- $('#em-map-404').show();
215
- }
216
- });
217
- }
218
- });
219
- $("input#location-town, select#location-select-id").triggerHandler('change');
220
- }
221
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready( function($) {
2
+ // Managing bookings delete operations -old
3
+ $('a.bookingdelbutton').click( function(){
4
+ eventId = (jQuery(this).parents('table:first').attr('id').split("-"))[3];
5
+ idToRemove = (jQuery(this).parents('tr:first').attr('id').split("-"))[1];
6
+ $.ajax({
7
+ type: "POST",
8
+ url: "admin.php?page=events-manager-bookings&action=remove_booking",
9
+ data: "booking_id="+ idToRemove,
10
+ success: function(){
11
+ $('tr#booking-' + idToRemove).fadeOut('slow');
12
+ $.getJSON("admin.php?page=events-manager-people&dbem_ajax_action=booking_data",{id: eventId, ajax: 'true'}, function(data){
13
+ booked = data[0].bookedSeats;
14
+ available = data[0].availableSeats;
15
+ $('td#booked-seats').text(booked);
16
+ $('td#available-seats').text(available);
17
+ });
18
+ }
19
+ });
20
+ });
21
+
22
+ //Manageing Bookings
23
+ //Widgets and filter submissions
24
+ $('.em_bookings_events_table form, .em_bookings_pending_table form').live('submit', function(e){
25
+ var el = $(this);
26
+ var url = em_ajaxify( el.attr('action') );
27
+ el.parents('.wrap').find('.table-wrap').first().append('<div id="em-loading" />');
28
+ $.get( url, el.serializeArray(), function(data){
29
+ el.parents('.wrap').first().replaceWith(data);
30
+ });
31
+ return false;
32
+ });
33
+ //Pagination link clicks
34
+ $('.em_bookings_events_table .tablenav-pages a, .em_bookings_pending_table .tablenav-pages a').live('click', function(){
35
+ var el = $(this);
36
+ var url = em_ajaxify( el.attr('href') );
37
+ el.parents('.wrap').find('.table-wrap').first().append('<div id="em-loading" />');
38
+ $.get( url, function(data){
39
+ el.parents('.wrap').first().replaceWith(data);
40
+ });
41
+ return false;
42
+ });
43
+ //Approve/Reject Links
44
+ $('.em-bookings-approve,.em-bookings-reject,.em-bookings-unapprove,.em-bookings-delete').live('click', function(){
45
+ var el = $(this);
46
+ console.log(el);
47
+ if( el.hasClass('em-bookings-delete') ){
48
+ if( !confirm("Are you sure you want to delete?") ){ return false; }
49
+ }
50
+ var url = em_ajaxify( el.attr('href'));
51
+ var td = el.parents('td').first();
52
+ td.html("Loading...");
53
+ td.load( url );
54
+ return false;
55
+ });
56
+
57
+ //Attributes
58
+ $('#mtm_add_tag').click( function(event){
59
+ event.preventDefault();
60
+ //Get All meta rows
61
+ var metas = $('#mtm_body').children();
62
+ //Copy first row and change values
63
+ var metaCopy = $(metas[0]).clone(true);
64
+ newId = metas.length + 1;
65
+ metaCopy.attr('id', 'mtm_'+newId);
66
+ metaCopy.find('a').attr('rel', newId);
67
+ metaCopy.find('[name=mtm_1_ref]').attr({
68
+ name:'mtm_'+newId+'_ref' ,
69
+ value:''
70
+ });
71
+ metaCopy.find('[name=mtm_1_content]').attr({
72
+ name:'mtm_'+newId+'_content' ,
73
+ value:''
74
+ });
75
+ metaCopy.find('[name=mtm_1_name]').attr({
76
+ name:'mtm_'+newId+'_name' ,
77
+ value:''
78
+ });
79
+ //Insert into end of file
80
+ $('#mtm_body').append(metaCopy);
81
+ //Duplicate the last entry, remove values and rename id
82
+ });
83
+ $('#mtm_body a').click( function(event){
84
+ event.preventDefault();
85
+ //Only remove if there's more than 1 meta tag
86
+ if($('#mtm_body').children().length > 1){
87
+ //Remove the item
88
+ var parents = $(this).parents('#mtm_body tr').first().remove();
89
+ //Renumber all the items
90
+ $('#mtm_body').children().each( function(i){
91
+ metaCopy = $(this);
92
+ oldId = metaCopy.attr('id').replace('mtm_','');
93
+ newId = i+1;
94
+ metaCopy.attr('id', 'mtm_'+newId);
95
+ metaCopy.find('a').attr('rel', newId);
96
+ metaCopy.find('[name=mtm_'+ oldId +'_ref]').attr('name', 'mtm_'+newId+'_ref');
97
+ metaCopy.find('[name=mtm_'+ oldId +'_content]').attr('name', 'mtm_'+newId+'_content');
98
+ metaCopy.find('[name=mtm_'+ oldId +'_name]').attr( 'name', 'mtm_'+newId+'_name');
99
+ });
100
+ }else{
101
+ metaCopy = $(this).parents('#mtm_body tr').first();
102
+ metaCopy.find('[name=mtm_1_ref]').attr('value', '');
103
+ metaCopy.find('[name=mtm_1_content]').attr('value', '');
104
+ metaCopy.find('[name=mtm_1_name]').attr( 'value', '');
105
+ alert("If you don't want any meta tags, just leave the text boxes blank and submit");
106
+ }
107
+ });
108
+
109
+ //Datepicker
110
+ if( $('#date-to-submit').length > 0 ){
111
+ $("#localised-date").datepicker({
112
+ altField: "#date-to-submit",
113
+ altFormat: "yy-mm-dd",
114
+ changeMonth: true,
115
+ changeYear: true
116
+ });
117
+ $("#localised-end-date").datepicker({
118
+ altField: "#end-date-to-submit",
119
+ altFormat: "yy-mm-dd",
120
+ changeMonth: true,
121
+ changeYear: true
122
+ });
123
+ if( $('#date-to-submit').val() != '' ){
124
+ date_dateFormat = $("#localised-date").datepicker('option', 'dateFormat');
125
+ start_date_formatted = $.datepicker.formatDate( date_dateFormat, $.datepicker.parseDate('yy-mm-dd', $('#date-to-submit').val()) );
126
+ end_date_formatted = $.datepicker.formatDate( date_dateFormat, $.datepicker.parseDate('yy-mm-dd', $('#end-date-to-submit').val()) );
127
+ $("#localised-date").val(start_date_formatted);
128
+ $("#localised-end-date").val(end_date_formatted);
129
+ }
130
+ }
131
+
132
+
133
+ //Location stuff - only needed if inputs for location exist
134
+ if( $('select#location-select-id, input#location-name').length > 0 ){
135
+
136
+ //Load map
137
+ if($('#em-map').length > 0){
138
+ var em_LatLng = new google.maps.LatLng(0, 0);
139
+ var map = new google.maps.Map( document.getElementById('em-map'), {
140
+ zoom: 14,
141
+ center: em_LatLng,
142
+ mapTypeId: google.maps.MapTypeId.ROADMAP,
143
+ mapTypeControl: false
144
+ });
145
+ var marker = new google.maps.Marker({
146
+ position: em_LatLng,
147
+ map: map
148
+ });
149
+ var infoWindow = new google.maps.InfoWindow({
150
+ content: ''
151
+ });
152
+ var geocoder = new google.maps.Geocoder();
153
+ google.maps.event.addListener(infoWindow, 'domready', function() {
154
+ document.getElementById('location-balloon-content').parentNode.style.overflow='';
155
+ document.getElementById('location-balloon-content').parentNode.parentNode.style.overflow='';
156
+ });
157
+ }
158
+
159
+ //Add listeners for changes to address
160
+ var get_map_by_id = function(id){
161
+ if($('#em-map').length > 0){
162
+ $.getJSON(document.URL,{ em_ajax_action:'get_location', id:id }, function(data){
163
+ if( data.location_latitude!=0 && data.location_longitude!=0 ){
164
+ loc_latlng = new google.maps.LatLng(data.location_latitude, data.location_longitude);
165
+ marker.setPosition(loc_latlng);
166
+ marker.setTitle( data.location_name );
167
+ $('#em-map').show();
168
+ $('#em-map-404').hide();
169
+ map.setCenter(loc_latlng);
170
+ map.panBy(40,-55);
171
+ infoWindow.setContent( '<div id="location-balloon-content">'+ data.location_balloon +'</div>');
172
+ infoWindow.open(map, marker);
173
+ google.maps.event.trigger(map, 'resize');
174
+ }else{
175
+ $('#em-map').hide();
176
+ $('#em-map-404').show();
177
+ }
178
+ });
179
+ }
180
+ }
181
+ $('#location-select-id').change( function(){get_map_by_id($(this).val())} );
182
+ $('#location-town, #location-address').change( function(){
183
+ var address = $('#location-address').val() + ', ' + $('#location-town').val();
184
+ if( address != '' && $('#em-map').length > 0 ){
185
+ geocoder.geocode( { 'address': address }, function(results, status) {
186
+ if (status == google.maps.GeocoderStatus.OK) {
187
+ marker.setPosition(results[0].geometry.location);
188
+ marker.setTitle( $('#location-name, #location-select-id').first().val() );
189
+ $('#location-latitude').val(results[0].geometry.location.lat());
190
+ $('#location-longitude').val(results[0].geometry.location.lng());
191
+ $('#em-map').show();
192
+ $('#em-map-404').hide();
193
+ google.maps.event.trigger(map, 'resize');
194
+ map.setCenter(results[0].geometry.location);
195
+ map.panBy(40,-55);
196
+ infoWindow.setContent(
197
+ '<div id="location-balloon-content"><strong>' +
198
+ $('#location-name').val() +
199
+ '</strong><br/>' +
200
+ $('#location-address').val() +
201
+ '<br/>' + $('#location-town').val()+
202
+ '</div>'
203
+ );
204
+ infoWindow.open(map, marker);
205
+ } else {
206
+ $('#em-map').hide();
207
+ $('#em-map-404').show();
208
+ }
209
+ });
210
+ }
211
+ });
212
+
213
+ $("input#location-town, select#location-select-id").triggerHandler('change');
214
+
215
+ //Finally, add autocomplete here
216
+ //Autocomplete
217
+ /* for jquery-ui-1.8.5
218
+ $( "#event-form input#location-name" ).autocomplete({
219
+ source: '../wp-content/plugins/events-manager/admin/locations-search.php',
220
+ minLength: 2,
221
+ select: function( event, ui ) {
222
+ $("input#location-address").val(ui.item.address);
223
+ $("input#location-town").val(ui.item.town);
224
+ if($('#em-map').length > 0){
225
+ get_map_by_id(ui.item.id);
226
+ }
227
+ }
228
+ });
229
+ */
230
+ $( "#event-form input#location-name" ).autocomplete( '../wp-content/plugins/events-manager/admin/em-locations-search.php', {
231
+ multiple: true,
232
+ width: 350,
233
+ scroll:false,
234
+ selectFirst: false,
235
+ dataType: "json",
236
+ parse: function(data) {
237
+ return $.map(data, function(row) {
238
+ return {
239
+ data: row,
240
+ value: row.value,
241
+ result: row.value
242
+ }
243
+ });
244
+ },
245
+ formatItem: function(item) {
246
+ return item.value + '<br><span style="font-size:11px"><em>'+ item.address + ', ' + item.town;
247
+ },
248
+ formatResult: function(item){
249
+ return item.value;
250
+ }
251
+ }).result(function(e, item) {
252
+ e.preventDefault();
253
+ $( "input#location-name" ).val(item.value);
254
+ $('input#location-address').val(item.address);
255
+ $('input#location-town').val(item.town);
256
+ get_map_by_id(item.id);
257
+ });
258
+ }
259
+ });
260
+
261
+
262
+ //Take a url and add em_ajax param to it
263
+ function em_ajaxify(url){
264
+ if ( url.search('em_ajax=0') != -1){
265
+ url = url.replace('em_ajax=0','em_ajax=1');
266
+ }else if( url.search(/\?/) != -1 ){
267
+ url = url + "&em_ajax=1";
268
+ }else{
269
+ url = url + "?em_ajax=1";
270
+ }
271
+ return url;
272
+ }
includes/js/em_calendar_ajax.js CHANGED
@@ -1,12 +1,19 @@
1
  //inserted at wp_head
2
  jQuery(document).ready( function($) {
3
-
4
-
5
  $('a.em-calnav, a.em-calnav').live('click', function(e){
6
  e.preventDefault();
7
- $(this).parents('.em-calendar-wrapper').first().prepend('<div class="loading" id="em-loading"></div>');
8
- $(this).parents('.em-calendar-wrapper').first().load($(this).attr('href'));
 
9
  } );
10
-
11
-
 
 
 
 
 
 
 
 
12
  });
1
  //inserted at wp_head
2
  jQuery(document).ready( function($) {
 
 
3
  $('a.em-calnav, a.em-calnav').live('click', function(e){
4
  e.preventDefault();
5
+ $(this).closest('.em-calendar-wrapper').prepend('<div class="loading" id="em-loading"></div>');
6
+ var url = em_ajaxify($(this).attr('href'));
7
+ $(this).closest('.em-calendar-wrapper').load(url);
8
  } );
9
+ var em_ajaxify = function(url){
10
+ if ( url.search('em_ajax=0') != -1){
11
+ url = url.replace('em_ajax=0','em_ajax=1');
12
+ }else if( url.search(/\?/) != -1 ){
13
+ url = url + "&em_ajax=1";
14
+ }else{
15
+ url = url + "?em_ajax=1";
16
+ }
17
+ return url;
18
+ }
19
  });
includes/js/em_maps.js CHANGED
@@ -26,7 +26,7 @@ function em_maps() {
26
  position: em_LatLng,
27
  map: maps[map_id]
28
  });
29
- var infowindow = new google.maps.InfoWindow({ content: document.getElementById('em-location-map-info-'+map_id).firstChild });
30
  infowindow.open(maps[map_id],marker);
31
  });
32
  jQuery('.em-locations-map').each( function(index){
26
  position: em_LatLng,
27
  map: maps[map_id]
28
  });
29
+ var infowindow = new google.maps.InfoWindow({ content: document.getElementById('em-location-map-info-'+map_id).firstElementChild });
30
  infowindow.open(maps[map_id],marker);
31
  });
32
  jQuery('.em-locations-map').each( function(index){
includes/langs/dbem-nl_NL.mo ADDED
Binary file
includes/langs/dbem-nl_NL.po ADDED
@@ -0,0 +1,1577 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of the WordPress plugin Events Manager 3.0.4 by Davide Benini, Marcus Sykes.
2
+ # Copyright (C) 2010 Davide Benini, Marcus Sykes
3
+ # This file is distributed under the same license as the Events Manager package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: Events Manager 3.0.4\n"
9
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/events-manager\n"
10
+ "POT-Creation-Date: 2010-10-22 13:29+0000\n"
11
+ "PO-Revision-Date: 2011-01-23 23:50+0100\n"
12
+ "Last-Translator: Dennis Lutz <dennis@wipeout.nl>\n"
13
+ "Language-Team: \n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+
18
+ # Dutch translation by Dennis Lutz
19
+ #: admin/admin.php:125
20
+ #: admin/categories.php:76
21
+ #: admin/categories.php:83
22
+ #: admin/event.php:279
23
+ #: admin/events.php:192
24
+ #: admin/locations.php:103
25
+ #: admin/locations.php:111
26
+ #: admin/people.php:39
27
+ #: bookings.php:78
28
+ #: bookings.php:149
29
+ msgid "Name"
30
+ msgstr "Naam"
31
+
32
+ #: admin/admin.php:126
33
+ msgid "Date"
34
+ msgstr "Datum"
35
+
36
+ #: admin/admin.php:127
37
+ #: admin/event.php:338
38
+ #: admin/events.php:194
39
+ msgid "Location"
40
+ msgstr "Locatie"
41
+
42
+ #: admin/admin.php:128
43
+ #: admin/locations.php:104
44
+ #: admin/locations.php:112
45
+ msgid "Address"
46
+ msgstr "Adres"
47
+
48
+ #: admin/admin.php:129
49
+ #: admin/locations.php:105
50
+ #: admin/locations.php:113
51
+ msgid "Town"
52
+ msgstr "Plaats"
53
+
54
+ #: admin/admin.php:143
55
+ msgid "Some required fields are missing:"
56
+ msgstr "Er ontbreken verplichte velden"
57
+
58
+ #: admin/admin.php:146
59
+ msgid "Since the event is repeated, you must specify an end date"
60
+ msgstr "Aangezien dit een herhaald evenement is, dient u een einddatum op te geven"
61
+
62
+ #: admin/bookings.php:17
63
+ msgid "Bookings deleted"
64
+ msgstr "Boekingen verwijderd"
65
+
66
+ #: admin/categories.php:56
67
+ #: events-manager.php:227
68
+ msgid "Categories"
69
+ msgstr "Categorieën"
70
+
71
+ #: admin/categories.php:75
72
+ #: admin/categories.php:82
73
+ msgid "ID"
74
+ msgstr "ID"
75
+
76
+ #: admin/categories.php:106
77
+ msgid "No categories have been inserted yet!"
78
+ msgstr "Er zijn nog geen categorieën opgegeven"
79
+
80
+ #: admin/categories.php:118
81
+ #: admin/categories.php:126
82
+ msgid "Add category"
83
+ msgstr "Categorie toevoegen"
84
+
85
+ #: admin/categories.php:122
86
+ #: admin/categories.php:164
87
+ msgid "Category name"
88
+ msgstr "Categorie naam"
89
+
90
+ #: admin/categories.php:124
91
+ #: admin/categories.php:166
92
+ msgid "The name of the category"
93
+ msgstr "De naam van de categorie"
94
+
95
+ #: admin/categories.php:148
96
+ msgid "Edit category"
97
+ msgstr "Categorie aanpassen"
98
+
99
+ #: admin/categories.php:169
100
+ msgid "Update category"
101
+ msgstr "Categorie bijwerken"
102
+
103
+ #: admin/event.php:4
104
+ #: admin/events.php:72
105
+ msgid "Insert New Event"
106
+ msgstr "Nieuw evenement aanmaken"
107
+
108
+ #: admin/event.php:31
109
+ msgid "Mon"
110
+ msgstr "Maa"
111
+
112
+ #: admin/event.php:31
113
+ msgid "Tue"
114
+ msgstr "Din"
115
+
116
+ #: admin/event.php:31
117
+ msgid "Wed"
118
+ msgstr "Woe"
119
+
120
+ #: admin/event.php:31
121
+ msgid "Thu"
122
+ msgstr "Don"
123
+
124
+ #: admin/event.php:31
125
+ msgid "Fri"
126
+ msgstr "Vri"
127
+
128
+ #: admin/event.php:31
129
+ msgid "Sat"
130
+ msgstr "Zat"
131
+
132
+ #: admin/event.php:31
133
+ msgid "Sun"
134
+ msgstr "Zon"
135
+
136
+ #: admin/event.php:42
137
+ msgid "WARNING: This is a recurring event."
138
+ msgstr "LET OP: Dit is een terugkerend evenement."
139
+
140
+ #: admin/event.php:44
141
+ msgid "Modifying these data all the events linked to this recurrence will be rescheduled"
142
+ msgstr "Wanneer deze gegevens worden aangepast, zullen alle gerelateerde evenementen worden aangepast"
143
+
144
+ #: admin/event.php:46
145
+ msgid "and all booking information will be deleted!"
146
+ msgstr "en alle boekingsinformatie zal worden verwijderd!"
147
+
148
+ #: admin/event.php:49
149
+ msgid "WARNING: This is a recurrence."
150
+ msgstr "LET OP: dit is een herhaling"
151
+
152
+ #: admin/event.php:51
153
+ msgid "If you change these data and save, this will become an independent event."
154
+ msgstr "Wanneer u deze gegevens aanpast en opslaat, wordt dit een op zich zelf staand evenement."
155
+
156
+ #: admin/event.php:66
157
+ msgid "Recurrence"
158
+ msgstr "Herhaling"
159
+
160
+ #: admin/event.php:73
161
+ msgid "Repeated event"
162
+ msgstr "Herhaald evenement"
163
+
164
+ #: admin/event.php:80
165
+ msgid "Daily"
166
+ msgstr "Dagelijks"
167
+
168
+ #: admin/event.php:80
169
+ msgid "Weekly"
170
+ msgstr "Wekelijks"
171
+
172
+ #: admin/event.php:80
173
+ msgid "Monthly"
174
+ msgstr "Maandelijks"
175
+
176
+ #: admin/event.php:86
177
+ #: admin/event.php:109
178
+ msgid "Every"
179
+ msgstr "Elke"
180
+
181
+ #: admin/event.php:89
182
+ msgid "day"
183
+ msgstr "dag"
184
+
185
+ #: admin/event.php:91
186
+ msgid "days"
187
+ msgstr "dagen"
188
+
189
+ #: admin/event.php:93
190
+ msgid "week"
191
+ msgstr "week"
192
+
193
+ #: admin/event.php:95
194
+ msgid "weeks"
195
+ msgstr "weken"
196
+
197
+ #: admin/event.php:97
198
+ msgid "month"
199
+ msgstr "maand"
200
+
201
+ #: admin/event.php:99
202
+ msgid "months"
203
+ msgstr "maanden"
204
+
205
+ #: admin/event.php:112
206
+ msgid "first"
207
+ msgstr "eerste"
208
+
209
+ #: admin/event.php:112
210
+ msgid "second"
211
+ msgstr "tweede"
212
+
213
+ #: admin/event.php:112
214
+ msgid "third"
215
+ msgstr "derde"
216
+
217
+ #: admin/event.php:112
218
+ msgid "fourth"
219
+ msgstr "vierde"
220
+
221
+ #: admin/event.php:112
222
+ msgid "last"
223
+ msgstr "laatste"
224
+
225
+ #: admin/event.php:123
226
+ msgid "Check if your event happens more than once according to a regular pattern"
227
+ msgstr "Controlleer of dit evenement meer dan eens voorkomt, volgens een vast patroon"
228
+
229
+ #: admin/event.php:130
230
+ #: admin/events.php:36
231
+ #: admin/events.php:255
232
+ msgid "Reschedule"
233
+ msgstr "Opnieuw plannen"
234
+
235
+ #: admin/event.php:135
236
+ msgid "This is't a recurrent event"
237
+ msgstr "Dit is geen terugkerend evenement"
238
+
239
+ #: admin/event.php:147
240
+ msgid "Contact Person"
241
+ msgstr "Neem contact op met"
242
+
243
+ #: admin/event.php:150
244
+ msgid "Contact"
245
+ msgstr "Contact"
246
+
247
+ #: admin/event.php:151
248
+ msgid "Select..."
249
+ msgstr "Selecteer"
250
+
251
+ #: admin/event.php:158
252
+ msgid "RSVP"
253
+ msgstr "RSVP"
254
+
255
+ #: admin/event.php:162
256
+ msgid "Enable registration for this event"
257
+ msgstr "Registratie voor dit evenement aanzetten"
258
+
259
+ #: admin/event.php:173
260
+ #: admin/event.php:192
261
+ msgid "Spaces"
262
+ msgstr "Plaatsen"
263
+
264
+ #: admin/event.php:185
265
+ msgid "responses so far"
266
+ msgstr "reacties tot nu toe"
267
+
268
+ #: admin/event.php:191
269
+ msgid "Responder"
270
+ msgstr "Respondent"
271
+
272
+ #: admin/event.php:197
273
+ msgid "Booked spaces"
274
+ msgstr "Geboekte plaatsen"
275
+
276
+ #: admin/event.php:198
277
+ msgid "Available spaces"
278
+ msgstr "Beschikbare plaatsen"
279
+
280
+ #: admin/event.php:208
281
+ msgid "Comment:"
282
+ msgstr "Commentaar:"
283
+
284
+ #: admin/event.php:226
285
+ msgid "Printable view"
286
+ msgstr "Afdrukbaar beeld"
287
+
288
+ #: admin/event.php:234
289
+ msgid "No responses yet!"
290
+ msgstr "Nog geen reacties"
291
+
292
+ #: admin/event.php:251
293
+ #: admin/events.php:228
294
+ msgid "Category"
295
+ msgstr "Categorie"
296
+
297
+ #: admin/event.php:254
298
+ msgid "Category:"
299
+ msgstr "Categorie:"
300
+
301
+ #: admin/event.php:284
302
+ msgid "The event name. Example: Birthday party"
303
+ msgstr "Naam van het evenement. Bijv. Verjaardagsfeestje"
304
+
305
+ #: admin/event.php:289
306
+ msgid "Event date"
307
+ msgstr "Datum evenement"
308
+
309
+ #: admin/event.php:292
310
+ msgid "Recurrence dates"
311
+ msgstr "Herhalingsdata"
312
+
313
+ #: admin/event.php:302
314
+ msgid "The event date."
315
+ msgstr "De datum van het evenement"
316
+
317
+ #: admin/event.php:305
318
+ msgid "When not reoccurring, this event spans between the beginning and end date."
319
+ msgstr "Wanneer het geen herhaald evenement is, wordt aangenomen dat het van begin tot einddatum duurt."
320
+
321
+ #: admin/event.php:310
322
+ msgid "The recurrence beginning and end date."
323
+ msgstr "Begin en einddatum van de herhaling"
324
+
325
+ #: admin/event.php:316
326
+ msgid "Event time"
327
+ msgstr "Tijd van het evenement"
328
+
329
+ #: admin/event.php:323
330
+ msgid "The time of the event beginning and end"
331
+ msgstr "De begin- en eindtijd van het evenement"
332
+
333
+ #: admin/event.php:328
334
+ msgid "Coordinates"
335
+ msgstr "Coördinaten"
336
+
337
+ #: admin/event.php:347
338
+ msgid "Location:"
339
+ msgstr "Locatie:"
340
+
341
+ #: admin/event.php:364
342
+ msgid "The name of the location where the event takes place. You can use the name of a venue, a square, etc"
343
+ msgstr "De naam van de locatie waar het evenement plaatsvindt."
344
+
345
+ #: admin/event.php:369
346
+ msgid "Name:"
347
+ msgstr "Naam:"
348
+
349
+ #: admin/event.php:372
350
+ msgid "Select a location for your event"
351
+ msgstr "Selecteer een locatie voor dit evenement"
352
+
353
+ #: admin/event.php:376
354
+ msgid "Address:"
355
+ msgstr "Adres"
356
+
357
+ #: admin/event.php:379
358
+ msgid "The address of the location where the event takes place. Example: 21, Dominick Street"
359
+ msgstr "Het adres van de locatie waar het evenemt zal plaatsvinden."
360
+
361
+ #: admin/event.php:383
362
+ msgid "Town:"
363
+ msgstr "Plaatsnaam"
364
+
365
+ #: admin/event.php:386
366
+ msgid "The town where the location is located. If you're using the Google Map integration and want to avoid geotagging ambiguities include the country in the town field. Example: Verona, Italy."
367
+ msgstr "De plaats waar de locatie is geleven. Bij gebruik van Google Map integratie, kunt u hier ook de landnaam invullen, om foutieve geologische informatie te voorkomen. Bijv Delft, Netherlands"
368
+
369
+ #: admin/event.php:395
370
+ #: admin/locations.php:181
371
+ #: admin/locations.php:265
372
+ msgid "Location not found"
373
+ msgstr "Locatie niet gevonden"
374
+
375
+ #: admin/event.php:406
376
+ msgid "Details"
377
+ msgstr "Details"
378
+
379
+ #: admin/event.php:413
380
+ msgid "Details about the event"
381
+ msgstr "Details over het evenement"
382
+
383
+ #: admin/event.php:420
384
+ msgid "Attributes"
385
+ msgstr "Attributen"
386
+
387
+ #: admin/event.php:475
388
+ msgid "Not defined in templates"
389
+ msgstr "Niet in de sjabloon gedefinieerd"
390
+
391
+ #: admin/event.php:519
392
+ msgid "In order to use attributes, you must define some in your templates, otherwise they'll never show. Go to Events > Settings to add attribute placeholders."
393
+ msgstr "Om attributen te kunnen gebruiken dient u deze te definieren in uw sjabloon. Ga naar Evenementen > Instellingen om markeringen toe te voegen."
394
+
395
+ #: admin/event.php:531
396
+ msgid "Submit Event"
397
+ msgstr "Evenement toevoegen"
398
+
399
+ #: admin/event.php:542
400
+ msgid "Are you sure you want to reschedule this recurring event? If you do this, you will lose all booking information and the old recurring events will be deleted."
401
+ msgstr "Weet u zeker dat u het schema wil aanpassen? alle reserveringsinformatie zal worden verwijderd!"
402
+
403
+ #: admin/event.php:552
404
+ msgid "Are you sure you want to disable bookings? If you do this and save, you will lose all previous bookings. If you wish to prevent further bookings, reduce the number of seats available to the amount of bookings you currently have"
405
+ msgstr "Weet u zeker dat u boekingen wil uitschakelen? Als u dat doet en toepast, zullen alle boekingen uit het verleden verloren gaan. Wanneer u wil voorkomen dat er nog meer geboekt wordt voor dit evenement, kunt u het aantal beschiklare plaatsen verminderen."
406
+
407
+ #: admin/events.php:51
408
+ #: admin/events.php:61
409
+ #: admin/locations.php:42
410
+ #: admin/locations.php:60
411
+ msgid "Ach, there's a problem here:"
412
+ msgstr "Oei, er is hier een probleem:"
413
+
414
+ #: admin/events.php:74
415
+ #: admin/events.php:85
416
+ msgid "Edit Event"
417
+ msgstr "Evenement aanpassen"
418
+
419
+ #: admin/events.php:98
420
+ msgid "Past Events"
421
+ msgstr "Evenementen uit het verleden"
422
+
423
+ #: admin/events.php:101
424
+ msgid "All Events"
425
+ msgstr "Alle evenementen"
426
+
427
+ #: admin/events.php:104
428
+ msgid "Future Events"
429
+ msgstr "Aankomende evenementen"
430
+
431
+ #: admin/events.php:116
432
+ #: admin/events.php:136
433
+ #: widgets/events.php:72
434
+ msgid "Past events"
435
+ msgstr "Evenementen uit het verleden"
436
+
437
+ #: admin/events.php:117
438
+ #: admin/events.php:137
439
+ #: widgets/events.php:71
440
+ msgid "All events"
441
+ msgstr "Alle evenementen"
442
+
443
+ #: admin/events.php:118
444
+ #: admin/events.php:138
445
+ #: widgets/events.php:70
446
+ msgid "Future events"
447
+ msgstr "Evenementen in de toekomst"
448
+
449
+ #: admin/events.php:143
450
+ msgid "Total"
451
+ msgstr "Totaal"
452
+
453
+ #: admin/events.php:151
454
+ msgid "Bulk Actions"
455
+ msgstr "Bulk acties"
456
+
457
+ #: admin/events.php:152
458
+ msgid "Delete selected"
459
+ msgstr "Verwijder geselecteerde"
460
+
461
+ #: admin/events.php:154
462
+ msgid "Apply"
463
+ msgstr "Toepassen"
464
+
465
+ #: admin/events.php:165
466
+ msgid "Filter"
467
+ msgstr "Filter"
468
+
469
+ #: admin/events.php:171
470
+ msgid "Previous Page"
471
+ msgstr "Vorige pagina"
472
+
473
+ #: admin/events.php:173
474
+ msgid "Next Page"
475
+ msgstr "Volgende pagina"
476
+
477
+ #: admin/events.php:182
478
+ msgid "no events"
479
+ msgstr "geen evenementen"
480
+
481
+ #: admin/events.php:195
482
+ msgid "Date and time"
483
+ msgstr "Datum en tijd"
484
+
485
+ #: admin/events.php:207
486
+ #: admin/events.php:208
487
+ msgid "D d M Y"
488
+ msgstr "D d < Y"
489
+
490
+ #: admin/events.php:232
491
+ msgid "Duplicate this event"
492
+ msgstr "Dupliceer dit evenement"
493
+
494
+ #: admin/locations.php:20
495
+ msgid "Locations Deleted"
496
+ msgstr "Locaties verwijderd"
497
+
498
+ #: admin/locations.php:36
499
+ msgid "The location has been updated."
500
+ msgstr "De locatie is aangepast"
501
+
502
+ #: admin/locations.php:55
503
+ msgid "The location has been added."
504
+ msgstr "De locatie is toegevoegd"
505
+
506
+ #: admin/locations.php:83
507
+ #: events-manager.php:225
508
+ msgid "Locations"
509
+ msgstr "Locaties"
510
+
511
+ #: admin/locations.php:138
512
+ msgid "No venues have been inserted yet!"
513
+ msgstr "Er zijn nog geen plaatsen ingevoerd"
514
+
515
+ #: admin/locations.php:148
516
+ #: admin/locations.php:203
517
+ msgid "Add location"
518
+ msgstr "Locatie toevoegen"
519
+
520
+ #: admin/locations.php:152
521
+ #: admin/locations.php:235
522
+ msgid "Location name"
523
+ msgstr "Locatienaam"
524
+
525
+ #: admin/locations.php:154
526
+ #: admin/locations.php:237
527
+ msgid "The name of the location"
528
+ msgstr "Naam van de locatie"
529
+
530
+ #: admin/locations.php:158
531
+ #: admin/locations.php:241
532
+ msgid "Location address"
533
+ msgstr "Locatie adres"
534
+
535
+ #: admin/locations.php:160
536
+ #: admin/locations.php:243
537
+ msgid "The address of the location"
538
+ msgstr "Adres van de locatie"
539
+
540
+ #: admin/locations.php:164
541
+ #: admin/locations.php:248
542
+ msgid "Location town"
543
+ msgstr "Plaatsnaam locatie"
544
+
545
+ #: admin/locations.php:166
546
+ msgid "The town of the location"
547
+ msgstr "De plaats waar de locatie zich bevindt"
548
+
549
+ #: admin/locations.php:189
550
+ #: admin/locations.php:285
551
+ msgid "Location image"
552
+ msgstr "Afbeelding van de locatie"
553
+
554
+ #: admin/locations.php:191
555
+ msgid "Select an image to upload"
556
+ msgstr "Selecteer een afbeelding om te uploaden"
557
+
558
+ #: admin/locations.php:195
559
+ #: admin/locations.php:274
560
+ msgid "Location description"
561
+ msgstr "Omschrijving locatie"
562
+
563
+ #: admin/locations.php:200
564
+ #: admin/locations.php:280
565
+ msgid "A description of the Location. You may include any kind of info here."
566
+ msgstr "Een omschrijving van de locatie."
567
+
568
+ #: admin/locations.php:221
569
+ msgid "Edit location"
570
+ msgstr "Locatie aanpassen"
571
+
572
+ #: admin/locations.php:250
573
+ msgid "The town where the location is located"
574
+ msgstr "De plaats waar de locatie zich bevindt"
575
+
576
+ #: admin/locations.php:262
577
+ msgid "Location map"
578
+ msgstr "Kaart van de locatie"
579
+
580
+ #: admin/locations.php:290
581
+ msgid "No image uploaded for this location yet"
582
+ msgstr "er is nog geen afbeelding voor deze locatie"
583
+
584
+ #: admin/locations.php:295
585
+ msgid "Upload/change picture"
586
+ msgstr "Upload of vervang afbeelding"
587
+
588
+ #: admin/locations.php:299
589
+ msgid "Update location"
590
+ msgstr "Locatiewijzigingen toepassen"
591
+
592
+ #: admin/options.php:16
593
+ msgid "Changes saved."
594
+ msgstr "Wijzigingen zijn opgeslagen"
595
+
596
+ #: admin/options.php:28
597
+ #: admin/options.php:240
598
+ msgid "Save Changes"
599
+ msgstr "Wijzigingen opslaan"
600
+
601
+ #: admin/options.php:28
602
+ msgid "All"
603
+ msgstr "Alle"
604
+
605
+ #: admin/options.php:32
606
+ msgid "Collapse All"
607
+ msgstr "Alles inklappen"
608
+
609
+ #: admin/options.php:33
610
+ msgid "Expand All"
611
+ msgstr "Alles uitklappen"
612
+
613
+ #: admin/options.php:51
614
+ msgid "Event Manager Options"
615
+ msgstr "Event Manager opties"
616
+
617
+ #: admin/options.php:61
618
+ #: admin/options.php:78
619
+ #: admin/options.php:106
620
+ #: admin/options.php:125
621
+ #: admin/options.php:140
622
+ #: admin/options.php:156
623
+ #: admin/options.php:171
624
+ #: admin/options.php:192
625
+ #: admin/options.php:208
626
+ #: admin/options.php:227
627
+ msgid "Click to toggle"
628
+ msgstr "Klik om aan/uit te zetten"
629
+
630
+ #: admin/options.php:61
631
+ msgid "General options"
632
+ msgstr "Algemente opties"
633
+
634
+ #: admin/options.php:65
635
+ msgid "Use dropdown for locations?"
636
+ msgstr "Dropdown voor locaties gebruiken?"
637
+
638
+ #: admin/options.php:65
639
+ msgid "Select yes to select location from a drow-down menu; location selection will be faster, but you will lose the ability to insert locations with events"
640
+ msgstr "Selecteer 'ja' om de locatie uit een dropdown lijst te selecteren. Daarmee vervalt de mogelijkheid om locaties toe te voegen bij evenementen"
641
+
642
+ #: admin/options.php:66
643
+ msgid "Use recurrence?"
644
+ msgstr "Herhaling gebruiken?"
645
+
646
+ #: admin/options.php:66
647
+ msgid "Select yes to enable the recurrence features feature"
648
+ msgstr "Selecteer ja om de herhalingsopties te gebruiken"
649
+
650
+ #: admin/options.php:67
651
+ msgid "Use RSVP?"
652
+ msgstr "RSCP gebruiken?"
653
+
654
+ #: admin/options.php:67
655
+ msgid "Select yes to enable the RSVP feature"
656
+ msgstr "Selecteer ja om RSVPoptie aan te zetten"
657
+
658
+ #: admin/options.php:68
659
+ msgid "Use categories?"
660
+ msgstr "Categorieën gebruiken?"
661
+
662
+ #: admin/options.php:68
663
+ msgid "Select yes to enable the category features"
664
+ msgstr "Selecteer ja om de categorie-opties aan te zetten"
665
+
666
+ #: admin/options.php:69
667
+ msgid "Use attributes?"
668
+ msgstr "Attributen gebruiken?"
669
+
670
+ #: admin/options.php:69
671
+ msgid "Select yes to enable the attributes feature"
672
+ msgstr "Selecteer ja om de attributen-optie aan te zetten"
673
+
674
+ #: admin/options.php:78
675
+ #: admin/options.php:92
676
+ msgid "Events page"
677
+ msgstr "Evenementen pagina"
678
+
679
+ #: admin/options.php:87
680
+ msgid "[No Events Page]"
681
+ msgstr "[Geen evenementen pagina]"
682
+
683
+ #: admin/options.php:92
684
+ msgid "This option allows you to select which page to use as an events page"
685
+ msgstr "Met deze optie kunt u de pagina kiezen die als evenemtenpagina dienst doet"
686
+
687
+ #: admin/options.php:95
688
+ msgid "Show events page in lists?"
689
+ msgstr "Evenemeten-pagina in lijsten weergeven?"
690
+
691
+ #: admin/options.php:95
692
+ msgid "Check this option if you want the events page to appear together with other pages in pages lists."
693
+ msgstr "Met deze optie wordt de evenemetenpagina samen met de andere pagina's in d epaginalijsten getoond."
694
+
695
+ #: admin/options.php:96
696
+ msgid "Display calendar in events page?"
697
+ msgstr "Kalender op de evenentenpagina weergeven?"
698
+
699
+ #: admin/options.php:96
700
+ msgid "This options allows to display the calendar in the events page, instead of the default list. It is recommended not to display both the calendar widget and a calendar page."
701
+ msgstr "Met deze optie wordt een kalender op de evenementenpagina weergegeven, in plaats van de lijst met eveneten. Wij raden af om de kalender en de widget samen te gebruiken."
702
+
703
+ #: admin/options.php:97
704
+ msgid "Disable title rewriting?"
705
+ msgstr "Titel herschrijven uitzetten?"
706
+
707
+ #: admin/options.php:97
708
+ msgid "Some wordpress themes don't follow best practices when generating navigation menus, and so the automatic title rewriting feature may cause problems, if your menus aren't working correctly on the event pages, try setting this to 'Yes', and provide an appropriate HTML title format below."
709
+ msgstr "Bij sommige wordpress thema's is het genereren van navigatiemenu's niet goed geregeld, waardoor het automatisch herschrijven voor problemen kan zorgen. Wanneer uw menu's niet correct werken op de evenementenpagina's kunt u deze optie op 'ja' zetten en hieronder de titel in correct HTML formaat invullen."
710
+
711
+ #: admin/options.php:98
712
+ msgid "Event Manager titles"
713
+ msgstr "Evenement manager titels"
714
+
715
+ #: admin/options.php:98
716
+ msgid "This only setting only matters if you selected 'Yes' to above. You will notice the events page titles aren't being rewritten, and you have a new title underneath the default page name. This is where you control the HTML of this title. Make sure you keep the #_PAGETITLE placeholder here, as that's what is rewritten by events manager. To control what's rewritten in this title, see settings further down for page titles."
717
+ msgstr "Deze optie heeft alleen nut als u hierboven 'ja' hebt ingevuld. You will notice the events page titles aren't being rewritten, and you have a new title underneath the default page name. This is where you control the HTML of this title. Make sure you keep the #_PAGETITLE placeholder here, as that's what is rewritten by events manager. To control what's rewritten in this title, see settings further down for page titles."
718
+
719
+ #: admin/options.php:106
720
+ msgid "Events format"
721
+ msgstr "Opmaak evenementen"
722
+
723
+ #: admin/options.php:110
724
+ msgid "Default event list format header"
725
+ msgstr "Opmaak voor de header van de lijst"
726
+
727
+ #: admin/options.php:110
728
+ msgid "This content will appear just above your code for the default event list format. Default is blank"
729
+ msgstr "Dit zal worden getoond boven de code voor de standaard evenementenlijst."
730
+
731
+ #: admin/options.php:111
732
+ msgid "Default event list format"
733
+ msgstr "Standaard opmaak voor lijst"
734
+
735
+ #: admin/options.php:111
736
+ msgid "The format of any events in a list.<br/>Insert one or more of the following placeholders: <code>#_NAME</code>, <code>#_LOCATION</code>, <code>#_ADDRESS</code>, <code>#_TOWN</code>, <code>#_NOTES</code>.<br/> Use <code>#_EXCERPT</code> to show <code>#_NOTES</code> until you place a &lt;!&ndash;&ndash; more &ndash;&ndash;&gt; marker.<br/> Use <code>#_LINKEDNAME</code> for the event name with a link to the given event page.<br/> Use <code>#_EVENTPAGEURL</code> to print the event page URL and make your own customised links.<br/> Use <code>#_LOCATIONPAGEURL</code> to print the location page URL and make your own customised links.<br/>Use <code>#_EDITEVENTLINK</code> to add add a link to edit page for the event, which will appear only when a user is logged in.<br/>To insert date and time values, use <a href=\"http://www.php.net/manual/en/function.date.php\">PHP time format characters</a> with a <code>#</code> symbol before them, i.e. <code>#m</code>, <code>#M</code>, <code>#j</code>, etc.<br/> For the end time, put <code>#@</code> in front of the character, ie. <code>#@h</code>, <code>#@i</code>, etc.<br/> You can also create a date format without prepending <code>#</code> by wrapping it in #_{} or #@_{} (e.g. <code>#_{d/m/Y}</code>). If there is no end date, the value is not shown.<br/>Feel free to use HTML tags as <code>li</code>, <code>br</code> and so on.<br/>For custom attributes, you use <code>#_ATT{key}{alternative text}</code>, the second braces are optional and will appear if the attribute is not defined or left blank for that event. This key will appear as an option when adding attributes to your event."
737
+ msgstr "Opmaak van elke evenement in de lijst.<br/>Voeg een of meer van deze markeringen toe: <code>#_NAME</code>, <code>#_LOCATION</code>, <code>#_ADDRESS</code>, <code>#_TOWN</code>, <code>#_NOTES</code>.<br/> <code>#_EXCERPT</code> om <code>#_NOTES</code> te tonen tot in de tekst &lt;!&ndash;&ndash; more &ndash;&ndash;&gt; voorkomt.<br/> Gebruik <code>#_LINKEDNAME</code> voor de naam van het evenement met een link naar de pagina van het evenement.<br/> Gebruik <code>#_EVENTPAGEURL</code> om de URL weer te geven.<br/> Gebruik <code>#_LOCATIONPAGEURL</code> om de URL naar de locatie weer te geven.<br/>Gebruik <code>#_EDITEVENTLINK</code> p, een link naar de beheerpagina van het evenement te tonen, deze wordt alleen aan ingelogde gebruikers getoond.<br/>Gebruik <a href=\"http://www.php.net/manual/nl/function.date.php\">PHP time format characters</a> met een <code>#</code> symbool ervoor om datum en tijd weer te geveb bijv. <code>#m</code>, <code>#M</code>, <code>#j</code>, etc.<br/> Voor de eindtijd kunt u <code>#@</code> voor het teken zetten, bijv. <code>#@h</code>, <code>#@i</code>, etc.<br/> U kunt ook datumformaat zonder <code>#</code> gebruiken door het tussen #_{} of #@_{} te zetten (bijv. <code>#_{d/m/Y}</code>). Als er geen einddatums is wordt de waarde niet getoond.<br/>Gebruik gerust HTML tags zoals <code>li</code>, <code>br</code> etc.<br/>Voor uw eigen attributen kunt u <code>#_ATT{key}{alternative text}</code> gebruiken, de tweede haken zijn optioneel en worden gebruikt als het attribuut niet is gedefinieerd of wanneer het leeg is voor het betreffende evenement."
738
+
739
+ #: admin/options.php:112
740
+ msgid "Default event list format footer"
741
+ msgstr "Opmaak van de voettekst van een evenementenlijst"
742
+
743
+ #: admin/options.php:112
744
+ msgid "This content will appear just below your code for the default event list format. Default is blank"
745
+ msgstr "Deze tekst zal onder de code van de standaard evenementenlijst verschijnen."
746
+
747
+ #: admin/options.php:113
748
+ msgid "Single event page title format"
749
+ msgstr "Opmaak voor de titel van een pagina met een enkel evenement"
750
+
751
+ #: admin/options.php:113
752
+ msgid "The format of a single event page title. Follow the previous formatting instructions."
753
+ msgstr "Opmaak voor de titel van een pagina met een enkel evenement"
754
+
755
+ #: admin/options.php:114
756
+ msgid "Default single event format"
757
+ msgstr "Standaard opmaak van een evenement"
758
+
759
+ #: admin/options.php:114
760
+ msgid "The format of a single event page.<br/>Follow the previous formatting instructions. <br/>Use <code>#_MAP</code> to insert a map.<br/>Use <code>#_CONTACTNAME</code>, <code>#_CONTACTEMAIL</code>, <code>#_CONTACTPHONE</code> to insert respectively the name, e-mail address and phone number of the designated contact person. <br/>Use <code>#_ADDBOOKINGFORM</code> to insert a form to allow the user to respond to your events reserving one or more places (RSVP).<br/> Use <code>#_REMOVEBOOKINGFORM</code> to insert a form where users, inserting their name and e-mail address, can remove their bookings."
761
+ msgstr "Opmaak van een pagina met een evenement. <br/>Gebruik <code>#_MAP</code> om een kaart in te voegen.<br/><code>#_CONTACTNAME</code>, <code>#_CONTACTEMAIL</code>, <code>#_CONTACTPHONE</code> vppr naam, emailadresm en telefoonnummer van contactpersoon in te voegen. <br/>Gebruik <code>#_ADDBOOKINGFORM</code> om het boekingsformulier te tonen (bij gebruik van RSVP).<br/> Gebruik<code>#_REMOVEBOOKINGFORM</code> om het annuleringsformulier te tonen."
762
+
763
+ #: admin/options.php:115
764
+ msgid "Events page title"
765
+ msgstr "Titel van evenementen pagina"
766
+
767
+ #: admin/options.php:115
768
+ msgid "The title on the multiple events page."
769
+ msgstr "De titel op een pagina met meerdere evenementen"
770
+
771
+ #: admin/options.php:116
772
+ msgid "No events message"
773
+ msgstr "Geen evenement bericht"
774
+
775
+ #: admin/options.php:116
776
+ msgid "The message displayed when no events are available."
777
+ msgstr "Het bericht dat wordt weergegeven wanneer geen evenementen beschikbaar zijn."
778
+
779
+ #: admin/options.php:117
780
+ msgid "List events by date title"
781
+ msgstr "Evenementen per datum en titel sorteren"
782
+
783
+ #: admin/options.php:117
784
+ msgid "If viewing a page for events on a specific dates, this is the title that would show up. To insert date values, use <a href=\"http://www.php.net/manual/en/function.date.php\">PHP time format characters</a> with a <code>#</code> symbol before them, i.e. <code>#m</code>, <code>#M</code>, <code>#j</code>, etc.<br/>"
785
+ msgstr "Wanneer u een pagina met evenementen op een specifieke dag bekijkt, wordt deze titel gebruikt. Gebruik <a href=\"http://www.php.net/manual/nl/function.date.php\">PHP time format characters</a> met een <code>#</code>teken ervoor, bijv. <code>#m</code>, <code>#M</code>, <code>#j</code>, etc.<br/>"
786
+
787
+ #: admin/options.php:125
788
+ msgid "Calendar format"
789
+ msgstr "Kalender opmaak"
790
+
791
+ #: admin/options.php:129
792
+ msgid "Small calendar title"
793
+ msgstr "Kleine kalender titel"
794
+
795
+ #: admin/options.php:129
796
+ msgid "The format of the title, corresponding to the text that appears when hovering on an eventful calendar day."
797
+ msgstr "De opmaak van de titel, corresponderend met de tekst die verschijnt wanneer de muisaanwijzer boven een dag met evenement zweeft."
798
+
799
+ #: admin/options.php:130
800
+ msgid "Small calendar title separator"
801
+ msgstr "Kleine kalender titel scheidingsteken"
802
+
803
+ #: admin/options.php:130
804
+ msgid "The separator appearing on the above title when more than one events are taking place on the same day."
805
+ msgstr "Het scheidingsteken dat boven de titel staan wanneer meer dan een evenementen op dezelfde dag plaatsvinden"
806
+
807
+ #: admin/options.php:131
808
+ msgid "Full calendar events format"
809
+ msgstr "opmaak voor volledige kalender evenementen"
810
+
811
+ #: admin/options.php:131
812
+ msgid "The format of each event when displayed in the full calendar. Remember to include <code>li</code> tags before and after the event."
813
+ msgstr "De opmaak die wordt gebruikt wanneer een evenement volledig wordt weergegeven in de kalender. Vergeet niet om de <code>li</code> tags voor en na het evenement te zetten."
814
+
815
+ #: admin/options.php:132
816
+ msgid "Show list on day with single event?"
817
+ msgstr "Laat de lijst zien op een dag met een enkel evenement?"
818
+
819
+ #: admin/options.php:132
820
+ msgid "By default, if a calendar day only has one event, it display a single event when clicking on the link of that calendar date. If you select Yes here, you will get always see a list of events."
821
+ msgstr "Standaard wordt, wanneer slechts een evenement op een dag plaatsvindt. Wanneer deze optie aanstaat wordt altijd ene lijst met evenementen getoond."
822
+
823
+ #: admin/options.php:140
824
+ msgid "Locations format"
825
+ msgstr "Locatie opmaak"
826
+
827
+ #: admin/options.php:144
828
+ msgid "Single location page title format"
829
+ msgstr "Enele locatie titel opmaak"
830
+
831
+ #: admin/options.php:144
832
+ msgid "The format of a single location page title.<br/>Follow the previous formatting instructions."
833
+ msgstr "Het formaat van de titel op pagina van een enkele locatie.<br/>Volg eerder genoemde opmaak instructies."
834
+
835
+ #: admin/options.php:145
836
+ msgid "Default single location page format"
837
+ msgstr "Standaard opmaak voor een pagina met een enkele locatie."
838
+
839
+ #: admin/options.php:145
840
+ msgid "The format of a single location page.<br/>Insert one or more of the following placeholders: <code>#_NAME</code>, <code>#_ADDRESS</code>, <code>#_TOWN</code>, <code>#_DESCRIPTION</code>.<br/> Use <code>#_MAP</code> to display a map of the event location, and <code>#_IMAGE</code> to display an image of the location.<br/> Use <code>#_NEXTEVENTS</code> to insert a list of the upcoming events, <code>#_PASTEVENTS</code> for a list of past events, <code>#_ALLEVENTS</code> for a list of all events taking place in this location."
841
+ msgstr "Opmaak voor een pagina met een enkele locatie<br/>Gebruik een van de volgende verwijzingen:<code>#_NAME</code>, <code>#_ADDRESS</code>, <code>#_TOWN</code>, <code>#_DESCRIPTION</code>.<br/> Gebruik <code>#_MAP</code> om een kaart met de locatie van het evenement toe te voegen, en <code>#_IMAGE</code> om een afbeelding van de locatie te tonen.<br/> Gebruik <code>#_NEXTEVENTS</code> om een lijst met volgende evenementen te tonen, <code>#_PASTEVENTS</code> voor een lijst met evenementen in het verleden, <code>#_ALLEVENTS</code> voor een lijst met alle evenementen op deze locatie."
842
+
843
+ #: admin/options.php:146
844
+ msgid "Default location baloon format"
845
+ msgstr "Standaard locatie ballon opmaak"
846
+
847
+ #: admin/options.php:146
848
+ msgid "The format of of the text appearing in the baloon describing the location in the map.<br/>Insert one or more of the following placeholders: <code>#_NAME</code>, <code>#_ADDRESS</code>, <code>#_TOWN</code>, <code>#_DESCRIPTION</code> or <code>#_IMAGE</code>."
849
+ msgstr "De opmaak voor de tekst die in de ballon op de kaart wordt weergegeven.<br/>Gebruik een of meer van de volgende verwijzingen: <code>#_NAME</code>, <code>#_ADDRESS</code>, <code>#_TOWN</code>, <code>#_DESCRIPTION</code> of <code>#_IMAGE</code>."
850
+
851
+ #: admin/options.php:147
852
+ msgid "Default location event list format"
853
+ msgstr "Opmaak voor standaard locatielijst"
854
+
855
+ #: admin/options.php:147
856
+ msgid "The format of the events the list inserted in the location page through the <code>#_NEXTEVENTS</code>, <code>#_PASTEVENTS</code> and <code>#_ALLEVENTS</code> element. <br/> Follow the events formatting instructions"
857
+ msgstr "Opmaak van de evenementenlijst in de locatiepagina met <code>#_NEXTEVENTS</code>, <code>#_PASTEVENTS</code> en <code>#_ALLEVENTS</code>"
858
+
859
+ #: admin/options.php:148
860
+ msgid "Default no events message"
861
+ msgstr "Standaard 'geen evenement' bericht"
862
+
863
+ #: admin/options.php:148
864
+ msgid "The message to be displayed in the list generated by <code>#_NEXTEVENTS</code>, <code>#_PASTEVENTS</code> and <code>#_ALLEVENTS</code> when no events are available."
865
+ msgstr "Dit bericht wordt in de lijst getoond bij <code>#_NEXTEVENTS</code>, <code>#_PASTEVENTS</code> en <code>#_ALLEVENTS</code> wanneer geen evenementen beschikbaar zijn."
866
+
867
+ #: admin/options.php:156
868
+ msgid "RSS feed format"
869
+ msgstr "RSS feed format"
870
+
871
+ #: admin/options.php:160
872
+ msgid "RSS main title"
873
+ msgstr "RSS titel"
874
+
875
+ #: admin/options.php:160
876
+ msgid "The main title of your RSS events feed."
877
+ msgstr "De algemene titel van uw RSS feed"
878
+
879
+ #: admin/options.php:161
880
+ msgid "RSS main description"
881
+ msgstr "Omschrijving van uw RSS feed"
882
+
883
+ #: admin/options.php:161
884
+ msgid "The main description of your RSS events feed."
885
+ msgstr "De omschrijving van uw RSS feed"
886
+
887
+ #: admin/options.php:162
888
+ msgid "RSS title format"
889
+ msgstr "opmaak van uw RSS titel"
890
+
891
+ #: admin/options.php:162
892
+ msgid "The format of the title of each item in the events RSS feed."
893
+ msgstr "De opmaak van de titel van ieder evenement in de RSS feed"
894
+
895
+ #: admin/options.php:163
896
+ msgid "RSS description format"
897
+ msgstr "Opmaak van de omschrijving in de RSS feed"
898
+
899
+ #: admin/options.php:163
900
+ msgid "The format of the description of each item in the events RSS feed. Follow the previous formatting instructions."
901
+ msgstr "De opmaak van de tekst van elk evenement in de RSS feed"
902
+
903
+ #: admin/options.php:171
904
+ msgid "Maps and geotagging"
905
+ msgstr "Kaarten en geotagging"
906
+
907
+ #: admin/options.php:176
908
+ msgid "Enable Google Maps integration?"
909
+ msgstr "Google Maps integratie aanzetten?"
910
+
911
+ #: admin/options.php:178
912
+ #: functions.php:114
913
+ msgid "Yes"
914
+ msgstr "Ja"
915
+
916
+ #: admin/options.php:179
917
+ #: functions.php:115
918
+ msgid "No"
919
+ msgstr "Nee"
920
+
921
+ #: admin/options.php:180
922
+ msgid "Check this option to enable Goggle Map integration."
923
+ msgstr "Zet deze optie aan om Google Maps integratie aan te zetten"
924
+
925
+ #: admin/options.php:184
926
+ msgid "Map text format"
927
+ msgstr "Opmaak van tekst in de kaart"
928
+
929
+ #: admin/options.php:184
930
+ msgid "The format the text appearing in the event page map cloud.<br/>Follow the previous formatting instructions."
931
+ msgstr "Opmaak van de tekst in de kaart 'cloud'."
932
+
933
+ #: admin/options.php:192
934
+ msgid "RSVP and bookings"
935
+ msgstr "RSVP en boekingen"
936
+
937
+ #: admin/options.php:196
938
+ msgid "Default contact person"
939
+ msgstr "Standaard contactpersoon"
940
+
941
+ #: admin/options.php:196
942
+ msgid "Select the default contact person. This user will be employed whenever a contact person is not explicitly specified for an event"
943
+ msgstr "Selecteer de standaard contactpersoon. Deze gebruiker zal gewaarschuwd worden wanneer geen specifiek contactpersoon voor een evenement is aangewezen."
944
+
945
+ #: admin/options.php:197
946
+ msgid "Enable the RSVP e-mail notifications?"
947
+ msgstr "RSVP e-mail notificaties aanzetten?"
948
+
949
+ #: admin/options.php:197
950
+ msgid "Check this option if you want to receive an email when someone books places for your events."
951
+ msgstr "Zet deze optie aan wanneer u een email wil ontvangen wanneer iemand plaatsen boekt voor een van uw evenementen."
952
+
953
+ #: admin/options.php:198
954
+ #: admin/options.php:199
955
+ msgid "Contact person email format"
956
+ msgstr "Opmaak van de email aan contactpersoon"
957
+
958
+ #: admin/options.php:198
959
+ msgid "The format or the email which will be sent to the contact person. Follow the events formatting instructions. <br/>Use <code>#_RESPNAME</code>, <code>#_RESPEMAIL</code> and <code>#_RESPPHONE</code> to display respectively the name, e-mail, address and phone of the respondent.<br/>Use <code>#_SPACES</code> to display the number of spaces reserved by the respondent. Use <code>#_COMMENT</code> to display the respondent's comment. <br/> Use <code>#_BOOKEDSEATS</code> and <code>#_AVAILABLESEATS</code> to display respectively the number of booked and available seats."
960
+ msgstr "Opmaak van de email die verzonden wordt aan de contactpersoon. <code>#_RESPNAME</code>, <code>#_RESPEMAIL</code> en <code>#_RESPPHONE</code> voor naam, email, adres en telefoonnummer van de respondent.<br/>Gebruik <code>#_SPACES</code> om aantal plaatsen die respondent reserveerde te tonen. <code>#_COMMENT</code> om commentaar van de respondent te tonen. <br/> Gebrruik <code>#_BOOKEDSEATS</code> en <code>#_AVAILABLESEATS</code> om aantal gereserveerde en aantal beschikbare plaatsen te tonen."
961
+
962
+ #: admin/options.php:199
963
+ msgid "The format or the email which will be sent to reposdent. Follow the events formatting instructions. <br/>Use <code>#_RESPNAME</code> to display the name of the respondent.<br/>Use <code>#_CONTACTNAME</code> and <code>#_CONTACTEMAIL</code> a to display respectively the name and e-mail of the contact person.<br/>Use <code>#_SPACES</code> to display the number of spaces reserved by the respondent. Use <code>#_COMMENT</code> to display the respondent's comment."
964
+ msgstr "Opmaak van de mail die naar de respondent wordt gestuurd.<br/><code>#_RESPNAME</code>voor naam van de respondent.<br/> <code>#_CONTACTNAME</code> en <code>#_CONTACTEMAIL</code>voor naam en email van de contactpersoon.<br/>gebruik <code>#_SPACES</code> om aantal plaatsen die respondent reserveerde te tonen en <code>#_COMMENT</code> om respondent's opmerkingen te tonen."
965
+
966
+ #: admin/options.php:200
967
+ msgid "Default notification receiver address"
968
+ msgstr "Standaard adres voor de ontvanger van notificaties"
969
+
970
+ #: admin/options.php:200
971
+ msgid "Insert the address of the receiver of your notifications"
972
+ msgstr "Voer het adres in van de ontvanger van notificaties"
973
+
974
+ #: admin/options.php:208
975
+ msgid "Email Settings"
976
+ msgstr "Email instellingen"
977
+
978
+ #: admin/options.php:212
979
+ msgid "Notification sender name"
980
+ msgstr "Naam van afzender notificatie"
981
+
982
+ #: admin/options.php:212
983
+ msgid "Insert the display name of the notification sender."
984
+ msgstr "Voer de naam in van de afzender van de notificatie"
985
+
986
+ #: admin/options.php:213
987
+ msgid "Notification sender address"
988
+ msgstr "Adres van afzender notificatie"
989
+
990
+ #: admin/options.php:213
991
+ msgid "Insert the address of the notification sender. It must corresponds with your gmail account user"
992
+ msgstr "Voer het adres in van de afzender van notificaties. Het moet corresponderen met uw mail account gebruiker"
993
+
994
+ #: admin/options.php:214
995
+ msgid "The port through which you e-mail notifications will be sent. Make sure the firewall doesn't block this port"
996
+ msgstr "De poort die gebruikt wordt voor email notificaties."
997
+
998
+ #: admin/options.php:215
999
+ msgid "Mail sending method"
1000
+ msgstr "Mail verzend methode"
1001
+
1002
+ #: admin/options.php:215
1003
+ msgid "PHP mail function"
1004
+ msgstr "PHP mail functie"
1005
+
1006
+ #: admin/options.php:215
1007
+ msgid "Select the method to send email notification."
1008
+ msgstr "Selecteer de methode die gebruikt wordt om email te verzenden"
1009
+
1010
+ #: admin/options.php:216
1011
+ msgid "Use SMTP authentication?"
1012
+ msgstr "SMTP authenticatie gebruiken?"
1013
+
1014
+ #: admin/options.php:216
1015
+ msgid "SMTP authenticatio is often needed. If you use GMail, make sure to set this parameter to Yes"
1016
+ msgstr "Vaak is authentivatie nodig voor SMTP. Zet op 'ja' wanneer u Gmail gebruikt"
1017
+
1018
+ #: admin/options.php:217
1019
+ msgid "The SMTP host. Usually it corresponds to 'localhost'. If you use GMail, set this value to 'ssl://smtp.gmail.com:465'."
1020
+ msgstr "De SMTP host. vaak is het 'localhost'. Bij gebruik van GMail: 'ssl://smtp.gmail.com:465'."
1021
+
1022
+ #: admin/options.php:218
1023
+ msgid "SMTP username"
1024
+ msgstr "SMTP gebruikersnaam"
1025
+
1026
+ #: admin/options.php:218
1027
+ msgid "Insert the username to be used to access your SMTP server."
1028
+ msgstr "Voer de gebruikersnaam in voor uw SMTP server."
1029
+
1030
+ #: admin/options.php:219
1031
+ msgid "SMTP password"
1032
+ msgstr "SMTP wachtwoord"
1033
+
1034
+ #: admin/options.php:219
1035
+ msgid "Insert the password to be used to access your SMTP server"
1036
+ msgstr "Voer het wachtwoord in dat nodig is voor uw SMTP server"
1037
+
1038
+ #: admin/options.php:227
1039
+ msgid "Images size"
1040
+ msgstr "Afmeting van afbeeldingen"
1041
+
1042
+ #: admin/options.php:231
1043
+ msgid "Maximum width (px)"
1044
+ msgstr "<acimum breedte (pixels)"
1045
+
1046
+ #: admin/options.php:231
1047
+ msgid "The maximum allowed width for images uploades"
1048
+ msgstr "De macimaal atoelaatbare breedte voor afbeeldingen"
1049
+
1050
+ #: admin/options.php:232
1051
+ msgid "Maximum height (px)"
1052
+ msgstr "Maximum hoogte (pixels)"
1053
+
1054
+ #: admin/options.php:232
1055
+ msgid "The maximum allowed width for images uploaded, in pixels"
1056
+ msgstr "De maximaal toelaatbare hoogte van afbeeldingen"
1057
+
1058
+ #: admin/options.php:233
1059
+ msgid "Maximum size (bytes)"
1060
+ msgstr "Maximum bestandsgrootte (bytes)"
1061
+
1062
+ #: admin/options.php:233
1063
+ msgid "The maximum allowed size for images uploaded, in pixels"
1064
+ msgstr "De maximale groote van afbeeldingen, in pixels."
1065
+
1066
+ #: admin/people.php:36
1067
+ msgid "Bookings data"
1068
+ msgstr "Boeking gegevens"
1069
+
1070
+ #: admin/people.php:40
1071
+ msgid "E-mail"
1072
+ msgstr "E-mail"
1073
+
1074
+ #: admin/people.php:41
1075
+ #: bookings.php:80
1076
+ msgid "Phone number"
1077
+ msgstr "Telefoonnummer"
1078
+
1079
+ #: admin/people.php:42
1080
+ #: bookings.php:82
1081
+ msgid "Seats"
1082
+ msgstr "Aantal plaatsen"
1083
+
1084
+ #: admin/people.php:43
1085
+ #: bookings.php:93
1086
+ msgid "Comment"
1087
+ msgstr "Opmerking"
1088
+
1089
+ #: admin/people.php:57
1090
+ msgid "Booked"
1091
+ msgstr "Geboekd"
1092
+
1093
+ #: admin/people.php:62
1094
+ msgid "Available"
1095
+ msgstr "Beschikbaar"
1096
+
1097
+ #: admin/people.php:78
1098
+ msgid "No people have responded to your events yet!"
1099
+ msgstr "Er zijn nog geen reakties op uw evenementen!"
1100
+
1101
+ #: admin/people.php:81
1102
+ msgid "This table collects the data about the people who responded to your events"
1103
+ msgstr "Deze tabel verzamelt gegevens van de mensen die gereageerd hebben op uw evenementen"
1104
+
1105
+ #: admin/people.php:118
1106
+ msgid "Phone"
1107
+ msgstr "Telefoon"
1108
+
1109
+ #. #-#-#-#-# plugin.pot (Events Manager 3.0.4) #-#-#-#-#
1110
+ #. Plugin Name of the plugin/theme
1111
+ #: admin/people.php:118
1112
+ msgid "Events Manager"
1113
+ msgstr "Events Manager"
1114
+
1115
+ #: admin/support.php:10
1116
+ #: events-manager.php:229
1117
+ msgid "Getting Help for Events Manager"
1118
+ msgstr "Hulp nodig bij Events Manager"
1119
+
1120
+ #: bookings.php:40
1121
+ msgid "Booking deleted"
1122
+ msgstr "Boeking verwijderd"
1123
+
1124
+ #: bookings.php:42
1125
+ msgid "There are no bookings associated to this name and e-mail"
1126
+ msgstr "Er zijn geen boekingen voor deze naam/e-mail"
1127
+
1128
+ #: bookings.php:66
1129
+ msgid "Book now!"
1130
+ msgstr "Reserveer nu!"
1131
+
1132
+ #: bookings.php:79
1133
+ #: bookings.php:152
1134
+ msgid "E-Mail"
1135
+ msgstr "Email"
1136
+
1137
+ #: bookings.php:96
1138
+ msgid "Send your booking"
1139
+ msgstr "Verzend uw reservering"
1140
+
1141
+ #: bookings.php:105
1142
+ #: bookings.php:111
1143
+ msgid "Hide cancellation form"
1144
+ msgstr "Annuleringsscherm verbergen"
1145
+
1146
+ #: bookings.php:105
1147
+ #: bookings.php:107
1148
+ #: bookings.php:110
1149
+ #: bookings.php:114
1150
+ msgid "Cancel a booking"
1151
+ msgstr "Een reservering annuleren"
1152
+
1153
+ #: bookings.php:136
1154
+ #: bookings.php:157
1155
+ msgid "Cancel your booking"
1156
+ msgstr "Annuleer uw reservering"
1157
+
1158
+ #: classes/booking.php:74
1159
+ msgid "There was a problem saving the booking."
1160
+ msgstr "Er was een probleem bij het opslaan van de reservering"
1161
+
1162
+ #: classes/booking.php:80
1163
+ msgid "Your booking has been recorded"
1164
+ msgstr "Uw reservering is verwerkt"
1165
+
1166
+ #: classes/bookings.php:78
1167
+ msgid "Booking successful."
1168
+ msgstr "Reservering gelukt"
1169
+
1170
+ #: classes/bookings.php:80
1171
+ msgid "However, we were not able to send you an email."
1172
+ msgstr "We konden u echter geen emailbericht verzenden"
1173
+
1174
+ #: classes/bookings.php:88
1175
+ msgid "Booking could not be created"
1176
+ msgstr "Reservering kon niet worden aangemaakt"
1177
+
1178
+ #: classes/bookings.php:91
1179
+ msgid "Booking cannot be made, not enough seats available!"
1180
+ msgstr "Reservering mislukt, niet voldoende plaatsen beschikbaar!"
1181
+
1182
+ #: classes/bookings.php:183
1183
+ msgid "Reservation confirmed"
1184
+ msgstr "Reservering is bevestigd"
1185
+
1186
+ #: classes/bookings.php:186
1187
+ msgid "New booking"
1188
+ msgstr "Nieuwe reservering"
1189
+
1190
+ #: classes/event.php:207
1191
+ msgid "There was a problem saving the location so event was not saved."
1192
+ msgstr "Er ging iets mis bij opslaan van de locatie. evenement is niet opgeslagen"
1193
+
1194
+ #: classes/event.php:227
1195
+ #: classes/event.php:255
1196
+ msgid "Something went wrong with the recurrence update..."
1197
+ msgstr "Er ging iets fout met opslaan van terugkerend evenement"
1198
+
1199
+ #: classes/event.php:228
1200
+ #: classes/event.php:256
1201
+ msgid "There was a problem saving the recurring events."
1202
+ msgstr "Er ging iets fout met opslaan van terugkerende evenementen"
1203
+
1204
+ #: classes/event.php:233
1205
+ msgid "New recurrent event inserted!"
1206
+ msgstr "Nieuw herhalend evenement toegevoegd!"
1207
+
1208
+ #: classes/event.php:237
1209
+ msgid "New event successfully inserted!"
1210
+ msgstr "Nieuw evenement is toegevoegd"
1211
+
1212
+ #: classes/event.php:240
1213
+ #: classes/event.php:263
1214
+ msgid "Could not save the event details due to a database error."
1215
+ msgstr "Er ging iets fout in de database, evenement is niet opgeslagen"
1216
+
1217
+ #: classes/event.php:259
1218
+ msgid "Recurrence updated!"
1219
+ msgstr "Herhaling is opgeslagen"
1220
+
1221
+ #: classes/event.php:267
1222
+ msgid "updated"
1223
+ msgstr "aangepast"
1224
+
1225
+ #: classes/event.php:329
1226
+ msgid "Missing fields: "
1227
+ msgstr "Ontbrekende velden"
1228
+
1229
+ #: classes/event.php:332
1230
+ msgid "Since the event is repeated, you must specify an event date."
1231
+ msgstr "Aangezien het een herhalend evenement betreft, dient u een datum aan te geven"
1232
+
1233
+ #: classes/event.php:410
1234
+ #: events-manager.php:223
1235
+ msgid "Edit"
1236
+ msgstr "Aanpassen"
1237
+
1238
+ #: classes/event.php:410
1239
+ msgid "Event"
1240
+ msgstr "Evenement"
1241
+
1242
+ #: classes/event.php:536
1243
+ msgid "N/A"
1244
+ msgstr "Niet beschikbaar"
1245
+
1246
+ #: classes/event.php:792
1247
+ msgid "Sunday"
1248
+ msgstr "Zondag"
1249
+
1250
+ #: classes/event.php:792
1251
+ msgid "Monday"
1252
+ msgstr "Maandag"
1253
+
1254
+ #: classes/event.php:792
1255
+ msgid "Tuesday"
1256
+ msgstr "Dinsdag"
1257
+
1258
+ #: classes/event.php:792
1259
+ msgid "Wednesday"
1260
+ msgstr "Woensdag"
1261
+
1262
+ #: classes/event.php:792
1263
+ msgid "Thursday"
1264
+ msgstr "Donderdag"
1265
+
1266
+ #: classes/event.php:792
1267
+ msgid "Friday"
1268
+ msgstr "Vrijdag"
1269
+
1270
+ #: classes/event.php:792
1271
+ msgid "Saturday"
1272
+ msgstr "Zaterdag"
1273
+
1274
+ #: classes/event.php:793
1275
+ #, php-format
1276
+ msgid "the first %s of the month"
1277
+ msgstr "de eerste %s van de maand"
1278
+
1279
+ #: classes/event.php:793
1280
+ #, php-format
1281
+ msgid "the second %s of the month"
1282
+ msgstr "de tweede %s van de maand"
1283
+
1284
+ #: classes/event.php:793
1285
+ #, php-format
1286
+ msgid "the third %s of the month"
1287
+ msgstr "de derde %s van de maand"
1288
+
1289
+ #: classes/event.php:793
1290
+ #, php-format
1291
+ msgid "the fourth %s of the month"
1292
+ msgstr "de vierde %s van de maand"
1293
+
1294
+ #: classes/event.php:793
1295
+ #, php-format
1296
+ msgid "the last %s of the month"
1297
+ msgstr "de laatste %s van de maand"
1298
+
1299
+ #: classes/event.php:794
1300
+ #, php-format
1301
+ msgid "From %1$s to %2$s"
1302
+ msgstr "Van %1$s tot %2$s"
1303
+
1304
+ #: classes/event.php:797
1305
+ msgid "everyday"
1306
+ msgstr "Elke dag"
1307
+
1308
+ #: classes/event.php:799
1309
+ #, php-format
1310
+ msgid "every %s days"
1311
+ msgstr "elke %s dagen"
1312
+
1313
+ #: classes/event.php:809
1314
+ #, php-format
1315
+ msgid "every %s weeks"
1316
+ msgstr "elke %s weken"
1317
+
1318
+ #: classes/event.php:820
1319
+ #, php-format
1320
+ msgid "every %s months"
1321
+ msgstr "elke %s maanden"
1322
+
1323
+ #: classes/location.php:39
1324
+ msgid "The location name"
1325
+ msgstr "Naam van de locatie"
1326
+
1327
+ #: classes/location.php:39
1328
+ msgid "The location address"
1329
+ msgstr "Adres van de locatie"
1330
+
1331
+ #: classes/location.php:39
1332
+ msgid "The location town"
1333
+ msgstr "Plaats van de locatie"
1334
+
1335
+ #: classes/location.php:130
1336
+ msgid "The image could not be loaded"
1337
+ msgstr "Afbeelding kon niet worden geladen"
1338
+
1339
+ #: classes/location.php:158
1340
+ msgid " is missing!"
1341
+ msgstr "ontbreekt!"
1342
+
1343
+ #: classes/location.php:166
1344
+ msgid "The image file is too big! Maximum size:"
1345
+ msgstr "De afbeelding is te groot! Maximale groote:"
1346
+
1347
+ #: classes/location.php:172
1348
+ msgid "The image is too big! Maximum size allowed:"
1349
+ msgstr "De afbeelding is te groot! Maximale groote:"
1350
+
1351
+ #: classes/location.php:175
1352
+ msgid "The image is in a wrong format!"
1353
+ msgstr "Afbeelding is in een ongeldig formaat!"
1354
+
1355
+ #: classes/mailer.php:61
1356
+ msgid "Please supply a valid email format."
1357
+ msgstr "Geef a.u.b. een geldig emailadres op"
1358
+
1359
+ #: classes/map.php:20
1360
+ #: classes/map.php:48
1361
+ msgid "Loading Map...."
1362
+ msgstr "KJaart wordt geladen ..."
1363
+
1364
+ #: classes/map.php:61
1365
+ msgid "Map Unavailable"
1366
+ msgstr "Kaart is niet beschikbaar"
1367
+
1368
+ #: classes/person.php:84
1369
+ msgid "Please provide a valid email address."
1370
+ msgstr "Geef a.u.b. een geldig emailadres op"
1371
+
1372
+ #: events-manager.php:101
1373
+ #: events-manager.php:104
1374
+ #: events-manager.php:220
1375
+ #: install.php:186
1376
+ #: install.php:187
1377
+ #: template-tags.php:16
1378
+ #: widgets/events.php:42
1379
+ msgid "Events"
1380
+ msgstr "Evenementen"
1381
+
1382
+ #: events-manager.php:111
1383
+ #: install.php:178
1384
+ #: widgets/events.php:31
1385
+ msgid "No events"
1386
+ msgstr "Geen evenementen"
1387
+
1388
+ #: events-manager.php:117
1389
+ msgid "<li>No events in this location</li>"
1390
+ msgstr "<li>Geen evenementen op deze locatie</li>"
1391
+
1392
+ #: events-manager.php:208
1393
+ #: events-manager.php:228
1394
+ msgid "Settings"
1395
+ msgstr "Instellingen"
1396
+
1397
+ #: events-manager.php:224
1398
+ msgid "Add new"
1399
+ msgstr "Toevoegen"
1400
+
1401
+ #: events-manager.php:226
1402
+ msgid "People"
1403
+ msgstr "Mensen"
1404
+
1405
+ #: events-manager.php:227
1406
+ msgid "Event Categories"
1407
+ msgstr "Evenement categorieën"
1408
+
1409
+ #: events-manager.php:228
1410
+ msgid "Events Manager Settings"
1411
+ msgstr "Instellingen van Events Manager"
1412
+
1413
+ #: events-manager.php:229
1414
+ msgid "Help"
1415
+ msgstr "Help"
1416
+
1417
+ #: events-manager.php:256
1418
+ msgid "Add an event"
1419
+ msgstr "Evenement toevoegen"
1420
+
1421
+ #: events-manager.php:272
1422
+ #, php-format
1423
+ msgid "This page corresponds to <strong>Events Manager</strong> events page. Its content will be overriden by <strong>Events Manager</strong>. If you want to display your content, you can can assign another page to <strong>Events Manager</strong> in the the <a href='%s'>Settings</a>. "
1424
+ msgstr "Deze pagina hoort bij de <strong>Events manager</strong> evenementenpagina. De inhoud zal worden overschreven door <strong>Events manager</strong>. Om inhoud te tonen, kunt u een andere pagina aan <strong>Events manager</strong> toewijzen in de <a href='%s'>Instellingen</a>. "
1425
+
1426
+ #: events-manager.php:283
1427
+ #, php-format
1428
+ msgid "Uh Oh! For some reason wordpress could not create an events page for you (or you just deleted it). Not to worry though, all you have to do is create an empty page, name it whatever you want, and select it as your events page in your <a href=\"%s\">options page</a>. Sorry for the extra step! If you know what you are doing, you may have done this on purpose, if so <a href=\"%s\">ignore this message</a>"
1429
+ msgstr "O jee! Om de een of andere reden kon Wordpress de evenementen pagina niet aanmaken (of u hebt het verwijderd).Geen zorgen. Maak gewoon een lege pagina aan en selecteer deze als uw evenementenpagina in de <a href=\"%s\">opties pagina</a>.Excuses voor de extra moeite die u moet nemen. Misschien heeft u het bewust gedaan. In dat geval kunt u <a href=\"%s\">dit bericht negeren</a>"
1430
+
1431
+ #: functions.php:5
1432
+ #, php-format
1433
+ msgid ""
1434
+ "<p>Hey, <strong>%s</strong>, welcome to <strong>Events Manager</strong>! We hope you like it around here.</p> \r\n"
1435
+ "\t\t<p>Now it's time to insert events lists through <a href='%s' title='Widgets page'>widgets</a>, <a href='%s' title='Template tags documentation'>template tags</a> or <a href='%s' title='Shortcodes documentation'>shortcodes</a>.</p>\r\n"
1436
+ "\t\t<p>By the way, have you taken a look at the <a href='%s' title='Change settings'>Settings page</a>? That's where you customize the way events and locations are displayed.</p>\r\n"
1437
+ "\t\t<p>What? Tired of seeing this advice? I hear you, <a href='%s' title='Don't show this advice again'>click here</a> and you won't see this again!</p>"
1438
+ msgstr ""
1439
+ "<p>Hallo, <strong>%s</strong>, welkom bij <strong>Events manager</strong>! We hopen dat het hier bevalt.</p> \r\n"
1440
+ " \t\t<p>Het moment is gekomen om evenementen toe te voegen met de <a href='%s' title='Widgets page'>widgets</a>, <a href='%s' title='Template tags documentation'>sjabloon tags</a> of de <a href='%s' title='Shortcodes documentation'>shortcodes</a>.</p>\r\n"
1441
+ "\t\t<p>Heeft u al een kijkje genomen in de <a href='%s' title='Wijzig instellingen'>instellingen</a>? Daar kan van alles worden ingesteld voor de evenementen en locaties.</p>\r\n"
1442
+ "\t\t<p> Wat? Bent u dit advies beu? Okay, okay , <a href='%s' title='Advies niet meer tonen'>klik hier</a>en u zult het bericht niet meer zien!</p>"
1443
+
1444
+ #: install.php:161
1445
+ msgid "Uncategorized"
1446
+ msgstr "Zonder Categorie"
1447
+
1448
+ #: install.php:169
1449
+ msgid "#_RESPNAME (#_RESPEMAIL) will attend #_NAME on #m #d, #Y. He wants to reserve #_SPACES spaces.<br/> Now there are #_RESERVEDSPACES spaces reserved, #_AVAILABLESPACES are still available.<br/>Yours faithfully,<br/>Events Manager"
1450
+ msgstr "#_RESPNAME (#_RESPEMAIL) wil #_NAME op #m #d, #Y bijwonen en wil #_BOOKEDSPACES plaatsen reserveren.Er zijn nu #_BOOKEDSPACES plaatsen gereserveerd, #_AVAILABLESPACES van de #_SPACES plaatsen nog beschikbaar.Automagische groeten,Uw website"
1451
+
1452
+ #: install.php:170
1453
+ msgid "Dear #_RESPNAME, <br/>you have successfully reserved #_SPACES space/spaces for #_NAME.<br/>Yours faithfully,<br/> #_CONTACTPERSON"
1454
+ msgstr "Beste #_RESPNAME, Wij hebben uw reserveringverzoek voor #_BOOKEDSPACES plaatsen voor #_NAME in goede orde ontvangen.Met vriendelijke groet, #_CONTACTPERSON"
1455
+
1456
+ #: install.php:305
1457
+ msgid "We could not mirgrate old recurrence data over. DONT WORRY! You can just delete the current plugin, and re-install the previous 2.2.2 version and you wont lose any of your data. Either way, please contact the developers to let them know of this bug."
1458
+ msgstr "We konden de oude herhalings gegevens niet migreren. Geen zorgen. U kunt de huidige plugin verwijderen en de vorige versie installeren. U verliest zo geen gegevens. Neem wel even contact op met de ontwikkelaars over deze 'bug'."
1459
+
1460
+ #: install.php:467
1461
+ msgid "Events Manager successfully imported your events, please check your records to verify."
1462
+ msgstr "Uw evenementen zijn succesvol geïmporteerd. Check de gegevens voor de zekerheid."
1463
+
1464
+ #: install.php:483
1465
+ #, php-format
1466
+ msgid "Something has gone wrong when importing your old event. See the <a href=\"%s\">support page</a> for more information. <a href=\"%s\">Dismiss this message</a>"
1467
+ msgstr "Er ging iets mis tijdens de import van een oud evenement. Check de <a href=\"%s\">support pagina</a> voor meer informatie. <a href=\"%s\">Negeer dit bericht</a>"
1468
+
1469
+ #: locations.php:35
1470
+ msgid "Ach, some problems here:"
1471
+ msgstr "Oei, problemen hier:"
1472
+
1473
+ #: widgets/calendar.php:9
1474
+ msgid "Display your events in a calendar widget."
1475
+ msgstr "Laat evenemeten zien in een kalender widget"
1476
+
1477
+ #: widgets/calendar.php:10
1478
+ msgid "Events Calendar"
1479
+ msgstr "Evenementen kalender"
1480
+
1481
+ #: widgets/calendar.php:32
1482
+ msgid "Calendar"
1483
+ msgstr "Kalender"
1484
+
1485
+ #: widgets/calendar.php:41
1486
+ #: widgets/events.php:60
1487
+ #: widgets/locations.php:60
1488
+ msgid "Title"
1489
+ msgstr "Titel"
1490
+
1491
+ #: widgets/calendar.php:45
1492
+ msgid "Show Long Events?"
1493
+ msgstr "Lange evenementen tonen?"
1494
+
1495
+ #: widgets/events.php:9
1496
+ msgid "Display a list of events on Events Manager."
1497
+ msgstr "Laat een lijst van evenementen zin op Events Manager"
1498
+
1499
+ #: widgets/events.php:64
1500
+ msgid "Number of events"
1501
+ msgstr "Aantal evenementen"
1502
+
1503
+ #: widgets/events.php:68
1504
+ msgid "Scope of the events"
1505
+ msgstr "Scope van evenementen"
1506
+
1507
+ #: widgets/events.php:76
1508
+ msgid "Order of the events"
1509
+ msgstr "Volgorde van evenementen"
1510
+
1511
+ #: widgets/events.php:78
1512
+ #: widgets/locations.php:78
1513
+ msgid "Ascendant"
1514
+ msgstr "Oplopend"
1515
+
1516
+ #: widgets/events.php:79
1517
+ #: widgets/locations.php:79
1518
+ msgid "Descendant"
1519
+ msgstr "Aflopend"
1520
+
1521
+ #: widgets/events.php:83
1522
+ #: widgets/locations.php:83
1523
+ msgid "List item format"
1524
+ msgstr "Opmaak van de lijst"
1525
+
1526
+ #: widgets/locations.php:9
1527
+ msgid "Display a list of event locations on Events Manager."
1528
+ msgstr "Laat een lijst van evenementlocaties zien in de Events Manager."
1529
+
1530
+ #: widgets/locations.php:31
1531
+ msgid "No locations"
1532
+ msgstr "Geen Locaties"
1533
+
1534
+ #: widgets/locations.php:42
1535
+ msgid "Event Locations"
1536
+ msgstr "Locaties van evenementen"
1537
+
1538
+ #: widgets/locations.php:64
1539
+ msgid "Show number of locations"
1540
+ msgstr "Laat het aantal locaties zien"
1541
+
1542
+ #: widgets/locations.php:68
1543
+ msgid "Scope of the locations"
1544
+ msgstr "groep van locaties"
1545
+
1546
+ #: widgets/locations.php:70
1547
+ msgid "Locations with upcoming events"
1548
+ msgstr "Locaties waar evenementen zullen plaatsvinden"
1549
+
1550
+ #: widgets/locations.php:71
1551
+ msgid "All locations"
1552
+ msgstr "Alle locaties"
1553
+
1554
+ #: widgets/locations.php:72
1555
+ msgid "Locations with past events "
1556
+ msgstr "Locaties waar evenementen hebben plaatsgevonden"
1557
+
1558
+ #: widgets/locations.php:76
1559
+ msgid "Order of the locations"
1560
+ msgstr "Volgorde van de locaties"
1561
+
1562
+ #. Plugin URI of the plugin/theme
1563
+ msgid "http://davidebenini.it/wordpress-plugins/events-manager/"
1564
+ msgstr "http://davidebenini.it/wordpress-plugins/events-manager/"
1565
+
1566
+ #. Description of the plugin/theme
1567
+ msgid "Manage events specifying precise spatial data (Location, Town, Province, etc)."
1568
+ msgstr "Beheer evenementen in detail"
1569
+
1570
+ #. Author of the plugin/theme
1571
+ msgid "Davide Benini, Marcus Sykes"
1572
+ msgstr "Davide Benini, Marcus Sykes"
1573
+
1574
+ #. Author URI of the plugin/theme
1575
+ msgid "http://www.davidebenini.it/blog"
1576
+ msgstr "http://www.davidebenini.it/blog"
1577
+
includes/langs/events-manager.pot CHANGED
@@ -1,685 +1,771 @@
1
- # Translation of the WordPress plugin Events Manager 3.0.4 by Davide Benini, Marcus Sykes.
2
- # Copyright (C) 2010 Davide Benini, Marcus Sykes
3
  # This file is distributed under the same license as the Events Manager package.
4
- # FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
5
- #
6
- #, fuzzy
7
  msgid ""
8
  msgstr ""
9
- "Project-Id-Version: Events Manager 3.0.4\n"
10
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/events-manager\n"
11
- "POT-Creation-Date: 2010-10-22 13:29+0000\n"
 
 
 
12
  "PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
15
- "MIME-Version: 1.0\n"
16
- "Content-Type: text/plain; charset=utf-8\n"
17
- "Content-Transfer-Encoding: 8bit\n"
18
 
19
- #: admin/admin.php:125 admin/categories.php:76 admin/categories.php:83
20
- #: admin/event.php:279 admin/events.php:192 admin/locations.php:103
21
- #: admin/locations.php:111 admin/people.php:39 bookings.php:78
22
- #: bookings.php:149
23
- msgid "Name"
24
  msgstr ""
25
 
26
- #: admin/admin.php:126
27
- msgid "Date"
28
  msgstr ""
29
 
30
- #: admin/admin.php:127 admin/event.php:338 admin/events.php:194
31
- msgid "Location"
32
  msgstr ""
33
 
34
- #: admin/admin.php:128 admin/locations.php:104 admin/locations.php:112
35
- msgid "Address"
 
36
  msgstr ""
37
 
38
- #: admin/admin.php:129 admin/locations.php:105 admin/locations.php:113
39
- msgid "Town"
40
  msgstr ""
41
 
42
- #: admin/admin.php:143
43
- msgid "Some required fields are missing:"
44
  msgstr ""
45
 
46
- #: admin/admin.php:146
47
- msgid "Since the event is repeated, you must specify an end date"
48
  msgstr ""
49
 
50
- #: admin/bookings.php:17
51
- msgid "Bookings deleted"
52
  msgstr ""
53
 
54
- #: admin/categories.php:56 events-manager.php:227
55
- msgid "Categories"
56
  msgstr ""
57
 
58
- #: admin/categories.php:75 admin/categories.php:82
59
- msgid "ID"
60
  msgstr ""
61
 
62
- #: admin/categories.php:106
63
- msgid "No categories have been inserted yet!"
64
  msgstr ""
65
 
66
- #: admin/categories.php:118 admin/categories.php:126
67
- msgid "Add category"
68
  msgstr ""
69
 
70
- #: admin/categories.php:122 admin/categories.php:164
71
- msgid "Category name"
72
  msgstr ""
73
 
74
- #: admin/categories.php:124 admin/categories.php:166
75
- msgid "The name of the category"
76
  msgstr ""
77
 
78
- #: admin/categories.php:148
79
- msgid "Edit category"
80
  msgstr ""
81
 
82
- #: admin/categories.php:169
83
- msgid "Update category"
84
  msgstr ""
85
 
86
- #: admin/event.php:4 admin/events.php:72
87
- msgid "Insert New Event"
88
  msgstr ""
89
 
90
- #: admin/event.php:31
91
- msgid "Mon"
92
  msgstr ""
93
 
94
- #: admin/event.php:31
95
- msgid "Tue"
96
  msgstr ""
97
 
98
- #: admin/event.php:31
99
- msgid "Wed"
100
  msgstr ""
101
 
102
- #: admin/event.php:31
103
- msgid "Thu"
 
 
104
  msgstr ""
105
 
106
- #: admin/event.php:31
107
- msgid "Fri"
108
  msgstr ""
109
 
110
- #: admin/event.php:31
111
- msgid "Sat"
112
  msgstr ""
113
 
114
- #: admin/event.php:31
115
- msgid "Sun"
 
116
  msgstr ""
117
 
118
- #: admin/event.php:42
119
- msgid "WARNING: This is a recurring event."
 
120
  msgstr ""
121
 
122
- #: admin/event.php:44
123
- msgid ""
124
- "Modifying these data all the events linked to this recurrence will be "
125
- "rescheduled"
126
  msgstr ""
127
 
128
- #: admin/event.php:46
129
- msgid "and all booking information will be deleted!"
130
  msgstr ""
131
 
132
- #: admin/event.php:49
133
- msgid "WARNING: This is a recurrence."
134
  msgstr ""
135
 
136
- #: admin/event.php:51
137
- msgid ""
138
- "If you change these data and save, this will become an independent event."
139
  msgstr ""
140
 
141
- #: admin/event.php:66
142
- msgid "Recurrence"
143
  msgstr ""
144
 
145
- #: admin/event.php:73
146
- msgid "Repeated event"
147
  msgstr ""
148
 
149
- #: admin/event.php:80
150
- msgid "Daily"
151
  msgstr ""
152
 
153
- #: admin/event.php:80
154
- msgid "Weekly"
155
  msgstr ""
156
 
157
- #: admin/event.php:80
158
- msgid "Monthly"
159
  msgstr ""
160
 
161
- #: admin/event.php:86 admin/event.php:109
162
- msgid "Every"
163
  msgstr ""
164
 
165
- #: admin/event.php:89
166
- msgid "day"
167
  msgstr ""
168
 
169
- #: admin/event.php:91
170
- msgid "days"
171
  msgstr ""
172
 
173
- #: admin/event.php:93
174
- msgid "week"
175
  msgstr ""
176
 
177
- #: admin/event.php:95
178
- msgid "weeks"
179
  msgstr ""
180
 
181
- #: admin/event.php:97
182
- msgid "month"
183
  msgstr ""
184
 
185
- #: admin/event.php:99
186
- msgid "months"
187
  msgstr ""
188
 
189
- #: admin/event.php:112
190
- msgid "first"
191
  msgstr ""
192
 
193
- #: admin/event.php:112
194
- msgid "second"
195
  msgstr ""
196
 
197
- #: admin/event.php:112
198
- msgid "third"
 
 
 
 
 
 
 
 
 
 
 
 
199
  msgstr ""
200
 
201
- #: admin/event.php:112
202
- msgid "fourth"
203
  msgstr ""
204
 
205
- #: admin/event.php:112
206
- msgid "last"
207
  msgstr ""
208
 
209
- #: admin/event.php:123
210
- msgid ""
211
- "Check if your event happens more than once according to a regular pattern"
212
  msgstr ""
213
 
214
- #: admin/event.php:130 admin/events.php:36 admin/events.php:255
215
- msgid "Reschedule"
216
  msgstr ""
217
 
218
- #: admin/event.php:135
219
- msgid "This is't a recurrent event"
220
  msgstr ""
221
 
222
- #: admin/event.php:147
223
- msgid "Contact Person"
224
  msgstr ""
225
 
226
- #: admin/event.php:150
227
- msgid "Contact"
228
  msgstr ""
229
 
230
- #: admin/event.php:151
231
- msgid "Select..."
232
  msgstr ""
233
 
234
- #: admin/event.php:158
235
- msgid "RSVP"
236
  msgstr ""
237
 
238
- #: admin/event.php:162
239
- msgid "Enable registration for this event"
240
  msgstr ""
241
 
242
- #: admin/event.php:173 admin/event.php:192
243
- msgid "Spaces"
244
  msgstr ""
245
 
246
- #: admin/event.php:185
247
- msgid "responses so far"
248
  msgstr ""
249
 
250
- #: admin/event.php:191
251
- msgid "Responder"
252
  msgstr ""
253
 
254
- #: admin/event.php:197
255
- msgid "Booked spaces"
256
  msgstr ""
257
 
258
- #: admin/event.php:198
259
- msgid "Available spaces"
260
  msgstr ""
261
 
262
- #: admin/event.php:208
263
- msgid "Comment:"
264
  msgstr ""
265
 
266
- #: admin/event.php:226
267
- msgid "Printable view"
268
  msgstr ""
269
 
270
- #: admin/event.php:234
271
- msgid "No responses yet!"
 
 
272
  msgstr ""
273
 
274
- #: admin/event.php:251 admin/events.php:228
275
- msgid "Category"
276
  msgstr ""
277
 
278
- #: admin/event.php:254
279
- msgid "Category:"
 
 
 
280
  msgstr ""
281
 
282
- #: admin/event.php:284
283
- msgid "The event name. Example: Birthday party"
284
  msgstr ""
285
 
286
- #: admin/event.php:289
287
- msgid "Event date"
288
  msgstr ""
289
 
290
- #: admin/event.php:292
291
- msgid "Recurrence dates"
292
  msgstr ""
293
 
294
- #: admin/event.php:302
295
- msgid "The event date."
296
  msgstr ""
297
 
298
- #: admin/event.php:305
299
- msgid ""
300
- "When not reoccurring, this event spans between the beginning and end date."
301
  msgstr ""
302
 
303
- #: admin/event.php:310
304
- msgid "The recurrence beginning and end date."
 
305
  msgstr ""
306
 
307
- #: admin/event.php:316
308
- msgid "Event time"
309
  msgstr ""
310
 
311
- #: admin/event.php:323
312
- msgid "The time of the event beginning and end"
313
  msgstr ""
314
 
315
- #: admin/event.php:328
316
- msgid "Coordinates"
317
  msgstr ""
318
 
319
- #: admin/event.php:347
320
- msgid "Location:"
321
  msgstr ""
322
 
323
- #: admin/event.php:364
324
- msgid ""
325
- "The name of the location where the event takes place. You can use the name "
326
- "of a venue, a square, etc"
327
  msgstr ""
328
 
329
- #: admin/event.php:369
330
- msgid "Name:"
 
331
  msgstr ""
332
 
333
- #: admin/event.php:372
334
- msgid "Select a location for your event"
335
  msgstr ""
336
 
337
- #: admin/event.php:376
338
- msgid "Address:"
339
  msgstr ""
340
 
341
- #: admin/event.php:379
342
- msgid ""
343
- "The address of the location where the event takes place. Example: 21, "
344
- "Dominick Street"
345
  msgstr ""
346
 
347
- #: admin/event.php:383
348
- msgid "Town:"
 
 
 
 
349
  msgstr ""
350
 
351
- #: admin/event.php:386
352
  msgid ""
353
- "The town where the location is located. If you're using the Google Map "
354
- "integration and want to avoid geotagging ambiguities include the country in "
355
- "the town field. Example: Verona, Italy."
356
  msgstr ""
357
 
358
- #: admin/event.php:395 admin/locations.php:181 admin/locations.php:265
359
- msgid "Location not found"
 
 
360
  msgstr ""
361
 
362
- #: admin/event.php:406
363
- msgid "Details"
364
  msgstr ""
365
 
366
- #: admin/event.php:413
367
- msgid "Details about the event"
368
  msgstr ""
369
 
370
- #: admin/event.php:420
371
- msgid "Attributes"
372
  msgstr ""
373
 
374
- #: admin/event.php:475
375
- msgid "Not defined in templates"
376
  msgstr ""
377
 
378
- #: admin/event.php:519
379
- msgid ""
380
- "In order to use attributes, you must define some in your templates, "
381
- "otherwise they'll never show. Go to Events > Settings to add attribute "
382
- "placeholders."
383
  msgstr ""
384
 
385
- #: admin/event.php:531
386
- msgid "Submit Event"
387
  msgstr ""
388
 
389
- #: admin/event.php:542
390
- msgid ""
391
- "Are you sure you want to reschedule this recurring event? If you do this, "
392
- "you will lose all booking information and the old recurring events will be "
393
- "deleted."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
394
  msgstr ""
395
 
396
- #: admin/event.php:552
397
  msgid ""
398
- "Are you sure you want to disable bookings? If you do this and save, you will "
399
- "lose all previous bookings. If you wish to prevent further bookings, reduce "
400
- "the number of seats available to the amount of bookings you currently have"
401
  msgstr ""
402
 
403
- #: admin/events.php:51 admin/events.php:61 admin/locations.php:42
404
- #: admin/locations.php:60
405
- msgid "Ach, there's a problem here:"
 
 
406
  msgstr ""
407
 
408
- #: admin/events.php:74 admin/events.php:85
409
- msgid "Edit Event"
410
  msgstr ""
411
 
412
- #: admin/events.php:98
413
- msgid "Past Events"
414
  msgstr ""
415
 
416
- #: admin/events.php:101
417
- msgid "All Events"
418
  msgstr ""
419
 
420
- #: admin/events.php:104
421
- msgid "Future Events"
422
  msgstr ""
423
 
424
- #: admin/events.php:116 admin/events.php:136 widgets/events.php:72
425
- msgid "Past events"
426
  msgstr ""
427
 
428
- #: admin/events.php:117 admin/events.php:137 widgets/events.php:71
429
- msgid "All events"
430
  msgstr ""
431
 
432
- #: admin/events.php:118 admin/events.php:138 widgets/events.php:70
433
- msgid "Future events"
434
  msgstr ""
435
 
436
- #: admin/events.php:143
437
- msgid "Total"
438
  msgstr ""
439
 
440
- #: admin/events.php:151
441
- msgid "Bulk Actions"
442
  msgstr ""
443
 
444
- #: admin/events.php:152
445
- msgid "Delete selected"
446
  msgstr ""
447
 
448
- #: admin/events.php:154
449
- msgid "Apply"
450
  msgstr ""
451
 
452
- #: admin/events.php:165
453
- msgid "Filter"
454
  msgstr ""
455
 
456
- #: admin/events.php:171
457
- msgid "Previous Page"
458
  msgstr ""
459
 
460
- #: admin/events.php:173
461
- msgid "Next Page"
462
  msgstr ""
463
 
464
- #: admin/events.php:182
465
- msgid "no events"
466
  msgstr ""
467
 
468
- #: admin/events.php:195
469
- msgid "Date and time"
470
  msgstr ""
471
 
472
- #: admin/events.php:207 admin/events.php:208
473
- msgid "D d M Y"
474
  msgstr ""
475
 
476
- #: admin/events.php:232
477
- msgid "Duplicate this event"
478
  msgstr ""
479
 
480
- #: admin/locations.php:20
481
- msgid "Locations Deleted"
482
  msgstr ""
483
 
484
- #: admin/locations.php:36
485
- msgid "The location has been updated."
486
  msgstr ""
487
 
488
- #: admin/locations.php:55
489
- msgid "The location has been added."
490
  msgstr ""
491
 
492
- #: admin/locations.php:83 events-manager.php:225
493
- msgid "Locations"
494
  msgstr ""
495
 
496
- #: admin/locations.php:138
497
- msgid "No venues have been inserted yet!"
498
  msgstr ""
499
 
500
- #: admin/locations.php:148 admin/locations.php:203
501
- msgid "Add location"
502
  msgstr ""
503
 
504
- #: admin/locations.php:152 admin/locations.php:235
505
- msgid "Location name"
506
  msgstr ""
507
 
508
- #: admin/locations.php:154 admin/locations.php:237
509
- msgid "The name of the location"
510
  msgstr ""
511
 
512
- #: admin/locations.php:158 admin/locations.php:241
513
- msgid "Location address"
 
 
 
 
514
  msgstr ""
515
 
516
- #: admin/locations.php:160 admin/locations.php:243
517
- msgid "The address of the location"
518
  msgstr ""
519
 
520
- #: admin/locations.php:164 admin/locations.php:248
521
- msgid "Location town"
522
  msgstr ""
523
 
524
- #: admin/locations.php:166
525
- msgid "The town of the location"
526
  msgstr ""
527
 
528
- #: admin/locations.php:189 admin/locations.php:285
529
- msgid "Location image"
530
  msgstr ""
531
 
532
- #: admin/locations.php:191
533
- msgid "Select an image to upload"
534
  msgstr ""
535
 
536
- #: admin/locations.php:195 admin/locations.php:274
537
- msgid "Location description"
538
  msgstr ""
539
 
540
- #: admin/locations.php:200 admin/locations.php:280
541
- msgid "A description of the Location. You may include any kind of info here."
 
542
  msgstr ""
543
 
544
- #: admin/locations.php:221
545
- msgid "Edit location"
546
  msgstr ""
547
 
548
- #: admin/locations.php:250
549
- msgid "The town where the location is located"
550
  msgstr ""
551
 
552
- #: admin/locations.php:262
553
- msgid "Location map"
554
  msgstr ""
555
 
556
- #: admin/locations.php:290
557
- msgid "No image uploaded for this location yet"
558
  msgstr ""
559
 
560
- #: admin/locations.php:295
561
- msgid "Upload/change picture"
562
  msgstr ""
563
 
564
- #: admin/locations.php:299
565
- msgid "Update location"
566
  msgstr ""
567
 
568
- #: admin/options.php:16
569
- msgid "Changes saved."
570
  msgstr ""
571
 
572
- #: admin/options.php:28 admin/options.php:240
573
  msgid "Save Changes"
574
  msgstr ""
575
 
576
- #: admin/options.php:28
577
  msgid "All"
578
  msgstr ""
579
 
580
- #: admin/options.php:32
581
  msgid "Collapse All"
582
  msgstr ""
583
 
584
- #: admin/options.php:33
585
  msgid "Expand All"
586
  msgstr ""
587
 
588
- #: admin/options.php:51
589
  msgid "Event Manager Options"
590
  msgstr ""
591
 
592
- #: admin/options.php:61 admin/options.php:78 admin/options.php:106
593
- #: admin/options.php:125 admin/options.php:140 admin/options.php:156
594
- #: admin/options.php:171 admin/options.php:192 admin/options.php:208
595
- #: admin/options.php:227
596
  msgid "Click to toggle"
597
  msgstr ""
598
 
599
- #: admin/options.php:61
600
  msgid "General options"
601
  msgstr ""
602
 
603
- #: admin/options.php:65
604
  msgid "Use dropdown for locations?"
605
  msgstr ""
606
 
607
- #: admin/options.php:65
608
  msgid ""
609
  "Select yes to select location from a drow-down menu; location selection will "
610
  "be faster, but you will lose the ability to insert locations with events"
611
  msgstr ""
612
 
613
- #: admin/options.php:66
614
  msgid "Use recurrence?"
615
  msgstr ""
616
 
617
- #: admin/options.php:66
618
  msgid "Select yes to enable the recurrence features feature"
619
  msgstr ""
620
 
621
- #: admin/options.php:67
622
  msgid "Use RSVP?"
623
  msgstr ""
624
 
625
- #: admin/options.php:67
626
  msgid "Select yes to enable the RSVP feature"
627
  msgstr ""
628
 
629
- #: admin/options.php:68
630
  msgid "Use categories?"
631
  msgstr ""
632
 
633
- #: admin/options.php:68
634
  msgid "Select yes to enable the category features"
635
  msgstr ""
636
 
637
- #: admin/options.php:69
638
  msgid "Use attributes?"
639
  msgstr ""
640
 
641
- #: admin/options.php:69
642
  msgid "Select yes to enable the attributes feature"
643
  msgstr ""
644
 
645
- #: admin/options.php:78 admin/options.php:92
646
- msgid "Events page"
647
  msgstr ""
648
 
649
- #: admin/options.php:87
650
- msgid "[No Events Page]"
651
  msgstr ""
652
 
653
- #: admin/options.php:92
654
- msgid "This option allows you to select which page to use as an events page"
 
655
  msgstr ""
656
 
657
- #: admin/options.php:95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
658
  msgid "Show events page in lists?"
659
  msgstr ""
660
 
661
- #: admin/options.php:95
662
  msgid ""
663
  "Check this option if you want the events page to appear together with other "
664
  "pages in pages lists."
665
  msgstr ""
666
 
667
- #: admin/options.php:96
668
  msgid "Display calendar in events page?"
669
  msgstr ""
670
 
671
- #: admin/options.php:96
672
  msgid ""
673
  "This options allows to display the calendar in the events page, instead of "
674
  "the default list. It is recommended not to display both the calendar widget "
675
  "and a calendar page."
676
  msgstr ""
677
 
678
- #: admin/options.php:97
 
 
 
 
 
 
679
  msgid "Disable title rewriting?"
680
  msgstr ""
681
 
682
- #: admin/options.php:97
683
  msgid ""
684
  "Some wordpress themes don't follow best practices when generating navigation "
685
  "menus, and so the automatic title rewriting feature may cause problems, if "
@@ -687,11 +773,11 @@ msgid ""
687
  "'Yes', and provide an appropriate HTML title format below."
688
  msgstr ""
689
 
690
- #: admin/options.php:98
691
  msgid "Event Manager titles"
692
  msgstr ""
693
 
694
- #: admin/options.php:98
695
  msgid ""
696
  "This only setting only matters if you selected 'Yes' to above. You will "
697
  "notice the events page titles aren't being rewritten, and you have a new "
@@ -701,953 +787,1576 @@ msgid ""
701
  "this title, see settings further down for page titles."
702
  msgstr ""
703
 
704
- #: admin/options.php:106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
705
  msgid "Events format"
706
  msgstr ""
707
 
708
- #: admin/options.php:110
709
  msgid "Default event list format header"
710
  msgstr ""
711
 
712
- #: admin/options.php:110
713
  msgid ""
714
  "This content will appear just above your code for the default event list "
715
  "format. Default is blank"
716
  msgstr ""
717
 
718
- #: admin/options.php:111
719
  msgid "Default event list format"
720
  msgstr ""
721
 
722
- #: admin/options.php:111
723
- msgid ""
724
- "The format of any events in a list.<br/>Insert one or more of the following "
725
- "placeholders: <code>#_NAME</code>, <code>#_LOCATION</code>, <code>#_ADDRESS</"
726
- "code>, <code>#_TOWN</code>, <code>#_NOTES</code>.<br/> Use <code>#_EXCERPT</"
727
- "code> to show <code>#_NOTES</code> until you place a &lt;!&ndash;&ndash; "
728
- "more &ndash;&ndash;&gt; marker.<br/> Use <code>#_LINKEDNAME</code> for the "
729
- "event name with a link to the given event page.<br/> Use "
730
- "<code>#_EVENTPAGEURL</code> to print the event page URL and make your own "
731
- "customised links.<br/> Use <code>#_LOCATIONPAGEURL</code> to print the "
732
- "location page URL and make your own customised links.<br/>Use "
733
- "<code>#_EDITEVENTLINK</code> to add add a link to edit page for the event, "
734
- "which will appear only when a user is logged in.<br/>To insert date and time "
735
- "values, use <a href=\"http://www.php.net/manual/en/function.date.php\">PHP "
736
- "time format characters</a> with a <code>#</code> symbol before them, i.e. "
737
- "<code>#m</code>, <code>#M</code>, <code>#j</code>, etc.<br/> For the end "
738
- "time, put <code>#@</code> in front of the character, ie. <code>#@h</code>, "
739
- "<code>#@i</code>, etc.<br/> You can also create a date format without "
740
- "prepending <code>#</code> by wrapping it in #_{} or #@_{} (e.g. <code>#_{d/m/"
741
- "Y}</code>). If there is no end date, the value is not shown.<br/>Feel free "
742
- "to use HTML tags as <code>li</code>, <code>br</code> and so on.<br/>For "
743
- "custom attributes, you use <code>#_ATT{key}{alternative text}</code>, the "
744
- "second braces are optional and will appear if the attribute is not defined "
745
- "or left blank for that event. This key will appear as an option when adding "
746
- "attributes to your event."
747
- msgstr ""
748
-
749
- #: admin/options.php:112
750
  msgid "Default event list format footer"
751
  msgstr ""
752
 
753
- #: admin/options.php:112
754
  msgid ""
755
  "This content will appear just below your code for the default event list "
756
  "format. Default is blank"
757
  msgstr ""
758
 
759
- #: admin/options.php:113
760
  msgid "Single event page title format"
761
  msgstr ""
762
 
763
- #: admin/options.php:113
764
- msgid ""
765
- "The format of a single event page title. Follow the previous formatting "
766
- "instructions."
767
  msgstr ""
768
 
769
- #: admin/options.php:114
770
  msgid "Default single event format"
771
  msgstr ""
772
 
773
- #: admin/options.php:114
774
- msgid ""
775
- "The format of a single event page.<br/>Follow the previous formatting "
776
- "instructions. <br/>Use <code>#_MAP</code> to insert a map.<br/>Use "
777
- "<code>#_CONTACTNAME</code>, <code>#_CONTACTEMAIL</code>, "
778
- "<code>#_CONTACTPHONE</code> to insert respectively the name, e-mail address "
779
- "and phone number of the designated contact person. <br/>Use "
780
- "<code>#_ADDBOOKINGFORM</code> to insert a form to allow the user to respond "
781
- "to your events reserving one or more places (RSVP).<br/> Use "
782
- "<code>#_REMOVEBOOKINGFORM</code> to insert a form where users, inserting "
783
- "their name and e-mail address, can remove their bookings."
784
  msgstr ""
785
 
786
- #: admin/options.php:115
787
  msgid "Events page title"
788
  msgstr ""
789
 
790
- #: admin/options.php:115
791
  msgid "The title on the multiple events page."
792
  msgstr ""
793
 
794
- #: admin/options.php:116
795
  msgid "No events message"
796
  msgstr ""
797
 
798
- #: admin/options.php:116
799
  msgid "The message displayed when no events are available."
800
  msgstr ""
801
 
802
- #: admin/options.php:117
803
  msgid "List events by date title"
804
  msgstr ""
805
 
806
- #: admin/options.php:117
807
  msgid ""
808
- "If viewing a page for events on a specific dates, this is the title that "
809
  "would show up. To insert date values, use <a href=\"http://www.php.net/"
810
  "manual/en/function.date.php\">PHP time format characters</a> with a "
811
  "<code>#</code> symbol before them, i.e. <code>#m</code>, <code>#M</code>, "
812
  "<code>#j</code>, etc.<br/>"
813
  msgstr ""
814
 
815
- #: admin/options.php:125
816
  msgid "Calendar format"
817
  msgstr ""
818
 
819
- #: admin/options.php:129
820
  msgid "Small calendar title"
821
  msgstr ""
822
 
823
- #: admin/options.php:129
824
  msgid ""
825
  "The format of the title, corresponding to the text that appears when "
826
  "hovering on an eventful calendar day."
827
  msgstr ""
828
 
829
- #: admin/options.php:130
830
  msgid "Small calendar title separator"
831
  msgstr ""
832
 
833
- #: admin/options.php:130
834
  msgid ""
835
  "The separator appearing on the above title when more than one events are "
836
  "taking place on the same day."
837
  msgstr ""
838
 
839
- #: admin/options.php:131
840
  msgid "Full calendar events format"
841
  msgstr ""
842
 
843
- #: admin/options.php:131
844
  msgid ""
845
  "The format of each event when displayed in the full calendar. Remember to "
846
  "include <code>li</code> tags before and after the event."
847
  msgstr ""
848
 
849
- #: admin/options.php:132
 
 
 
 
 
 
 
 
 
 
 
850
  msgid "Show list on day with single event?"
851
  msgstr ""
852
 
853
- #: admin/options.php:132
854
  msgid ""
855
  "By default, if a calendar day only has one event, it display a single event "
856
  "when clicking on the link of that calendar date. If you select Yes here, you "
857
  "will get always see a list of events."
858
  msgstr ""
859
 
860
- #: admin/options.php:140
861
  msgid "Locations format"
862
  msgstr ""
863
 
864
- #: admin/options.php:144
865
  msgid "Single location page title format"
866
  msgstr ""
867
 
868
- #: admin/options.php:144
869
- msgid ""
870
- "The format of a single location page title.<br/>Follow the previous "
871
- "formatting instructions."
872
  msgstr ""
873
 
874
- #: admin/options.php:145
875
  msgid "Default single location page format"
876
  msgstr ""
877
 
878
- #: admin/options.php:145
879
- msgid ""
880
- "The format of a single location page.<br/>Insert one or more of the "
881
- "following placeholders: <code>#_NAME</code>, <code>#_ADDRESS</code>, "
882
- "<code>#_TOWN</code>, <code>#_DESCRIPTION</code>.<br/> Use <code>#_MAP</code> "
883
- "to display a map of the event location, and <code>#_IMAGE</code> to display "
884
- "an image of the location.<br/> Use <code>#_NEXTEVENTS</code> to insert a "
885
- "list of the upcoming events, <code>#_PASTEVENTS</code> for a list of past "
886
- "events, <code>#_ALLEVENTS</code> for a list of all events taking place in "
887
- "this location."
888
  msgstr ""
889
 
890
- #: admin/options.php:146
891
- msgid "Default location baloon format"
892
  msgstr ""
893
 
894
- #: admin/options.php:146
895
  msgid ""
896
  "The format of of the text appearing in the baloon describing the location in "
897
- "the map.<br/>Insert one or more of the following placeholders: <code>#_NAME</"
898
- "code>, <code>#_ADDRESS</code>, <code>#_TOWN</code>, <code>#_DESCRIPTION</"
899
- "code> or <code>#_IMAGE</code>."
900
  msgstr ""
901
 
902
- #: admin/options.php:147
903
  msgid "Default location event list format"
904
  msgstr ""
905
 
906
- #: admin/options.php:147
907
  msgid ""
908
  "The format of the events the list inserted in the location page through the "
909
  "<code>#_NEXTEVENTS</code>, <code>#_PASTEVENTS</code> and <code>#_ALLEVENTS</"
910
- "code> element. <br/> Follow the events formatting instructions"
911
  msgstr ""
912
 
913
- #: admin/options.php:148
914
  msgid "Default no events message"
915
  msgstr ""
916
 
917
- #: admin/options.php:148
918
  msgid ""
919
  "The message to be displayed in the list generated by <code>#_NEXTEVENTS</"
920
  "code>, <code>#_PASTEVENTS</code> and <code>#_ALLEVENTS</code> when no events "
921
  "are available."
922
  msgstr ""
923
 
924
- #: admin/options.php:156
925
  msgid "RSS feed format"
926
  msgstr ""
927
 
928
- #: admin/options.php:160
929
  msgid "RSS main title"
930
  msgstr ""
931
 
932
- #: admin/options.php:160
933
  msgid "The main title of your RSS events feed."
934
  msgstr ""
935
 
936
- #: admin/options.php:161
937
  msgid "RSS main description"
938
  msgstr ""
939
 
940
- #: admin/options.php:161
941
  msgid "The main description of your RSS events feed."
942
  msgstr ""
943
 
944
- #: admin/options.php:162
945
  msgid "RSS title format"
946
  msgstr ""
947
 
948
- #: admin/options.php:162
949
  msgid "The format of the title of each item in the events RSS feed."
950
  msgstr ""
951
 
952
- #: admin/options.php:163
953
  msgid "RSS description format"
954
  msgstr ""
955
 
956
- #: admin/options.php:163
957
- msgid ""
958
- "The format of the description of each item in the events RSS feed. Follow "
959
- "the previous formatting instructions."
960
  msgstr ""
961
 
962
- #: admin/options.php:171
963
  msgid "Maps and geotagging"
964
  msgstr ""
965
 
966
- #: admin/options.php:176
967
  msgid "Enable Google Maps integration?"
968
  msgstr ""
969
 
970
- #: admin/options.php:178 functions.php:114
971
- msgid "Yes"
972
- msgstr ""
973
-
974
- #: admin/options.php:179 functions.php:115
975
- msgid "No"
976
- msgstr ""
977
-
978
- #: admin/options.php:180
979
  msgid "Check this option to enable Goggle Map integration."
980
  msgstr ""
981
 
982
- #: admin/options.php:184
983
  msgid "Map text format"
984
  msgstr ""
985
 
986
- #: admin/options.php:184
987
- msgid ""
988
- "The format the text appearing in the event page map cloud.<br/>Follow the "
989
- "previous formatting instructions."
990
  msgstr ""
991
 
992
- #: admin/options.php:192
993
  msgid "RSVP and bookings"
994
  msgstr ""
995
 
996
- #: admin/options.php:196
997
  msgid "Default contact person"
998
  msgstr ""
999
 
1000
- #: admin/options.php:196
1001
  msgid ""
1002
  "Select the default contact person. This user will be employed whenever a "
1003
  "contact person is not explicitly specified for an event"
1004
  msgstr ""
1005
 
1006
- #: admin/options.php:197
1007
- msgid "Enable the RSVP e-mail notifications?"
1008
  msgstr ""
1009
 
1010
- #: admin/options.php:197
1011
  msgid ""
1012
- "Check this option if you want to receive an email when someone books places "
1013
- "for your events."
1014
  msgstr ""
1015
 
1016
- #: admin/options.php:198 admin/options.php:199
1017
- msgid "Contact person email format"
1018
  msgstr ""
1019
 
1020
- #: admin/options.php:198
1021
  msgid ""
1022
- "The format or the email which will be sent to the contact person. Follow "
1023
- "the events formatting instructions. <br/>Use <code>#_RESPNAME</code>, "
1024
- "<code>#_RESPEMAIL</code> and <code>#_RESPPHONE</code> to display "
1025
- "respectively the name, e-mail, address and phone of the respondent.<br/>Use "
1026
- "<code>#_SPACES</code> to display the number of spaces reserved by the "
1027
- "respondent. Use <code>#_COMMENT</code> to display the respondent's comment. "
1028
- "<br/> Use <code>#_BOOKEDSEATS</code> and <code>#_AVAILABLESEATS</code> to "
1029
- "display respectively the number of booked and available seats."
1030
  msgstr ""
1031
 
1032
- #: admin/options.php:199
1033
- msgid ""
1034
- "The format or the email which will be sent to reposdent. Follow the events "
1035
- "formatting instructions. <br/>Use <code>#_RESPNAME</code> to display the "
1036
- "name of the respondent.<br/>Use <code>#_CONTACTNAME</code> and "
1037
- "<code>#_CONTACTEMAIL</code> a to display respectively the name and e-mail of "
1038
- "the contact person.<br/>Use <code>#_SPACES</code> to display the number of "
1039
- "spaces reserved by the respondent. Use <code>#_COMMENT</code> to display the "
1040
- "respondent's comment."
1041
  msgstr ""
1042
 
1043
- #: admin/options.php:200
1044
- msgid "Default notification receiver address"
 
 
 
1045
  msgstr ""
1046
 
1047
- #: admin/options.php:200
1048
- msgid "Insert the address of the receiver of your notifications"
1049
  msgstr ""
1050
 
1051
- #: admin/options.php:208
1052
- msgid "Email Settings"
 
1053
  msgstr ""
1054
 
1055
- #: admin/options.php:212
1056
- msgid "Notification sender name"
1057
  msgstr ""
1058
 
1059
- #: admin/options.php:212
1060
- msgid "Insert the display name of the notification sender."
1061
  msgstr ""
1062
 
1063
- #: admin/options.php:213
1064
- msgid "Notification sender address"
1065
  msgstr ""
1066
 
1067
- #: admin/options.php:213
1068
  msgid ""
1069
- "Insert the address of the notification sender. It must corresponds with your "
1070
- "gmail account user"
1071
  msgstr ""
1072
 
1073
- #: admin/options.php:214
1074
- msgid ""
1075
- "The port through which you e-mail notifications will be sent. Make sure the "
1076
- "firewall doesn't block this port"
1077
  msgstr ""
1078
 
1079
- #: admin/options.php:215
1080
- msgid "Mail sending method"
1081
  msgstr ""
1082
 
1083
- #: admin/options.php:215
1084
- msgid "PHP mail function"
1085
  msgstr ""
1086
 
1087
- #: admin/options.php:215
1088
- msgid "Select the method to send email notification."
 
 
 
 
1089
  msgstr ""
1090
 
1091
- #: admin/options.php:216
1092
- msgid "Use SMTP authentication?"
1093
  msgstr ""
1094
 
1095
- #: admin/options.php:216
1096
- msgid ""
1097
- "SMTP authenticatio is often needed. If you use GMail, make sure to set this "
1098
- "parameter to Yes"
1099
  msgstr ""
1100
 
1101
- #: admin/options.php:217
1102
- msgid ""
1103
- "The SMTP host. Usually it corresponds to 'localhost'. If you use GMail, set "
1104
- "this value to 'ssl://smtp.gmail.com:465'."
1105
  msgstr ""
1106
 
1107
- #: admin/options.php:218
1108
- msgid "SMTP username"
 
 
1109
  msgstr ""
1110
 
1111
- #: admin/options.php:218
1112
- msgid "Insert the username to be used to access your SMTP server."
1113
  msgstr ""
1114
 
1115
- #: admin/options.php:219
1116
- msgid "SMTP password"
1117
  msgstr ""
1118
 
1119
- #: admin/options.php:219
1120
- msgid "Insert the password to be used to access your SMTP server"
1121
  msgstr ""
1122
 
1123
- #: admin/options.php:227
1124
- msgid "Images size"
 
 
1125
  msgstr ""
1126
 
1127
- #: admin/options.php:231
1128
- msgid "Maximum width (px)"
1129
  msgstr ""
1130
 
1131
- #: admin/options.php:231
1132
- msgid "The maximum allowed width for images uploades"
 
 
 
1133
  msgstr ""
1134
 
1135
- #: admin/options.php:232
1136
- msgid "Maximum height (px)"
1137
  msgstr ""
1138
 
1139
- #: admin/options.php:232
1140
- msgid "The maximum allowed width for images uploaded, in pixels"
 
 
1141
  msgstr ""
1142
 
1143
- #: admin/options.php:233
1144
- msgid "Maximum size (bytes)"
1145
  msgstr ""
1146
 
1147
- #: admin/options.php:233
1148
- msgid "The maximum allowed size for images uploaded, in pixels"
1149
  msgstr ""
1150
 
1151
- #: admin/people.php:36
1152
- msgid "Bookings data"
1153
  msgstr ""
1154
 
1155
- #: admin/people.php:40
1156
- msgid "E-mail"
1157
  msgstr ""
1158
 
1159
- #: admin/people.php:41 bookings.php:80
1160
- msgid "Phone number"
1161
  msgstr ""
1162
 
1163
- #: admin/people.php:42 bookings.php:82
1164
- msgid "Seats"
1165
  msgstr ""
1166
 
1167
- #: admin/people.php:43 bookings.php:93
1168
- msgid "Comment"
1169
  msgstr ""
1170
 
1171
- #: admin/people.php:57
1172
- msgid "Booked"
1173
  msgstr ""
1174
 
1175
- #: admin/people.php:62
1176
- msgid "Available"
1177
  msgstr ""
1178
 
1179
- #: admin/people.php:78
1180
- msgid "No people have responded to your events yet!"
 
 
1181
  msgstr ""
1182
 
1183
- #: admin/people.php:81
1184
- msgid ""
1185
- "This table collects the data about the people who responded to your events"
1186
  msgstr ""
1187
 
1188
- #: admin/people.php:118
1189
- msgid "Phone"
1190
  msgstr ""
1191
 
1192
- #. #-#-#-#-# plugin.pot (Events Manager 3.0.4) #-#-#-#-#
1193
- #. Plugin Name of the plugin/theme
1194
- #: admin/people.php:118
1195
- msgid "Events Manager"
1196
  msgstr ""
1197
 
1198
- #: admin/support.php:10 events-manager.php:229
1199
- msgid "Getting Help for Events Manager"
1200
  msgstr ""
1201
 
1202
- #: bookings.php:40
1203
- msgid "Booking deleted"
 
 
1204
  msgstr ""
1205
 
1206
- #: bookings.php:42
1207
- msgid "There are no bookings associated to this name and e-mail"
 
 
1208
  msgstr ""
1209
 
1210
- #: bookings.php:66
1211
- msgid "Book now!"
1212
  msgstr ""
1213
 
1214
- #: bookings.php:79 bookings.php:152
1215
- msgid "E-Mail"
1216
  msgstr ""
1217
 
1218
- #: bookings.php:96
1219
- msgid "Send your booking"
1220
  msgstr ""
1221
 
1222
- #: bookings.php:105 bookings.php:111
1223
- msgid "Hide cancellation form"
1224
  msgstr ""
1225
 
1226
- #: bookings.php:105 bookings.php:107 bookings.php:110 bookings.php:114
1227
- msgid "Cancel a booking"
1228
  msgstr ""
1229
 
1230
- #: bookings.php:136 bookings.php:157
1231
- msgid "Cancel your booking"
1232
  msgstr ""
1233
 
1234
- #: classes/booking.php:74
1235
- msgid "There was a problem saving the booking."
1236
  msgstr ""
1237
 
1238
- #: classes/booking.php:80
1239
- msgid "Your booking has been recorded"
1240
  msgstr ""
1241
 
1242
- #: classes/bookings.php:78
1243
- msgid "Booking successful."
1244
  msgstr ""
1245
 
1246
- #: classes/bookings.php:80
1247
- msgid "However, we were not able to send you an email."
1248
  msgstr ""
1249
 
1250
- #: classes/bookings.php:88
1251
- msgid "Booking could not be created"
1252
  msgstr ""
1253
 
1254
- #: classes/bookings.php:91
1255
- msgid "Booking cannot be made, not enough seats available!"
1256
  msgstr ""
1257
 
1258
- #: classes/bookings.php:183
1259
- msgid "Reservation confirmed"
 
 
1260
  msgstr ""
1261
 
1262
- #: classes/bookings.php:186
1263
- msgid "New booking"
 
 
 
 
1264
  msgstr ""
1265
 
1266
- #: classes/event.php:207
1267
- msgid "There was a problem saving the location so event was not saved."
1268
  msgstr ""
1269
 
1270
- #: classes/event.php:227 classes/event.php:255
1271
- msgid "Something went wrong with the recurrence update..."
 
 
1272
  msgstr ""
1273
 
1274
- #: classes/event.php:228 classes/event.php:256
1275
- msgid "There was a problem saving the recurring events."
 
1276
  msgstr ""
1277
 
1278
- #: classes/event.php:233
1279
- msgid "New recurrent event inserted!"
1280
  msgstr ""
1281
 
1282
- #: classes/event.php:237
1283
- msgid "New event successfully inserted!"
1284
  msgstr ""
1285
 
1286
- #: classes/event.php:240 classes/event.php:263
1287
- msgid "Could not save the event details due to a database error."
 
 
 
1288
  msgstr ""
1289
 
1290
- #: classes/event.php:259
1291
- msgid "Recurrence updated!"
 
 
1292
  msgstr ""
1293
 
1294
- #: classes/event.php:267
1295
- msgid "updated"
 
1296
  msgstr ""
1297
 
1298
- #: classes/event.php:329
1299
- msgid "Missing fields: "
1300
  msgstr ""
1301
 
1302
- #: classes/event.php:332
1303
- msgid "Since the event is repeated, you must specify an event date."
1304
  msgstr ""
1305
 
1306
- #: classes/event.php:410 events-manager.php:223
1307
- msgid "Edit"
 
 
1308
  msgstr ""
1309
 
1310
- #: classes/event.php:410
1311
- msgid "Event"
 
 
1312
  msgstr ""
1313
 
1314
- #: classes/event.php:536
1315
- msgid "N/A"
1316
  msgstr ""
1317
 
1318
- #: classes/event.php:792
1319
- msgid "Sunday"
1320
  msgstr ""
1321
 
1322
- #: classes/event.php:792
1323
- msgid "Monday"
1324
  msgstr ""
1325
 
1326
- #: classes/event.php:792
1327
- msgid "Tuesday"
1328
  msgstr ""
1329
 
1330
- #: classes/event.php:792
1331
- msgid "Wednesday"
1332
  msgstr ""
1333
 
1334
- #: classes/event.php:792
1335
- msgid "Thursday"
1336
  msgstr ""
1337
 
1338
- #: classes/event.php:792
1339
- msgid "Friday"
1340
  msgstr ""
1341
 
1342
- #: classes/event.php:792
1343
- msgid "Saturday"
1344
  msgstr ""
1345
 
1346
- #: classes/event.php:793
1347
- #, php-format
1348
- msgid "the first %s of the month"
1349
  msgstr ""
1350
 
1351
- #: classes/event.php:793
1352
- #, php-format
1353
- msgid "the second %s of the month"
1354
  msgstr ""
1355
 
1356
- #: classes/event.php:793
1357
- #, php-format
1358
- msgid "the third %s of the month"
 
1359
  msgstr ""
1360
 
1361
- #: classes/event.php:793
1362
- #, php-format
1363
- msgid "the fourth %s of the month"
1364
  msgstr ""
1365
 
1366
- #: classes/event.php:793
1367
- #, php-format
1368
- msgid "the last %s of the month"
1369
  msgstr ""
1370
 
1371
- #: classes/event.php:794
1372
- #, php-format
1373
- msgid "From %1$s to %2$s"
1374
  msgstr ""
1375
 
1376
- #: classes/event.php:797
1377
- msgid "everyday"
1378
  msgstr ""
1379
 
1380
- #: classes/event.php:799
1381
- #, php-format
1382
- msgid "every %s days"
1383
  msgstr ""
1384
 
1385
- #: classes/event.php:809
1386
- #, php-format
1387
- msgid "every %s weeks"
1388
  msgstr ""
1389
 
1390
- #: classes/event.php:820
1391
- #, php-format
1392
- msgid "every %s months"
1393
  msgstr ""
1394
 
1395
- #: classes/location.php:39
1396
- msgid "The location name"
1397
  msgstr ""
1398
 
1399
- #: classes/location.php:39
1400
- msgid "The location address"
1401
  msgstr ""
1402
 
1403
- #: classes/location.php:39
1404
- msgid "The location town"
1405
  msgstr ""
1406
 
1407
- #: classes/location.php:130
1408
- msgid "The image could not be loaded"
1409
  msgstr ""
1410
 
1411
- #: classes/location.php:158
1412
- msgid " is missing!"
1413
  msgstr ""
1414
 
1415
- #: classes/location.php:166
1416
- msgid "The image file is too big! Maximum size:"
 
1417
  msgstr ""
1418
 
1419
- #: classes/location.php:172
1420
- msgid "The image is too big! Maximum size allowed:"
1421
  msgstr ""
1422
 
1423
- #: classes/location.php:175
1424
- msgid "The image is in a wrong format!"
1425
  msgstr ""
1426
 
1427
- #: classes/mailer.php:61
1428
- msgid "Please supply a valid email format."
1429
  msgstr ""
1430
 
1431
- #: classes/map.php:20 classes/map.php:48
1432
- msgid "Loading Map...."
1433
  msgstr ""
1434
 
1435
- #: classes/map.php:61
1436
- msgid "Map Unavailable"
1437
  msgstr ""
1438
 
1439
- #: classes/person.php:84
1440
- msgid "Please provide a valid email address."
1441
  msgstr ""
1442
 
1443
- #: events-manager.php:101 events-manager.php:104 events-manager.php:220
1444
- #: install.php:186 install.php:187 template-tags.php:16 widgets/events.php:42
1445
- msgid "Events"
 
1446
  msgstr ""
1447
 
1448
- #: events-manager.php:111 install.php:178 widgets/events.php:31
1449
- msgid "No events"
1450
  msgstr ""
1451
 
1452
- #: events-manager.php:117
1453
- msgid "<li>No events in this location</li>"
1454
  msgstr ""
1455
 
1456
- #: events-manager.php:208 events-manager.php:228
1457
- msgid "Settings"
 
 
1458
  msgstr ""
1459
 
1460
- #: events-manager.php:224
1461
- msgid "Add new"
1462
  msgstr ""
1463
 
1464
- #: events-manager.php:226
1465
- msgid "People"
1466
  msgstr ""
1467
 
1468
- #: events-manager.php:227
1469
- msgid "Event Categories"
1470
  msgstr ""
1471
 
1472
- #: events-manager.php:228
1473
- msgid "Events Manager Settings"
1474
  msgstr ""
1475
 
1476
- #: events-manager.php:229
1477
- msgid "Help"
1478
  msgstr ""
1479
 
1480
- #: events-manager.php:256
1481
- msgid "Add an event"
1482
  msgstr ""
1483
 
1484
- #: events-manager.php:272
1485
- #, php-format
1486
- msgid ""
1487
- "This page corresponds to <strong>Events Manager</strong> events page. Its "
1488
- "content will be overriden by <strong>Events Manager</strong>. If you want to "
1489
- "display your content, you can can assign another page to <strong>Events "
1490
- "Manager</strong> in the the <a href='%s'>Settings</a>. "
1491
  msgstr ""
1492
 
1493
- #: events-manager.php:283
1494
- #, php-format
1495
- msgid ""
1496
- "Uh Oh! For some reason wordpress could not create an events page for you (or "
1497
- "you just deleted it). Not to worry though, all you have to do is create an "
1498
- "empty page, name it whatever you want, and select it as your events page in "
1499
- "your <a href=\"%s\">options page</a>. Sorry for the extra step! If you know "
1500
- "what you are doing, you may have done this on purpose, if so <a href=\"%s"
1501
- "\">ignore this message</a>"
1502
  msgstr ""
1503
 
1504
- #: functions.php:5
1505
- #, php-format
1506
  msgid ""
1507
  "<p>Hey, <strong>%s</strong>, welcome to <strong>Events Manager</strong>! We "
1508
  "hope you like it around here.</p> \r\n"
1509
- "\t\t<p>Now it's time to insert events lists through <a href='%s' "
1510
  "title='Widgets page'>widgets</a>, <a href='%s' title='Template tags "
1511
  "documentation'>template tags</a> or <a href='%s' title='Shortcodes "
1512
  "documentation'>shortcodes</a>.</p>\r\n"
1513
- "\t\t<p>By the way, have you taken a look at the <a href='%s' title='Change "
1514
  "settings'>Settings page</a>? That's where you customize the way events and "
1515
  "locations are displayed.</p>\r\n"
1516
- "\t\t<p>What? Tired of seeing this advice? I hear you, <a href='%s' "
1517
  "title='Don't show this advice again'>click here</a> and you won't see this "
1518
  "again!</p>"
1519
  msgstr ""
1520
 
1521
- #: install.php:161
1522
- msgid "Uncategorized"
 
 
 
 
 
 
 
1523
  msgstr ""
1524
 
1525
- #: install.php:169
1526
  msgid ""
1527
- "#_RESPNAME (#_RESPEMAIL) will attend #_NAME on #m #d, #Y. He wants to "
1528
- "reserve #_SPACES spaces.<br/> Now there are #_RESERVEDSPACES spaces "
1529
- "reserved, #_AVAILABLESPACES are still available.<br/>Yours faithfully,<br/"
1530
- ">Events Manager"
 
 
1531
  msgstr ""
1532
 
1533
- #: install.php:170
1534
  msgid ""
1535
- "Dear #_RESPNAME, <br/>you have successfully reserved #_SPACES space/spaces "
1536
- "for #_NAME.<br/>Yours faithfully,<br/> #_CONTACTPERSON"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1537
  msgstr ""
1538
 
1539
- #: install.php:305
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1540
  msgid ""
1541
- "We could not mirgrate old recurrence data over. DONT WORRY! You can just "
1542
- "delete the current plugin, and re-install the previous 2.2.2 version and you "
1543
- "wont lose any of your data. Either way, please contact the developers to let "
1544
- "them know of this bug."
 
 
1545
  msgstr ""
1546
 
1547
- #: install.php:467
1548
  msgid ""
1549
- "Events Manager successfully imported your events, please check your records "
1550
- "to verify."
 
1551
  msgstr ""
1552
 
1553
- #: install.php:483
1554
- #, php-format
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1555
  msgid ""
1556
- "Something has gone wrong when importing your old event. See the <a href=\"%s"
1557
- "\">support page</a> for more information. <a href=\"%s\">Dismiss this "
1558
- "message</a>"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1559
  msgstr ""
1560
 
1561
- #: locations.php:35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1562
  msgid "Ach, some problems here:"
1563
  msgstr ""
1564
 
1565
- #: widgets/calendar.php:9
1566
- msgid "Display your events in a calendar widget."
1567
  msgstr ""
1568
 
1569
- #: widgets/calendar.php:10
1570
- msgid "Events Calendar"
 
 
 
 
1571
  msgstr ""
1572
 
1573
- #: widgets/calendar.php:32
1574
- msgid "Calendar"
 
 
 
1575
  msgstr ""
1576
 
1577
- #: widgets/calendar.php:41 widgets/events.php:60 widgets/locations.php:60
1578
- msgid "Title"
 
 
 
 
1579
  msgstr ""
1580
 
1581
- #: widgets/calendar.php:45
1582
- msgid "Show Long Events?"
 
 
1583
  msgstr ""
1584
 
1585
- #: widgets/events.php:9
1586
- msgid "Display a list of events on Events Manager."
 
 
 
 
1587
  msgstr ""
1588
 
1589
- #: widgets/events.php:64
1590
- msgid "Number of events"
 
 
 
1591
  msgstr ""
1592
 
1593
- #: widgets/events.php:68
1594
- msgid "Scope of the events"
 
 
 
1595
  msgstr ""
1596
 
1597
- #: widgets/events.php:76
1598
- msgid "Order of the events"
1599
  msgstr ""
1600
 
1601
- #: widgets/events.php:78 widgets/locations.php:78
1602
- msgid "Ascendant"
1603
  msgstr ""
1604
 
1605
- #: widgets/events.php:79 widgets/locations.php:79
1606
- msgid "Descendant"
1607
  msgstr ""
1608
 
1609
- #: widgets/events.php:83 widgets/locations.php:83
1610
- msgid "List item format"
1611
  msgstr ""
1612
 
1613
- #: widgets/locations.php:9
1614
- msgid "Display a list of event locations on Events Manager."
1615
  msgstr ""
1616
 
1617
- #: widgets/locations.php:31
1618
- msgid "No locations"
1619
  msgstr ""
1620
 
1621
- #: widgets/locations.php:42
1622
- msgid "Event Locations"
 
 
 
 
 
1623
  msgstr ""
1624
 
1625
- #: widgets/locations.php:64
1626
- msgid "Show number of locations"
 
 
1627
  msgstr ""
1628
 
1629
- #: widgets/locations.php:68
1630
- msgid "Scope of the locations"
 
 
 
1631
  msgstr ""
1632
 
1633
- #: widgets/locations.php:70
1634
- msgid "Locations with upcoming events"
1635
  msgstr ""
1636
 
1637
- #: widgets/locations.php:71
1638
- msgid "All locations"
1639
  msgstr ""
1640
 
1641
- #: widgets/locations.php:72
1642
- msgid "Locations with past events "
1643
  msgstr ""
1644
 
1645
- #: widgets/locations.php:76
1646
- msgid "Order of the locations"
 
 
 
 
 
 
 
 
1647
  msgstr ""
1648
 
 
 
 
 
 
1649
  #. Plugin URI of the plugin/theme
1650
- msgid "http://davidebenini.it/wordpress-plugins/events-manager/"
 
 
1651
  msgstr ""
1652
 
1653
  #. Description of the plugin/theme
@@ -1659,7 +2368,3 @@ msgstr ""
1659
  #. Author of the plugin/theme
1660
  msgid "Davide Benini, Marcus Sykes"
1661
  msgstr ""
1662
-
1663
- #. Author URI of the plugin/theme
1664
- msgid "http://www.davidebenini.it/blog"
1665
- msgstr ""
1
+ # Copyright (C) 2010 Events Manager
 
2
  # This file is distributed under the same license as the Events Manager package.
 
 
 
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Events Manager 3.0.9\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/events-manager\n"
7
+ "POT-Creation-Date: 2011-02-01 19:28:55+00:00\n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=UTF-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
  "PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
 
 
 
14
 
15
+ #: widgets/em-calendar.php:9
16
+ msgid "Display your events in a calendar widget."
 
 
 
17
  msgstr ""
18
 
19
+ #: widgets/em-calendar.php:10
20
+ msgid "Events Calendar"
21
  msgstr ""
22
 
23
+ #: widgets/em-calendar.php:40
24
+ msgid "Calendar"
25
  msgstr ""
26
 
27
+ #: widgets/em-calendar.php:49 widgets/em-locations.php:61
28
+ #: widgets/em-events.php:70
29
+ msgid "Title"
30
  msgstr ""
31
 
32
+ #: widgets/em-calendar.php:53
33
+ msgid "Show Long Events?"
34
  msgstr ""
35
 
36
+ #: widgets/em-locations.php:9
37
+ msgid "Display a list of event locations on Events Manager."
38
  msgstr ""
39
 
40
+ #: widgets/em-locations.php:32
41
+ msgid "No locations"
42
  msgstr ""
43
 
44
+ #: widgets/em-locations.php:43
45
+ msgid "Event Locations"
46
  msgstr ""
47
 
48
+ #: widgets/em-locations.php:65
49
+ msgid "Show number of locations"
50
  msgstr ""
51
 
52
+ #: widgets/em-locations.php:69
53
+ msgid "Scope of the locations"
54
  msgstr ""
55
 
56
+ #: widgets/em-locations.php:71
57
+ msgid "Locations with upcoming events"
58
  msgstr ""
59
 
60
+ #: widgets/em-locations.php:72
61
+ msgid "All locations"
62
  msgstr ""
63
 
64
+ #: widgets/em-locations.php:73
65
+ msgid "Locations with past events "
66
  msgstr ""
67
 
68
+ #: widgets/em-locations.php:77
69
+ msgid "Order of the locations"
70
  msgstr ""
71
 
72
+ #: widgets/em-locations.php:79
73
+ msgid "Ascendant"
74
  msgstr ""
75
 
76
+ #: widgets/em-locations.php:80
77
+ msgid "Descendant"
78
  msgstr ""
79
 
80
+ #: widgets/em-locations.php:84 widgets/em-events.php:142
81
+ msgid "List item format"
82
  msgstr ""
83
 
84
+ #: widgets/em-events.php:9
85
+ msgid "Display a list of events on Events Manager."
86
  msgstr ""
87
 
88
+ #: widgets/em-events.php:38 em-install.php:229
89
+ msgid "No events"
90
  msgstr ""
91
 
92
+ #: widgets/em-events.php:41 widgets/em-events.php:61 widgets/em-events.php:151
93
+ msgid "all events"
94
  msgstr ""
95
 
96
+ #: widgets/em-events.php:53 em-template-tags.php:74 em-install.php:223
97
+ #: em-install.php:237 em-install.php:238 em-install.php:256 em-install.php:334
98
+ #: events-manager.php:207
99
+ msgid "Events"
100
  msgstr ""
101
 
102
+ #: widgets/em-events.php:74
103
+ msgid "Number of events"
104
  msgstr ""
105
 
106
+ #: widgets/em-events.php:78
107
+ msgid "Scope of the events"
108
  msgstr ""
109
 
110
+ #: widgets/em-events.php:80 admin/bookings/em-events.php:15
111
+ #: admin/em-events.php:19 admin/em-events.php:61
112
+ msgid "Future events"
113
  msgstr ""
114
 
115
+ #: widgets/em-events.php:81 admin/bookings/em-events.php:14
116
+ #: admin/em-events.php:18 admin/em-events.php:60
117
+ msgid "All events"
118
  msgstr ""
119
 
120
+ #: widgets/em-events.php:82 admin/bookings/em-events.php:13
121
+ #: admin/em-events.php:17 admin/em-events.php:59
122
+ msgid "Past events"
 
123
  msgstr ""
124
 
125
+ #: widgets/em-events.php:86
126
+ msgid "Time Limit"
127
  msgstr ""
128
 
129
+ #: widgets/em-events.php:88 admin/em-options.php:196
130
+ msgid "no limit"
131
  msgstr ""
132
 
133
+ #: widgets/em-events.php:89 admin/em-options.php:197
134
+ msgid "This month"
 
135
  msgstr ""
136
 
137
+ #: widgets/em-events.php:90 admin/em-options.php:198
138
+ msgid "Next two months"
139
  msgstr ""
140
 
141
+ #: widgets/em-events.php:91
142
+ msgid "Next three month"
143
  msgstr ""
144
 
145
+ #: widgets/em-events.php:92
146
+ msgid "Next six month"
147
  msgstr ""
148
 
149
+ #: widgets/em-events.php:93
150
+ msgid "Next twelve month"
151
  msgstr ""
152
 
153
+ #: widgets/em-events.php:108
154
+ msgid "Order By"
155
  msgstr ""
156
 
157
+ #: widgets/em-events.php:112
158
+ msgid "start date, start time, event name"
159
  msgstr ""
160
 
161
+ #: widgets/em-events.php:113
162
+ msgid "name, start date, start time"
163
  msgstr ""
164
 
165
+ #: widgets/em-events.php:114
166
+ msgid "name, end date, end time"
167
  msgstr ""
168
 
169
+ #: widgets/em-events.php:115
170
+ msgid "end date, end time, event name"
171
  msgstr ""
172
 
173
+ #: widgets/em-events.php:126
174
+ msgid "Order"
175
  msgstr ""
176
 
177
+ #: widgets/em-events.php:130 admin/em-options.php:167
178
+ msgid "Ascending"
179
  msgstr ""
180
 
181
+ #: widgets/em-events.php:131 admin/em-options.php:168
182
+ msgid "Descending"
183
  msgstr ""
184
 
185
+ #: widgets/em-events.php:146
186
+ msgid "Show all events link at bottom?"
187
  msgstr ""
188
 
189
+ #: widgets/em-events.php:150
190
+ msgid "All events link text?"
191
  msgstr ""
192
 
193
+ #: em-functions.php:19
194
+ msgid ""
195
+ "<p>Hey, <strong>%s</strong>, welcome to <strong>Events Manager</strong>! We "
196
+ "hope you like it around here.</p> \r\n"
197
+ "\t\t<p>Now it's time to insert events lists through <a href='%s' "
198
+ "title='Widgets page'>widgets</a>, <a href='%s' title='Template tags "
199
+ "documentation'>template tags</a> or <a href='%s' title='Shortcodes "
200
+ "documentation'>shortcodes</a>.</p>\r\n"
201
+ "\t\t<p>By the way, have you taken a look at the <a href='%s' title='Change "
202
+ "settings'>Settings page</a>? That's where you customize the way events and "
203
+ "locations are displayed.</p>\r\n"
204
+ "\t\t<p>What? Tired of seeing this advice? I hear you, <a href='%s' "
205
+ "title='Don't show this advice again'>click here</a> and you won't see this "
206
+ "again!</p>"
207
  msgstr ""
208
 
209
+ #: em-functions.php:224 admin/em-options.php:295
210
+ msgid "Yes"
211
  msgstr ""
212
 
213
+ #: em-functions.php:225 admin/em-options.php:296
214
+ msgid "No"
215
  msgstr ""
216
 
217
+ #: em-ajax.php:75
218
+ msgid "Booking Deleted"
 
219
  msgstr ""
220
 
221
+ #: em-ajax.php:77
222
+ msgid "Booking deletion unsuccessful"
223
  msgstr ""
224
 
225
+ #: classes/em-map.php:21 classes/em-map.php:46
226
+ msgid "Loading Map...."
227
  msgstr ""
228
 
229
+ #: classes/em-map.php:55
230
+ msgid "Map Unavailable"
231
  msgstr ""
232
 
233
+ #: classes/em-location.php:41
234
+ msgid "The location name"
235
  msgstr ""
236
 
237
+ #: classes/em-location.php:41
238
+ msgid "The location address"
239
  msgstr ""
240
 
241
+ #: classes/em-location.php:41
242
+ msgid "The location town"
243
  msgstr ""
244
 
245
+ #: classes/em-location.php:143
246
+ msgid "The image could not be loaded"
247
  msgstr ""
248
 
249
+ #: classes/em-location.php:174
250
+ msgid " is missing!"
251
  msgstr ""
252
 
253
+ #: classes/em-location.php:182
254
+ msgid "The image file is too big! Maximum size:"
255
  msgstr ""
256
 
257
+ #: classes/em-location.php:188
258
+ msgid "The image is too big! Maximum size allowed:"
259
  msgstr ""
260
 
261
+ #: classes/em-location.php:191
262
+ msgid "The image is in a wrong format!"
263
  msgstr ""
264
 
265
+ #: classes/em-person.php:86 admin/em-options.php:23
266
+ msgid "Changes saved."
267
  msgstr ""
268
 
269
+ #: classes/em-person.php:86 classes/em-person.php:89
270
+ msgid "Could not edit person details."
271
  msgstr ""
272
 
273
+ #: classes/em-person.php:105
274
+ msgid "Please provide a valid email address."
275
  msgstr ""
276
 
277
+ #: classes/em-bookings.php:83
278
+ msgid ""
279
+ "Booking successful, pending confirmation (you will also receive an email "
280
+ "once confirmed)."
281
  msgstr ""
282
 
283
+ #: classes/em-bookings.php:85
284
+ msgid "Booking successful."
285
  msgstr ""
286
 
287
+ #: classes/em-bookings.php:88
288
+ msgid ""
289
+ "However, there were some problems whilst sending confirmation emails to you "
290
+ "and/or the event contact person. You may want to contact them directly and "
291
+ "letting them know of this error."
292
  msgstr ""
293
 
294
+ #: classes/em-bookings.php:100
295
+ msgid "Booking could not be created"
296
  msgstr ""
297
 
298
+ #: classes/em-bookings.php:103
299
+ msgid "Booking cannot be made, not enough seats available!"
300
  msgstr ""
301
 
302
+ #: classes/em-bookings.php:163
303
+ msgid "Bookings %s. Mails Sent."
304
  msgstr ""
305
 
306
+ #: classes/em-bookings.php:167
307
+ msgid "An error occurred."
308
  msgstr ""
309
 
310
+ #: classes/em-bookings.php:418
311
+ msgid "Booking details for \"%s\" as of %s"
 
312
  msgstr ""
313
 
314
+ #: classes/em-booking.php:71 admin/bookings/em-events.php:136
315
+ #: admin/em-events.php:174
316
+ msgid "Pending"
317
  msgstr ""
318
 
319
+ #: classes/em-booking.php:72
320
+ msgid "Approved"
321
  msgstr ""
322
 
323
+ #: classes/em-booking.php:73
324
+ msgid "Rejected"
325
  msgstr ""
326
 
327
+ #: classes/em-booking.php:74
328
+ msgid "Cacncelled"
329
  msgstr ""
330
 
331
+ #: classes/em-booking.php:101
332
+ msgid "Changes saved"
333
  msgstr ""
334
 
335
+ #: classes/em-booking.php:105
336
+ msgid "Your booking has been recorded"
 
 
337
  msgstr ""
338
 
339
+ #: classes/em-booking.php:108 classes/em-booking.php:109
340
+ #: classes/em-booking.php:113 classes/em-booking.php:114
341
+ msgid "There was a problem saving the booking."
342
  msgstr ""
343
 
344
+ #: classes/em-booking.php:239
345
+ msgid "Booking %s."
346
  msgstr ""
347
 
348
+ #: classes/em-booking.php:241
349
+ msgid "Mail Sent."
350
  msgstr ""
351
 
352
+ #: classes/em-booking.php:244
353
+ msgid "ERROR : Mail Not Sent."
 
 
354
  msgstr ""
355
 
356
+ #: classes/em-booking.php:250
357
+ msgid "Booking could not be %s."
358
+ msgstr ""
359
+
360
+ #: classes/em-booking.php:265
361
+ msgid "Booking note successfully added."
362
  msgstr ""
363
 
364
+ #: classes/em-booking.php:338
365
  msgid ""
366
+ "Confirmation email could not be sent to contact person. Registrant should "
367
+ "have gotten their email (only admin see this warning)."
 
368
  msgstr ""
369
 
370
+ #: classes/em-booking.php:345
371
+ msgid ""
372
+ "Confirmation email could not be sent to admin. Registrant should have gotten "
373
+ "their email (only admin see this warning)."
374
  msgstr ""
375
 
376
+ #: classes/em-category.php:25
377
+ msgid "The category name"
378
  msgstr ""
379
 
380
+ #: classes/em-category.php:90 classes/em-event.php:407
381
+ msgid "Missing fields: "
382
  msgstr ""
383
 
384
+ #: classes/em-event.php:274
385
+ msgid "There was a problem saving the location so event was not saved."
386
  msgstr ""
387
 
388
+ #: classes/em-event.php:300 classes/em-event.php:329
389
+ msgid "Something went wrong with the recurrence update..."
390
  msgstr ""
391
 
392
+ #: classes/em-event.php:301 classes/em-event.php:330
393
+ msgid "There was a problem saving the recurring events."
 
 
 
394
  msgstr ""
395
 
396
+ #: classes/em-event.php:306
397
+ msgid "New recurrent event inserted!"
398
  msgstr ""
399
 
400
+ #: classes/em-event.php:310
401
+ msgid "New event successfully inserted!"
402
+ msgstr ""
403
+
404
+ #: classes/em-event.php:313 classes/em-event.php:337
405
+ msgid "Could not save the event details due to a database error."
406
+ msgstr ""
407
+
408
+ #: classes/em-event.php:333
409
+ msgid "Recurrence updated!"
410
+ msgstr ""
411
+
412
+ #: classes/em-event.php:341
413
+ msgid "updated"
414
+ msgstr ""
415
+
416
+ #: classes/em-event.php:384
417
+ msgid "You are now viewing the duplicated event"
418
+ msgstr ""
419
+
420
+ #: classes/em-event.php:410
421
+ msgid "Since the event is repeated, you must specify an event date."
422
+ msgstr ""
423
+
424
+ #: classes/em-event.php:414
425
+ msgid "Events cannot start after they end."
426
  msgstr ""
427
 
428
+ #: classes/em-event.php:417
429
  msgid ""
430
+ "Dates must have correct formatting. Please use the date picker provided."
 
 
431
  msgstr ""
432
 
433
+ #: classes/em-event.php:552 admin/bookings/em-cancelled.php:108
434
+ #: admin/bookings/em-confirmed.php:108 admin/bookings/em-person.php:124
435
+ #: admin/bookings/em-rejected.php:108 admin/bookings/em-pending.php:130
436
+ #: events-manager.php:210
437
+ msgid "Edit"
438
  msgstr ""
439
 
440
+ #: classes/em-event.php:552 admin/bookings/em-events.php:101
441
+ msgid "Event"
442
  msgstr ""
443
 
444
+ #: classes/em-event.php:603
445
+ msgid "N/A"
446
  msgstr ""
447
 
448
+ #: classes/em-event.php:613
449
+ msgid "Profile"
450
  msgstr ""
451
 
452
+ #: classes/em-event.php:772
453
+ msgid "You do not have permission to manage this event."
454
  msgstr ""
455
 
456
+ #: classes/em-event.php:892
457
+ msgid "Sunday"
458
  msgstr ""
459
 
460
+ #: classes/em-event.php:892
461
+ msgid "Monday"
462
  msgstr ""
463
 
464
+ #: classes/em-event.php:892
465
+ msgid "Tuesday"
466
  msgstr ""
467
 
468
+ #: classes/em-event.php:892
469
+ msgid "Wednesday"
470
  msgstr ""
471
 
472
+ #: classes/em-event.php:892
473
+ msgid "Thursday"
474
  msgstr ""
475
 
476
+ #: classes/em-event.php:892
477
+ msgid "Friday"
478
  msgstr ""
479
 
480
+ #: classes/em-event.php:892
481
+ msgid "Saturday"
482
  msgstr ""
483
 
484
+ #: classes/em-event.php:893
485
+ msgid "the first %s of the month"
486
  msgstr ""
487
 
488
+ #: classes/em-event.php:893
489
+ msgid "the second %s of the month"
490
  msgstr ""
491
 
492
+ #: classes/em-event.php:893
493
+ msgid "the third %s of the month"
494
  msgstr ""
495
 
496
+ #: classes/em-event.php:893
497
+ msgid "the fourth %s of the month"
498
  msgstr ""
499
 
500
+ #: classes/em-event.php:893
501
+ msgid "the last %s of the month"
502
  msgstr ""
503
 
504
+ #: classes/em-event.php:894
505
+ msgid "From %1$s to %2$s"
506
  msgstr ""
507
 
508
+ #: classes/em-event.php:896
509
+ msgid "everyday"
510
  msgstr ""
511
 
512
+ #: classes/em-event.php:898
513
+ msgid "every %s days"
514
  msgstr ""
515
 
516
+ #: classes/em-event.php:908
517
+ msgid "every week"
518
  msgstr ""
519
 
520
+ #: classes/em-event.php:910
521
+ msgid "every %s weeks"
522
  msgstr ""
523
 
524
+ #: classes/em-event.php:922
525
+ msgid "every %s months"
526
  msgstr ""
527
 
528
+ #: classes/em-mailer.php:67
529
+ msgid "Please supply a valid email format."
530
  msgstr ""
531
 
532
+ #: em-bookings.php:40
533
+ msgid "Booking deleted"
534
  msgstr ""
535
 
536
+ #: em-bookings.php:42
537
+ msgid "There are no bookings associated to this name and e-mail"
538
  msgstr ""
539
 
540
+ #: em-bookings.php:66
541
+ msgid "Book now!"
542
  msgstr ""
543
 
544
+ #: em-bookings.php:78 em-bookings.php:149 admin/em-categories.php:66
545
+ #: admin/em-categories.php:73 admin/em-bookings.php:255
546
+ #: admin/em-bookings.php:267 admin/em-admin.php:225 admin/em-locations.php:103
547
+ #: admin/em-locations.php:111 admin/em-events.php:130 admin/em-people.php:57
548
+ #: admin/em-people.php:145 admin/em-event.php:339
549
+ msgid "Name"
550
  msgstr ""
551
 
552
+ #: em-bookings.php:79 em-bookings.php:152
553
+ msgid "E-Mail"
554
  msgstr ""
555
 
556
+ #: em-bookings.php:80 admin/em-people.php:147
557
+ msgid "Phone number"
558
  msgstr ""
559
 
560
+ #: em-bookings.php:82 admin/em-people.php:148
561
+ msgid "Seats"
562
  msgstr ""
563
 
564
+ #: em-bookings.php:93 admin/em-bookings.php:274 admin/em-people.php:149
565
+ msgid "Comment"
566
  msgstr ""
567
 
568
+ #: em-bookings.php:96
569
+ msgid "Send your booking"
570
  msgstr ""
571
 
572
+ #: em-bookings.php:105 em-bookings.php:111
573
+ msgid "Hide cancellation form"
574
  msgstr ""
575
 
576
+ #: em-bookings.php:105 em-bookings.php:107 em-bookings.php:110
577
+ #: em-bookings.php:114
578
+ msgid "Cancel a booking"
579
  msgstr ""
580
 
581
+ #: em-bookings.php:136 em-bookings.php:157
582
+ msgid "Cancel your booking"
583
  msgstr ""
584
 
585
+ #: admin/em-options.php:35 admin/em-help.php:17
586
+ msgid "Event Related Placeholders"
587
  msgstr ""
588
 
589
+ #: admin/em-options.php:36 admin/em-help.php:19
590
+ msgid "Location Related Placeholders"
591
  msgstr ""
592
 
593
+ #: admin/em-options.php:37 admin/em-help.php:21
594
+ msgid "Booking Related Placeholders"
595
  msgstr ""
596
 
597
+ #: admin/em-options.php:38
598
+ msgid "This accepts %s and %s placeholders."
599
  msgstr ""
600
 
601
+ #: admin/em-options.php:39
602
+ msgid "This accepts %s placeholders."
603
  msgstr ""
604
 
605
+ #: admin/em-options.php:40
606
+ msgid "This accepts %s, %s and %s placeholders."
607
  msgstr ""
608
 
609
+ #: admin/em-options.php:42 admin/em-options.php:432
610
  msgid "Save Changes"
611
  msgstr ""
612
 
613
+ #: admin/em-options.php:42
614
  msgid "All"
615
  msgstr ""
616
 
617
+ #: admin/em-options.php:46
618
  msgid "Collapse All"
619
  msgstr ""
620
 
621
+ #: admin/em-options.php:47
622
  msgid "Expand All"
623
  msgstr ""
624
 
625
+ #: admin/em-options.php:76
626
  msgid "Event Manager Options"
627
  msgstr ""
628
 
629
+ #: admin/em-options.php:86 admin/em-options.php:124 admin/em-options.php:222
630
+ #: admin/em-options.php:241 admin/em-options.php:257 admin/em-options.php:273
631
+ #: admin/em-options.php:288 admin/em-options.php:309 admin/em-options.php:360
632
+ #: admin/em-options.php:379 admin/em-options.php:393
633
  msgid "Click to toggle"
634
  msgstr ""
635
 
636
+ #: admin/em-options.php:86
637
  msgid "General options"
638
  msgstr ""
639
 
640
+ #: admin/em-options.php:90
641
  msgid "Use dropdown for locations?"
642
  msgstr ""
643
 
644
+ #: admin/em-options.php:90
645
  msgid ""
646
  "Select yes to select location from a drow-down menu; location selection will "
647
  "be faster, but you will lose the ability to insert locations with events"
648
  msgstr ""
649
 
650
+ #: admin/em-options.php:91
651
  msgid "Use recurrence?"
652
  msgstr ""
653
 
654
+ #: admin/em-options.php:91
655
  msgid "Select yes to enable the recurrence features feature"
656
  msgstr ""
657
 
658
+ #: admin/em-options.php:92
659
  msgid "Use RSVP?"
660
  msgstr ""
661
 
662
+ #: admin/em-options.php:92
663
  msgid "Select yes to enable the RSVP feature"
664
  msgstr ""
665
 
666
+ #: admin/em-options.php:93
667
  msgid "Use categories?"
668
  msgstr ""
669
 
670
+ #: admin/em-options.php:93
671
  msgid "Select yes to enable the category features"
672
  msgstr ""
673
 
674
+ #: admin/em-options.php:94
675
  msgid "Use attributes?"
676
  msgstr ""
677
 
678
+ #: admin/em-options.php:94
679
  msgid "Select yes to enable the attributes feature"
680
  msgstr ""
681
 
682
+ #: admin/em-options.php:98
683
+ msgid "no default category"
684
  msgstr ""
685
 
686
+ #: admin/em-options.php:103
687
+ msgid "Default Category"
688
  msgstr ""
689
 
690
+ #: admin/em-options.php:103
691
+ msgid ""
692
+ "This option allows you to select the default category when adding an event."
693
  msgstr ""
694
 
695
+ #: admin/em-options.php:103 admin/em-options.php:112
696
+ msgid "(not applicable with event ownership on presently, coming soon!)"
697
+ msgstr ""
698
+
699
+ #: admin/em-options.php:107
700
+ msgid "no default location"
701
+ msgstr ""
702
+
703
+ #: admin/em-options.php:112
704
+ msgid "Default Location"
705
+ msgstr ""
706
+
707
+ #: admin/em-options.php:112
708
+ msgid ""
709
+ "This option allows you to select the default location when adding an event."
710
+ msgstr ""
711
+
712
+ #: admin/em-options.php:114
713
+ msgid "Custom Placeholders"
714
+ msgstr ""
715
+
716
+ #: admin/em-options.php:114
717
+ msgid ""
718
+ "You can add custom placeholders here, one per line in this format <code>#_ATT"
719
+ "{key}</code>. They will not appear on event pages unless you insert them "
720
+ "into another template below, but you may want to store extra information "
721
+ "about an event for other uses. <a href='%s'>More information on placeholders."
722
+ "</a>"
723
+ msgstr ""
724
+
725
+ #: admin/em-options.php:124 admin/em-options.php:138
726
+ msgid "Events page"
727
+ msgstr ""
728
+
729
+ #: admin/em-options.php:133
730
+ msgid "[No Events Page]"
731
+ msgstr ""
732
+
733
+ #: admin/em-options.php:138
734
+ msgid "This option allows you to select which page to use as an events page"
735
+ msgstr ""
736
+
737
+ #: admin/em-options.php:141
738
  msgid "Show events page in lists?"
739
  msgstr ""
740
 
741
+ #: admin/em-options.php:141
742
  msgid ""
743
  "Check this option if you want the events page to appear together with other "
744
  "pages in pages lists."
745
  msgstr ""
746
 
747
+ #: admin/em-options.php:142
748
  msgid "Display calendar in events page?"
749
  msgstr ""
750
 
751
+ #: admin/em-options.php:142
752
  msgid ""
753
  "This options allows to display the calendar in the events page, instead of "
754
  "the default list. It is recommended not to display both the calendar widget "
755
  "and a calendar page."
756
  msgstr ""
757
 
758
+ #: admin/em-options.php:142
759
+ msgid ""
760
+ "If you would like to show events that span over more than one day, see the "
761
+ "Calendar section on this page."
762
+ msgstr ""
763
+
764
+ #: admin/em-options.php:143
765
  msgid "Disable title rewriting?"
766
  msgstr ""
767
 
768
+ #: admin/em-options.php:143
769
  msgid ""
770
  "Some wordpress themes don't follow best practices when generating navigation "
771
  "menus, and so the automatic title rewriting feature may cause problems, if "
773
  "'Yes', and provide an appropriate HTML title format below."
774
  msgstr ""
775
 
776
+ #: admin/em-options.php:144
777
  msgid "Event Manager titles"
778
  msgstr ""
779
 
780
+ #: admin/em-options.php:144
781
  msgid ""
782
  "This only setting only matters if you selected 'Yes' to above. You will "
783
  "notice the events page titles aren't being rewritten, and you have a new "
787
  "this title, see settings further down for page titles."
788
  msgstr ""
789
 
790
+ #: admin/em-options.php:145
791
+ msgid "Event List Limits"
792
+ msgstr ""
793
+
794
+ #: admin/em-options.php:145
795
+ msgid "This will control how many events are shown on one list by default."
796
+ msgstr ""
797
+
798
+ #: admin/em-options.php:148
799
+ msgid "Default event list ordering"
800
+ msgstr ""
801
+
802
+ #: admin/em-options.php:153
803
+ msgid "Order by start date, start time, then event name"
804
+ msgstr ""
805
+
806
+ #: admin/em-options.php:154
807
+ msgid "Order by name, start date, then start time"
808
+ msgstr ""
809
+
810
+ #: admin/em-options.php:155
811
+ msgid "Order by name, end date, then end time"
812
+ msgstr ""
813
+
814
+ #: admin/em-options.php:156
815
+ msgid "Order by end date, end time, then event name"
816
+ msgstr ""
817
+
818
+ #: admin/em-options.php:170
819
+ msgid "All Ascending"
820
+ msgstr ""
821
+
822
+ #: admin/em-options.php:173
823
+ msgid "All Descending"
824
+ msgstr ""
825
+
826
+ #: admin/em-options.php:187
827
+ msgid ""
828
+ "When Events Manager displays lists of events the default behaviour is "
829
+ "ordering by start date in ascending order. To change this, modify the values "
830
+ "above."
831
+ msgstr ""
832
+
833
+ #: admin/em-options.php:191
834
+ msgid "Event list range limit"
835
+ msgstr ""
836
+
837
+ #: admin/em-options.php:199
838
+ msgid "Next three months"
839
+ msgstr ""
840
+
841
+ #: admin/em-options.php:200
842
+ msgid "Next six months"
843
+ msgstr ""
844
+
845
+ #: admin/em-options.php:201
846
+ msgid "Next twelve months"
847
+ msgstr ""
848
+
849
+ #: admin/em-options.php:211
850
+ msgid ""
851
+ "Only show events starting within a certain time limit on the events page. "
852
+ "Default is no time limit is applied."
853
+ msgstr ""
854
+
855
+ #: admin/em-options.php:222
856
  msgid "Events format"
857
  msgstr ""
858
 
859
+ #: admin/em-options.php:226
860
  msgid "Default event list format header"
861
  msgstr ""
862
 
863
+ #: admin/em-options.php:226
864
  msgid ""
865
  "This content will appear just above your code for the default event list "
866
  "format. Default is blank"
867
  msgstr ""
868
 
869
+ #: admin/em-options.php:227
870
  msgid "Default event list format"
871
  msgstr ""
872
 
873
+ #: admin/em-options.php:227
874
+ msgid "The format of any events in a list."
875
+ msgstr ""
876
+
877
+ #: admin/em-options.php:228
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
878
  msgid "Default event list format footer"
879
  msgstr ""
880
 
881
+ #: admin/em-options.php:228
882
  msgid ""
883
  "This content will appear just below your code for the default event list "
884
  "format. Default is blank"
885
  msgstr ""
886
 
887
+ #: admin/em-options.php:229
888
  msgid "Single event page title format"
889
  msgstr ""
890
 
891
+ #: admin/em-options.php:229
892
+ msgid "The format of a single event page title."
 
 
893
  msgstr ""
894
 
895
+ #: admin/em-options.php:230
896
  msgid "Default single event format"
897
  msgstr ""
898
 
899
+ #: admin/em-options.php:230
900
+ msgid "The format of a single event page."
 
 
 
 
 
 
 
 
 
901
  msgstr ""
902
 
903
+ #: admin/em-options.php:231
904
  msgid "Events page title"
905
  msgstr ""
906
 
907
+ #: admin/em-options.php:231
908
  msgid "The title on the multiple events page."
909
  msgstr ""
910
 
911
+ #: admin/em-options.php:232
912
  msgid "No events message"
913
  msgstr ""
914
 
915
+ #: admin/em-options.php:232
916
  msgid "The message displayed when no events are available."
917
  msgstr ""
918
 
919
+ #: admin/em-options.php:233
920
  msgid "List events by date title"
921
  msgstr ""
922
 
923
+ #: admin/em-options.php:233
924
  msgid ""
925
+ "If viewing a page for events on a specific date, this is the title that "
926
  "would show up. To insert date values, use <a href=\"http://www.php.net/"
927
  "manual/en/function.date.php\">PHP time format characters</a> with a "
928
  "<code>#</code> symbol before them, i.e. <code>#m</code>, <code>#M</code>, "
929
  "<code>#j</code>, etc.<br/>"
930
  msgstr ""
931
 
932
+ #: admin/em-options.php:241
933
  msgid "Calendar format"
934
  msgstr ""
935
 
936
+ #: admin/em-options.php:245
937
  msgid "Small calendar title"
938
  msgstr ""
939
 
940
+ #: admin/em-options.php:245
941
  msgid ""
942
  "The format of the title, corresponding to the text that appears when "
943
  "hovering on an eventful calendar day."
944
  msgstr ""
945
 
946
+ #: admin/em-options.php:246
947
  msgid "Small calendar title separator"
948
  msgstr ""
949
 
950
+ #: admin/em-options.php:246
951
  msgid ""
952
  "The separator appearing on the above title when more than one events are "
953
  "taking place on the same day."
954
  msgstr ""
955
 
956
+ #: admin/em-options.php:247
957
  msgid "Full calendar events format"
958
  msgstr ""
959
 
960
+ #: admin/em-options.php:247
961
  msgid ""
962
  "The format of each event when displayed in the full calendar. Remember to "
963
  "include <code>li</code> tags before and after the event."
964
  msgstr ""
965
 
966
+ #: admin/em-options.php:248
967
+ msgid "Show long events on calendar pages?"
968
+ msgstr ""
969
+
970
+ #: admin/em-options.php:248
971
+ msgid ""
972
+ "If you are showing a calendar on the events page (see Events format section "
973
+ "on this page), you have the option of showing events that span over days on "
974
+ "each day it occurs."
975
+ msgstr ""
976
+
977
+ #: admin/em-options.php:249
978
  msgid "Show list on day with single event?"
979
  msgstr ""
980
 
981
+ #: admin/em-options.php:249
982
  msgid ""
983
  "By default, if a calendar day only has one event, it display a single event "
984
  "when clicking on the link of that calendar date. If you select Yes here, you "
985
  "will get always see a list of events."
986
  msgstr ""
987
 
988
+ #: admin/em-options.php:257
989
  msgid "Locations format"
990
  msgstr ""
991
 
992
+ #: admin/em-options.php:261
993
  msgid "Single location page title format"
994
  msgstr ""
995
 
996
+ #: admin/em-options.php:261
997
+ msgid "The format of a single location page title."
 
 
998
  msgstr ""
999
 
1000
+ #: admin/em-options.php:262
1001
  msgid "Default single location page format"
1002
  msgstr ""
1003
 
1004
+ #: admin/em-options.php:262
1005
+ msgid "The format of a single location page."
 
 
 
 
 
 
 
 
1006
  msgstr ""
1007
 
1008
+ #: admin/em-options.php:263
1009
+ msgid "Default location balloon format"
1010
  msgstr ""
1011
 
1012
+ #: admin/em-options.php:263
1013
  msgid ""
1014
  "The format of of the text appearing in the baloon describing the location in "
1015
+ "the map."
 
 
1016
  msgstr ""
1017
 
1018
+ #: admin/em-options.php:264
1019
  msgid "Default location event list format"
1020
  msgstr ""
1021
 
1022
+ #: admin/em-options.php:264
1023
  msgid ""
1024
  "The format of the events the list inserted in the location page through the "
1025
  "<code>#_NEXTEVENTS</code>, <code>#_PASTEVENTS</code> and <code>#_ALLEVENTS</"
1026
+ "code> element."
1027
  msgstr ""
1028
 
1029
+ #: admin/em-options.php:265
1030
  msgid "Default no events message"
1031
  msgstr ""
1032
 
1033
+ #: admin/em-options.php:265
1034
  msgid ""
1035
  "The message to be displayed in the list generated by <code>#_NEXTEVENTS</"
1036
  "code>, <code>#_PASTEVENTS</code> and <code>#_ALLEVENTS</code> when no events "
1037
  "are available."
1038
  msgstr ""
1039
 
1040
+ #: admin/em-options.php:273
1041
  msgid "RSS feed format"
1042
  msgstr ""
1043
 
1044
+ #: admin/em-options.php:277
1045
  msgid "RSS main title"
1046
  msgstr ""
1047
 
1048
+ #: admin/em-options.php:277
1049
  msgid "The main title of your RSS events feed."
1050
  msgstr ""
1051
 
1052
+ #: admin/em-options.php:278
1053
  msgid "RSS main description"
1054
  msgstr ""
1055
 
1056
+ #: admin/em-options.php:278
1057
  msgid "The main description of your RSS events feed."
1058
  msgstr ""
1059
 
1060
+ #: admin/em-options.php:279
1061
  msgid "RSS title format"
1062
  msgstr ""
1063
 
1064
+ #: admin/em-options.php:279
1065
  msgid "The format of the title of each item in the events RSS feed."
1066
  msgstr ""
1067
 
1068
+ #: admin/em-options.php:280
1069
  msgid "RSS description format"
1070
  msgstr ""
1071
 
1072
+ #: admin/em-options.php:280
1073
+ msgid "The format of the description of each item in the events RSS feed."
 
 
1074
  msgstr ""
1075
 
1076
+ #: admin/em-options.php:288
1077
  msgid "Maps and geotagging"
1078
  msgstr ""
1079
 
1080
+ #: admin/em-options.php:293
1081
  msgid "Enable Google Maps integration?"
1082
  msgstr ""
1083
 
1084
+ #: admin/em-options.php:297
 
 
 
 
 
 
 
 
1085
  msgid "Check this option to enable Goggle Map integration."
1086
  msgstr ""
1087
 
1088
+ #: admin/em-options.php:301
1089
  msgid "Map text format"
1090
  msgstr ""
1091
 
1092
+ #: admin/em-options.php:301
1093
+ msgid "The text format inside the map balloons."
 
 
1094
  msgstr ""
1095
 
1096
+ #: admin/em-options.php:309
1097
  msgid "RSVP and bookings"
1098
  msgstr ""
1099
 
1100
+ #: admin/em-options.php:313
1101
  msgid "Default contact person"
1102
  msgstr ""
1103
 
1104
+ #: admin/em-options.php:313
1105
  msgid ""
1106
  "Select the default contact person. This user will be employed whenever a "
1107
  "contact person is not explicitly specified for an event"
1108
  msgstr ""
1109
 
1110
+ #: admin/em-options.php:314
1111
+ msgid "Approval Required?"
1112
  msgstr ""
1113
 
1114
+ #: admin/em-options.php:314
1115
  msgid ""
1116
+ "Bookings will not be confirmed until the event administrator approves it."
 
1117
  msgstr ""
1118
 
1119
+ #: admin/em-options.php:315
1120
+ msgid "Email events admin?"
1121
  msgstr ""
1122
 
1123
+ #: admin/em-options.php:315
1124
  msgid ""
1125
+ "If you would like every event booking confirmation email sent to an "
1126
+ "administrator write their email here (leave blank to not send an email)."
 
 
 
 
 
 
1127
  msgstr ""
1128
 
1129
+ #: admin/em-options.php:316
1130
+ msgid "Email contact person?"
 
 
 
 
 
 
 
1131
  msgstr ""
1132
 
1133
+ #: admin/em-options.php:316
1134
+ msgid ""
1135
+ "Check this option if you want the event contact to receive an email when "
1136
+ "someone books places. An email will be sent when a booking is first made "
1137
+ "(regardless if confirmed or pending)"
1138
  msgstr ""
1139
 
1140
+ #: admin/em-options.php:318
1141
+ msgid "Contact person booking confirmed"
1142
  msgstr ""
1143
 
1144
+ #: admin/em-options.php:319
1145
+ msgid ""
1146
+ "An email will be sent to the event contact when a booking is first made."
1147
  msgstr ""
1148
 
1149
+ #: admin/em-options.php:321
1150
+ msgid "Contact person email subject"
1151
  msgstr ""
1152
 
1153
+ #: admin/em-options.php:322
1154
+ msgid "Contact person email"
1155
  msgstr ""
1156
 
1157
+ #: admin/em-options.php:324
1158
+ msgid "Contact person booking cancelled"
1159
  msgstr ""
1160
 
1161
+ #: admin/em-options.php:325
1162
  msgid ""
1163
+ "An email will be sent to the event contact if someone cancels their booking."
 
1164
  msgstr ""
1165
 
1166
+ #: admin/em-options.php:327
1167
+ msgid "Contact person cancellation subject"
 
 
1168
  msgstr ""
1169
 
1170
+ #: admin/em-options.php:328
1171
+ msgid "Contact person cancellation email"
1172
  msgstr ""
1173
 
1174
+ #: admin/em-options.php:330
1175
+ msgid "Confirmed booking email"
1176
  msgstr ""
1177
 
1178
+ #: admin/em-options.php:331
1179
+ msgid ""
1180
+ "This is sent when a person's booking is confirmed. This will be sent "
1181
+ "automatically if approvals are required and the booking is approved. If "
1182
+ "approvals are disabled, this is sent out when a user first submits their "
1183
+ "booking."
1184
  msgstr ""
1185
 
1186
+ #: admin/em-options.php:333
1187
+ msgid "Booking confirmed email subject"
1188
  msgstr ""
1189
 
1190
+ #: admin/em-options.php:334
1191
+ msgid "Booking confirmed email"
 
 
1192
  msgstr ""
1193
 
1194
+ #: admin/em-options.php:336
1195
+ msgid "Pending booking email"
 
 
1196
  msgstr ""
1197
 
1198
+ #: admin/em-options.php:337
1199
+ msgid ""
1200
+ "This will be sent to the person when they first submit their booking. Not "
1201
+ "relevant if bookings don't require approval."
1202
  msgstr ""
1203
 
1204
+ #: admin/em-options.php:339
1205
+ msgid "Booking pending email subject"
1206
  msgstr ""
1207
 
1208
+ #: admin/em-options.php:340
1209
+ msgid "Booking pending email"
1210
  msgstr ""
1211
 
1212
+ #: admin/em-options.php:342
1213
+ msgid "Rejected booking email"
1214
  msgstr ""
1215
 
1216
+ #: admin/em-options.php:343
1217
+ msgid ""
1218
+ "This will be sent automatically when a booking is rejected. Not relevant if "
1219
+ "bookings don't require approval."
1220
  msgstr ""
1221
 
1222
+ #: admin/em-options.php:345
1223
+ msgid "Booking rejected email subject"
1224
  msgstr ""
1225
 
1226
+ #: admin/em-options.php:345
1227
+ msgid ""
1228
+ "The subject of the email sent to the person making a booking that is "
1229
+ "awaiting administrator approval. Not relevant if bookings don't require "
1230
+ "approval."
1231
  msgstr ""
1232
 
1233
+ #: admin/em-options.php:346
1234
+ msgid "Booking rejected email"
1235
  msgstr ""
1236
 
1237
+ #: admin/em-options.php:346
1238
+ msgid ""
1239
+ "The body of the email which will be sent to the person if the booking is "
1240
+ "rejected. Not relevant if bookings don't require approval."
1241
  msgstr ""
1242
 
1243
+ #: admin/em-options.php:349
1244
+ msgid "Booking cancelled"
1245
  msgstr ""
1246
 
1247
+ #: admin/em-options.php:350
1248
+ msgid "This will be sent when a user cancels their booking."
1249
  msgstr ""
1250
 
1251
+ #: admin/em-options.php:352
1252
+ msgid "Booking cancelled email subject"
1253
  msgstr ""
1254
 
1255
+ #: admin/em-options.php:353
1256
+ msgid "Booking cancelled email"
1257
  msgstr ""
1258
 
1259
+ #: admin/em-options.php:360
1260
+ msgid "Email Settings"
1261
  msgstr ""
1262
 
1263
+ #: admin/em-options.php:364
1264
+ msgid "Notification sender name"
1265
  msgstr ""
1266
 
1267
+ #: admin/em-options.php:364
1268
+ msgid "Insert the display name of the notification sender."
1269
  msgstr ""
1270
 
1271
+ #: admin/em-options.php:365
1272
+ msgid "Notification sender address"
1273
  msgstr ""
1274
 
1275
+ #: admin/em-options.php:365
1276
+ msgid "Insert the address of the notification sender."
1277
  msgstr ""
1278
 
1279
+ #: admin/em-options.php:366
1280
+ msgid ""
1281
+ "The port through which you e-mail notifications will be sent. Make sure the "
1282
+ "firewall doesn't block this port"
1283
  msgstr ""
1284
 
1285
+ #: admin/em-options.php:367
1286
+ msgid "Mail sending method"
 
1287
  msgstr ""
1288
 
1289
+ #: admin/em-options.php:367
1290
+ msgid "PHP mail function"
1291
  msgstr ""
1292
 
1293
+ #: admin/em-options.php:367
1294
+ msgid "Select the method to send email notification."
 
 
1295
  msgstr ""
1296
 
1297
+ #: admin/em-options.php:368
1298
+ msgid "Use SMTP authentication?"
1299
  msgstr ""
1300
 
1301
+ #: admin/em-options.php:368
1302
+ msgid ""
1303
+ "SMTP authentication is often needed. If you use GMail, make sure to set this "
1304
+ "parameter to Yes"
1305
  msgstr ""
1306
 
1307
+ #: admin/em-options.php:369
1308
+ msgid ""
1309
+ "The SMTP host. Usually it corresponds to 'localhost'. If you use GMail, set "
1310
+ "this value to 'ssl://smtp.gmail.com:465'."
1311
  msgstr ""
1312
 
1313
+ #: admin/em-options.php:370
1314
+ msgid "SMTP username"
1315
  msgstr ""
1316
 
1317
+ #: admin/em-options.php:370
1318
+ msgid "Insert the username to be used to access your SMTP server."
1319
  msgstr ""
1320
 
1321
+ #: admin/em-options.php:371
1322
+ msgid "SMTP password"
1323
  msgstr ""
1324
 
1325
+ #: admin/em-options.php:371
1326
+ msgid "Insert the password to be used to access your SMTP server"
1327
  msgstr ""
1328
 
1329
+ #: admin/em-options.php:379
1330
+ msgid "Images size"
1331
  msgstr ""
1332
 
1333
+ #: admin/em-options.php:383
1334
+ msgid "Maximum width (px)"
1335
  msgstr ""
1336
 
1337
+ #: admin/em-options.php:383
1338
+ msgid "The maximum allowed width for images uploades"
1339
  msgstr ""
1340
 
1341
+ #: admin/em-options.php:384
1342
+ msgid "Maximum height (px)"
1343
  msgstr ""
1344
 
1345
+ #: admin/em-options.php:384
1346
+ msgid "The maximum allowed height for images uploaded, in pixels"
1347
  msgstr ""
1348
 
1349
+ #: admin/em-options.php:385
1350
+ msgid "Maximum size (bytes)"
1351
  msgstr ""
1352
 
1353
+ #: admin/em-options.php:385
1354
+ msgid "The maximum allowed size for images uploaded, in pixels"
1355
  msgstr ""
1356
 
1357
+ #: admin/em-options.php:393
1358
+ msgid "Management Permission Options"
1359
  msgstr ""
1360
 
1361
+ #: admin/em-options.php:397
1362
+ msgid ""
1363
+ "Warning: Changing these values may result in exposing previously hidden "
1364
+ "information to all users."
1365
  msgstr ""
1366
 
1367
+ #: admin/em-options.php:398
1368
+ msgid ""
1369
+ "Note that currently \"users\" are considered as wordpress contributor users "
1370
+ "upwards, as they can create and manage events (we're working on that). "
1371
+ "Wordpress administrators can control all events/locations/categories/etc. on "
1372
+ "Events Manager."
1373
  msgstr ""
1374
 
1375
+ #: admin/em-options.php:400
1376
+ msgid "Event Permissions"
1377
  msgstr ""
1378
 
1379
+ #: admin/em-options.php:403
1380
+ msgid ""
1381
+ "Every user can create and manage their own events. Users can't view or "
1382
+ "modify each others' events and booking data"
1383
  msgstr ""
1384
 
1385
+ #: admin/em-options.php:404
1386
+ msgid ""
1387
+ "Every user can create/edit/delete any event on this site. (not recommended)"
1388
  msgstr ""
1389
 
1390
+ #: admin/em-options.php:408
1391
+ msgid "Location Permissions"
1392
  msgstr ""
1393
 
1394
+ #: admin/em-options.php:411
1395
+ msgid "Every user can create and manage their own location."
1396
  msgstr ""
1397
 
1398
+ #: admin/em-options.php:411
1399
+ msgid ""
1400
+ "In future releases of Events Manager, sharing locations with more than one "
1401
+ "user will be possible in this option, as well as connecting different user "
1402
+ "defined locations to prevent duplicate listings."
1403
  msgstr ""
1404
 
1405
+ #: admin/em-options.php:412
1406
+ msgid ""
1407
+ "Only event administrators can create and edit locations. User must choose "
1408
+ "from these available locations."
1409
  msgstr ""
1410
 
1411
+ #: admin/em-options.php:413
1412
+ msgid ""
1413
+ "Everyone can create/edit/delete all locations on this site. (not recommended)"
1414
  msgstr ""
1415
 
1416
+ #: admin/em-options.php:417
1417
+ msgid "Category Permissions"
1418
  msgstr ""
1419
 
1420
+ #: admin/em-options.php:420
1421
+ msgid "Every user can create and manage their own category."
1422
  msgstr ""
1423
 
1424
+ #: admin/em-options.php:421
1425
+ msgid ""
1426
+ "Only event administrators can create and edit categories. User must choose "
1427
+ "from these available categories."
1428
  msgstr ""
1429
 
1430
+ #: admin/em-options.php:422
1431
+ msgid ""
1432
+ "Everyone can create/edit/delete all categories on the system. (not "
1433
+ "recommended)"
1434
  msgstr ""
1435
 
1436
+ #: admin/em-categories.php:10
1437
+ msgid "The category has been added."
1438
  msgstr ""
1439
 
1440
+ #: admin/em-categories.php:12
1441
+ msgid "The category has been updated."
1442
  msgstr ""
1443
 
1444
+ #: admin/em-categories.php:22 admin/em-locations.php:39 admin/em-event.php:100
1445
+ msgid "Ach, there's a problem here:"
1446
  msgstr ""
1447
 
1448
+ #: admin/em-categories.php:32
1449
+ msgid "Categories Deleted"
1450
  msgstr ""
1451
 
1452
+ #: admin/em-categories.php:46 events-manager.php:219
1453
+ msgid "Categories"
1454
  msgstr ""
1455
 
1456
+ #: admin/em-categories.php:65 admin/em-categories.php:72
1457
+ msgid "ID"
1458
  msgstr ""
1459
 
1460
+ #: admin/em-categories.php:96
1461
+ msgid "No categories have been inserted yet!"
1462
  msgstr ""
1463
 
1464
+ #: admin/em-categories.php:108 admin/em-categories.php:116
1465
+ msgid "Add category"
1466
  msgstr ""
1467
 
1468
+ #: admin/em-categories.php:112 admin/em-categories.php:163
1469
+ msgid "Category name"
 
1470
  msgstr ""
1471
 
1472
+ #: admin/em-categories.php:114 admin/em-categories.php:165
1473
+ msgid "The name of the category"
 
1474
  msgstr ""
1475
 
1476
+ #: admin/em-categories.php:137 admin/em-bookings.php:100
1477
+ #: admin/em-bookings.php:150 admin/em-locations.php:144
1478
+ #: admin/em-people.php:124 admin/em-event.php:54
1479
+ msgid "Unauthorized Access"
1480
  msgstr ""
1481
 
1482
+ #: admin/em-categories.php:137 admin/em-bookings.php:100
1483
+ #: admin/em-bookings.php:150 admin/em-people.php:124 admin/em-event.php:54
1484
+ msgid "You do not have the rights to manage this event."
1485
  msgstr ""
1486
 
1487
+ #: admin/em-categories.php:147
1488
+ msgid "Edit category"
 
1489
  msgstr ""
1490
 
1491
+ #: admin/em-categories.php:168
1492
+ msgid "Update category"
 
1493
  msgstr ""
1494
 
1495
+ #: admin/em-bookings.php:82
1496
+ msgid "Event Bookings Dashboard"
1497
  msgstr ""
1498
 
1499
+ #: admin/em-bookings.php:84 admin/em-bookings.php:130
1500
+ msgid "Pending Bookings"
 
1501
  msgstr ""
1502
 
1503
+ #: admin/em-bookings.php:86
1504
+ msgid "Events With Bookings Enabled"
 
1505
  msgstr ""
1506
 
1507
+ #: admin/em-bookings.php:112
1508
+ msgid "Manage %s Bookings"
 
1509
  msgstr ""
1510
 
1511
+ #: admin/em-bookings.php:113
1512
+ msgid "View/Edit Event"
1513
  msgstr ""
1514
 
1515
+ #: admin/em-bookings.php:115 admin/em-event.php:280
1516
+ msgid "export csv"
1517
  msgstr ""
1518
 
1519
+ #: admin/em-bookings.php:117
1520
+ msgid "Event Name"
1521
  msgstr ""
1522
 
1523
+ #: admin/em-bookings.php:118
1524
+ msgid "Seats confirmed"
1525
  msgstr ""
1526
 
1527
+ #: admin/em-bookings.php:120 admin/em-admin.php:226
1528
+ msgid "Date"
1529
  msgstr ""
1530
 
1531
+ #: admin/em-bookings.php:126 admin/em-admin.php:227 admin/em-locations.php:196
1532
+ #: admin/em-events.php:132 admin/em-event.php:398
1533
+ msgid "Location"
1534
  msgstr ""
1535
 
1536
+ #: admin/em-bookings.php:132
1537
+ msgid "Confirmed Bookings"
1538
  msgstr ""
1539
 
1540
+ #: admin/em-bookings.php:134
1541
+ msgid "Rejected Bookings"
1542
  msgstr ""
1543
 
1544
+ #: admin/em-bookings.php:136
1545
+ msgid "Cancelled Bookings"
1546
  msgstr ""
1547
 
1548
+ #: admin/em-bookings.php:160
1549
+ msgid "Edit Booking"
1550
  msgstr ""
1551
 
1552
+ #: admin/em-bookings.php:167
1553
+ msgid "Booking Details"
1554
  msgstr ""
1555
 
1556
+ #: admin/em-bookings.php:182
1557
+ msgid "Booking Notes"
1558
  msgstr ""
1559
 
1560
+ #: admin/em-bookings.php:185
1561
+ msgid ""
1562
+ "You can add private notes below for internal reference that only event "
1563
+ "managers will see."
1564
  msgstr ""
1565
 
1566
+ #: admin/em-bookings.php:190
1567
+ msgid "wrote"
1568
  msgstr ""
1569
 
1570
+ #: admin/em-bookings.php:222
1571
+ msgid "Manage Person's Booking"
1572
  msgstr ""
1573
 
1574
+ #: admin/em-bookings.php:223
1575
+ msgid ""
1576
+ "Are you sure you want to delete this person? All bookings corresponding to "
1577
+ "this person will be deleted and this is not reversible."
1578
  msgstr ""
1579
 
1580
+ #: admin/em-bookings.php:223
1581
+ msgid "Delete Person"
1582
  msgstr ""
1583
 
1584
+ #: admin/em-bookings.php:230
1585
+ msgid "Personal Details"
1586
  msgstr ""
1587
 
1588
+ #: admin/em-bookings.php:240
1589
+ msgid "Past And Present Bookings"
1590
  msgstr ""
1591
 
1592
+ #: admin/em-bookings.php:257
1593
+ msgid "Date/Time"
1594
  msgstr ""
1595
 
1596
+ #: admin/em-bookings.php:268 admin/em-people.php:58 admin/em-people.php:187
1597
+ msgid "Phone"
1598
  msgstr ""
1599
 
1600
+ #: admin/em-bookings.php:269 admin/em-people.php:59 admin/em-people.php:146
1601
+ msgid "E-mail"
1602
  msgstr ""
1603
 
1604
+ #: admin/em-bookings.php:273 admin/em-event.php:257
1605
+ msgid "Spaces"
 
 
 
 
 
1606
  msgstr ""
1607
 
1608
+ #: admin/em-bookings.php:277 admin/em-people.php:62
1609
+ msgid "Save"
 
 
 
 
 
 
 
1610
  msgstr ""
1611
 
1612
+ #: admin/em-admin.php:20
 
1613
  msgid ""
1614
  "<p>Hey, <strong>%s</strong>, welcome to <strong>Events Manager</strong>! We "
1615
  "hope you like it around here.</p> \r\n"
1616
+ "\t\t\t<p>Now it's time to insert events lists through <a href='%s' "
1617
  "title='Widgets page'>widgets</a>, <a href='%s' title='Template tags "
1618
  "documentation'>template tags</a> or <a href='%s' title='Shortcodes "
1619
  "documentation'>shortcodes</a>.</p>\r\n"
1620
+ "\t\t\t<p>By the way, have you taken a look at the <a href='%s' title='Change "
1621
  "settings'>Settings page</a>? That's where you customize the way events and "
1622
  "locations are displayed.</p>\r\n"
1623
+ "\t\t\t<p>What? Tired of seeing this advice? I hear you, <a href='%s' "
1624
  "title='Don't show this advice again'>click here</a> and you won't see this "
1625
  "again!</p>"
1626
  msgstr ""
1627
 
1628
+ #: admin/em-admin.php:38
1629
+ msgid ""
1630
+ "<strong>Events Manager has some new features!</strong><ul><li>Bookings can "
1631
+ "now be approved before they count towards your event's space allocations.</"
1632
+ "li><li>Events now have owners, and you can restrict users so they can only "
1633
+ "manage events/locations/categories they create.<br/><br/>These new "
1634
+ "permissions are enabled by default, but since you upgraded it has been "
1635
+ "disabled to maintain the previous plugin behaviour. You can re-enable it "
1636
+ "from the <a href=\"%s\">settings page</a>. <a href=\"%s\">Dismiss</a>"
1637
  msgstr ""
1638
 
1639
+ #: admin/em-admin.php:51
1640
  msgid ""
1641
+ "Uh Oh! For some reason wordpress could not create an events page for you (or "
1642
+ "you just deleted it). Not to worry though, all you have to do is create an "
1643
+ "empty page, name it whatever you want, and select it as your events page in "
1644
+ "your <a href=\"%s\">settings page</a>. Sorry for the extra step! If you know "
1645
+ "what you are doing, you may have done this on purpose, if so <a href=\"%s"
1646
+ "\">ignore this message</a>"
1647
  msgstr ""
1648
 
1649
+ #: admin/em-admin.php:59
1650
  msgid ""
1651
+ "This page corresponds to <strong>Events Manager</strong> events page. Its "
1652
+ "content will be overriden by <strong>Events Manager</strong>. If you want to "
1653
+ "display your content, you can can assign another page to <strong>Events "
1654
+ "Manager</strong> in the the <a href='%s'>Settings</a>. "
1655
+ msgstr ""
1656
+
1657
+ #: admin/em-admin.php:79
1658
+ msgid "Displaying %s&#8211;%s of %s"
1659
+ msgstr ""
1660
+
1661
+ #: admin/em-admin.php:228 admin/em-locations.php:104
1662
+ #: admin/em-locations.php:112
1663
+ msgid "Address"
1664
+ msgstr ""
1665
+
1666
+ #: admin/em-admin.php:229 admin/em-locations.php:105
1667
+ #: admin/em-locations.php:113
1668
+ msgid "Town"
1669
+ msgstr ""
1670
+
1671
+ #: admin/em-admin.php:243
1672
+ msgid "Some required fields are missing:"
1673
+ msgstr ""
1674
+
1675
+ #: admin/em-admin.php:246
1676
+ msgid "Since the event is repeated, you must specify an end date"
1677
+ msgstr ""
1678
+
1679
+ #: admin/bookings/em-cancelled.php:34 admin/bookings/em-cancelled.php:36
1680
+ #: admin/bookings/em-confirmed.php:35 admin/bookings/em-confirmed.php:37
1681
+ #: admin/bookings/em-person.php:40 admin/bookings/em-person.php:42
1682
+ #: admin/bookings/em-rejected.php:34 admin/bookings/em-rejected.php:36
1683
+ #: admin/bookings/em-pending.php:49 admin/bookings/em-pending.php:51
1684
+ msgid "Search"
1685
+ msgstr ""
1686
+
1687
+ #: admin/bookings/em-cancelled.php:45 admin/bookings/em-confirmed.php:46
1688
+ #: admin/bookings/em-person.php:51 admin/bookings/em-rejected.php:45
1689
+ #: admin/bookings/em-pending.php:60 admin/bookings/em-events.php:56
1690
+ #: admin/em-locations.php:83 admin/em-events.php:86
1691
+ msgid "Bulk Actions"
1692
+ msgstr ""
1693
+
1694
+ #: admin/bookings/em-cancelled.php:48 admin/bookings/em-cancelled.php:107
1695
+ #: admin/bookings/em-confirmed.php:49 admin/bookings/em-person.php:54
1696
+ #: admin/bookings/em-person.php:116 admin/bookings/em-rejected.php:48
1697
+ #: admin/bookings/em-rejected.php:107 admin/bookings/em-pending.php:63
1698
+ #: admin/bookings/em-pending.php:128
1699
+ msgid "Approve"
1700
+ msgstr ""
1701
+
1702
+ #: admin/bookings/em-cancelled.php:51 admin/bookings/em-confirmed.php:52
1703
+ #: admin/bookings/em-person.php:57 admin/bookings/em-rejected.php:51
1704
+ #: admin/bookings/em-pending.php:66
1705
+ msgid "Decline"
1706
+ msgstr ""
1707
+
1708
+ #: admin/bookings/em-cancelled.php:109 admin/bookings/em-person.php:125
1709
+ #: admin/bookings/em-rejected.php:109
1710
+ msgid "Delete"
1711
+ msgstr ""
1712
+
1713
+ #: admin/bookings/em-cancelled.php:121
1714
+ msgid "No cancelled bookings."
1715
+ msgstr ""
1716
+
1717
+ #: admin/bookings/em-confirmed.php:107 admin/bookings/em-person.php:119
1718
+ msgid "Unapprove"
1719
+ msgstr ""
1720
+
1721
+ #: admin/bookings/em-confirmed.php:120 admin/bookings/em-person.php:137
1722
+ msgid "No confirmed bookings."
1723
+ msgstr ""
1724
+
1725
+ #: admin/bookings/em-person.php:122 admin/bookings/em-pending.php:129
1726
+ msgid "Reject"
1727
+ msgstr ""
1728
+
1729
+ #: admin/bookings/em-rejected.php:121
1730
+ msgid "No rejected bookings."
1731
+ msgstr ""
1732
+
1733
+ #: admin/bookings/em-pending.php:142
1734
+ msgid "No pending bookings."
1735
+ msgstr ""
1736
+
1737
+ #: admin/bookings/em-events.php:29 admin/em-events.php:32
1738
+ msgid "Past Events"
1739
+ msgstr ""
1740
+
1741
+ #: admin/bookings/em-events.php:32 admin/em-events.php:35
1742
+ msgid "All Events"
1743
+ msgstr ""
1744
+
1745
+ #: admin/bookings/em-events.php:35 admin/em-events.php:38
1746
+ msgid "Future Events"
1747
  msgstr ""
1748
 
1749
+ #: admin/bookings/em-events.php:50 admin/em-events.php:75
1750
+ msgid "Total"
1751
+ msgstr ""
1752
+
1753
+ #: admin/bookings/em-events.php:57 admin/em-locations.php:84
1754
+ #: admin/em-events.php:87
1755
+ msgid "Delete selected"
1756
+ msgstr ""
1757
+
1758
+ #: admin/bookings/em-events.php:59 admin/em-locations.php:86
1759
+ #: admin/em-events.php:89
1760
+ msgid "Apply"
1761
+ msgstr ""
1762
+
1763
+ #: admin/bookings/em-events.php:71 admin/em-events.php:100
1764
+ msgid "Filter"
1765
+ msgstr ""
1766
+
1767
+ #. TODO localize
1768
+ #. TODO localize
1769
+ #: admin/bookings/em-events.php:91 admin/em-events.php:120
1770
+ msgid "no events"
1771
+ msgstr ""
1772
+
1773
+ #: admin/bookings/em-events.php:102 admin/em-events.php:133
1774
+ msgid "Date and time"
1775
+ msgstr ""
1776
+
1777
+ #: admin/bookings/em-events.php:134 admin/em-events.php:172
1778
+ msgid "Booked Seats"
1779
+ msgstr ""
1780
+
1781
+ #: admin/em-locations.php:21
1782
+ msgid "Locations Deleted"
1783
+ msgstr ""
1784
+
1785
+ #: admin/em-locations.php:26
1786
+ msgid "The location has been added."
1787
+ msgstr ""
1788
+
1789
+ #: admin/em-locations.php:28
1790
+ msgid "The location has been updated."
1791
+ msgstr ""
1792
+
1793
+ #: admin/em-locations.php:65 events-manager.php:213
1794
+ msgid "Locations"
1795
+ msgstr ""
1796
+
1797
+ #: admin/em-locations.php:66 admin/em-events.php:55
1798
+ msgid "Add New"
1799
+ msgstr ""
1800
+
1801
+ #: admin/em-locations.php:132
1802
+ msgid "No venues have been inserted yet!"
1803
+ msgstr ""
1804
+
1805
+ #: admin/em-locations.php:144
1806
+ msgid "You do not have the rights to manage this location."
1807
+ msgstr ""
1808
+
1809
+ #: admin/em-locations.php:149
1810
+ msgid "Add location"
1811
+ msgstr ""
1812
+
1813
+ #: admin/em-locations.php:152
1814
+ msgid "Edit location"
1815
+ msgstr ""
1816
+
1817
+ #: admin/em-locations.php:176
1818
+ msgid "Location Name"
1819
+ msgstr ""
1820
+
1821
+ #: admin/em-locations.php:181
1822
+ msgid "The name of the location"
1823
+ msgstr ""
1824
+
1825
+ #: admin/em-locations.php:186 admin/em-event.php:388
1826
+ msgid "Coordinates"
1827
+ msgstr ""
1828
+
1829
+ #: admin/em-locations.php:204 admin/em-event.php:436
1830
+ msgid "Address:"
1831
+ msgstr ""
1832
+
1833
+ #: admin/em-locations.php:207 admin/em-event.php:439
1834
  msgid ""
1835
+ "The address of the location where the event takes place. Example: 21, "
1836
+ "Dominick Street"
1837
+ msgstr ""
1838
+
1839
+ #: admin/em-locations.php:211 admin/em-event.php:443
1840
+ msgid "Town:"
1841
  msgstr ""
1842
 
1843
+ #: admin/em-locations.php:214 admin/em-event.php:446
1844
  msgid ""
1845
+ "The town where the location is located. If you're using the Google Map "
1846
+ "integration and want to avoid geotagging ambiguities include the country in "
1847
+ "the town field. Example: Verona, Italy."
1848
  msgstr ""
1849
 
1850
+ #: admin/em-locations.php:222 admin/em-event.php:455
1851
+ msgid "Location not found"
1852
+ msgstr ""
1853
+
1854
+ #: admin/em-locations.php:234 admin/em-event.php:466
1855
+ msgid "Details"
1856
+ msgstr ""
1857
+
1858
+ #: admin/em-locations.php:241
1859
+ msgid "Details about the location"
1860
+ msgstr ""
1861
+
1862
+ #: admin/em-locations.php:247
1863
+ msgid "Location image"
1864
+ msgstr ""
1865
+
1866
+ #: admin/em-locations.php:253
1867
+ msgid "No image uploaded for this location yet"
1868
+ msgstr ""
1869
+
1870
+ #: admin/em-locations.php:256
1871
+ msgid "Upload/change picture"
1872
+ msgstr ""
1873
+
1874
+ #: admin/em-locations.php:262
1875
+ msgid "Update location"
1876
+ msgstr ""
1877
+
1878
+ #: admin/em-help.php:10 events-manager.php:222
1879
+ msgid "Getting Help for Events Manager"
1880
+ msgstr ""
1881
+
1882
+ #: admin/em-help.php:15
1883
+ msgid "Placeholders for customizing event pages"
1884
+ msgstr ""
1885
+
1886
+ #: admin/em-help.php:16
1887
  msgid ""
1888
+ "In the <a href='%s'>settings page</a>, you'll find various textboxes where "
1889
+ "you can edit how event information looks, such as for event and location "
1890
+ "lists. Using the placeholders below, you can choose what information should "
1891
+ "be displayed."
1892
+ msgstr ""
1893
+
1894
+ #: admin/em-events.php:78 admin/em-events.php:80
1895
+ msgid "Search Events"
1896
+ msgstr ""
1897
+
1898
+ #: admin/em-events.php:167 admin/em-event.php:305
1899
+ msgid "Category"
1900
+ msgstr ""
1901
+
1902
+ #: admin/em-events.php:180
1903
+ msgid "Duplicate this event"
1904
+ msgstr ""
1905
+
1906
+ #: admin/em-events.php:203 admin/em-event.php:61 admin/em-event.php:208
1907
+ msgid "Reschedule"
1908
+ msgstr ""
1909
+
1910
+ #: admin/em-people.php:81
1911
+ msgid "No people have responded to your events yet!"
1912
+ msgstr ""
1913
+
1914
+ #: admin/em-people.php:84
1915
+ msgid ""
1916
+ "This table collects the data about the people who responded to your events"
1917
+ msgstr ""
1918
+
1919
+ #: admin/em-people.php:142
1920
+ msgid "Bookings data"
1921
+ msgstr ""
1922
+
1923
+ #: admin/em-people.php:163
1924
+ msgid "Booked"
1925
+ msgstr ""
1926
+
1927
+ #: admin/em-people.php:168
1928
+ msgid "Available"
1929
+ msgstr ""
1930
+
1931
+ #. #-#-#-#-# plugin.pot (Events Manager 3.0.9) #-#-#-#-#
1932
+ #. Plugin Name of the plugin/theme
1933
+ #: admin/em-people.php:187
1934
+ msgid "Events Manager"
1935
+ msgstr ""
1936
+
1937
+ #: admin/em-event.php:30
1938
+ msgid "There was an error duplicating the event. Try again maybe?"
1939
+ msgstr ""
1940
+
1941
+ #: admin/em-event.php:63
1942
+ msgid "Edit Event"
1943
+ msgstr ""
1944
+
1945
+ #: admin/em-event.php:67
1946
+ msgid "Insert New Event"
1947
+ msgstr ""
1948
+
1949
+ #: admin/em-event.php:94
1950
+ msgid "Mon"
1951
+ msgstr ""
1952
+
1953
+ #: admin/em-event.php:94
1954
+ msgid "Tue"
1955
+ msgstr ""
1956
+
1957
+ #: admin/em-event.php:94
1958
+ msgid "Wed"
1959
+ msgstr ""
1960
+
1961
+ #: admin/em-event.php:94
1962
+ msgid "Thu"
1963
+ msgstr ""
1964
+
1965
+ #: admin/em-event.php:94
1966
+ msgid "Fri"
1967
+ msgstr ""
1968
+
1969
+ #: admin/em-event.php:94
1970
+ msgid "Sat"
1971
+ msgstr ""
1972
+
1973
+ #: admin/em-event.php:94
1974
+ msgid "Sun"
1975
+ msgstr ""
1976
+
1977
+ #: admin/em-event.php:120
1978
+ msgid "WARNING: This is a recurring event."
1979
+ msgstr ""
1980
+
1981
+ #: admin/em-event.php:122
1982
+ msgid ""
1983
+ "Modifying these data all the events linked to this recurrence will be "
1984
+ "rescheduled"
1985
+ msgstr ""
1986
+
1987
+ #: admin/em-event.php:124
1988
+ msgid "and all booking information will be deleted!"
1989
+ msgstr ""
1990
+
1991
+ #. TODO Terminology confusing with methods, maybe worth changing?
1992
+ #: admin/em-event.php:127
1993
+ msgid "WARNING: This is a recurrence."
1994
+ msgstr ""
1995
+
1996
+ #: admin/em-event.php:129
1997
+ msgid ""
1998
+ "If you change these data and save, this will become an independent event."
1999
+ msgstr ""
2000
+
2001
+ #: admin/em-event.php:144
2002
+ msgid "Recurrence"
2003
+ msgstr ""
2004
+
2005
+ #: admin/em-event.php:151
2006
+ msgid "Repeated event"
2007
+ msgstr ""
2008
+
2009
+ #: admin/em-event.php:158
2010
+ msgid "Daily"
2011
+ msgstr ""
2012
+
2013
+ #: admin/em-event.php:158
2014
+ msgid "Weekly"
2015
+ msgstr ""
2016
+
2017
+ #: admin/em-event.php:158
2018
+ msgid "Monthly"
2019
+ msgstr ""
2020
+
2021
+ #: admin/em-event.php:164 admin/em-event.php:187
2022
+ msgid "Every"
2023
+ msgstr ""
2024
+
2025
+ #: admin/em-event.php:167
2026
+ msgid "day"
2027
+ msgstr ""
2028
+
2029
+ #: admin/em-event.php:169
2030
+ msgid "days"
2031
+ msgstr ""
2032
+
2033
+ #: admin/em-event.php:171
2034
+ msgid "week"
2035
+ msgstr ""
2036
+
2037
+ #: admin/em-event.php:173
2038
+ msgid "weeks"
2039
+ msgstr ""
2040
+
2041
+ #: admin/em-event.php:175
2042
+ msgid "month"
2043
+ msgstr ""
2044
+
2045
+ #: admin/em-event.php:177
2046
+ msgid "months"
2047
+ msgstr ""
2048
+
2049
+ #: admin/em-event.php:190
2050
+ msgid "first"
2051
+ msgstr ""
2052
+
2053
+ #: admin/em-event.php:190
2054
+ msgid "second"
2055
+ msgstr ""
2056
+
2057
+ #: admin/em-event.php:190
2058
+ msgid "third"
2059
+ msgstr ""
2060
+
2061
+ #: admin/em-event.php:190
2062
+ msgid "fourth"
2063
+ msgstr ""
2064
+
2065
+ #: admin/em-event.php:190
2066
+ msgid "last"
2067
  msgstr ""
2068
 
2069
+ #: admin/em-event.php:201
2070
+ msgid ""
2071
+ "Check if your event happens more than once according to a regular pattern"
2072
+ msgstr ""
2073
+
2074
+ #: admin/em-event.php:213
2075
+ msgid "This is't a recurrent event"
2076
+ msgstr ""
2077
+
2078
+ #: admin/em-event.php:226
2079
+ msgid "Contact Person"
2080
+ msgstr ""
2081
+
2082
+ #: admin/em-event.php:229
2083
+ msgid "Contact"
2084
+ msgstr ""
2085
+
2086
+ #: admin/em-event.php:231
2087
+ msgid "Select..."
2088
+ msgstr ""
2089
+
2090
+ #: admin/em-event.php:242
2091
+ msgid "RSVP"
2092
+ msgstr ""
2093
+
2094
+ #: admin/em-event.php:246
2095
+ msgid "Enable registration for this event"
2096
+ msgstr ""
2097
+
2098
+ #: admin/em-event.php:269
2099
+ msgid "Available Spaces"
2100
+ msgstr ""
2101
+
2102
+ #: admin/em-event.php:270
2103
+ msgid "Confirmed Spaces"
2104
+ msgstr ""
2105
+
2106
+ #: admin/em-event.php:271
2107
+ msgid "Pending Spaces"
2108
+ msgstr ""
2109
+
2110
+ #: admin/em-event.php:278
2111
+ msgid "manage bookings"
2112
+ msgstr ""
2113
+
2114
+ #: admin/em-event.php:279
2115
+ msgid "printable view"
2116
+ msgstr ""
2117
+
2118
+ #: admin/em-event.php:288
2119
+ msgid "No responses yet!"
2120
+ msgstr ""
2121
+
2122
+ #: admin/em-event.php:310
2123
+ msgid "Category:"
2124
+ msgstr ""
2125
+
2126
+ #: admin/em-event.php:312
2127
+ msgid "no category"
2128
+ msgstr ""
2129
+
2130
+ #: admin/em-event.php:326
2131
+ msgid "No categories available, <a href=\"%s\">create one here first</a>"
2132
+ msgstr ""
2133
+
2134
+ #: admin/em-event.php:344
2135
+ msgid "The event name. Example: Birthday party"
2136
+ msgstr ""
2137
+
2138
+ #: admin/em-event.php:349
2139
+ msgid "Event date"
2140
+ msgstr ""
2141
+
2142
+ #: admin/em-event.php:352
2143
+ msgid "Recurrence dates"
2144
+ msgstr ""
2145
+
2146
+ #: admin/em-event.php:362
2147
+ msgid "The event date."
2148
+ msgstr ""
2149
+
2150
+ #: admin/em-event.php:365
2151
+ msgid ""
2152
+ "When not reoccurring, this event spans between the beginning and end date."
2153
+ msgstr ""
2154
+
2155
+ #: admin/em-event.php:370
2156
+ msgid "The recurrence beginning and end date."
2157
+ msgstr ""
2158
+
2159
+ #: admin/em-event.php:376
2160
+ msgid "Event time"
2161
+ msgstr ""
2162
+
2163
+ #: admin/em-event.php:383
2164
+ msgid "The time of the event beginning and end"
2165
+ msgstr ""
2166
+
2167
+ #: admin/em-event.php:407
2168
+ msgid "Location:"
2169
+ msgstr ""
2170
+
2171
+ #: admin/em-event.php:424
2172
+ msgid ""
2173
+ "The name of the location where the event takes place. You can use the name "
2174
+ "of a venue, a square, etc"
2175
+ msgstr ""
2176
+
2177
+ #: admin/em-event.php:429
2178
+ msgid "Name:"
2179
+ msgstr ""
2180
+
2181
+ #: admin/em-event.php:432
2182
+ msgid "Select a location for your event"
2183
+ msgstr ""
2184
+
2185
+ #: admin/em-event.php:473
2186
+ msgid "Details about the event"
2187
+ msgstr ""
2188
+
2189
+ #: admin/em-event.php:480
2190
+ msgid "Attributes"
2191
+ msgstr ""
2192
+
2193
+ #: admin/em-event.php:536
2194
+ msgid "Not defined in templates"
2195
+ msgstr ""
2196
+
2197
+ #: admin/em-event.php:580
2198
+ msgid ""
2199
+ "In order to use attributes, you must define some in your templates, "
2200
+ "otherwise they'll never show. Go to Events > Settings to add attribute "
2201
+ "placeholders."
2202
+ msgstr ""
2203
+
2204
+ #: admin/em-event.php:592
2205
+ msgid "Submit Event"
2206
+ msgstr ""
2207
+
2208
+ #: admin/em-event.php:606
2209
+ msgid ""
2210
+ "Are you sure you want to reschedule this recurring event? If you do this, "
2211
+ "you will lose all booking information and the old recurring events will be "
2212
+ "deleted."
2213
+ msgstr ""
2214
+
2215
+ #: admin/em-event.php:616
2216
+ msgid ""
2217
+ "Are you sure you want to disable bookings? If you do this and save, you will "
2218
+ "lose all previous bookings. If you wish to prevent further bookings, reduce "
2219
+ "the number of seats available to the amount of bookings you currently have"
2220
+ msgstr ""
2221
+
2222
+ #: em-template-tags-depreciated.php:146
2223
  msgid "Ach, some problems here:"
2224
  msgstr ""
2225
 
2226
+ #: em-install.php:197
2227
+ msgid "Uncategorized"
2228
  msgstr ""
2229
 
2230
+ #: em-install.php:205
2231
+ msgid ""
2232
+ "#_BOOKINGNAME (#_BOOKINGEMAIL) will attend #_NAME on #F #j, #Y. He wants to "
2233
+ "reserve #_BOOKINGSPACES spaces.<br/> Now there are #_BOOKEDSPACES spaces "
2234
+ "reserved, #_AVAILABLESPACES are still available.<br/>Yours faithfully,<br/"
2235
+ ">Events Manager - http://wp-events-plugin.com"
2236
  msgstr ""
2237
 
2238
+ #: em-install.php:205 em-install.php:206 em-install.php:207 em-install.php:208
2239
+ #: em-install.php:209 em-install.php:210
2240
+ msgid ""
2241
+ "<br/><br/>-------------------------------<br/>Powered by Events Manager - "
2242
+ "http://wp-events-plugin.com"
2243
  msgstr ""
2244
 
2245
+ #: em-install.php:206
2246
+ msgid ""
2247
+ "#_BOOKINGNAME (#_BOOKINGEMAIL) cancelled his booking at #_NAME on #F #j, #Y. "
2248
+ "He wanted to reserve #_BOOKINGSPACES spaces.<br/> Now there are "
2249
+ "#_BOOKEDSPACES spaces reserved, #_AVAILABLESPACES are still available.<br/"
2250
+ ">Yours faithfully,<br/>Events Manager - http://wp-events-plugin.com"
2251
  msgstr ""
2252
 
2253
+ #: em-install.php:207
2254
+ msgid ""
2255
+ "Dear #_BOOKINGNAME, <br/>you have successfully reserved #_BOOKINGSPACES "
2256
+ "space/spaces for #_NAME.<br/>Yours faithfully,<br/>#_CONTACTNAME"
2257
  msgstr ""
2258
 
2259
+ #: em-install.php:208
2260
+ msgid ""
2261
+ "Dear #_BOOKINGNAME, <br/>You have requested #_BOOKEDSPACES space/spaces for "
2262
+ "#_NAME.<br/>Your booking is currently pending approval by our "
2263
+ "administrators. Once approved you will receive an automatic confrimation.<br/"
2264
+ ">Yours faithfully,<br/>#_CONTACTNAME"
2265
  msgstr ""
2266
 
2267
+ #: em-install.php:209
2268
+ msgid ""
2269
+ "Dear #_BOOKINGNAME, <br/>Your requested booking for #_BOOKINGSPACES spaces "
2270
+ "at #_NAME on #F #j, #Y has been rejected.<br/>Yours faithfully,<br/"
2271
+ ">#_CONTACTNAME"
2272
  msgstr ""
2273
 
2274
+ #: em-install.php:210
2275
+ msgid ""
2276
+ "Dear #_BOOKINGNAME, <br/>Your requested booking for #_BOOKINGSPACES spaces "
2277
+ "at #_NAME on #F #j, #Y has been cancelled.<br/>Yours faithfully,<br/"
2278
+ ">#_CONTACTNAME"
2279
  msgstr ""
2280
 
2281
+ #: em-install.php:234
2282
+ msgid "<li>No events in this location</li>"
2283
  msgstr ""
2284
 
2285
+ #: em-install.php:280
2286
+ msgid "New booking"
2287
  msgstr ""
2288
 
2289
+ #: em-install.php:282 em-install.php:290
2290
+ msgid "Booking Cancelled"
2291
  msgstr ""
2292
 
2293
+ #: em-install.php:284
2294
+ msgid "Reservation Pending"
2295
  msgstr ""
2296
 
2297
+ #: em-install.php:286
2298
+ msgid "Reservation Rejected"
2299
  msgstr ""
2300
 
2301
+ #: em-install.php:288
2302
+ msgid "Booking Confirmed"
2303
  msgstr ""
2304
 
2305
+ #. FIXME Better fallback in case of bad install
2306
+ #: em-install.php:407
2307
+ msgid ""
2308
+ "We could not mirgrate old recurrence data over. DONT WORRY! You can just "
2309
+ "delete the current plugin, and re-install the previous 2.2.2 version and you "
2310
+ "wont lose any of your data. Either way, please contact the developers to let "
2311
+ "them know of this bug."
2312
  msgstr ""
2313
 
2314
+ #: em-install.php:569
2315
+ msgid ""
2316
+ "Events Manager successfully imported your events, please check your records "
2317
+ "to verify."
2318
  msgstr ""
2319
 
2320
+ #: em-install.php:585
2321
+ msgid ""
2322
+ "Something has gone wrong when importing your old event. See the <a href=\"%s"
2323
+ "\">support page</a> for more information. <a href=\"%s\">Dismiss this "
2324
+ "message</a>"
2325
  msgstr ""
2326
 
2327
+ #: events-manager.php:187 events-manager.php:221
2328
+ msgid "Settings"
2329
  msgstr ""
2330
 
2331
+ #: events-manager.php:211
2332
+ msgid "Add new"
2333
  msgstr ""
2334
 
2335
+ #: events-manager.php:216
2336
+ msgid "Bookings"
2337
  msgstr ""
2338
 
2339
+ #: events-manager.php:219
2340
+ msgid "Event Categories"
2341
+ msgstr ""
2342
+
2343
+ #: events-manager.php:221
2344
+ msgid "Events Manager Settings"
2345
+ msgstr ""
2346
+
2347
+ #: events-manager.php:222
2348
+ msgid "Help"
2349
  msgstr ""
2350
 
2351
+ #: events-manager.php:250
2352
+ msgid "Add an event"
2353
+ msgstr ""
2354
+
2355
+ #. #-#-#-#-# plugin.pot (Events Manager 3.0.9) #-#-#-#-#
2356
  #. Plugin URI of the plugin/theme
2357
+ #. #-#-#-#-# plugin.pot (Events Manager 3.0.9) #-#-#-#-#
2358
+ #. Author URI of the plugin/theme
2359
+ msgid "http://wp-events-plugin.com"
2360
  msgstr ""
2361
 
2362
  #. Description of the plugin/theme
2368
  #. Author of the plugin/theme
2369
  msgid "Davide Benini, Marcus Sykes"
2370
  msgstr ""
 
 
 
 
includes/sample-placeholers/booking-email.html ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ----------
2
+ Event Details:
3
+ #_NAME at #_LOCATION on #j #M #Y #@_{ \u\n\t\i\l j M Y}
4
+
5
+ ----------
6
+ Booking Person Details:
7
+
8
+ #__BOOKINGNAME : #_BOOKINGNAME
9
+ #__BOOKINGEMAIL : #_BOOKINGEMAIL
10
+ #__BOOKINGPHONE : #_BOOKINGPHONE
11
+ #__BOOKINGSPACES : #_BOOKINGSPACES
12
+ #__BOOKINGCOMMENT : #_BOOKINGCOMMENT
13
+
14
+ ----------
15
+ Event Booking Stats:
16
+
17
+ #__AVAILABLESPACES : #_AVAILABLESPACES
18
+ #__BOOKEDSPACES : #_BOOKEDSPACES
19
+ #__SPACES: #_SPACES
20
+
21
+ ----------
22
+ Contact Details :
23
+
24
+ #__CONTACTNAME : #_CONTACTNAME
25
+ #__CONTACTUSERNAME : #_CONTACTUSERNAME
26
+ #__CONTACTEMAIL : #_CONTACTEMAIL
27
+ #__CONTACTPHONE : #_CONTACTPHONE
28
+ #__CONTACTAVATAR : #_CONTACTAVATAR
29
+ #__CONTACTPROFILELINK : #_CONTACTPROFILELINK
30
+ #__CONTACTPROFILEURL : #_CONTACTPROFILEURL
31
+ #__CONTACTID : #_CONTACTID
includes/sample-placeholers/event-single.html CHANGED
@@ -11,31 +11,44 @@
11
  <th>What? </th>
12
  <td>
13
  <h3>#_NAME</h3>
 
 
 
 
 
14
  #_NOTES
15
  </td>
16
  </tr>
17
  <tr>
18
  <th>
 
19
  Price<br />
20
  Dress Code<br />
21
- Available Seats
22
  </th>
23
  <td>
24
  #_ATT{Price}{Free}<br />
25
  #_ATT{Dress Code}{Informal}<br />
26
- #_AVAILABLESEATS / #_SEATS
 
27
  </td>
28
  </tr>
29
  <tr>
30
  <th>Who? </th>
31
  <td>
32
- #_CONTACTNAME (aka #_CONTACTPERSON)<br />
33
- #_CONTACTEMAIL<br />
34
- #_CONTACTPHONE
 
 
35
  </td>
36
  </tr>
37
  <tr>
38
- <td colspan="2">
 
 
 
 
 
39
  <p>#_ADDBOOKINGFORM</p>
40
  <p>#_REMOVEBOOKINGFORM</p>
41
  </td>
@@ -43,23 +56,25 @@
43
  <tr>
44
  <th>Where? </th>
45
  <td>
46
- #_IMAGE
47
- <p>#_LOCATION, #_ADDRESS, #_TOWN
48
- <br/>
 
 
49
  Links - #_LOCATIONPAGEURL or #_LOCATIONURL or #_LOCATIONLINK
50
  </p>
51
- #_LOCEXCERPT
52
  <br />
53
- #_MAP
54
  <br />
55
  <h3>Upcoming Events at #_LOCATION</h3>
56
- #_NEXTEVENTS
57
  <br />
58
  <h3>Previous Events at #_LOCATION</h3>
59
- #_PASTEVENTS
60
  <br />
61
  <h3>All Events at #_LOCATION</h3>
62
- #_ALLEVENTS
63
  </td>
64
  </tr>
65
  </table>
11
  <th>What? </th>
12
  <td>
13
  <h3>#_NAME</h3>
14
+ <p>
15
+ Event ID : #_EVENTID<br />
16
+ Category Name : #_CATEGORY <br />
17
+ Category ID : #_CATEGORYID<br />
18
+ </p>
19
  #_NOTES
20
  </td>
21
  </tr>
22
  <tr>
23
  <th>
24
+ <strong>ATTRIBUTE EXAMPLES</strong>
25
  Price<br />
26
  Dress Code<br />
 
27
  </th>
28
  <td>
29
  #_ATT{Price}{Free}<br />
30
  #_ATT{Dress Code}{Informal}<br />
31
+ #_AVAILABLESPACES / #_SPACES<br />
32
+
33
  </td>
34
  </tr>
35
  <tr>
36
  <th>Who? </th>
37
  <td>
38
+ #_CONTACTAVATAR #_CONTACTNAME (aka #_CONTACTUSERNAME)<br />
39
+ User ID : #_CONTACTID<br />
40
+ Email : #_CONTACTEMAIL<br />
41
+ Phone : #_CONTACTPHONE<br />
42
+ URL : #_CONTACTPROFILEURL - #_CONTACTPROFILELINK<br />
43
  </td>
44
  </tr>
45
  <tr>
46
+ <th>Bookings</th>
47
+ <td>
48
+ Total Spaces : #_SPACES<br />
49
+ Booked Spaces : #_BOOKEDSPACES<br />
50
+ Available Spaces : #_AVAILABLESPACES<br />
51
+
52
  <p>#_ADDBOOKINGFORM</p>
53
  <p>#_REMOVEBOOKINGFORM</p>
54
  </td>
56
  <tr>
57
  <th>Where? </th>
58
  <td>
59
+ Location Image :
60
+ #_LOCATIONIMAGE
61
+ <p>
62
+ #_LOCATIONNAME, #_LOCATIONADDRESS, #_LOCATIONTOWN<br/>
63
+ ID - #_LOCATIONID<br />
64
  Links - #_LOCATIONPAGEURL or #_LOCATIONURL or #_LOCATIONLINK
65
  </p>
66
+ #_LOCATIONEXCERPT
67
  <br />
68
+ #_LOCATIONMAP
69
  <br />
70
  <h3>Upcoming Events at #_LOCATION</h3>
71
+ #_LOCATIONNEXTEVENTS
72
  <br />
73
  <h3>Previous Events at #_LOCATION</h3>
74
+ #_LOCATIONPASTEVENTS
75
  <br />
76
  <h3>All Events at #_LOCATION</h3>
77
+ #_LOCATIONALLEVENTS
78
  </td>
79
  </tr>
80
  </table>
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://wp-events-plugin.com
4
  Tags: events, manager, calendar, gigs, concert, maps, geotagging, rsvp
5
  Requires at least: 2.9
6
  Tested up to: 3.0.4
7
- Stable tag: 3.0.9
8
 
9
  Manage events and display them in your blog. Includes recurring events, location management, calendar, Google map integration, RSVP.
10
 
@@ -24,22 +24,19 @@ For more information visit the [Documentation Page](http://wp-events-plugin.com/
24
 
25
  == Installation ==
26
 
 
 
 
 
 
 
 
27
  = Installing or Upgrading from 2.x =
28
 
29
  1. Back up your database if upgrading is recommended, as with any plugin or wordpress upgrade.
30
  2. Upload the `events-manager` folder to the `/wp-content/plugins/` directory
31
  3. Activate the plugin through the 'Plugins' menu in WordPress
32
  4. Add events list or calendars following the instructions in the Usage section.
33
-
34
- = Upgrading from 1.* only =
35
-
36
- Events Manager 1.* adopters should:
37
-
38
- 1. backup the Wordpress database.
39
- 2. deactivate Events Manager 1.*
40
- 3. delete Events Managers 1.* and upload Events Manager 2.* to the server
41
- 4. activate Events Manager 2.*
42
- 5. Download and activate Events Manager 3.*
43
 
44
  == Usage ==
45
 
@@ -109,6 +106,23 @@ At this stage, Events Manager is only available in English and Italian. Yet, the
109
  3. The Events Manager Options page.
110
 
111
  == Change Log ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  = 3.0.9 =
113
  * Fixed small calendar discrepencies
114
  * added event and location single shortcodes
4
  Tags: events, manager, calendar, gigs, concert, maps, geotagging, rsvp
5
  Requires at least: 2.9
6
  Tested up to: 3.0.4
7
+ Stable tag: 3.0.91
8
 
9
  Manage events and display them in your blog. Includes recurring events, location management, calendar, Google map integration, RSVP.
10
 
24
 
25
  == Installation ==
26
 
27
+ Install Events Manager directly from your wordpress site.
28
+ 1. Go to Plugins > Add New in the admin area, and search for events manager
29
+ 2. Click install
30
+ 3. Activate it
31
+ 4. Done! You can start adding events straight away, although you may want to visit the [Documentation Pages](http://wp-events-plugin.com/documentation/).
32
+
33
+
34
  = Installing or Upgrading from 2.x =
35
 
36
  1. Back up your database if upgrading is recommended, as with any plugin or wordpress upgrade.
37
  2. Upload the `events-manager` folder to the `/wp-content/plugins/` directory
38
  3. Activate the plugin through the 'Plugins' menu in WordPress
39
  4. Add events list or calendars following the instructions in the Usage section.
 
 
 
 
 
 
 
 
 
 
40
 
41
  == Usage ==
42
 
106
  3. The Events Manager Options page.
107
 
108
  == Change Log ==
109
+ = 3.0.91 =
110
+ * Documentation finally up to date now!
111
+ * widget bug fixed
112
+ * added event permissions, so users can manage their own events/locations/categories
113
+ * improved event booking UI and management tools
114
+ * export CSV of bookings
115
+ * booking approvals added
116
+ * bookings can have individual notes
117
+ * calendar widget shows selected month if clicked on
118
+ * custom attributes field, for atts that don't need to be in a template (e.g. pdf file url)
119
+ * time limit for main events list and events widget (e.g. show events that occur within x months)
120
+ * default location
121
+ * default category
122
+ * added extra validation so event start date/times can't be after end date/time
123
+ * calendar navigation will pass on all arguments for following month (e.g. category, etc)
124
+ * small map balloon fix for some rare js conflicts
125
+
126
  = 3.0.9 =
127
  * Fixed small calendar discrepencies
128
  * added event and location single shortcodes
widgets/em-calendar.php CHANGED
@@ -17,8 +17,16 @@ class EM_Widget_Calendar extends WP_Widget {
17
  echo $instance['title'];
18
  echo $args['after_title'];
19
 
 
 
 
 
 
 
 
 
 
20
  //Our Widget Content
21
- $instance['month'] = date("m");
22
  echo '<div id="em-calendar-'.rand(100,200).'" class="em-calendar-wrapper">';
23
  echo EM_Calendar::output($instance);
24
  echo '</div>';
17
  echo $instance['title'];
18
  echo $args['after_title'];
19
 
20
+ //Shall we show a specific month?
21
+ if ( !empty($_REQUEST['calendar_day']) ) {
22
+ $date = explode('-', $_REQUEST['calendar_day']);
23
+ $instance['month'] = $date[1];
24
+ $instance['year'] = $date[0];
25
+ }else{
26
+ $instance['month'] = date("m");
27
+ }
28
+
29
  //Our Widget Content
 
30
  echo '<div id="em-calendar-'.rand(100,200).'" class="em-calendar-wrapper">';
31
  echo EM_Calendar::output($instance);
32
  echo '</div>';
widgets/em-events.php CHANGED
@@ -16,6 +16,12 @@ class EM_Widget extends WP_Widget {
16
  echo $args['before_title'];
17
  echo $instance['title'];
18
  echo $args['after_title'];
 
 
 
 
 
 
19
 
20
  $events = EM_Events::get($instance);
21
  echo "<ul>";
@@ -32,11 +38,10 @@ class EM_Widget extends WP_Widget {
32
  echo '<li>'.__('No events', 'dbem').'</li>';
33
  }
34
  if ( !empty($instance['all_events']) ){
35
- $events_link = (!empty($instance['all_events_link'])) ? em_get_link($instance['all_events_link']) : em_get_link(__('all events','dbem'));
36
  echo '<li>'.$events_link.'</li>';
37
  }
38
  echo "</ul>";
39
-
40
 
41
  echo $args['after_widget'];
42
  }
@@ -51,14 +56,11 @@ class EM_Widget extends WP_Widget {
51
  'limit' => 5,
52
  'format' => '#_LINKEDNAME<ul><li>#j #M #y</li><li>#_TOWN</li></ul>',
53
  'nolistwrap' => false,
54
- 'orderby' => 'start_date,start_time,name'
 
 
55
  );
56
- foreach($defaults as $key => $value){
57
- if( !empty($new_instance[$key]) ){
58
- $new_instance[$key] = $value;
59
- }
60
- }
61
- return $new_instance;
62
  }
63
 
64
  /** @see WP_Widget::form */
@@ -72,18 +74,6 @@ class EM_Widget extends WP_Widget {
72
  <label for="<?php echo $this->get_field_id('limit'); ?>"><?php _e('Number of events','dbem'); ?>: </label>
73
  <input type="text" id="<?php echo $this->get_field_id('limit'); ?>" name="<?php echo $this->get_field_name('limit'); ?>" size="3" value="<?php echo $instance['limit']; ?>" />
74
  </p>
75
- <!--
76
- <p>
77
- <label for="<?php echo $this->get_field_id('limit_time'); ?>"><?php _e('Time Limit','dbem'); ?>: </label><br/>
78
- <select id="<?php echo $this->get_field_id('time_scope'); ?>" name="<?php echo $this->get_field_name('time_scope'); ?>" >
79
- <option value="this-month" <?php echo (!empty($instance['time_scope']) && $instance['time_scope'] == 'this-month') ? 'selected="selected"':''; ?>><?php _e('This Month','dbem'); ?></option>
80
- <option value="two-months" <?php echo (!empty($instance['time_scope']) && $instance['time_scope'] == 'two-months') ? 'selected="selected"':''; ?>><?php _e('Next two months','dbem'); ?></option>
81
- <option value="three-months" <?php echo (!empty($instance['time_scope']) && $instance['time_scope'] == 'three-months') ? 'selected="selected"':''; ?>><?php _e('Next three month','dbem'); ?></option>
82
- <option value="six-months" <?php echo (!empty($instance['time_scope']) && $instance['time_scope'] == 'six-months') ? 'selected="selected"':''; ?>><?php _e('Next six month','dbem'); ?></option>
83
- <option value="twelve-months" <?php echo (!empty($instance['time_scope']) && $instance['time_scope'] == 'twelve-months') ? 'selected="selected"':''; ?>><?php _e('Next twelve month','dbem'); ?></option>
84
- </select>
85
- </p>
86
- -->
87
  <p>
88
  <label for="<?php echo $this->get_field_id('scope'); ?>"><?php _e('Scope of the events','dbem'); ?>:</label><br/>
89
  <select id="<?php echo $this->get_field_id('scope'); ?>" name="<?php echo $this->get_field_name('scope'); ?>" >
@@ -92,6 +82,28 @@ class EM_Widget extends WP_Widget {
92
  <option value="past" <?php echo ($instance['scope'] == 'past') ? 'selected="selected"':''; ?>><?php _e('Past events','dbem'); ?></option>
93
  </select>
94
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  <p>
96
  <label for="<?php echo $this->get_field_id('order'); ?>"><?php _e('Order By','dbem'); ?>: </label>
97
  <select id="<?php echo $this->get_field_id('orderby'); ?>" name="<?php echo $this->get_field_name('orderby'); ?>">
16
  echo $args['before_title'];
17
  echo $instance['title'];
18
  echo $args['after_title'];
19
+
20
+ /*Compute event range*/
21
+ if ( is_numeric($instance['time_limit']) && $instance['time_limit'] > 0 ){
22
+ $instance['scope'] = date('Y-m-d').",".date('Y-m-t', strtotime('+'.($instance['time_limit']-1).' month'));
23
+ }
24
+ /*END*/
25
 
26
  $events = EM_Events::get($instance);
27
  echo "<ul>";
38
  echo '<li>'.__('No events', 'dbem').'</li>';
39
  }
40
  if ( !empty($instance['all_events']) ){
41
+ $events_link = (!empty($instance['all_events_text'])) ? em_get_link($instance['all_events_text']) : em_get_link(__('all events','dbem'));
42
  echo '<li>'.$events_link.'</li>';
43
  }
44
  echo "</ul>";
 
45
 
46
  echo $args['after_widget'];
47
  }
56
  'limit' => 5,
57
  'format' => '#_LINKEDNAME<ul><li>#j #M #y</li><li>#_TOWN</li></ul>',
58
  'nolistwrap' => false,
59
+ 'orderby' => 'start_date,start_time,name',
60
+ 'all_events' => 0,
61
+ 'all_events_text' => __('all events', 'dbem')
62
  );
63
+ return array_merge($defaults, $new_instance);
 
 
 
 
 
64
  }
65
 
66
  /** @see WP_Widget::form */
74
  <label for="<?php echo $this->get_field_id('limit'); ?>"><?php _e('Number of events','dbem'); ?>: </label>
75
  <input type="text" id="<?php echo $this->get_field_id('limit'); ?>" name="<?php echo $this->get_field_name('limit'); ?>" size="3" value="<?php echo $instance['limit']; ?>" />
76
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
77
  <p>
78
  <label for="<?php echo $this->get_field_id('scope'); ?>"><?php _e('Scope of the events','dbem'); ?>:</label><br/>
79
  <select id="<?php echo $this->get_field_id('scope'); ?>" name="<?php echo $this->get_field_name('scope'); ?>" >
82
  <option value="past" <?php echo ($instance['scope'] == 'past') ? 'selected="selected"':''; ?>><?php _e('Past events','dbem'); ?></option>
83
  </select>
84
  </p>
85
+ <p>
86
+ <label for="<?php echo $this->get_field_id('time_limit'); ?>"><?php _e('Time Limit','dbem'); ?>: </label><br/>
87
+ <select id="<?php echo $this->get_field_id('time_limit'); ?>" name="<?php echo $this->get_field_name('time_limit'); ?>" >
88
+ <option value="no-limit" <?php echo ( empty($instance['time_limit']) ) ? 'selected="selected"':''; ?>><?php _e('no limit','dbem'); ?></option>
89
+ <option value="1" <?php echo (!empty($instance['time_limit']) && $instance['time_limit'] == '1') ? 'selected="selected"':''; ?>><?php _e('This month','dbem'); ?></option>
90
+ <option value="2" <?php echo (!empty($instance['time_limit']) && $instance['time_limit'] == '2') ? 'selected="selected"':''; ?>><?php _e('Next two months','dbem'); ?></option>
91
+ <option value="3" <?php echo (!empty($instance['time_limit']) && $instance['time_limit'] == '3') ? 'selected="selected"':''; ?>><?php _e('Next three month','dbem'); ?></option>
92
+ <option value="6" <?php echo (!empty($instance['time_limit']) && $instance['time_limit'] == '6') ? 'selected="selected"':''; ?>><?php _e('Next six month','dbem'); ?></option>
93
+ <option value="12" <?php echo (!empty($instance['time_limit']) && $instance['time_limit'] == '12') ? 'selected="selected"':''; ?>><?php _e('Next twelve month','dbem'); ?></option>
94
+ </select>
95
+ </p>
96
+ <script type="text/javascript">
97
+ jQuery(document).ready( function($) {
98
+ $('#<?php echo $this->get_field_id('scope'); ?>').change(function(e){
99
+ if( $(this).val() == 'future' ){
100
+ $('#<?php echo $this->get_field_id('time_limit'); ?>').parent().show();
101
+ }else{
102
+ $('#<?php echo $this->get_field_id('time_limit'); ?>').parent().hide();
103
+ }
104
+ }).trigger('change');
105
+ });
106
+ </script>
107
  <p>
108
  <label for="<?php echo $this->get_field_id('order'); ?>"><?php _e('Order By','dbem'); ?>: </label>
109
  <select id="<?php echo $this->get_field_id('orderby'); ?>" name="<?php echo $this->get_field_name('orderby'); ?>">
widgets/em-locations.php CHANGED
@@ -47,7 +47,7 @@ class EM_Locations_Widget extends WP_Widget {
47
  'format' => '#_LOCATIONLINK<ul><li>#_ADDRESS</li><li>#_TOWN</li></ul>'
48
  );
49
  foreach($defaults as $key => $value){
50
- if($new_instance[$key] == ''){
51
  $new_instance[$key] = $value;
52
  }
53
  }
47
  'format' => '#_LOCATIONLINK<ul><li>#_ADDRESS</li><li>#_TOWN</li></ul>'
48
  );
49
  foreach($defaults as $key => $value){
50
+ if( empty($new_instance[$key]) ){
51
  $new_instance[$key] = $value;
52
  }
53
  }