jacobemerick/web

View on GitHub
controller/portfolio/ContactController.class.inc.php

Summary

Maintainability
A
2 hrs
Test Coverage
F
0%
<?php

Loader::load('controller', 'portfolio/DefaultPageController');

class ContactController extends DefaultPageController
{

    protected function set_head_data()
    {
        $this->set_title("Contact Page | Jacob Emerick's Portfolio");
        $this->set_description("Contact page for Jacob Emerick's Portfolio");
        $this->set_keywords([
            'portfolio',
            'programming portfolio',
            'contact',
            'Jacob Emerick',
            'information',
            'freelance',
        ]);
    }

    protected function set_body_data()
    {
        $this->set_body('body_view', 'Contact');

        $body_data = [];
        if (!empty($_POST)) {
            $body_data = $this->process_form_data();
        }
        $body_data['domain_container'] = $this->get_domain_container();
        $this->set_body('body_data', $body_data);

        parent::set_body_data();
    }

    private function process_form_data()
    {
        $errors = [];

        if (
            empty($_POST['name']) ||
            !is_string($_POST['name']) ||
            strlen($_POST['name']) > 100
        ) {
            $errors['name'] = 'Please enter a valid name.';
        }

        if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $errors['email'] = 'Please enter a valid email.';
        }

        if (
            empty($_POST['message']) ||
            !is_string($_POST['message']) ||
            strlen($_POST['message']) > 10000
        ) {
            $errors['message'] = 'Please enter a valid message.';
        }

        if (!empty($errors)) {
            $values = $_POST;
            $values = array_intersect_key($values, array_flip([
                'name',
                'email',
                'message',
            ]));

            return [
                'errors' => $errors,
                'values' => $values,
            ];
        }

        $message = [
            "Name: {$_POST['name']}",
            "Email: {$_POST['email']}",
            '',
            'Message:',
            $_POST['message'],
        ];
        $message = implode("\n", $message);

        global $container;
        $container['mail']
            ->addTo($container['config']->admin_email)
            ->setSubject('Portfolio Contact')
            ->setPlainMessage($message)
            ->send();

        return [
            'success' =>
                "Thank you for your message, {$_POST['name']}! " .
                "I'll get back to you as soon as possible."
        ];
    }
}