CreateQuestionForm::__construct()   B
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 32
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 32
ccs 0
cts 20
cp 0
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 20
nc 1
nop 1
crap 2
1
<?php
2
3
namespace Nicklas\Comment\HTMLForm\Comment;
4
5
use \Anax\HTMLForm\FormModel;
6
use \Anax\DI\DIInterface;
7
use \Nicklas\Comment\Modules\Question;
8
use \Nicklas\Comment\Modules\Post;
9
10
/**
11
 * Example of FormModel implementation.
12
 */
13
class CreateQuestionForm extends FormModel
14
{
15
    /**
16
     * Constructor injects with DI container.
17
     *
18
     * @param Anax\DI\DIInterface $di a service container
19
     */
20
    public function __construct(DIInterface $di)
21
    {
22
        parent::__construct($di);
23
        $this->form->create(
24
            [
25
                "id" => __CLASS__,
26
            ],
27
            [
28
                "title" => [
29
                    "type"        => "text",
30
                    "label" => "En bra titel ökar chansen att någon svarar",
31
                    "placeholder" => "Titel"
32
                ],
33
                "tags" => [
34
                    "type"        => "text",
35
                    "label" => "Du kan ange fler än en tag. Men du behöver ange minst en.",
36
                    "placeholder" => "#tags"
37
                ],
38
                "text" => [
39
                    "type"        => "textarea",
40
                    "label" => "Här kan du skriva din fråga",
41
                    "placeholder" => "Din fråga"
42
                ],
43
44
                "submit" => [
45
                    "type" => "submit",
46
                    "value" => "Skicka",
47
                    "callback" => [$this, "callbackSubmit"]
48
                ],
49
            ]
50
        );
51
    }
52
53
    public function isValid($str)
54
    {
55
        return !preg_match('/[^A-Za-z0-9.#. \\-$]/', $str);
56
    }
57
58
    public function getHashtags($string)
59
    {
60
        if (!$this->isValid($string)) {
61
            return null;
62
        }
63
        preg_match_all("/(#\w+)/u", $string, $matches);
64
        if ($matches) {
65
            $hashtagsArray = array_count_values($matches[0]);
66
            $hashtags = array_keys($hashtagsArray);
67
            $tags = implode(",", $hashtags);
68
            return str_replace("#", "", $tags);
69
        }
70
        return null;
71
    }
72
    /**
73
     * Callback for submit-button which should return true if it could
74
     * carry out its work and false if something failed.
75
     *
76
     * @return boolean true if okey, false if something went wrong.
77
     */
78
    public function callbackSubmit()
79
    {
80
        // Get values from the submitted form
81
        $title          = $this->form->value("title");
82
        $tags           = $this->getHashtags($this->form->value("tags"));
83
        $text       = $this->form->value("text");
84
85
        if (!$this->di->get('session')->has("user")) {
86
            $this->form->addOutput("Du behöver logga in");
87
            return false;
88
        }
89
90
        if ($text == "") {
91
            $this->form->addOutput("Du skrev aldrig något. Skriv gärna något.");
92
            return false;
93
        }
94
95
        if (!$tags) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $tags of type null|string is loosely compared to false; this is ambiguous if the string can be empty. You might want to explicitly use === null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
96
            $this->form->addOutput("
97
            <p>Din fråga skickades inte:</p>
98
            <p>Antingen så angav du inga taggar, eller så angav du en ogiltig.</p>
99
            <p>Nordiska bokstäver är ej tillåtna i tags, använd istället a för ä t.ex.</p>
100
            <p>Tips:</p>
101
            <p>Du taggar genom att göra en hashtag, #mintag.</p>
102
            <p>#hej pa dig #kaffe <--- kommer att bli #hej #kaffe</p>
103
104
            <input type='submit' id='accept' value=Ok>
105
            <script>
106
            $( document ).ready(function() {
107
                $('#accept').click(function () {
108
                    $('output').remove();
109
                });
110
111
            });
112
            </script>
113
            ");
114
            return false;
115
        }
116
117
118
        $user = $this->di->get('session')->get("user"); # get user name
119
120
        $question = new Question($this->di->get("db"));
121
        $question->user       = $user;
122
        $question->title      = $title;
123
        $question->tags       = $tags;
124
        $question->save();
125
126
127
        $post     = new Post($this->di->get("db"));
128
                $post->user       = $user;
129
        $post->questionId = $question->id;
130
        $post->text       = $text;
131
        $post->type       = "question";
132
        $post->accepted   = "no";
133
        $post->save();
134
135
136
        $this->form->addOutput("Du skapade en fråga! Du bör se den nedan");
137
        return true;
138
    }
139
}
140