public function edit($id = null)
 {
     $signup = self::load_signup($id);
     if ($this->post) {
         $signup->lift_required = $_POST['lift_required'];
         $signup->paid = $_POST['paid'];
         $signup->voucher_code = $_POST['voucher_code'];
         $signup->voucher = $_POST['voucher'];
         if ($_POST['ticket'] != $signup->event_ticket_id) {
             // Ticket is different, fetch the new one and remove any services that
             // aren't allowed for that type. If there are services that are paid
             // for, raise an error instead
             $event_id = mysql_real_escape_string($signup->event->id);
             $ticket_id = mysql_real_escape_string($_POST['ticket']);
             $ticket = EventTicket::find("event_tickets.event_id = {$event_id} AND event_tickets.id = {$ticket_id}");
             if ($ticket) {
                 if (!$ticket->participant) {
                     $signup_id = mysql_real_escape_string($signup->id);
                     $paid_services = EventService::find_all("event_services.event_signup_id = {$signup_id} AND services.participant = true AND event_services.paid = true AND services.cost > 0");
                     if (count($paid_services) == 0) {
                         $services = EventService::find_all("event_services.event_signup_id = {$signup_id} AND services.participant = true AND (event_services.paid = false OR services.cost = 0)");
                         foreach ($services as $service) {
                             $service->destroy();
                         }
                         $signup->event_ticket_id = $ticket->id;
                         $signup->event_ticket = $ticket;
                     } else {
                         $signup->add_error("This signup has paid participant services, it cannot be changed to spectator");
                     }
                 } else {
                     $signup->event_ticket_id = $ticket->id;
                     $signup->event_ticket = $ticket;
                 }
             }
         }
         if ($signup->save()) {
             Site::Flash("notice", "The signup has been edited");
             Redirect("admin/signups/{$signup->id}");
         }
     }
     $tickets = array();
     foreach ($signup->event->tickets() as $ticket) {
         $tickets[$ticket->id] = "({$ticket->id}) {$ticket->name}";
     }
     $this->assign("tickets", $tickets);
     $this->assign("signup", $signup);
     $this->title = "Edit {$signup->event->name} Signup";
     $this->render("event_signup/edit.tpl");
 }
 public function filtered_services($filter = "all", $reload = false)
 {
     if ($filter == "all") {
         return $this->event_services($reload);
     } elseif ($filter == "paid") {
         if ($reload or !$this->paid_cache) {
             $id = mysql_real_escape_string($this->id);
             $this->paid_cache = EventService::find_all("event_services.service_id = '{$id}' AND event_services.paid = true");
         }
         return $this->paid_cache;
     } elseif ($filter == "unpaid") {
         if ($reload or !$this->unpaid_cache) {
             $id = mysql_real_escape_string($this->id);
             $this->unpaid_cache = EventService::find_all("event_services.service_id = '{$id}' AND event_services.paid = false");
         }
         return $this->unpaid_cache;
     }
 }
 public function edit()
 {
     $signup = self::load_signup($id);
     if ($signup->event->enddate <= time()) {
         Site::Flash("error", "It is not possible to edit this booking");
         Redirect("bookings/{$signup->id}");
     }
     // Seating Manager
     $managers = array('' => 'None');
     $clan = mysql_real_escape_string(Site::CurrentUser()->clan);
     if ($clan != '') {
         $id = mysql_real_escape_string(Site::CurrentUser()->id);
         $allManagers = User::find_all("users.clan = '{$clan}'", "users.nickname ASC");
         foreach ($allManagers as $manager) {
             $permalink = $manager->permalink();
             $managers[$permalink] = $manager->nickname;
         }
     }
     $currentManager = '';
     if ($signup->manager_id) {
         $currentManager = $signup->manager->permalink();
     }
     if ($this->post and !$this->csrf) {
         global $site;
         $site['flash']['error'] = "Invalid form submission";
     } elseif ($this->post) {
         $signup->lift_required = $_POST['lift_required'];
         if (!$signup->paid and !$signup->event_ticket->hidden) {
             $ticket_id = mysql_real_escape_string($_POST['ticket']);
             if ($ticket_id != $signup->event_ticket_id) {
                 $event_id = mysql_real_escape_string($signup->event_id);
                 $ticket = EventTicket::find("event_tickets.id = '{$ticket_id}' AND event_tickets.event_id = '{$event_id}' AND event_tickets.hidden = false");
                 if ($ticket) {
                     $signup->event_ticket_id = $ticket->id;
                     $signup->event_ticket = $ticket;
                 }
             }
         }
         $save = true;
         if ($this->PostData('manager_id')) {
             $manager = User::find_by_nickname($this->PostData('manager_id'));
             if ($manager && array_key_exists($manager->permalink(), $managers)) {
                 $signup->manager_id = $manager->id;
             } else {
                 global $site;
                 $site['flash']['error'] = "Unable to find the seat manager you selected";
                 $save = false;
             }
         } else {
             $signup->manager_id = null;
         }
         if ($save && $signup->save()) {
             // Remove any services that don't fit this booking
             if (!$signup->event_ticket->participant) {
                 $signup_id = mysql_real_escape_string($signup->id);
                 $services = EventService::find_all("event_services.event_signup_id = '{$signup_id}' AND participant = true");
                 $paid = array();
                 foreach ($services as $service) {
                     if ($service->paid) {
                         // Service has been paid, don't remove it, email staff
                         $paid[] = $service;
                     } else {
                         $service->destroy();
                     }
                 }
                 if (count($paid) > 0) {
                     // One or more services were unsuitable but paid for (this should
                     // really not happen! Let's email staff and they can handle it
                 }
             }
             Site::Flash("notice", "Your event booking has been updated");
             Redirect("bookings/{$signup->id}");
         }
     }
     $this->assign("signup", $signup);
     $this->assign("tickets", $signup->event->public_tickets());
     $this->assign("managers", $managers);
     $this->assign("currentManager", $currentManager);
     $this->title = "My Bookings :: " . $signup->event->name . " :: Edit";
     $this->render("event_signup/edit.tpl");
 }
 public function check_services()
 {
     // Get all available services
     $event_id = mysql_real_escape_string($this->event_id);
     $participant = "";
     if (!$this->event_ticket->participant) {
         $participant = " AND services.participant = false";
     }
     $available_services = Service::find_all("services.event_id = '{$event_id}'{$participant}");
     $available = array();
     foreach ($available_services as $service) {
         if ($service->available() != 0) {
             $available[] = $service->id;
         }
     }
     // Get unpaid services
     $signup_id = mysql_real_escape_string($this->id);
     $unpaid = EventService::find_all("event_services.event_signup_id = '{$signup_id}' AND event_services.paid = false");
     $removed = array();
     foreach ($unpaid as $service) {
         if (!in_array($service->service_id, $available)) {
             $removed[] = $service->service;
             $service->destroy();
         }
     }
     return $removed;
 }