diff -r 000000000000 -r 03b0d1493584 web/wp-content/plugins/gigs-calendar/gigs-classes.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/gigs-calendar/gigs-classes.php Wed Dec 23 17:55:33 2009 +0000
@@ -0,0 +1,794 @@
+prefix));
+define('TABLE_VENUES', GIGS_DB_PREFIX . 'gigs_venue');
+define('TABLE_GIGS', GIGS_DB_PREFIX . 'gigs_gig');
+define('TABLE_PERFORMANCES', GIGS_DB_PREFIX . 'gigs_performance');
+define('TABLE_TOURS', GIGS_DB_PREFIX . 'gigs_tour');
+
+class dtcGigs {
+
+ function generateSlug($x) {
+ $x = strtolower($x);
+ $x = str_replace(' ', '-', $x);
+ $x = preg_replace('#[^a-z\-0-9]#', '', $x);
+ return $x;
+ }
+
+ function escapeForInput($x) {
+ if ( '0000-00-00' == $x ) {
+ $x = '';
+ }
+ echo htmlspecialchars($x);
+ }
+
+ function dateFormat($date, $type = 'short') {
+ if ( is_null($date) || $date == '0000-00-00' ) return null;
+ $options = get_option('gigs-calendar');
+ if ( isset($options['date'][$type]) ) {
+ return mysql2date($options['date'][$type], $date);
+ } else {
+ return mysql2date($type, $date);
+ }
+ }
+
+ function selectFields($fields, $g) {
+ $options = get_option('gigs-calendar');
+
+ $result = '';
+ foreach ( $options['gigs-table-show'] as $f ) {
+ if ( isset($fields[$f]) ) {
+ $tmp = $fields[$f];
+ if ( $f == 'venue' && $options['list-venue-link'] && !empty($g->venueLink) ) {
+ $tmp = preg_replace("~\{(.*?)\}~", '\1', $tmp);
+ } elseif ( $f == $options['gig-link-field'] ) {
+ $tmp = preg_replace("~\{(.*?)\}~", '\1', $tmp);
+ } else {
+ $tmp = preg_replace("~\{(.*?)\}~", '\1', $tmp);
+ }
+
+ $result .= $tmp;
+ }
+ }
+
+ return $result;
+ }
+
+ function timeFormat($time, $format = false) {
+ $options = get_option('gigs-calendar');
+ if ( is_null($time) ) {
+ return $options['tbd-text'];
+ }
+ if ( $options['time-12h'] || $format === "12h" ) {
+ return mysql2date("g:ia", '2008-01-01 ' . $time);
+ } else {
+ return mysql2date("H:i", '2000-01-01 ' . $time);
+ }
+ }
+
+ function mapLink($gig) {
+ global $options;
+ if ( empty($gig->customMap) ) {
+ $a = array();
+
+ if ( empty($gig->address) )
+ $a[] = $gig->name . ' near:';
+ else {}
+ $a[] = str_replace("\n", ", ", $gig->address);
+ if ( !empty($gig->city) ) $a[] = $gig->city;
+ if ( !empty($gig->state) ) $a[] = $gig->state;
+ if ( !empty($gig->country) ) $a[] = $gig->country;
+ if ( !empty($gig->postalCode) ) $a[] = $gig->postalCode;
+ return 'http://maps.google.com/?q=' . urlencode(str_replace('near:,', 'near:', implode(', ', $a)));
+ } else {
+ if ( preg_match("/^https?:\/\//", $gig->customMap) ) {
+ return $gig->customMap;
+ } else {
+ return 'http://maps.google.com/?q=' . urlencode($gig->customMap);
+ }
+ }
+ }
+
+ function getAttribution() {
+ $options = get_option('gigs-calendar');
+ ?>
+
+ $field ) {
+ if ( isset($data[$field['name']]) ) {
+ $value = array_pop($data[$field['name']]);
+ if ( empty($data[$field['name']]) ) unset($data[$field['name']]);
+ } else {
+ $value = $field['default'];
+ }
+ ?>
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+ $oValue ) : ?>
+ />
+
+
+
+
+
+ $oValue ) : ?>
+ />
+
+
+
+
+
+ |
+
+ id) ) {
+ $gig = $gig->id;
+ } elseif ( is_array($gig) && isset($gig['id']) ) {
+ $gig = $gig['id'];
+ }
+
+ $g = new gig();
+ if ( !$g->get($gig) ) {
+ return false;
+ }
+
+ $classes = array(
+ 'gig',
+ mysql2date('\yY', $g->date),
+ mysql2date('\mm', $g->date),
+ ( $g->date >= date('Y-m-d') ? 'upcoming' : 'archive' ),
+ );
+
+ $classes = array_merge($classes, $g->getTags(true, 'gc-'));
+
+ return implode(' ', apply_filters('gigCal_gigs_css_classes', $classes, $g));
+ }
+}
+
+class dtc_gigs_baseAR {
+ var $wpdb, $_rows, $_row, $_new = true, $_table, $_count;
+
+ function dtc_gigs_baseAR($id = null){
+ global $wpdb;
+ $this->wpdb = $wpdb;
+ if ( $id !== null ) {
+ $this->get($id);
+ }
+ }
+
+ function fetch() {
+ if ( count($this->_rows) ) {
+ $this->_row = each($this->_rows);
+ if ( $this->_row ) {
+ $this->load();
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ function generate_slug() {
+ if ( isset($this->slug) ) {
+ $first = true;
+ $name = $this->_name;
+ do {
+ if ( $first ) {
+ $this->slug = dtcGigs::generateSlug($this->$name);
+ $first = false;
+ } else {
+ ereg('[0-9]*$', $this->slug, $match);
+ $match = ((int) $match[0]) + 1;
+ if ( 1 == $match ) $match++;
+ $this->slug = preg_replace('/[0-9]*$/', '', $this->slug);
+ $this->slug .= $match;
+ }
+
+ } while ( $this->wpdb->get_var('SELECT COUNT(*) FROM `' . $this->_table . '` WHERE slug = "' . $this->slug . '"') );
+ }
+ }
+
+
+ function get($id) {
+ $this->search('`id` = ' . (int) $id);
+ return $this->fetch();
+ }
+
+ function getRow() {
+ $row = array();
+ foreach ( $this->_fields as $f ) {
+ $row[$f] = $this->$f;
+ }
+ return $row;
+ }
+
+ function getTags($slugs = false, $prefix = '') {
+ if ( function_exists('wp_get_post_tags') ) {
+ $tags = wp_get_post_tags($this->postID);
+ foreach ( $tags as $key => $tag ) {
+ $tags[$key] = $prefix . ($slugs ? $tag->slug : $tag->name);
+ }
+ return $tags;
+ } else {
+ return array();
+ }
+ }
+
+ function getCustom() {
+ if ( !empty($this->postID) ) {
+ return get_post_custom($this->postID);
+ }
+ }
+
+ function setTags($tags) {
+ if ( function_exists('wp_set_post_tags') )
+ wp_set_post_tags($this->postID, $tags, false);
+ }
+
+
+
+
+
+ function load() {
+ foreach ( $this->_fields as $f ) {
+ if ( is_null($this->_row['value']->$f) ) {
+ $this->$f = null;
+ } else {
+ $this->$f = stripslashes($this->_row['value']->$f);
+ }
+ }
+ }
+
+ function search($where = null, $order = null) {
+ $this->_new = false;
+ $this->_rows = $this->wpdb->get_results('SELECT * FROM `' . $this->_table . '` ' . ($where !== null ? 'WHERE ' . $where : '') . ($order !== null ? ' ORDER BY ' . $order : ''));
+ $this->_count = count($this->_rows);
+ return count($this->_rows);
+ }
+
+ function save($get_after = true) {
+ $first = true;
+ $name = $this->_name;
+ $this->generate_slug();
+ if ( $this->_new ) {
+ $fields = $this->_fields;
+ $values = array();
+ unset($fields[0]);
+
+ $this->pre_insert();
+
+ foreach ( $fields as $f ) {
+ if ( is_null($this->$f) ) {
+ $values[$f] = 'null';
+ } else {
+ $values[$f] = '"' . $this->wpdb->escape(stripslashes($this->$f)) . '"';
+ }
+ }
+
+ if ( !$this->wpdb->query('INSERT INTO `' . $this->_table . '` (`' . implode('`, `', $fields) . '`) VALUES (' . implode(', ', $values) . ')') ) {
+ return false;
+ }
+ $this->id = $this->wpdb->insert_id;
+
+ $this->post_insert();
+ if ( $get_after )
+ $this->get((int) $this->id);
+
+ return true;
+ } else {
+ $fields = $this->_fields;
+ $values = array();
+ unset($fields[0]);
+
+ $this->pre_update();
+
+ foreach ( $fields as $f ) {
+ if ( is_null($this->$f) ) {
+ $values[$f] = '`' . $f . '` = null';
+ } else {
+ $values[$f] = '`' . $f . '` = "' . $this->wpdb->escape(stripslashes($this->$f)) . '"';
+ }
+ }
+
+ $result = (bool) $this->wpdb->query('UPDATE `' . $this->_table . '` SET ' . implode(', ', $values) . ' WHERE `id` = ' . (int) $this->id);
+
+ if ( $result ) $this->post_update();
+
+ if ( $get_after )
+ $this->get((int) $this->id);
+
+ return $result;
+ }
+ }
+
+ function pre_insert(){}
+ function post_insert(){}
+ function pre_update(){}
+ function post_update(){}
+ function extraJSON() {return array();}
+
+ function delete() {
+ if ( !empty($this->id) ) {
+ return (bool) $this->wpdb->query('DELETE FROM `' . $this->_table . '` WHERE `id` = ' . (int) $this->id);
+ }
+ }
+
+ function toJSON($single = true) {
+ if ( $single ) {
+ $fields = array();
+ if ( function_exists("json_encode") ) {
+ foreach ( $this->_fields as $f ) {
+ $fields[$f] = $this->$f;
+ }
+
+ $extra = $this->extraJSON();
+ $fields = array_merge($fields, $extra);
+ return json_encode($fields);
+ } else {
+ foreach ( $this->_fields as $f ) {
+ $fields[] = '"' . $f . '":"' . str_replace("\n", '\n', addslashes($this->$f)) . '"';
+ }
+
+ $extra = $this->extraJSON();
+ $fields = array_merge($fields, $extra);
+
+ return '{' . implode(', ', $fields) . '}';
+ }
+ }
+ }
+
+ function getError() {
+ return $this->wpdb->last_error;
+ }
+}
+
+class venue extends dtc_gigs_baseAR {
+ var $_table = TABLE_VENUES, $_name = 'name';
+ var $id, $name, $address, $city, $state, $country, $postalCode, $contact,
+ $phone, $email, $link, $notes, $private = 0, $apiID = 0, $deleted = 0, $customMap;
+ var $_fields = array(
+ 'id',
+ 'name',
+ 'address',
+ 'city',
+ 'state',
+ 'country',
+ 'postalCode',
+ 'contact',
+ 'phone',
+ 'email',
+ 'link',
+ 'notes',
+ 'private',
+ 'apiID',
+ 'deleted',
+ 'customMap',
+ );
+
+ function delete($forReal = false) {
+ if ( $forReal ) {
+ return parent::delete();
+ } else {
+ $this->deleted = 1;
+ return $this->save();
+
+ }
+ }
+
+ function getAddress($oneLine = false) {
+ $a = array();
+ $city = "";
+ if ( $oneLine ) {
+ if ( !empty($this->address) ) $a[] = str_replace("\n", ', ', $this->address);
+ if ( !empty($this->city) ) $a[] = $this->city;
+ if ( !empty($this->state) ) $a[] = $this->state;
+ if ( !empty($this->postalCode) ) $a[] = $this->postalCode;
+ if ( !empty($this->country) ) $a[] = $this->country;
+ return implode(', ', $a);
+ } else {
+ if ( !empty($this->address) ) $a[] = $this->address;
+ if ( !empty($this->city) ) $temp .= $this->city;
+ if ( !empty($this->state) ) $temp .= (!empty($temp) ? ', ' : '' ) . $this->state;
+ if ( !empty($this->country) ) $temp .= (!empty($temp) ? ', ' : '' ) . $this->country;
+ if ( !empty($this->postalCode) ) $temp .= (!empty($temp) ? ' ' : '' ) . $this->postalCode;
+ if ( !empty($temp) ) $a[] = $temp;
+ return implode("\n", $a);
+ }
+ }
+
+ function getCity() {
+ $c = array();
+ if ( !empty($this->city) ) $c[] = $this->city;
+ if ( !empty($this->state) ) $c[] = $this->state;
+ //if ( !empty($this->country) ) $c[] = $this->country;
+ return implode(', ', $c);
+ }
+
+ function getMapLink() {
+ global $options;
+ if ( empty($this->customMap) ) {
+ $a = array();
+
+ if ( empty($this->address) )
+ $a[] = $this->name . ' near:';
+ else {}
+ $a[] = str_replace("\n", ", ", $this->address);
+ if ( !empty($this->city) ) $a[] = $this->city;
+ if ( !empty($this->state) ) $a[] = $this->state;
+ if ( !empty($this->country) ) $a[] = $this->country;
+ if ( !empty($this->postalCode) ) $a[] = $this->postalCode;
+ return 'http://maps.google.com/?q=' . urlencode(str_replace('near:,', 'near:', implode(', ', $a)));
+ } else {
+ if ( preg_match("/^https?:\/\//", $this->customMap) ) {
+ return $this->customMap;
+ } else {
+ return 'http://maps.google.com/?q=' . urlencode($this->customMap);
+ }
+ }
+ }
+
+ function extraJSON() {
+ if ( function_exists("json_encode") ) {
+ $fields['mapLink'] = $this->getMapLink();
+ } else {
+ $fields[] = '"mapLink":"' . str_replace("\n", '\n', addslashes($this->getMapLink())) . '"';
+ }
+ return $fields;
+ }
+}
+
+class gig extends dtc_gigs_baseAR {
+ var $_table = TABLE_GIGS, $_name = 'id';
+ var $id, $venueID = 0, $date, $notes, $postID = 0, $eventName, $tour_id = 0;
+ var $_fields = array(
+ 'id',
+ 'venueID',
+ 'date',
+ 'notes',
+ 'postID',
+ 'eventName',
+ 'tour_id',
+ );
+
+ function delete() {
+ $p = $this->getPerformances();
+ while ( $p->fetch() ) {
+ $p->delete();
+ }
+ wp_delete_post($this->postID);
+ return parent::delete();
+ }
+
+ function getByPostID($postID) {
+ $this->search("postID = " . (int) $postID);
+ return $this->fetch();
+ }
+
+ function getPermalink() {
+ $post = get_permalink($this->postID);
+ return $post;
+ }
+
+ function getPerformances() {
+ $p = new performance();
+ if ( $this->id ) {
+ $p->search("`gigID` = " . (int) $this->id, "`time`");
+ }
+ return $p;
+ }
+
+ function getVenue() {
+ $v = new venue();
+ if ( $this->venueID ) {
+ $v->get($this->venueID);
+ }
+ return $v;
+ }
+
+ function pre_insert() {
+ global $options, $wpdb;
+ $user = wp_get_current_user();
+ $v = $this->getVenue();
+ $p = $this->getPerformances();
+ $p->fetch();
+
+ if ( $this->tour_id == -1 ) $this->tour_id = null;
+
+ $title = array();
+ foreach ( $options['gig-title-show'] as $f ) {
+ switch ( $f ) {
+ case 'city' :
+ $title[] = $v->getCity();
+ break;
+ case 'eventName' :
+ $title[] = $this->eventName;
+ break;
+ case 'venue' :
+ $title[] = $v->name;
+ break;
+ case 'date' :
+ $title[] = dtcGigs::dateFormat($this->date);
+ break;
+ case 'country' :
+ $title[] = $v->country;
+ break;
+ }
+ }
+
+ foreach ( $title as $key => $value ) {
+ if ( empty($value) ) unset($title[$key]);
+ }
+
+ $post_data = array(
+ 'post_author' => $user->ID,
+ 'post_title' => $wpdb->escape(implode(' - ', $title)),
+ 'post_status' => 'publish',
+ 'post_type' => 'post',
+ 'post_category' => array($options['category']),
+ 'post_content' => '',
+ );
+
+ if ( $options['post-filtering'] ) {
+ $post_data = array_merge($post_data, array(
+ 'post_date' => $wpdb->escape($this->date . ' ' . $p->time),
+ 'post_modified' => $wpdb->escape($this->date . ' ' . $p->time),
+ 'post_date_gmt' => date('Y-m-d H:i:s', strtotime($this->date . ' ' . $p->time) - (60 * 60 * get_option('gmt_offset'))),
+ 'post_modified_gmt' => date('Y-m-d H:i:s', strtotime($this->date . ' ' . $p->time) - (60 * 60 * get_option('gmt_offset'))),
+ ));
+ }
+ $id = wp_insert_post($post_data);
+ $this->postID = $id;
+ }
+
+ function pre_update() {
+ global $options, $wpdb, $wp_version;
+ $v = $this->getVenue();
+ $p = $this->getPerformances();
+ $p->fetch();
+
+ if ( $this->tour_id == -1 ) $this->tour_id = null;
+
+ $title = array();
+ foreach ( $options['gig-title-show'] as $f ) {
+ switch ( $f ) {
+ case 'city' :
+ $title[] = $v->getCity();
+ break;
+ case 'eventName' :
+ $title[] = $this->eventName;
+ break;
+ case 'venue' :
+ $title[] = $v->name;
+ break;
+ case 'date' :
+ $title[] = dtcGigs::dateFormat($this->date);
+ break;
+ case 'country' :
+ $title[] = $v->country;
+ break;
+ }
+ }
+
+ foreach ( $title as $key => $value ) {
+ if ( empty($value) ) unset($title[$key]);
+ }
+
+
+ $post = get_post($this->postID);
+
+ if ( $options['post-filtering'] ) {
+ $post->post_date = $wpdb->escape($this->date . ' ' . $p->time);
+ $post->post_modified = $wpdb->escape($this->date . ' ' . $p->time);
+ $post->post_date_gmt = date('Y-m-d H:i:s', strtotime($this->date . ' ' . $p->time) - (60 * 60 * get_option('gmt_offset')));
+ $post->post_modified_gmt = date('Y-m-d H:i:s', strtotime($this->date . ' ' . $p->time) - (60 * 60 * get_option('gmt_offset')));
+ }
+
+ $post->post_title = $wpdb->escape(implode(' - ', $title));
+ $post->post_name = "";
+ $post->post_status = "publish"; // Do this to trick WordPress into resetting the GUID.
+ $post->post_category = array($options['category']);
+
+ wp_update_post($post);
+ if ( (float) $wp_version < 2.3 ) { // Hack to make it compatible with WP 2.2
+ global $wpdb;
+ $wpdb->query('UPDATE ' . $wpdb->prefix . 'posts SET post_status = "publish" WHERE ID = ' . (int) $this->postID);
+ }
+ }
+
+ function post_insert() {
+ global $wp_version;
+ if ( (float) $wp_version < 2.3 ) { // Hack to make it compatible with WP 2.2
+ global $wpdb;
+ $wpdb->query('UPDATE ' . $wpdb->prefix . 'posts SET post_status = "publish" WHERE ID = ' . (int) $this->postID);
+ } else {
+ $post = get_post($this->postID);
+ $post->post_status = "publish";
+ wp_update_post($post);
+ }
+ }
+
+ function extraJSON() {
+ $post = get_post($this->postID);
+ $v = $this->getVenue();
+ $p = $this->getPerformances();
+ if ( function_exists("json_encode") ) {
+ $fields['permalink'] = $this->getPermalink();
+ $fields['venue'] = $v->getRow();
+ while ( $p->fetch() ) {
+ $fields['performances'][] = $p->getRow();
+ }
+ } else {
+ $fields[] = '"permalink":"' . str_replace("\n", '\n', addslashes($this->getPermalink())) . '"';
+ $ps = array();
+ $fields[] = '"venue":' . $v->toJSON();
+ while ( $p && $p->fetch() ) {
+ $ps[] = $p->toJSON();
+ }
+ $fields[] = '"performances":[' . implode(', ', $ps) . ']';
+ }
+ return $fields;
+ }
+}
+
+class performance extends dtc_gigs_baseAR {
+ var $_table = TABLE_PERFORMANCES, $_name = 'id';
+ var $id, $gigID = 0, $time = '20:00', $link, $shortNotes, $ages;
+
+ var $_fields = array(
+ 'id',
+ 'gigID',
+ 'time',
+ 'link',
+ 'shortNotes',
+ 'ages',
+ );
+}
+
+class tour extends dtc_gigs_baseAR {
+ var $_table = TABLE_TOURS, $_name = 'id';
+ var $id, $name, $notes, $pos = 0;
+ var $_fields = array(
+ 'id',
+ 'name',
+ 'notes',
+ 'pos',
+ );
+
+ function post_insert() {
+ $max = $this->wpdb->get_var('SELECT MAX(`pos`) FROM `' . $this->_table . '`') + 1;
+ $this->wpdb->query('UPDATE `' . $this->_table . '` SET `pos` = ' . $max . ' WHERE `id` = ' . (int) $this->id);
+ }
+
+ function delete() {
+ $g = $this->getGigs();
+ while ( $g->fetch() ) {
+ $g->tour_id = null;
+ $g->save();
+ }
+ return parent::delete();
+ }
+
+ function sortTours($type = null) {
+ $options = get_option('gigs-calendar');
+ $type = is_null($type) ? $options['tours-sort'] : $type;
+ switch ($type) {
+ case 'date' :
+ return $this->wpdb->get_col('
+ SELECT DISTINCT
+ t.id
+ FROM
+ ' . TABLE_TOURS . ' t
+ LEFT JOIN
+ ' . TABLE_GIGS . ' g
+ ON
+ t.`id` = g.`tour_id`
+ WHERE
+ `date` is null OR `date` >= CURDATE()
+ ORDER BY
+ g.`date`, `name`
+ ');
+ break;
+ case 'alpha' :
+ return $this->wpdb->get_col('
+ SELECT DISTINCT
+ t.id
+ FROM
+ ' . TABLE_TOURS . ' t
+ ORDER BY
+ `name`
+ ');
+ break;
+ }
+ }
+
+ function getGigs($slice = 'all') {
+ $g = new gig();
+ if ( $slice == 'past' ) {
+ $g->search('`date` <= CURDATE() AND `tour_id` = ' . (int) $this->id, '`date`');
+ } elseif ( $slice == 'future' ) {
+ $g->search('`date` >= CURDATE() AND `tour_id` = ' . (int) $this->id, '`date`');
+ } else {
+ $g->search('`tour_id` = ' . (int) $this->id, '`date`');
+ }
+ return $g;
+ }
+
+ function extraJSON(){
+ $fields = array();
+ $g = $this->getGigs();
+ $gs = array();
+ if ( function_exists("json_encode") ) {
+ while ( $g->fetch() ) {
+ $gs[] = $g->getRow();
+ }
+ $fields['gigs'] = $gs;
+ } else {
+ while ( $g->fetch() ) {
+ $gs[] = $g->toJSON();
+ }
+ $fields[] = '"gigs":[' . implode(',', $gs) . ']';
+ }
+ return $fields;
+ }
+}
+
+?>