Completed
Pull Request — master (#269)
by
unknown
02:56
created

Data::getLink()   C

Complexity

Conditions 11
Paths 17

Size

Total Lines 29
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 12.1286
Metric Value
dl 0
loc 29
ccs 15
cts 19
cp 0.7895
rs 5.2653
cc 11
eloc 19
nc 17
nop 8
crap 12.1286

How to fix   Complexity    Many Parameters   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
/**
3
 * COPS (Calibre OPDS PHP Server) class file
4
 *
5
 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
6
 * @author     S�bastien Lucas <[email protected]>
7
 */
8
9
require_once('base.php');
10
11
class Data extends Base {
12
    public $id;
13
    public $name;
14
    public $format;
15
    public $realFormat;
16
    public $extension;
17
    public $book;
18
19
    public static $mimetypes = array(
20
        'aac'   => 'audio/aac',
21
        'azw'   => 'application/x-mobipocket-ebook',
22
        'azw1'  => 'application/x-topaz-ebook',
23
        'azw2'  => 'application/x-kindle-application',
24
        'azw3'  => 'application/x-mobi8-ebook',
25
        'cbz'   => 'application/x-cbz',
26
        'cbr'   => 'application/x-cbr',
27
        'djv'   => 'image/vnd.djvu',
28
        'djvu'  => 'image/vnd.djvu',
29
        'doc'   => 'application/msword',
30
        'epub'  => 'application/epub+zip',
31
        'fb2'   => 'text/fb2+xml',
32
        'ibooks'=> 'application/x-ibooks+zip',
33
        'kepub' => 'application/epub+zip',
34
        'kobo'  => 'application/x-koboreader-ebook',
35
        'm4a'   => 'audio/mp4',
36
        'mobi'  => 'application/x-mobipocket-ebook',
37
        'mp3'   => 'audio/mpeg',
38
        'lit'   => 'application/x-ms-reader',
39
        'lrs'   => 'text/x-sony-bbeb+xml',
40
        'lrf'   => 'application/x-sony-bbeb',
41
        'lrx'   => 'application/x-sony-bbeb',
42
        'ncx'   => 'application/x-dtbncx+xml',
43
        'opf'   => 'application/oebps-package+xml',
44
        'otf'   => 'application/x-font-opentype',
45
        'pdb'   => 'application/vnd.palm',
46
        'pdf'   => 'application/pdf',
47
        'prc'   => 'application/x-mobipocket-ebook',
48
        'rtf'   => 'application/rtf',
49
        'svg'   => 'image/svg+xml',
50
        'ttf'   => 'application/x-font-truetype',
51
        'tpz'   => 'application/x-topaz-ebook',
52
        'wav'   => 'audio/wav',
53
        'wmf'   => 'image/wmf',
54
        'xhtml' => 'application/xhtml+xml',
55
        'xpgt'  => 'application/adobe-page-template+xml',
56
        'zip'   => 'application/zip'
57
    );
58
59 63
    public function __construct($post, $book = null) {
60 63
        $this->id = $post->id;
61 63
        $this->name = $post->name;
62 63
        $this->format = $post->format;
63 63
        $this->realFormat = str_replace ("ORIGINAL_", "", $post->format);
64 63
        $this->extension = strtolower ($this->realFormat);
65 63
        $this->book = $book;
66 63
    }
67
68 53
    public function isKnownType () {
69 53
        return array_key_exists ($this->extension, self::$mimetypes);
70
    }
71
72 53
    public function getMimeType () {
73 53
        $result = "application/octet-stream";
74 53
        if ($this->isKnownType ()) {
75 53
            return self::$mimetypes [$this->extension];
76 1
        } elseif (function_exists('finfo_open') === true) {
77 1
            $finfo = finfo_open(FILEINFO_MIME_TYPE);
78
79 1
            if (is_resource($finfo) === true)
80 1
            {
81 1
                $result = finfo_file($finfo, $this->getLocalPath ());
82 1
            }
83
84 1
            finfo_close($finfo);
85
86 1
        }
87 1
        return $result;
88
    }
89
90 1
    public function isEpubValidOnKobo () {
91 1
        return $this->format == "EPUB" || $this->format == "KEPUB";
92
    }
93
94 50
    public function getFilename () {
95 50
        return $this->name . "." . strtolower ($this->format);
96
    }
97
98 1
    public function getUpdatedFilename () {
99 1
        return $this->book->getAuthorsSort () . " - " . $this->book->title;
100
    }
101
102 1
    public function getUpdatedFilenameEpub () {
103 1
        return $this->getUpdatedFilename () . ".epub";
104
    }
105
106 1
    public function getUpdatedFilenameKepub () {
107 1
        return $this->getUpdatedFilename () . ".kepub.epub";
108
    }
109
110 49
    public function getDataLink ($rel, $title = NULL) {
111 49
        global $config;
112
113 49
        if ($rel == Link::OPDS_ACQUISITION_TYPE && $config['cops_use_url_rewriting'] == "1") {
114 2
            return $this->getHtmlLinkWithRewriting($title);
115
        }
116
117 48
        return self::getLink ($this->book, $this->extension, $this->getMimeType (), $rel, $this->getFilename (), $this->id, $title);
118
    }
119
120 5
    public function getHtmlLink () {
121 5
        return $this->getDataLink(Link::OPDS_ACQUISITION_TYPE)->href;
122
    }
123
124 2
    public function getLocalPath () {
125 2
        return $this->book->path . "/" . $this->getFilename ();
126
    }
127
128 2
    public function getHtmlLinkWithRewriting ($title = NULL) {
129 2
        global $config;
130
131 2
        $database = "";
132 2
        if (!is_null (GetUrlParam (DB))) $database = GetUrlParam (DB) . "/";
133
134 2
        $href = "download/" . $this->id . "/" . $database;
135
136 2
        if ($config['cops_provide_kepub'] == "1" &&
137 2
            $this->isEpubValidOnKobo () &&
138 2
            preg_match("/Kobo/", $_SERVER['HTTP_USER_AGENT'])) {
139 1
            $href .= rawurlencode ($this->getUpdatedFilenameKepub ());
140 1
        } else {
141 2
            $href .= rawurlencode ($this->getFilename ());
142
        }
143 2
        return new Link ($href, $this->getMimeType (), Link::OPDS_ACQUISITION_TYPE, $title);
144
    }
145
146 62
    public static function getDataByBook ($book) {
147 62
        $out = array ();
148 62
        $result = parent::getDb ()->prepare('select id, format, name
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (getDb() instead of getDataByBook()). Are you sure this is correct? If so, you might want to change this to $this->getDb().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
149 62
                                             from data where book = ?');
150 62
        $result->execute (array ($book->id));
151
152 62
        while ($post = $result->fetchObject ())
153
        {
154 62
            array_push ($out, new Data ($post, $book));
155 62
        }
156 62
        return $out;
157
    }
158
159 19
    public static function handleThumbnailLink ($urlParam, $height) {
160 19
        global $config;
161
162 19
        if (is_null ($height)) {
163 18
            if (preg_match ('/feed.php/', $_SERVER["SCRIPT_NAME"])) {
164
                $height = $config['cops_opds_thumbnail_height'];
165
            }
166
            else
167
            {
168 18
                $height = $config['cops_html_thumbnail_height'];
169
            }
170 18
        }
171 19
        if ($config['cops_thumbnail_handling'] != "1") {
172 19
            $urlParam = addURLParameter($urlParam, "height", $height);
173 19
        }
174
175 19
        return $urlParam;
176
    }
177
178 49
    public static function getLink ($book, $type, $mime, $rel, $filename, $idData, $title = NULL, $height = NULL)
179
    {
180 49
        global $config;
181
182 49
        $urlParam = addURLParameter("", "data", $idData);
183
184 49
        if (Base::useAbsolutePath () ||
185
            $rel == Link::OPDS_THUMBNAIL_TYPE ||
186
            ($type == "epub" && $config['cops_update_epub-metadata']))
187 49
        {
188 49
            if ($type != "jpg") $urlParam = addURLParameter($urlParam, "type", $type);
189 49
            if ($rel == Link::OPDS_THUMBNAIL_TYPE) {
190 19
                $urlParam = self::handleThumbnailLink($urlParam, $height);
191 19
            }
192 49
            $urlParam = addURLParameter($urlParam, "id", $book->id);
193 49
            if (!is_null (GetUrlParam (DB))) $urlParam = addURLParameter ($urlParam, DB, GetUrlParam (DB));
194 49
            if ($config['cops_thumbnail_handling'] != "1" &&
195 49
                !empty ($config['cops_thumbnail_handling']) &&
196 49
                $rel == Link::OPDS_THUMBNAIL_TYPE) {
197
                return new Link ($config['cops_thumbnail_handling'], $mime, $rel, $title);
198
            } else {
199 49
                return new Link ("fetch.php?" . $urlParam, $mime, $rel, $title);
200
            }
201
        }
202
        else
203
        {
204
            return new Link (str_replace('%2F','/',rawurlencode ($book->path."/".$filename)), $mime, $rel, $title);
205
        }
206
    }
207
}
208