Summary Files Commits Branches @commit @diff @stats
path: root / Year 4 / Web technologies / hw03.php
blob: ebb75765f0d8709c090b49f3295827859f7ff094 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
abstract class Form {
    const Name        = 'name';
    const Teacher     = 'teacher';
    const Description = 'description';
    const Group       = 'group';
    const Credits     = 'credits';

    static function to_bg(string $name) {
        switch ($name) {
            case Form::Name:        return 'Име на учебен предмет';
            case Form::Teacher:     return 'Преподавател';
            case Form::Description: return 'Описание';
            case Form::Group:       return 'Група';
            case Form::Credits:     return 'Кредити';
            default: throw new Exception("'$name' isn't an acceptable value!");
        }
    }
}

class Errors {
    private static function get_error_submitted(string $name) {
        if (!array_key_exists($name, $_POST) || mb_strlen($_POST[$name]) == 0) {
            return Form::to_bg($name) . ' не е предадено! Полето е задължително!';
        }
    }

    private static function get_error_len_min(string $name, int $min) {
        if (mb_strlen($_POST[$name]) < $min) {
            return Form::to_bg($name) . " е твърде късо! Дължината може да е минимум $min на брой символа!";
        }
    }

    private static function get_error_len_max(string $name, int $max) {
        if (mb_strlen($_POST[$name]) > $max) {
            return Form::to_bg($name) . " е твърде дълго! Дължината може да е максимум $max на брой символа!";
        }
    }

    private static function get_error_len(string $name, int $min, int $max) {
        return Errors::get_error_len_min($name, $min) ??
               Errors::get_error_len_max($name, $max);
    }

    private static function get_error_enumerate(string $name, array $valid_values) {
        if (!in_array($_POST[$name], $valid_values)) {
            return Form::to_bg($name) . ' не е измежду ' . implode(', ', $valid_values) . '!';
        }
    }

    private static function get_error_int(string $name) {
        if (!is_numeric($_POST[$name])) {
            return Form::to_bg($name) . " не е число!";
        }
        elseif (floor($_POST[$name]) != $_POST[$name]) {
            return Form::to_bg($name) . " не е цяло число!";
        }
        elseif ($_POST[$name] <= 0) {
            return Form::to_bg($name) . " не е положително число!";
        }
    }

    private $messages;

    public function __construct() {
        $this->messages[Form::Name] = Errors::get_error_submitted(Form::Name) ??
                                      Errors::get_error_len(Form::Name, 2, 150);

        $this->messages[Form::Teacher] = Errors::get_error_submitted(Form::Teacher) ??
                                         Errors::get_error_len(Form::Teacher, 3, 200);

        $this->messages[Form::Description] = Errors::get_error_submitted(Form::Description) ??
                                             Errors::get_error_len_min(Form::Description, 10);

        $this->messages[Form::Group] = Errors::get_error_submitted(Form::Group) ??
                                       Errors::get_error_enumerate(Form::Group, array(
                                            'М', 'ПМ', 'ОКН', 'ЯКН'));

        $this->messages[Form::Credits] = Errors::get_error_submitted(Form::Credits) ??
                                         Errors::get_error_int(Form::Credits);
    }

    public function get_messages() {
        return array_filter($this->messages, function ($m) { return !is_null($m); });
    }
}

$errors = new Errors();
$messages = $errors->get_messages();

if (!empty($messages)) {
    echo json_encode(
        array(
            "success" => false,
            "errors" => $messages
        ),
        JSON_UNESCAPED_UNICODE
    );
}
else {
    echo json_encode(array("success" => true));
}