/** * Get all active pets owned by a user * * @param int $id * * @return array */ public function getActivePetsForUser($id) { $ret = []; // Pet variables $res_id = null; $owner_id = null; $species_id = null; $name = null; $experience = null; $brawn = null; $guts = null; $essence = null; $speed = null; $focus = null; $grit = null; $active = null; // User variables $username = null; $email_address = null; $description = null; // Species variables $species = null; $type = null; $stats = null; $this->getActivePetsForUserStatement->bind_param("i", $id); $this->getActivePetsForUserStatement->execute(); $this->getActivePetsForUserStatement->bind_result($res_id, $owner_id, $species_id, $name, $experience, $brawn, $guts, $essence, $speed, $focus, $grit, $active, $username, $email_address, $description, $species, $type, $stats); while ($this->getActivePetsForUserStatement->fetch()) { $newUser = new User($username, $email_address, $description); $newUser->setId($owner_id); $newSpecies = new Species($species, $type, $stats); $newSpecies->setId($species_id); $newPet = new Pet($newUser, $newSpecies, $name); $newPet->setId($res_id); $newPet->setExperience($experience); $newPet->setBrawn($brawn); $newPet->setGuts($guts); $newPet->setEssence($essence); $newPet->setSpeed($speed); $newPet->setFocus($focus); $newPet->setGrit($grit); $newPet->setActive(boolval($active)); array_push($ret, $newPet); } return $ret; }
/** * Create/Edit a pet * * @param $view_data * @param bool $create whether a pet is being created or edited * * @return mixed */ private function editPet($view_data, $create = false) { // POST keys $submit_key = 'submit'; $name_key = 'name'; $species_id_key = 'species_id'; $pet_id_key = 'pet_id'; $errors_found = false; // Gather sanitized form inputs $form_name = empty($_POST[$name_key]) ? null : StringUtils::sanitize($_POST[$name_key]); $form_species_id = empty($_POST[$species_id_key]) ? null : intval(StringUtils::sanitize($_POST[$species_id_key])); $form_submit = isset($_POST[$submit_key]); // Other data $species = null; // View config $view_data['species_list'] = $this->species_list; // Pet is being created if ($create) { // Fill in view data if ($form_name !== null) { $view_data[$name_key] = $form_name; } if ($form_species_id !== null) { $view_data[$species_id_key] = $form_species_id; } } else { // Set the flag that this pet is being edited // Species should not be modifiable $view_data['edit_mode'] = true; // Fill in view data $view_data[$pet_id_key] = $this->pet_to_edit->getId(); $view_data[$name_key] = $form_name === null ? $this->pet_to_edit->getName() : $form_name; $view_data[$species_id_key] = $this->pet_to_edit->getSpecies()->getId(); } // Check form was submitted without error if ($form_submit) { // Check name is set if ($form_name === null || StringUtils::whitespaceOnly($form_name)) { $view_data['err_name'] = "Please enter a name."; $errors_found = true; } elseif (strlen($form_name) > 64) { $view_data['err_name'] = "Please enter a name that is no greater than 64 characters."; $errors_found = true; } // Check species_id is set // Only using in create mode if ($create && $form_species_id === 0) { $view_data['err_species'] = "Please select a species."; $errors_found = true; } elseif ($create) { $species = $this->data->getSpecies($form_species_id); if ($species === null) { $view_data['err_species'] = "Could not find species. Please try again."; $errors_found = true; } } if ($errors_found) { $view_data['form_err'] = "Please see errors below."; } else { // Check if a pet is being created if ($create) { $new_pet = new Pet($this->logged_in_user, $species, $form_name); // Generate initial stats $new_pet->rollStats(); // Make pet active if user does not have a full active set $active_pets = $this->data->getActivePetsForUser($this->logged_in_user->getId()); if (count($active_pets) < 3) { $new_pet->setActive(true); } // Add pet to database $new_pet_id = $this->data->addPet($new_pet); // Redirect to view pet if added successfully if ($new_pet_id) { HTTPUtils::my_http_redirect('pet.php?pet_id=' . $new_pet_id); } else { $view_data['form_err'] = 'Failed to add pet. Please try again.'; } } else { // Update pet fields // Species cannot be modified $this->pet_to_edit->setName($form_name); // Update pet in database $updated = $this->data->updatePet($this->pet_to_edit); // Redirect to view pet if updated successfully if ($updated) { HTTPUtils::my_http_redirect('pet.php?pet_id=' . $this->pet_to_edit->getId()); } else { $view_data['form_err'] = 'Failed to update pet. Please try again.'; } } } } return $view_data; }