• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

The-oGlow / ya-corapi / 19973072714

05 Dec 2025 07:00PM UTC coverage: 37.825%. First build
19973072714

push

github

web-flow
Push2master (#4)

11 of 51 new or added lines in 13 files covered. (21.57%)

713 of 1885 relevant lines covered (37.82%)

1.88 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

1.68
/src/Yacorapi/Projectdoc/Traits/ProjectdocTrait.php
1
<?php
2

3
declare(strict_types=1);
4

5
/*
6
 * This file is part of ezlogging
7
 *
8
 * (c) 2024 Oliver Glowa, coding.glowa.com
9
 *
10
 * This source file is subject to the Apache-2.0 license that is bundled
11
 * with this source code in the file LICENSE.
12
 */
13

14
namespace oglowa\tools\Yacorapi\Projectdoc\Traits;
15

16
use oglowa\tools\Yacorapi\ConstData;
17
use oglowa\tools\Yacorapi\IResponse;
18

19
trait ProjectdocTrait
20
{
21
    /** @var bool */
22
    private $traitInit = false;
23

24
    public function __construct()
2✔
25
    {
26
        $this->init();
2✔
27
    }
28

29
    /**
30
     * @SuppressWarnings("php:S115")
31
     */
32
    private function init(): void
×
33
    {
34
        if (!$this->traitInit) {
×
35
            define(__NAMESPACE__ . '\CSV_LINE_PDT_PROPERTY_HEADER', 'name;value,controls;document-key;document-url');
×
36
            define(__NAMESPACE__ . '\CSV_LINE_PDT_PROPERTY', '%s;%s;%s;%s;%s');
×
37

38
            define(__NAMESPACE__ . '\PDT_RES_MOD_STORAGE', 'storage');
×
39
            define(__NAMESPACE__ . '\PDT_RES_MOD_HTML', 'html');
×
40
            define(__NAMESPACE__ . '\PDT_RES_MOD_VALUE', 'value');
×
41

42
            define(__NAMESPACE__ . '\PDT_MEDIA_TYPE_JSON', 'json');
×
43
            define(__NAMESPACE__ . '\PDT_MEDIA_TYPE_XML', 'xml');
×
44

45
            define(__NAMESPACE__ . '\PDT_RESULT_START_INDEX', 0);
×
46
            define(__NAMESPACE__ . '\PDT_RESULT_PAGE_SIZE', 10);
×
47
            define(__NAMESPACE__ . '\PDT_RESULT_MAX_SIZE', 20);
×
48

49
            define(__NAMESPACE__ . '\PDT_DOCUMENT_URL', $this->constData->c(ConstData::KEY_CONF_BASE_URL) . '/rest/projectdoc/1/document');
×
50
            define(__NAMESPACE__ . '\PDT_PROPERTY_URL', \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_DOCUMENT_URL . '/%s/property');
×
51

52
            define(__NAMESPACE__ . '\PDT_PROP_DOCTYPE', 'Doctype');
×
53
            define(__NAMESPACE__ . '\PDT_PROP_NAME', 'Name');
×
54
            define(__NAMESPACE__ . '\PDT_PROP_SHORT_NAME', 'Short Name');
×
55
            define(__NAMESPACE__ . '\PDT_PROP_SHORT_DESCRIPTION', 'Short Description');
×
56
            define(__NAMESPACE__ . '\PDT_PROP_PARENT', 'Parent');
×
57
            define(__NAMESPACE__ . '\PDT_PROP_TYPE', 'Type');
×
58
            define(__NAMESPACE__ . '\PDT_PROP_ITERATION', 'Iteration');
×
59
            define(__NAMESPACE__ . '\PDT_PROP_AUDIENCE', 'Audience');
×
60
            define(__NAMESPACE__ . '\PDT_PROP_CATEGORIES', 'Categories');
×
61
            define(__NAMESPACE__ . '\PDT_PROP_SUBJECT', 'Subject');
×
62
            define(__NAMESPACE__ . '\PDT_PROP_TAGS', 'Tags');
×
63
            define(__NAMESPACE__ . '\PDT_PROP_FLAGS', 'Flags');
×
64
            define(__NAMESPACE__ . '\PDT_PROP_SORT_KEY', 'Sort Key');
×
65

66
            define(
×
67
                __NAMESPACE__ . '\PDT_PROP_ALL_DEFAULT',
×
68
                [
×
69
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_NAME,
×
70
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_SHORT_NAME,
×
71
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_SHORT_DESCRIPTION,
×
72
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_PARENT,
×
73
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_TYPE,
×
74
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_ITERATION,
×
75
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_AUDIENCE,
×
76
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_CATEGORIES,
×
77
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_SUBJECT,
×
78
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_TAGS,
×
79
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_FLAGS,
×
80
                    \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROP_SORT_KEY,
×
81
                ]
×
82
            );
×
83
            $this->traitInit = true;
×
84
        }
85
    }
86

87
    /**
88
     * @param string[] $propertyNames
89
     * @param string   $spaceKey
90
     * @param string   $where
91
     * @param string   $mediaType
92
     * @param string   $resourceMode
93
     *
94
     * @return string
95
     */
96
    private function preparePdtDocumentReadUrl(
×
97
        array $propertyNames,
98
        string $spaceKey,
99
        string $where = "",
100
        string $mediaType = 'json', // \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_MEDIA_TYPE_JSON
101
        string $resourceMode = 'storage' // \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_RES_MOD_STORAGE
102
    ): string {
103
        $this->init();
×
104

105
        $prepareUrl = sprintf(
×
106
            '%s.%s?resource-mode=%s&select=%s&from=%s',
×
107
            \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_DOCUMENT_URL,
×
108
            $mediaType,
×
109
            $resourceMode,
×
110
            rawurlencode(implode(',', $propertyNames)),
×
111
            $spaceKey
×
112
        );
×
113
        if (!empty($where)) {
×
114
            $prepareUrl .= sprintf('&where=%s', urlencode("\"" . $where . "\""));
×
115
        }
116

117
        $prepareUrl .= sprintf('&max-hit-count=%s', \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_RESULT_MAX_SIZE);
×
118
        $prepareUrl .= sprintf('&start-index=%s', \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_RESULT_START_INDEX);
×
119
        $prepareUrl .= sprintf('&max-result=%s', \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_RESULT_PAGE_SIZE);
×
120
        $prepareUrl .= sprintf('&expand=%s', 'property');
×
121

122
        return $prepareUrl;
×
123
    }
124

125
    private function preparePdtPropertyReadUrl(
×
126
        int $pageId,
127
        string $propertyName,
128
        string $resourceMode = 'storage' // \oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_RES_MOD_STORAGE
129
    ): string {
130
        $this->init();
×
131

132
        return sprintf(
×
133
            '%s/%s?resource-mode=%s',
×
134
            sprintf(\oglowa\tools\Yacorapi\Projectdoc\Traits\PDT_PROPERTY_URL, $pageId),
×
135
            rawurlencode($propertyName),
×
136
            $resourceMode
×
137
        );
×
138
    }
139

140
    public function checkDataPdtDocument(IResponse $response, bool $isQuite = false): bool
×
141
    {
142
        $hasData = $response->checkStatus();
×
143
        if ($hasData) {
×
144
            if (!($response->keyExists('document') && $response->keyExists('key-list'))) {
×
145
                $hasData = false;
×
146
            } else {
147
                if (!$isQuite) {
×
148
                    $this->showTotalsPdtDocument($response);
×
149
                }
150
            }
151
        }
152

153
        return $hasData;
×
154
    }
155

156
    /**
157
     * @param IResponse $response
158
     */
159
    private function showTotalsPdtDocument(IResponse $response): void
×
160
    {
161
        $total = $response->getValue(IResponse::KEY_MAX_RESULT);
×
162
        $size  = $response->getValue(IResponse::KEY_SIZE);
×
163
        $start = $response->getValue(IResponse::KEY_START_INDEX);
×
164
        $limit = $response->getValue(IResponse::KEY_MAX_RESULT);
×
165

166
        $this->logger->info('Total,Start,Size,Limit', [$total, $start, $size, $limit]);
×
167
    }
168

169
    /**
170
     * @param IResponse $response
171
     *
172
     * @return bool
173
     */
174
    public function checkDataPdtProperty(IResponse $response): bool
×
175
    {
176
        $status = $response->checkStatus();
×
177
        if ($status && !($response->keyExists(IResponse::KEY_NAME) && $response->keyExists(IResponse::KEY_VALUE))) {
×
178
            $status = false;
×
179
        }
180

181
        return $status;
×
182
    }
183

184
    public function showResultsPdt(IResponse $response, string $propertyName, ?int $idx = null): string
×
185
    {
186
        $line = '';
×
187

188
        if (isset($idx)) {
×
189
            $line = sprintf('%s;', $idx);
×
190
        }
191
        $line .= $this->prepareCsvLinePdtProperty($response, $propertyName);
×
192

193
        return $line;
×
194
    }
195

196
    /**
197
     * @param IResponse $response
198
     * @param string    $propertyName
199
     *
200
     * @return string
201
     */
202
    private function prepareCsvLinePdtProperty(IResponse $response, string $propertyName = ""): string
×
203
    {
204
        $line = "";
×
205
        if ($response->isResultsAvailable() && $response->keyExists('name')) {
×
206
            $line .= $this->prepareCsvLine(
×
207
                \oglowa\tools\Yacorapi\Projectdoc\Traits\CSV_LINE_PDT_PROPERTY,
×
208
                $response->getValue('name'),
×
209
                $response->getValue('value'),
×
210
                $response->getValue('controls'),
×
211
                $response->getValue('document-key') ?? '',
×
212
                $response->getValue('document-url') ?? ''
×
213
            );
×
214
        } else {
NEW
215
            if (!empty($propertyName)) {
×
NEW
216
                $line .= $this->prepareCsvLine(\oglowa\tools\Yacorapi\Projectdoc\Traits\CSV_LINE_PDT_PROPERTY, $propertyName, '', '', '', '');
×
217
            }
218
        }
219

220
        return $line;
×
221
    }
222

223
    /**
224
     * @param string                     $format
225
     * @param null|bool|float|int|string $param
226
     *
227
     * @return false|string
228
     */
229
    private function prepareCsvLine(string $format, ...$param)
×
230
    {
231
        return sprintf($format . "\n", ...$param);
×
232
    }
233

234
    /**
235
     * @param int    $pageId
236
     * @param string $propertyName
237
     *
238
     * @return IResponse
239
     */
240
    public function pdtReadProperty(int $pageId, string $propertyName): IResponse
×
241
    {
242
        $prepareUrl = $this->preparePdtPropertyReadUrl($pageId, $propertyName);
×
243

244
        return $this->exec($prepareUrl);
×
245
    }
246

247
    /**
248
     * @param string[] $propertyNames
249
     * @param string   $spaceKey
250
     * @param string   $where
251
     * @param string   $mediaType
252
     * @param string   $resourceMode
253
     *
254
     * @return IResponse
255
     */
256
    public function pdtReadDocument(
×
257
        array $propertyNames,
258
        string $spaceKey,
259
        string $where,
260
        string $mediaType = PDT_MEDIA_TYPE_JSON,
261
        string $resourceMode = PDT_RES_MOD_STORAGE
262
    ): IResponse {
263
        $prepareUrl = $this->preparePdtDocumentReadUrl($propertyNames, $spaceKey, $where, $mediaType, $resourceMode);
×
264

265
        return $this->exec($prepareUrl);
×
266
    }
267
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc