static function handle_subscription_shortcode($atts, $content = null)
 {
     extract(shortcode_atts(array('title' => 'Subscribe to calendar', 'type' => 'google', 'class' => '', 'id' => '', 'style' => '', 'category' => false, 'venue' => false), $atts, 'eo_subscribe'));
     if ($category) {
         $url = eo_get_event_category_feed($category);
     } elseif ($venue) {
         $url = eo_get_event_venue_feed($venue);
     } else {
         $url = eo_get_events_feed();
     }
     $class = $class ? 'class="' . esc_attr($class) . '"' : false;
     $title = $title ? 'title="' . esc_attr($title) . '"' : false;
     $style = $style ? 'style="' . esc_attr($style) . '"' : false;
     $id = $id ? 'id="' . esc_attr($id) . '"' : false;
     if (strtolower($type) == 'webcal') {
         $url = str_replace('http://', 'webcal://', $url);
     } elseif (strtolower($type) == 'ical') {
         //Do nothing
     } else {
         $url = add_query_arg('cid', urlencode($url), 'http://www.google.com/calendar/render');
     }
     $html = '<a href="' . $url . '" target="_blank" ' . $class . ' ' . $title . ' ' . $id . ' ' . $style . '>' . $content . '</a>';
     return $html;
 }
 /**
  * This is called in the register_settings method.
  * Once the tabs have been registered, and sections added to each tabbed page, we now add the fields for each section
  * A section should have the form {tab_id}._{identifer} (e.g. general_main, or gateways_google). 
  * 
  * @param $tab_id - the string identifer for the tab (given in $this->tabs as the key).
  * @uses add_settings_field
  */
 function add_fields($tab_id)
 {
     switch ($tab_id) {
         case 'general':
             /* General - main */
             add_settings_field('supports', __('Select which features events should support', 'eventorganiser'), 'eventorganiser_checkbox_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'supports', 'checked' => eventorganiser_get_option('supports'), 'options' => array('author' => __('Organiser', 'eventorganiser') . ' ( ' . __('Author', 'eventorganiser') . ' )', 'thumbnail' => __('Thumbnail'), 'excerpt' => __('Excerpt'), 'custom-fields' => __('Custom Fields'), 'comments' => __('Comments'), 'revisions' => __('Revisions'), 'eventtag' => __('Event Tags', 'eventorganiser')), 'name' => 'eventorganiser_options[supports]'));
             add_settings_field('showpast', __("Show past events:", 'eventorganiser'), 'eventorganiser_checkbox_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'showpast', 'name' => 'eventorganiser_options[showpast]', 'options' => 1, 'checked' => eventorganiser_get_option('showpast'), 'help' => __("Display past events on calendars, event lists and archives (this can be over-ridden by shortcode attributes and widget options).", 'eventorganiser')));
             add_settings_field('addtomenu', __("Add an 'events' link to the navigation menu:", 'eventorganiser'), array($this, 'menu_option'), 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'addtomenu'));
             add_settings_field('dateformat', __('Date Format:', 'eventorganiser'), 'eventorganiser_select_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'dateformat', 'selected' => eventorganiser_get_option('dateformat'), 'name' => 'eventorganiser_options[dateformat]', 'options' => array('d-m-Y' => __('dd-mm-yyyy', 'eventorganiser'), 'm-d-Y' => __('mm-dd-yyyy', 'eventorganiser'), 'Y-m-d' => __('yyyy-mm-dd', 'eventorganiser')), 'help' => __("This alters the default format for inputting dates.", 'eventorganiser')));
             add_settings_field('showpast', __("Show past events:", 'eventorganiser'), 'eventorganiser_checkbox_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'showpast', 'name' => 'eventorganiser_options[showpast]', 'options' => 1, 'checked' => eventorganiser_get_option('showpast'), 'help' => __("Display past events on calendars, event lists and archives (this can be over-ridden by shortcode attributes and widget options).", 'eventorganiser')));
             add_settings_field('group_events', __("Group occurrences", 'eventorganiser'), 'eventorganiser_checkbox_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'group_events', 'name' => 'eventorganiser_options[group_events]', 'options' => 'series', 'checked' => eventorganiser_get_option('group_events'), 'help' => __("If selected only one occurrence of an event will be displayed on event lists and archives (this can be over-ridden by shortcode attributes and widget options.", 'eventorganiser')));
             add_settings_field('runningisnotpast', __("Are current events past?", 'eventorganiser'), 'eventorganiser_select_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'runningisnotpast', 'name' => 'eventorganiser_options[runningisnotpast]', 'selected' => eventorganiser_get_option('runningisnotpast', 0), 'options' => array('0' => __('No', 'eventorganiser'), '1' => __('Yes', 'eventorganiser')), 'help' => __("If 'no' is selected, an occurrence of an event is only past when it has finished. Otherwise, an occurrence is considered 'past' as soon as it starts.", 'eventorganiser')));
             add_settings_field('deleteexpired', __("Delete expired events:", 'eventorganiser'), 'eventorganiser_checkbox_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'deleteexpired', 'name' => 'eventorganiser_options[deleteexpired]', 'options' => 1, 'checked' => eventorganiser_get_option('deleteexpired'), 'help' => __("If selected the event will be automatically trashed 24 hours after the last occurrence finishes.", 'eventorganiser')));
             add_settings_field('feed', __("Enable events ICAL feed:", 'eventorganiser'), 'eventorganiser_checkbox_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'feed', 'name' => 'eventorganiser_options[feed]', 'options' => 1, 'checked' => eventorganiser_get_option('feed'), 'help' => sprintf(__('If selected, visitors can subscribe to your events with the url: %s', 'eventorganiser'), '<code>' . eo_get_events_feed() . '</code>')));
             add_settings_field('excludefromsearch', __("Exclude events from searches:", 'eventorganiser'), 'eventorganiser_checkbox_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'excludefromsearch', 'name' => 'eventorganiser_options[excludefromsearch]', 'options' => 1, 'checked' => eventorganiser_get_option('excludefromsearch')));
             add_settings_field('templates', __("Enable templates:", 'eventorganiser'), 'eventorganiser_checkbox_field', 'eventorganiser_' . $tab_id, $tab_id . '_templates', array('label_for' => 'templates', 'name' => 'eventorganiser_options[templates]', 'options' => 1, 'checked' => eventorganiser_get_option('templates'), 'help' => __("For each of the pages, the corresponding template is used. To use your own template simply give it the same name and store in your theme folder. By default, if Event Organiser cannot find a template in your theme directory, it will use its own default template. To prevent this, uncheck this option. WordPress will then decide which template from your theme's folder to use.", 'eventorganiser') . sprintf("<p><strong> %s </strong><code>archive-event.php</code></p>\n\t\t\t\t\t\t\t\t\t\t\t<p><strong> %s </strong><code>single-event.php</code></p>\n\t\t\t\t\t\t\t\t\t\t\t<p><strong> %s </strong><code>taxonomy-event-venue.php</code></p>\n\t\t\t\t\t\t\t\t\t\t\t<p><strong> %s </strong><code>taxonomy-event-category.php</code></p>", __("Events archives:", 'eventorganiser'), __("Event page:", 'eventorganiser'), __("Venue page:", 'eventorganiser'), __("Events Category page:", 'eventorganiser')) . sprintf(__("For more information see documentation <a href='%s'>on editing the templates</a>", 'eventorganiser'), 'http://docs.wp-event-organiser.com/theme-integration')));
             add_settings_field('disable_css', __("Disable CSS:", 'eventorganiser'), 'eventorganiser_checkbox_field', 'eventorganiser_' . $tab_id, $tab_id . '_templates', array('label_for' => 'disable_css', 'name' => 'eventorganiser_options[disable_css]', 'options' => 1, 'checked' => eventorganiser_get_option('disable_css'), 'help' => __('Check this option to prevent any stylesheets from Event Organiser being loaded on the front-end', 'eventorganiser')));
             break;
         case 'permissions':
             break;
         case 'permalinks':
             add_settings_field('prettyurl', __("Enable event pretty permalinks:", 'eventorganiser'), 'eventorganiser_checkbox_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'prettyurl', 'name' => 'eventorganiser_options[prettyurl]', 'options' => 1, 'checked' => eventorganiser_get_option('prettyurl'), 'help' => __("If you have pretty permalinks enabled, select to have pretty premalinks for events.", 'eventorganiser')));
             $home_url = home_url();
             add_settings_field('url_event', __("Event (single)", 'eventorganiser'), 'eventorganiser_text_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'url_event', 'name' => 'eventorganiser_options[url_event]', 'class' => 'regular-text', 'value' => eventorganiser_get_option('url_event'), 'help' => "<code>{$home_url}/<strong>" . eventorganiser_get_option('url_event') . "</strong>/[event_slug]</code>"));
             add_settings_field('url_events', __("Events page", 'eventorganiser'), 'eventorganiser_text_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'url_events', 'name' => 'eventorganiser_options[url_events]', 'class' => 'regular-text', 'value' => eventorganiser_get_option('url_events'), 'help' => "<code>{$home_url}/<strong>" . eventorganiser_get_option('url_events') . "</strong></code>"));
             $now = new DateTime();
             $base_url = eventorganiser_get_option('url_events') . "/<strong>" . eventorganiser_get_option('url_on') . "</strong>";
             add_settings_field('url_on', __("Event (date archive)", 'eventorganiser'), 'eventorganiser_text_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'url_on', 'name' => 'eventorganiser_options[url_on]', 'class' => 'regular-text', 'value' => eventorganiser_get_option('url_on'), 'help' => "<code>{$home_url}/{$base_url}/{$now->format('Y')}</code> " . __('Year archive', 'eventorganiser') . '<br>' . "<code>{$home_url}/{$base_url}/{$now->format('Y/m')}</code>" . __('Month archive', 'eventorganiser') . '<br>' . "<code>{$home_url}/{$base_url}/{$now->format('Y/m/d')}</code>" . __('Day archive', 'eventorganiser')));
             $supports = eventorganiser_get_option('supports');
             if (in_array('event-venue', $supports)) {
                 add_settings_field('url_venue', __("Venues", 'eventorganiser'), 'eventorganiser_text_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'url_venue', 'name' => 'eventorganiser_options[url_venue]', 'class' => 'regular-text', 'value' => eventorganiser_get_option('url_venue'), 'help' => "<code>{$home_url}/<strong>" . eventorganiser_get_option('url_venue') . "</strong>/[venue_slug]</code>"));
             }
             add_settings_field('url_cat', __("Event Categories", 'eventorganiser'), 'eventorganiser_text_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'url_cat', 'name' => 'eventorganiser_options[url_cat]', 'class' => 'regular-text', 'value' => eventorganiser_get_option('url_cat'), 'help' => "<code>{$home_url}/<strong>" . eventorganiser_get_option('url_cat') . "</strong>/[event_cat_slug]</code>"));
             add_settings_field('url_tag', __("Event Tags", 'eventorganiser'), 'eventorganiser_text_field', 'eventorganiser_' . $tab_id, $tab_id, array('label_for' => 'url_tag', 'name' => 'eventorganiser_options[url_tag]', 'class' => 'regular-text', 'value' => eventorganiser_get_option('url_tag'), 'help' => "<label><code>{$home_url}/<strong>" . eventorganiser_get_option('url_tag') . "</strong>/[event_tag_slug]</code></label>"));
             break;
     }
 }
    function display_general()
    {
        ?>

	<table class="form-table">
	<tr>
		<th><?php 
        _e('Select which features events should support', 'eventorganiser');
        ?>
:</th>
		<td>
	<table>
	<tr>
	<?php 
        $counter = 1;
        foreach (self::$sup_array as $supp_display => $supp) {
            echo '<td><input type="checkbox" name="eventorganiser_options[supports][]" value="' . $supp . '" ' . checked(true, in_array($supp, self::$settings['supports']), false) . ' />' . $supp_display . '</td>';
            if ($counter == 4) {
                echo '</tr><tr>';
            }
            $counter++;
        }
        self::$settings['eventtag'] = empty(self::$settings['eventtag']) ? 0 : 1;
        ?>

		<td><input type="checkbox" name="eventorganiser_options[eventtag]" value="1" <?php 
        checked('1', self::$settings['eventtag']);
        ?>
/><?php 
        _e("Event Tags", 'eventorganiser');
        ?>
</td>
	</tr>
	</table>
		</td>
	</tr>
	<tr>
		<th><?php 
        _e("Add an 'events' link to the navigation menu:", 'eventorganiser');
        ?>
</th>
		<td>
			<?php 
        self::$settings['addtomenu'] = !empty(self::$settings['addtomenu']) ? self::$settings['addtomenu'] : 0;
        ?>
			<?php 
        $menus = get_terms('nav_menu');
        ?>
				<select  name="eventorganiser_options[addtomenu]">
					<option  <?php 
        selected(0, self::$settings['addtomenu']);
        ?>
 value="0"><?php 
        _e('Do not add to menu', 'eventorganiser');
        ?>
 </option>
				<?php 
        foreach ($menus as $menu) {
            ?>
					<option  <?php 
            selected($menu->slug, self::$settings['addtomenu']);
            ?>
 value="<?php 
            echo $menu->slug;
            ?>
"><?php 
            echo $menu->name;
            ?>
 </option>
				<?php 
        }
        ?>
					<option  <?php 
        selected(1, self::$settings['addtomenu']);
        ?>
 value="1"><?php 
        _e('Page list (fallback)', 'eventorganiser');
        ?>
</option>
				</select>

			<?php 
        self::$settings['navtitle'] = !empty(self::$settings['navtitle']) ? self::$settings['navtitle'] : __('Events', 'eventorganiser');
        ?>
			<?php 
        self::$settings['menu_item_db_id'] = !empty(self::$settings['menu_item_db_id']) ? (int) self::$settings['menu_item_db_id'] : 0;
        ?>

			<input type="hidden" name ="eventorganiser_options[menu_item_db_id]" value="<?php 
        echo self::$settings['menu_item_db_id'];
        ?>
" />
			<input type="text" name="eventorganiser_options[navtitle]" value="<?php 
        echo self::$settings['navtitle'];
        ?>
" />
			<?php 
        _e("(This may not work with some themes):", 'eventorganiser');
        ?>
		</td>
	</tr>
	<tr>
		<th><?php 
        _e('Date Format:', 'eventorganiser');
        ?>
</th>
		<td>
			<label>
			<select  name="eventorganiser_options[dateformat]">
				<option  <?php 
        selected('dd-mm', self::$settings['dateformat']);
        ?>
 value="dd-mm"><?php 
        _e('dd-mm-yyyy', 'eventorganiser');
        ?>
</option>
				<option  <?php 
        selected('mm-dd', self::$settings['dateformat']);
        ?>
 value="mm-dd"><?php 
        _e('mm-dd-yyyy', 'eventorganiser');
        ?>
</option>
			</select>
			<?php 
        _e("This alters the default format for inputting dates.", 'eventorganiser');
        ?>
			</label>
		</td>
	</tr>
	<tr>
		<th><?php 
        _e("Show past events:", 'eventorganiser');
        ?>
</th>
		<td> <label>
				<input type="checkbox" name="eventorganiser_options[showpast]" value="1" <?php 
        checked('1', self::$settings['showpast']);
        ?>
/>
				<?php 
        _e("Display past events on calendars, event lists and archives (this can be over-ridden by shortcode attributes and widget options).", 'eventorganiser');
        ?>
		</label></td>
	</tr>
	<tr>
		<th><?php 
        _e("Group occurrences", 'eventorganiser');
        ?>
:</th>
		<?php 
        self::$settings['group_events'] = isset(self::$settings['group_events']) ? self::$settings['group_events'] : '';
        ?>
		<td> <label>
				<input type="checkbox" name="eventorganiser_options[group_events]" value="series" <?php 
        checked('series', self::$settings['group_events']);
        ?>
/>
				<?php 
        _e("If selected only one occurrence of an event will be displayed on event lists and archives (this can be over-ridden by shortcode attributes and widget options).", 'eventorganiser');
        ?>
		</label></td>
	</tr>
	<tr>
		<th><?php 
        _e("Are current events past?", 'eventorganiser');
        ?>
</th>
		<td> 
			<?php 
        $runningsisnotpast = empty(self::$settings['runningisnotpast']) ? 0 : self::$settings['runningisnotpast'];
        ?>
				<input type="radio" id="whatispast-0" name="eventorganiser_options[runningisnotpast]" value="0" <?php 
        checked('0', $runningsisnotpast);
        ?>
/>
				<label for="whatispast-0"><?php 
        _e('Yes');
        ?>
</label>
				<input type="radio" id="whatispast-1" name="eventorganiser_options[runningisnotpast]" value="1" <?php 
        checked('1', $runningsisnotpast);
        ?>
/>
				<label for="whatispast-1"><?php 
        _e('No');
        ?>
</label></br>
				<?php 
        _e("If 'no' is selected, an occurrence of an event is only past when it has finished. Otherwise, an occurrence is considered 'past' as soon as it starts.", 'eventorganiser');
        ?>
		</td>
	</tr>
	<tr>
		<th><?php 
        _e("Delete expired events:", 'eventorganiser');
        ?>
</th>
		<td> <label>
				<input type="checkbox" name="eventorganiser_options[deleteexpired]" value="1" <?php 
        checked('1', self::$settings['deleteexpired']);
        ?>
/>
				<?php 
        _e("If selected the event will be automatically trashed 24 hours after the last occurrence finishes.", 'eventorganiser');
        ?>
		</label></td>
	</tr>
	<tr>
		<th><?php 
        _e("Enable events ICAL feed:", 'eventorganiser');
        ?>
</th>
		<td> 
				<input type="checkbox" name="eventorganiser_options[feed]" value="1" <?php 
        checked('1', self::$settings['feed']);
        ?>
/>
				<label> <?php 
        printf(__('If selected, visitors can subscribe to your events with the url: %s', 'eventorganiser'), '<code>' . eo_get_events_feed() . '</code>');
        ?>
</label>
		</td>
	</tr>

	<tr>
		<th><?php 
        _e("Exclude events from searches:", 'eventorganiser');
        ?>
</th>
		<td> <label>
				<input type="checkbox" name="eventorganiser_options[excludefromsearch]" value="1" <?php 
        checked('1', self::$settings['excludefromsearch']);
        ?>
/>
		</label></td>
	</tr>
	<tr>
		<th><?php 
        _e("Enable templates:", 'eventorganiser');
        ?>
</th>
		<td><input type="checkbox" name="eventorganiser_options[templates]" value="1" <?php 
        checked('1', self::$settings['templates']);
        ?>
/>
		<?php 
        _e("For each of the pages, the corresponding template is used. To use your own template simply give it the same name and store in your theme folder. By default, if Event Organiser cannot find a template in your theme directory, it will use its own default template. To prevent this, uncheck this option. WordPress will then decide which template from your theme's folder to use.", 'eventorganiser');
        ?>
		<p>
			<strong><?php 
        _e("Events archives:", 'eventorganiser');
        ?>
</strong><code>archive-event.php</code>
		</p>
		<p>
			<strong><?php 
        _e("Event page:", 'eventorganiser');
        ?>
</strong>	<code>single-event.php</code>
		</p>
		<p>
			<strong><?php 
        _e("Venue page:", 'eventorganiser');
        ?>
</strong> <code>venue-template.php</code>
		</p>
		<p>
			<strong><?php 
        _e("Events Category page:", 'eventorganiser');
        ?>
</strong>	<code>taxonomy-event-category.php</code>
		</p>
		</td>
	</tr>

</table>
	<?php 
    }