protected function select_group_services($event, $hasSignup = false)
 {
     $signups = Site::GetFlash("signup_objects");
     if ($this->post) {
         $saved = array();
         foreach ($signups as $key => $signup) {
             if ($signup->save()) {
                 $saved[] = $signup;
                 $services = $event->public_services($signup->event_ticket->participant);
                 $available_services = array();
                 foreach ($services as $service) {
                     $available_services[] = $service->id;
                 }
                 if (isset($_POST['signups'][$key])) {
                     $services = $_POST['signups'][$key];
                     foreach ($services['services'] as $id => $quantity) {
                         $quantity = intval($quantity);
                         for ($i = 0; $i < $quantity; $i++) {
                             if (in_array($id, $available_services)) {
                                 $service = Service::find_by_id($id);
                                 if ($service->max_per_signup != -1 && $i >= $service->max_per_signup || $i == $service->available()) {
                                     break;
                                 }
                                 $event_service = new EventService();
                                 $event_service->event_signup_id = $signup->id;
                                 $event_service->service_id = $id;
                                 if ($signup->paid and $service->cost == 0 and $service->available() > 0) {
                                     $event_service->paid = true;
                                 }
                                 if (isset($services['notes'][$id])) {
                                     $event_service->note = $services['notes'][$id];
                                 }
                                 $event_service->save();
                             }
                         }
                     }
                 }
             }
         }
         if (count($saved) > 0) {
             // We have saved some, we need to forward somewhere, for now let's go to My Bookings
             Site::Flash("notice", "Your bookings have been created");
             Redirect("bookings");
         }
     }
     Site::Flash("signup_group_stage", 2);
     Site::Flash("signup_objects", $signups);
     $this->assign("signups", $signups);
     $this->render("event_signup/select_group_services.tpl");
 }
 public function create($signup_id = null)
 {
     $signup = self::load_signup($signup_id);
     $event_service = new EventService();
     $event_service->event_signup_id = $signup->id;
     if ($this->post) {
         $event_id = mysql_real_escape_string($signup->event->id);
         $service_id = mysql_real_escape_string($_POST['service']);
         $service = Service::find("services.id = '{$service_id}' AND services.event_id = '{$event_id}'");
         if ($service) {
             if ($service->participant and !$signup->event_ticket->participant) {
                 $event_service->add_error("You cannot add participant services to this booking");
             }
             $event_service->service_id = $service->id;
             $event_service->note = $_POST['note'];
             $event_service->paid = $_POST['paid'];
             if ($event_service->save()) {
                 Site::Flash("notice", "The service booking has been added");
                 Redirect("admin/signups/{$signup->id}");
             }
         }
     }
     $available_services = $signup->available_services(false, true);
     if (count($available_services) == 0) {
         Site::flash("error", "There are no services available for this signup");
         Redirect("admin/signups/{$signup->id}");
     }
     $services = array();
     foreach ($available_services as $service) {
         $services[$service->id] = $service->name;
     }
     $this->assign("services", $services);
     $this->assign("signup", $signup);
     $this->assign("service", $event_service);
     $this->title = "Signup {$signup->id} Services";
     $this->render("event_service/create.tpl");
 }
 public function add()
 {
     $signup = self::load_signup();
     if ($signup->event->enddate <= time()) {
         Site::Flash("error", "It is not possible to edit this booking");
         Redirect("bookings/{$signup->id}");
     }
     $services = $signup->available_services();
     if (count($services) > 0) {
         if ($this->post and $this->csrf) {
             $added = 0;
             $available_services = array();
             foreach ($services as $service) {
                 $available_services[] = $service->id;
             }
             foreach ($_POST['services'] as $id => $quantity) {
                 $quantity = intval($quantity);
                 for ($i = 0; $i < $quantity; $i++) {
                     if (in_array($id, $available_services)) {
                         $service = Service::find_by_id($id);
                         if ($service->max_per_signup != -1 && $i >= $service->max_per_signup || $i == $service->available()) {
                             break;
                         }
                         $event_service = new EventService();
                         $event_service->event_signup_id = $signup->id;
                         $event_service->service_id = $id;
                         if ($signup->paid and $service->cost == 0 and $service->available() != 0) {
                             $event_service->paid = true;
                         }
                         if (isset($_POST['service_notes'][$id])) {
                             $event_service->note = $_POST['service_notes'][$id];
                         }
                         if ($event_service->save()) {
                             $added++;
                         } else {
                             Site::Flash("error", "Unable to add {$service->name}");
                             Redirect("bookings/{$signup->id}/services");
                         }
                     }
                 }
             }
             if ($added > 0) {
                 Site::Flash("notice", "The service has been added");
                 if ($added > 1) {
                     Site::Flash("notice", "The services have been added");
                 }
                 Redirect("bookings/{$signup->id}");
             } else {
                 Site::Flash("error", "No services were added");
                 Redirect("bookings/{$signup->id}/services");
             }
         } elseif ($this->post) {
             global $site;
             $site['flash']['error'] = "Invalid form submission";
         }
         $this->assign("signup", $signup);
         $this->assign("services", $services);
         $this->title = "My Bookings :: {$signup->event->name} :: Add Services";
         $this->render("event_service/add.tpl");
     } else {
         Site::Flash("error", "There are no services available for you to add");
         Redirect("bookings/{$signup->id}");
     }
 }