Completed
Push — master ( 8ffaa6...f544e7 )
by Nicklas
02:28
created

Question::controlAuthority()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 6

Duplication

Lines 11
Ratio 100 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
dl 11
loc 11
ccs 0
cts 6
cp 0
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 1
crap 6
1
<?php
2
3
namespace Nicklas\Comment\Modules;
4
5
/**
6
 * A database driven model.
7
 */
8
class Question extends ActiveRecordModelExtender
9
{
10
11
        /**
12
     * @var string $tableName name of the database table.
13
     */
14
    protected $tableName = "ramverk1_questions";
15
16
    /**
17
     * Columns in the table.
18
     *
19
     * @var integer $id primary key auto incremented.
20
     */
21
    public $id;
22
    public $user;
23
24
    public $title;
25
    public $tags;
26
27
    public $created;
28
    public $status; # default is active
29
30
31
    /**
32
     * Returns post with markdown and gravatar
33
     * @param string $sql
34
     * @param array $param
0 ignored issues
show
Documentation introduced by
There is no parameter named $param. Did you maybe mean $params?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. It has, however, found a similar but not annotated parameter which might be a good fit.

Consider the following example. The parameter $ireland is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $ireland
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was changed, but the annotation was not.

Loading history...
35
     *
36
     * @return array
37
     */
38 2
    public function getQuestions($sql = null, $params = null)
39
    {
40 2
        if ($sql == null) {
0 ignored issues
show
Bug introduced by
It seems like you are loosely comparing $sql of type string|null against null; this is ambiguous if the string can be empty. Consider using a strict comparison === instead.
Loading history...
41 2
            $questions = $this->findAll();
42 2
        }
43 2
        if ($sql != null) {
0 ignored issues
show
Bug introduced by
It seems like you are loosely comparing $sql of type string|null against null; this is ambiguous if the string can be empty. Consider using a strict comparison !== instead.
Loading history...
44 1
            $questions = $this->findAllWhere($sql, $params);
45 1
        }
46
47
        return array_map(function ($question) {
48
            // User email
49 2
            $user = new User($this->db);
50
            // Start setting attributes
51 2
            $question->img = $user->getGravatar($question->user);
52 2
            $question->title = $this->getMD($question->title);
53 2
            $question->tags = explode(',', $question->tags);
54
55 2
            return $question;
56 2
        }, $questions);
0 ignored issues
show
Bug introduced by
The variable $questions does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
57
    }
58
59
    /**
60
    * Returns one question with it's own question text and other answers
61
    * @param int $id
62
    *
63
     * @return object
64
    */
65 2
    public function getQuestion($id)
66
    {
67 2
        $question = $this->find("id", $id);
68
69
        // Add attributes from Post class
70 2
        $post = new Post($this->db);
71
72 2
        $question->question = $post->getPost("questionId = ? AND type = ?", [$question->id, "question"]);
73 2
        $question->answers = $post->getAllPosts("questionId = ? AND type = ?", [$question->id, "answer"]);
74 2
        $question->answerCount = count($question->answers);
75
76
        // Start setting up own attributes
77 2
        $question->title = $this->getMD($question->title);
78 2
        $question->tags = explode(',', $question->tags);
79
80
81 2
        return $question;
82
    }
83
84
    /**
85
     * Returns array of tags, keys are name, value is the integer of how many.
86
     *
87
     * @return array
88
    */
89 1
    public function getPopularTags()
90
    {
91 1
        $question = $this->findAll();
92
93 1
        $tagsMultiArray = array_map(function ($question) {
94 1
            return explode(',', $question->tags);
95 1
        }, $question);
96
97
        // Merge multi array, count values, sort high to low
98 1
        $tagArr = array_count_values(call_user_func_array("array_merge", $tagsMultiArray));
99 1
        arsort($tagArr);
100 1
        return $tagArr;
101
    }
102
}
103