FileHandler::deleteAll()   A
last analyzed

Complexity

Conditions 5
Paths 8

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 9
c 0
b 0
f 0
nc 8
nop 3
dl 0
loc 16
rs 9.6111
1
<?php declare(strict_types=1);
2
3
namespace XoopsModules\Xhelp;
4
5
/*
6
 * You may not change or alter any portion of this comment or credits
7
 * of supporting developers from this source code or any supporting source code
8
 * which is considered copyrighted (c) material of the original comment or credit authors.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
 */
14
15
/**
16
 * @copyright    {@link https://xoops.org/ XOOPS Project}
17
 * @license      {@link https://www.gnu.org/licenses/gpl-2.0.html GNU GPL 2 or later}
18
 * @author       Eric Juden <[email protected]>
19
 * @author       XOOPS Development Team
20
 */
21
22
if (!\defined('XHELP_CLASS_PATH')) {
23
    exit();
24
}
25
26
// require_once XHELP_CLASS_PATH . '/BaseObjectHandler.php';
27
28
/**
29
 * FileHandler class
30
 *
31
 * File Handler for File class
32
 *
33
 * @author  Eric Juden <[email protected]>
34
 */
35
class FileHandler extends BaseObjectHandler
36
{
37
    /**
38
     * Name of child class
39
     *
40
     * @var string
41
     */
42
    public $classname = File::class;
43
    /**
44
     * DB table name
45
     *
46
     * @var string
47
     */
48
    public $dbtable = 'xhelp_files';
49
50
    private const TABLE = 'xhelp_files';
51
    private const ENTITY = File::class;
52
    private const ENTITYNAME = 'File';
53
    private const KEYNAME = 'id';
54
    private const IDENTIFIER = 'filename';
55
56
    /**
57
     * Constructor
58
     *
59
     * @param \XoopsMySQLDatabase|null $db reference to a xoopsDB object
60
     */
61
    public function __construct(\XoopsMySQLDatabase $db = null)
62
    {
63
        $this->init($db);
64
        $this->helper = Helper::getInstance();
65
        parent::__construct($db, static::TABLE, static::ENTITY, static::KEYNAME, static::IDENTIFIER);
66
    }
67
68
    /**
69
     * @param \XoopsObject $object
70
     * @return string
71
     */
72
    public function insertQuery(\XoopsObject $object): string
73
    {
74
        //TODO mb replace with individual variables
75
        // Copy all object vars into local variables
76
        foreach ($object->cleanVars as $k => $v) {
77
            ${$k} = $v;
78
        }
79
80
        $sql = \sprintf('INSERT INTO `%s` (id, filename, ticketid, responseid, mimetype) VALUES (%u, %s, %u, %d, %s)', $this->db->prefix($this->dbtable), $id, $this->db->quoteString($filename), $ticketid, $responseid, $this->db->quoteString($mimetype));
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $ticketid seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $filename seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $responseid seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $id seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $mimetype seems to be never defined.
Loading history...
81
82
        return $sql;
83
    }
84
85
    /**
86
     * @param \XoopsObject $object
87
     * @return string
88
     */
89
    public function updateQuery(\XoopsObject $object): string
90
    {
91
        //TODO mb replace with individual variables
92
        // Copy all object vars into local variables
93
        foreach ($object->cleanVars as $k => $v) {
94
            ${$k} = $v;
95
        }
96
97
        $sql = \sprintf('UPDATE `%s` SET filename = %s, ticketid = %u, responseid = %d, mimetype = %s WHERE id = %u', $this->db->prefix($this->dbtable), $this->db->quoteString($filename), $ticketid, $responseid, $this->db->quoteString($mimetype), $id);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $id seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $filename seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $responseid seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $ticketid seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $mimetype seems to be never defined.
Loading history...
98
99
        return $sql;
100
    }
101
102
    /**
103
     * @param \XoopsObject $object
104
     * @return string
105
     */
106
    public function deleteQuery(\XoopsObject $object): string
107
    {
108
        $sql = \sprintf('DELETE FROM `%s` WHERE id = %u', $this->db->prefix($this->dbtable), $object->getVar('id'));
0 ignored issues
show
Bug introduced by
It seems like $object->getVar('id') can also be of type array and array; however, parameter $values of sprintf() does only seem to accept double|integer|string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

108
        $sql = \sprintf('DELETE FROM `%s` WHERE id = %u', $this->db->prefix($this->dbtable), /** @scrutinizer ignore-type */ $object->getVar('id'));
Loading history...
109
110
        return $sql;
111
    }
112
113
    /**
114
     * @param \XoopsObject|File $object
115
     * @param bool              $force
116
     * @return bool
117
     */
118
    public function delete(\XoopsObject $object, $force = false): bool
119
    {
120
        if (!$this->unlinkFile($object->getFilePath())) {
0 ignored issues
show
Bug introduced by
The method getFilePath() does not exist on XoopsObject. It seems like you code against a sub-type of XoopsObject such as XoopsModules\Xhelp\File. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

120
        if (!$this->unlinkFile($object->/** @scrutinizer ignore-call */ getFilePath())) {
Loading history...
121
            return false;
122
        }
123
        $ret = parent::delete($object, $force);
124
125
        return $ret;
126
    }
127
128
    /**
129
     * delete file matching a set of conditions
130
     *
131
     * @param \CriteriaElement|\CriteriaCompo|null $criteria {@link \CriteriaElement}
132
     * @return bool   FALSE if deletion failed
133
     */
134
    public function deleteAll(\CriteriaElement $criteria = null, $force = true, $asObject = false): bool
135
    {
136
        $files = $this->getObjects($criteria);
137
        foreach ($files as $file) {
138
            $this->unlinkFile($file->getFilePath());
139
        }
140
141
        $sql = 'DELETE FROM ' . $this->db->prefix($this->dbtable);
142
        if (($criteria instanceof \CriteriaCompo) || ($criteria instanceof \Criteria)) {
143
            $sql .= ' ' . $criteria->renderWhere();
144
        }
145
        if (!$result = $this->db->queryF($sql)) {
0 ignored issues
show
Unused Code introduced by
The assignment to $result is dead and can be removed.
Loading history...
146
            return false;
147
        }
148
149
        return true;
150
    }
151
152
    /**
153
     * @param string $file
154
     * @return bool
155
     */
156
    public function unlinkFile(string $file): bool
157
    {
158
        $ret = false;
159
        if (\is_file($file)) {
160
            $ret = \unlink($file);
161
        }
162
163
        return $ret;
164
    }
165
}
166