types = $table; $this->ids = array(); $this->names = array(); foreach ($table as $row) { $this->ids[] = $row['id']; $this->names[] = $row['name']; } } function ids() { return $this->ids; } function names() { return $this->names; } function assoc() { return $this->types; } } class SD_Event { var $event_id; var $user_id; var $event_type_id; var $event_type; var $title; var $date; var $desc; var $location; var $event_items; function SD_Event($event_id=NULL) { if ($event_id) $this->initialize($event_id); } function initialize($event_id) { $event_items = array(); $sql = "select e.event_id, e.user_id, e.event_type_id, " . "e.date, e.description, e.location, t.description, e.title " . "from events e, event_types t ". "where e.event_type_id = t.event_type_id " . "and e.event_id = $event_id"; $result = mysql_query($sql) or die("SQL Error: " . mysql_error() . "\n"); $row = mysql_fetch_array($result); mysql_free_result($result); if ($row) { $this->event_id = $event_id; $this->user_id = $row[1]; $this->event_type_id = $row[2]; $this->date($row[3]); $this->desc = $row[4]; $this->location = $row[5]; $this->event_type = $row[6]; $this->title = $row[7]; } } function user_id($user_id=NULL) { if ($user_id) $this->user_id = $user_id; else return $this->user_id; } function title($title=NULL) { if ($title) $this->title = $title; else return $this->title; } function event_id($event_id=NULL) { if ($event_id) $this->event_id = $event_id; else return $this->event_id; } function event_type_id($event_type_id=NULL) { if ($event_type_id) $this->event_type_id = $event_type_id; else return $this->event_type_id; } function event_type() { return $this->event_type; } function date($date=NULL) { if ($date) { // some polymorphism. if (is_a($date, 'SD_Date')) { $this->date = $date; } else { // it better be a string! $sd_date = new SD_Date(); $sd_date->set_mysql_date($date); $this->date = $sd_date; } } else return $this->date; } function description($desc=NULL) { if ($desc) $this->desc = $desc; else return $this->desc; } function location($loc=NULL) { if ($loc) $this->location = $loc; else return $this->location; } function _build_container($sql) { $result = mysql_query($sql); $types = array(); while ($row = mysql_fetch_array($result)) { $types[] = array("id" => $row[0], "name" => $row[1]); } mysql_free_result($result); $container = new SD_TypeContainer($types); return $container; } function event_types() { $sql = "select * from event_types"; return $this->_build_container($sql); } function create() { $date = $this->date->get_mysql_date(); $sql = "insert into events values ( " . "null, $this->user_id, $this->event_type_id, '$this->title', " . "'$date', '$this->desc', '$this->location')"; mysql_query($sql) or die("SQL Error: " . $sql . mysql_error()); // XXX this is a hack will improve later. // lookup newly created eventid. $sql = "select event_id from events " . "where date = '$date' and event_type_id = $this->event_type_id " . "and description = '$this->desc' and location = '$this->location' " . "and user_id = $this->user_id and title = '$this->title'"; $result = mysql_query($sql) or die("SQL Error: " . $sql . mysql_error() . "\n"); $row = mysql_fetch_array($result); mysql_free_result($result); $this->event_id = $row[0]; // Event does not know which type of items it has // so interface is generic for all. if ($this->event_items) { foreach ($this->event_items as $item) { $item->_set_event_id($this->event_id); $item->create(); } } } function update() { $date = $this->date->get_mysql_date(); $sql = "update events set date = '$date', " . "description = '$this->desc', " . "location = '$this->location', " . "title = '$this->title' " . "where event_id = $this->event_id"; mysql_query($sql) or die("SQL Error: " . $sql . mysql_error()); if ($this->event_items) { foreach ($this->event_items as $item) $item->update(); } } function remove($event_id=NULL) { if (!$event_id) $event_id = $this->event_id; if ($this->event_items) { foreach ($this->event_items as $item) $item->remove(); } $sql = "delete from events where event_id = $event_id"; mysql_query($sql) or die(mysql_error()); } } function SD_Event_unit_test() { // tests core functionality of SD_Event // testing of event_items assoc. with an SD_Event // object will be tested in the *Decorator* class/file. include("sd_userinfo.php"); $link = mysql_connect("", "", ""); mysql_select_db("smalldates"); $user = new SD_UserInfo(); $user->first_name("First Name"); $user->last_name("Last Name"); $user->nick_name("Nick Name"); $user->email("email@example.com"); $user->username("username"); $user->password("password"); $user->passcode("TEST"); $user->create(); $loc = "Corner of Sleater and Kinney"; $desc = "An awesome party!"; $title = "This is a title"; $event = new SD_Event(); $event->location($loc); $event->description($desc); $event->title($title); $date = new SD_Date(); $date->set_month(2); $date->set_day(20); $date->set_year(2004); $event->date($date); $event->event_type_id(1); // this is the only assuption i'm making. $event->user_id($user->user_id()); $event->create(); $event2 = new SD_Event($event->event_id()); assert($event2->location() == $loc); assert($date->compare($event2->date()) == 0); assert($event2->description() == $desc); assert($event2->title() == $title); assert($event2->user_id() == $user->user_id()); $loc = "427 Beech Street"; $event2->location($loc); $event2->update(); $event3 = new SD_Event($event2->event_id()); assert($event3->location() == $loc); // clean up $event3->remove(); $user->remove(); mysql_close($link); } SD_Event_unit_test(); ?>