{"id":2512,"date":"2008-02-13T08:49:41","date_gmt":"2008-02-13T08:49:41","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/events-category\/"},"modified":"2009-08-21T02:47:11","modified_gmt":"2009-08-21T02:47:11","slug":"events-category","status":"closed","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/events-category\/","author":186678,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.4","stable_tag":"0.4","tested":"2.6.2","requires":"","requires_php":"","requires_plugins":"","header_name":"Events Category","header_author":"Weston Ruter","header_description":"","assets_banners_color":"","last_updated":"2009-08-21 02:47:11","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"http:\/\/wordpress.org\/extend\/plugins\/events-category\/","header_author_uri":"http:\/\/weston.ruter.net\/","rating":0,"author_block_rating":0,"active_installs":10,"downloads":6428,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description"],"tags":[],"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.4"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[416,1486,166],"plugin_category":[40],"plugin_contributors":[78438],"plugin_business_model":[],"class_list":["post-2512","plugin","type-plugin","status-closed","hentry","plugin_tags-calendar","plugin_tags-events","plugin_tags-posts","plugin_category-calendar-and-events","plugin_contributors-westonruter","plugin_committers-gilzow","plugin_committers-westonruter"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/events-category.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><em>Notice: This plugin is not being actively maintained. Other priorities have arisen which have forced development to discontinue. Being open source and free, you are of course free to take the code and improve upon it; if you are a developer and would like to be added as a commiter to this plugin, please <a href=\"http:\/\/weston.ruter.net\/contact\/\">contact me<\/a>.<\/em><\/p>\n\n<p>Seamless event calendar solution which extends the basic WordPress functionality to enable future-dated posts\nto be listed within the blog chronology when they are assigned to a particular post category. The a future-dated post's timestamp\nis used as the time stamp. Upcoming events widget included; includes iCal feed. HTML output contains hCalendar, hCard, geo, and adr\nmicroformats.<\/p>\n\n<h4>Quick Start<\/h4>\n\n<ol>\n<li>Activate the plugin<\/li>\n<li>Create new posts in the \"Events\" category<\/li>\n<li>Add the Upcoming Events widget to the sidebar<\/li>\n<\/ol>\n\n<h4>How it works<\/h4>\n\n<p>WordPress is designed to serve posts arranged in a chronological order. Because of this\nand because the post is such a fundamental building component of WordPress, it only makes\nsince that an Event Calendar solution for WordPress should take advantage of its core functionality.\nAt the most fundamental level, this plugin enables posts to be used as events by automatically publishing\nany future-dated posts that reside inside of a specific category and its subcategories: this is the \"Events Category\".<\/p>\n\n<p>Since events are merely future-dated posts, they may be browsed using WordPress's chronological archives.\nPretty permalinks to these event posts which contain the common year\/month\/day structure are intuatively\nsemantic: the URL to the event itself indicates the event's time. Since WordPress by default displays the future-most\nposts first in a descending-chronological order, the behavior of the index pages under in the events category was changed.\nA new query variable, <code>eventscategory-position<\/code>, is introduced which indicates the current position in the timeline.\nWhen serving the root of a category, this query variable is set to \"0\", which means that the upcoming events will be shown in ascending order.\nIf there are more upcoming events than what is allowed to show per page, then there is a link generated with the usual <code>previous_posts_link()<\/code> (yes,\nthe name is unintuitive, but this is normal for WordPress). The second page of future events\nwould have <code>eventscategory-position<\/code> set to \"1\", and the third page \"2\", and so on.<\/p>\n\n<p>If there are events that have already passed, they can be seen by clicking the link generated by <code>next_posts_link()<\/code>.\nUnlike future events which are presented in ascending order, past events are presented in descending order. The first page of past\nevents has <code>eventscategory-position<\/code> set to \"-1\", the second page to \"-2\", and so on. Basically, all that\n    eventscategory-position does is it replaces the <code>paged<\/code> paramater, and conceptually it shifts the <code>paged<\/code> paramater.<\/p>\n\n<p>As already mentioned, the landing page for the events category lists the next upcoming events, that is, the first page of future results.\nWhen pretty permalinks are enabled, on the second page of future results, the URL would appear as <code>\/category\/events\/future\/2\/<\/code>\n(<code>\/category\/events\/future\/1\/<\/code> and <code>\/category\/events\/future\/<\/code> and <code>\/category\/events\/<\/code> all refer to the same\npage of results where <code>eventscategory-position<\/code> is \"0\"). Likewise, on the first page of past events, the URL would appear as\n    \/category\/events\/past\/ (<code>\/category\/events\/past\/1\/<\/code> is equivalent where <code>eventscategory-position<\/code> is \"-1\");\nthe second page of past events would appear as <code>\/category\/events\/past\/2\/<\/code> and so on.<\/p>\n\n<p>Note that since all events are posts, the default posts page and feed will filter out all posts dated after the current time;\notherwise all of your future posts will fill the first pages of your results.<\/p>\n\n<h4>Creating a new event<\/h4>\n\n<p>Creating a new event is just creating a new post and assigning it to the \"Events\" category (or a subcategory under it). You may rename this category to something else after\ninitially activiating the plugin. Once you select the \"Events\" category for the post, additional controls will appear asking for the necessary\ninformation to create an event, including the start date-time and end-date time, and the location.<\/p>\n\n<h4>Upcoming Events Widget<\/h4>\n\n<p>Multiple upcoming events widgets may be added to your sidebar(s), and each one may be customized to show only certain categories of events,\nto show a specified number of posts, to include the location, and to customize the date-time format and the address format.\nThe feed links will appear if you are showing only one category.<\/p>\n\n<h4>Template Tags and Data Formatting<\/h4>\n\n<p>The following template tags are introduced:<\/p>\n\n<ul>\n<li><code>eventscategory_get_the_time($dt_format = '')<\/code> -- prints the time <\/li>\n<li><code>eventscategory_the_time($dt_format = '')<\/code> -- echos the preceding function<\/li>\n<li><code>eventscategory_get_the_location($before = '', $after = '', $adr_format = '')<\/code> -- if no location is provided, nothing is returned<\/li>\n<li><code>eventscategory_the_location($before = '', $after = '', $adr_format = '')<\/code> -- echos the preceding function<\/li>\n<\/ul>\n\n<p>The <code>$dt_format<\/code> (date-time format) is a hybrid version of the format accepted by PHP's date() function.\nFormat characters which are enclosed in brackets are removed (along with other characters) if their presence adds no new information.\nSee the following example date format; the event end date-time is enclosed in curly brackets, in which the first square-bracketted string\nis the separator between the two date-times:<\/p>\n\n<pre><code>F jS, [Y @] g[:i][a]{[ - ][F ][j][S, ][Y,] g[:i]a} T\n<\/code><\/pre>\n\n<p>The <code>$adr_format<\/code> (address format) is a string incorporating adr microformat class names:<\/p>\n\n<pre><code>[%street-address%]\\n[%extended-address%]\\n[%locality%][, %region%][ %postal-code%]\\n[%country-name%]\n<\/code><\/pre>\n\n<p>The HTML output from these functions is tagged using hCalendar, hCard, geo, and adr microformats.\nThe default format strings used by these functions can be modified via the Upcoming Events widget configuration,\nor via the main Events Category options page; the formats modified in these sections are independent of each other,\nso you can use a more concise date format in the widget, but have a more verbose format when calling\n    eventscategory_the_time() elsewhere.<\/p>\n\n<h4>Displaying Event List: Sample category.php Template<\/h4>\n\n<p>You can determine if the user is currently seeing future posts if the query variable <code>eventscategory-position<\/code> is less than zero.\nIf it is equal to zero then they are in the present time, meaning the next upcoming events are shown; if it greater than zero, then\nsome page of future events is being viewed. Please locate the file <code>example-templates\/category.php<\/code> in the plugin.<\/p>\n\n<h4>Displaying an Event: Sample single.php Template<\/h4>\n\n<p>The following example includes hCalendar and other microformats if the post being viewed is an event.\nPlease locate the file <code>example-templates\/single.php<\/code> in the plugin.<\/p>\n\n<h4>Changelog<\/h4>\n\n<p><em>2008-10-10: 0.4<\/em>\n* Large re-write and re-development for WordPress 2.6<\/p>\n\n<p><em>2008-02-13: 0.1 (beta)<\/em><\/p>\n\n<ul>\n<li><code>is_events_category()<\/code> now accepts arrays of category IDs or category objects so that <code>is_events_category(get_the_category())<\/code> can be used in the single.php template.<\/li>\n<li>Future events posts now no longer appear on the default posts page nor in the main posts feed.<\/li>\n<li>Event feeds (RSS2 and iCal) are now automatically added to each page.<\/li>\n<li>Event location in iCal feed has been improved<\/li>\n<\/ul>\n\n<p><em>2008-02-12: 0.1 (alpha)<\/em><\/p>\n\n<ul>\n<li>Initial version released<\/li>\n<\/ul>\n\n<h4>Todo<\/h4>\n\n<ol>\n<li>Seconds should be forbidden in the format, because if the minutes are hidden, the seconds will look like minutes? Or we can only remove the [i] if the [s] is 0<\/li>\n<li>Tabbing among the events category tabs needs to be resolved (hitting tab from title should go to the start date)<\/li>\n<li>Javascript validation of data needed, including ensuring that second date and time should maintain diff from first when the first is modified<\/li>\n<li>??Category count is broken in Manage Categories page as well as Posts Manage page: Category post count incorrect when in admin managing posts<\/li>\n<li>Timezones and daylight savings time\n\n<ol>\n<li>Setting time at the beginning and end of daylight savings time is buggy.<\/li>\n<li>Start and end date-time microformats not currently working with daylight savings time<\/li>\n<li>Should we automatically change gmt_offset when DST starts or ends? We could just do set_option(gmt_offset, date('Z')\/3600) after <\/li>\n<li>We should always use gmt_post_date - post_date to get the gmt_offset; when saving a post in daylight savings, we'll add\/subtract subtract one from gmt_offset<\/li>\n<li>Should we be able to specify the timezone that the user is in? with putenv(TZ=) or date_default_timezone_set()<\/li>\n<li>Verify conversions: from browser form to PHP handler to database to the_time and finally back to the browser form again; verify consistency and validity for timezones and DST<\/li>\n<li>SOLUTION: Allow user to set the offset each time, and upon save_post, change the gmt_post_date to correspond to the user-defined offset<\/li>\n<li>save event-gmt-offset in postmeta<\/li>\n<li>Present a list of all timezones\/offsets for which the user's timezone is automatically selected<\/li>\n<li>Client-logic determines whether the start or end-date are DST: problem: how will server know when DST? If we have\nthe start time the gmt_date (start - gmt-offset), how do we determine if start time + duration is DST or not DST?<\/li>\n<\/ol><\/li>\n<li>Add external iCal feeds to display\n\n<ol>\n<li>Be able to assign all posts in a feed to a category<\/li>\n<li>Note that we need to store in postmeta the post-event's source feed and unique identifier<\/li>\n<li>Do iCal feeds generally keep all feeds from all time? If not, then how do we know when an event was deleted or just stopped from being shown?<\/li>\n<li>Disable comments for imported feeds?<\/li>\n<li>Disable editing\/deleting of imported events<\/li>\n<li>Who should be assigned as the author of these imported posts? By default: admin; but provide drop down to choose<\/li>\n<\/ol><\/li>\n<li>Add 'category' field to microformat... <\/li>\n<li><strong>Significant feature:<\/strong> Recurring Events\n\n<ol>\n<li>Once recurring events are supported, we'll have to modify the post-lists in Manage Posts to make them more navigable<\/li>\n<\/ol><\/li>\n<li>??Option to filter the_time to include the beginning and end dates, that is, the results from eventscategory_the_time... and include the format specified<\/li>\n<li>Localize in Japanese<\/li>\n<li><strong>Significant feature:<\/strong> Event Registration\n\n<ol>\n<li>Add support for keeping track of attendees; RSVP status may be assigned by registered users via the comments form: http:\/\/microformats.org\/wiki\/hcalendar-brainstorming<\/li>\n<li>iCal feed should include this registrant data<\/li>\n<\/ol><\/li>\n<\/ol>","raw_excerpt":"Seamless event calendar solution which extends the basic WordPress functionality to enable future-dated posts\nto be listed within the blog chronology  &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/2512","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=2512"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/westonruter"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=2512"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=2512"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=2512"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=2512"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=2512"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=2512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}