Skip to content
Snippets Groups Projects
PersonController.php 4.54 KiB
Newer Older
 * @copyright  2021 Ad Aures
 * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
 * @link       https://castopod.org/
 */

use App\Models\PersonModel;
use CodeIgniter\Exceptions\PageNotFoundException;
use CodeIgniter\HTTP\RedirectResponse;
use Modules\Media\Models\MediaModel;
class PersonController extends BaseController
    public function _remap(string $method, string ...$params): mixed
        if ($params === []) {
            ($this->person = (new PersonModel())->getPersonById((int) $params[0])) instanceof Person
    public function index(): string
        $data = [
            'persons' => (new PersonModel())->findAll(),
        ];
    public function view(): string
        replace_breadcrumb_params([
            0 => $this->person->full_name,
        ]);
    public function create(): string
    public function attemptCreate(): RedirectResponse
            'avatar' => 'is_image[avatar]|ext_in[avatar,jpg,jpeg,png]|min_dims[avatar,400,400]|is_image_ratio[avatar,1,1]',
            return redirect()
                ->back()
                ->withInput()
                ->with('errors', $this->validator->getErrors());
        }

            'created_by'      => user_id(),
            'updated_by'      => user_id(),
            'full_name'       => $this->request->getPost('full_name'),
            'unique_name'     => $this->request->getPost('unique_name'),
            'information_url' => $this->request->getPost('information_url'),
            'avatar'          => $this->request->getFile('avatar'),
        ]);

        $personModel = new PersonModel();
        if (! $personModel->insert($person)) {
            return redirect()
                ->back()
                ->withInput()
                ->with('errors', $personModel->errors());
        }

        return redirect()->route('person-list')
            ->with('message', lang('Person.messages.createSuccess'));
    public function edit(): string
    {
        helper('form');

        $data = [
            'person' => $this->person,
        ];

        replace_breadcrumb_params([
            0 => $this->person->full_name,
        ]);
    public function attemptEdit(): RedirectResponse
            'avatar' => 'is_image[avatar]|ext_in[avatar,jpg,jpeg,png]|min_dims[avatar,400,400]|is_image_ratio[avatar,1,1]',
            return redirect()
                ->back()
                ->withInput()
                ->with('errors', $this->validator->getErrors());
        }

        $this->person->updated_by = user_id();
        $this->person->full_name = $this->request->getPost('full_name');
        $this->person->unique_name = $this->request->getPost('unique_name');
        $this->person->information_url = $this->request->getPost('information_url');
        $this->person->setAvatar($this->request->getFile('avatar'));

        $personModel = new PersonModel();
        if (! $personModel->update($this->person->id, $this->person)) {
            return redirect()
                ->back()
                ->withInput()
                ->with('errors', $personModel->errors());
        }

        return redirect()->route('person-edit', [$this->person->id])->with(
            'message',
            lang('Person.messages.editSuccess')
        );
    public function delete(): RedirectResponse
        if ($this->person->avatar_id !== null) {
            // delete avatar to prevent collision if recreating person
            (new MediaModel())->deleteMedia($this->person->avatar);
        }

        (new PersonModel())->delete($this->person->id);

        return redirect()->route('person-list')
            ->with('message', lang('Person.messages.deleteSuccess'));