public function recordHoursStep3($req, $res) { $org = $this->getOrgForAdmin($req, $res); if (!is_object($org)) { return; } $place = $req->query('place'); if ($place) { $place = new VolunteerPlace($place); } if (!$place || !$place->exists()) { return $res->redirect($org->manageUrl() . '/hours/add'); } $input = $req->request(); $totals = []; // recreate days and filter out empty entries $days = []; $remove = []; foreach ($input['days'] as $k => $day) { $date = \DateTime::createFromFormat('M j, Y', $day); if ($date) { $days[] = $this->dayArrayFromTs($date->getTimestamp()); } else { $remove[] = $k; } } // reverse sort remove so that keys are in descending order for deletion sort($remove); array_reverse($remove); // remove empty day entries foreach ($remove as $k) { unset($input['days'][$k]); } foreach ($input['hours'] as $uid => $hours) { // remove empty hour entries foreach ($remove as $k) { unset($input['hours'][$uid][$k]); unset($hours[$k]); } // remove empty volunteer and hour entries $total = array_sum($hours); if ($total == 0) { unset($input['hours'][$uid]); unset($input['username'][$uid]); } else { $totals[$uid] = $total; } } // no entries? if (empty($input['hours'])) { return $this->recordHoursStep2($req, $res); } // validate tags $tags = $req->request('tags'); foreach ((array) explode(' ', $tags) as $tag) { if (!Validate::is($tag, 'alpha_dash')) { $this->app['errors']->push(['error' => 'invalid_volunteer_hour_tags']); return $this->recordHoursStep2($req, $res); } } return new View('hours/add3', ['org' => $org, 'title' => 'Confirm Volunteer Hours', 'hoursPage' => true, 'input' => $input, 'days' => $days, 'json' => str_replace("'", '', json_encode($input)), 'totals' => $totals, 'place' => $place, 'tags' => $tags]); }
public function reportHoursStep3($req, $res) { $org = $this->getOrg($req, $res); if (!is_object($org)) { return $org; } $currentUser = $this->app['user']; // make sure the user is logged in if (!$currentUser->isLoggedIn()) { setcookie('redirect', $org->url() . '/hours/report', time() + 3600, '/'); return $res->redirect('/login'); } $place = $req->query('place'); if ($place) { $place = new VolunteerPlace($place); } if (!$place || !$place->exists()) { return $res->redirect($org->manageUrl() . '/hours/add'); } // validate tags $tags = $req->request('tags'); foreach ((array) explode(' ', $tags) as $tag) { if (!Validate::is($tag, 'alpha_dash')) { $this->app['errors']->push(['error' => 'invalid_volunteer_hour_tags']); return $this->reportHoursStep2($req, $res); } } // validate day $date = \DateTime::createFromFormat('M j, Y', $req->request('timestamp')); if (!$date) { $this->app['errors']->push(['error' => 'validation_failed', 'params' => ['field_name' => 'Day']]); return $this->reportHoursStep2($req, $res); } $uid = $currentUser->id(); $hour = new VolunteerHour(); $success = $hour->create(['organization' => $org->id(), 'uid' => $uid, 'hours' => $req->request('hours'), 'timestamp' => $date->getTimestamp(), 'place' => $place->id(), 'approved' => false, 'tags' => $tags]); if ($success) { $res->redirect($org->url() . '/hours/thanks'); } else { return $this->reportHoursStep2($req, $res); } }