Passed
Push — master ( 47b2f5...618edf )
by Goffy
03:43
created

index.php (1 issue)

Labels
Severity
1
<?php
2
/*
3
 You may not change or alter any portion of this comment or credits
4
 of supporting developers from this source code or any supporting source code
5
 which is considered copyrighted (c) material of the original comment or credit authors.
6
7
 This program is distributed in the hope that it will be useful,
8
 but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10
*/
11
12
/**
13
 * wgGitHub module for xoops
14
 *
15
 * @copyright      2020 XOOPS Project (https://xooops.org)
16
 * @license        GPL 2.0 or later
17
 * @package        wggithub
18
 * @since          1.0
19
 * @min_xoops      2.5.10
20
 * @author         Goffy - XOOPS Development Team - Email:<[email protected]> - Website:<https://wedega.com>
21
 */
22
23
use Xmf\Request;
24
use XoopsModules\Wggithub;
25
use XoopsModules\Wggithub\{
26
    Constants,
27
    Helper,
28
    Github\GithubClient
29
};
30
31
require __DIR__ . '/header.php';
32
$GLOBALS['xoopsOption']['template_main'] = 'wggithub_index.tpl';
33
include_once \XOOPS_ROOT_PATH . '/header.php';
34
35
// Permissions
36
$permGlobalView = $permissionsHandler->getPermGlobalView();
37
if (!$permGlobalView) {
38
    $GLOBALS['xoopsTpl']->assign('error', _NOPERM);
39
    require __DIR__ . '/footer.php';
40
}
41
$permGlobalRead   = $permissionsHandler->getPermGlobalRead();
42
$permReadmeUpdate = $permissionsHandler->getPermReadmeUpdate();
43
44
$op            = Request::getCmd('op', 'list');
45
$filterRelease = Request::getString('release', 'any');
46
$filterSortby  = Request::getString('sortby', 'update');
47
48
$GLOBALS['xoopsTpl']->assign('release', $filterRelease);
49
$GLOBALS['xoopsTpl']->assign('sortby', $filterSortby);
50
51
// Define Stylesheet
52
$GLOBALS['xoTheme']->addStylesheet($style, null);
53
$GLOBALS['xoTheme']->addStylesheet(WGGITHUB_URL . '/assets/css/tabs.css', null);
54
$keywords = [];
55
// 
56
$GLOBALS['xoopsTpl']->assign('xoops_icons32_url', XOOPS_ICONS32_URL);
57
$GLOBALS['xoopsTpl']->assign('wggithub_url', WGGITHUB_URL);
58
$GLOBALS['xoopsTpl']->assign('wggithub_image_url', WGGITHUB_IMAGE_URL);
59
//
60
$GLOBALS['xoopsTpl']->assign('permReadmeUpdate', $permReadmeUpdate);
61
$GLOBALS['xoopsTpl']->assign('permGlobalRead', $permGlobalRead);
62
63
$dirStart = [];
64
$dirLimit = [];
65
66
switch ($op) {
67
    case 'show':
68
    case 'list':
69
    case 'apiexceed':
70
    default:
71
        //check number of directories with auto_update
72
        $crDirectories = new \CriteriaCompo();
73
        $crDirectories->add(new \Criteria('dir_autoupdate', 1));
74
        $directoriesCount = $directoriesHandler->getCount($crDirectories);
75
        if ($directoriesCount > 0) {
76
            //check number of API calls
77
            $lastUpdate = 0;
78
            $crLogs = new \CriteriaCompo();
79
            $crLogs->add(new \Criteria('log_datecreated', (time() - 3600), '>'));
80
            $logsCount = $logsHandler->getCount($crLogs);
81
            if ($permGlobalRead && $logsCount < 60 && 'list' == $op) {
82
                $githubClient = GithubClient::getInstance();
83
                $githubClient->executeUpdate();
84
            }
85
            unset($crLogs);
86
        }
87
        unset($crDirectories);
88
        $crLogs = new \CriteriaCompo();
89
        $crLogs->add(new \Criteria('log_type', Constants::LOG_TYPE_UPDATE_END));
90
        $crLogs->add(new \Criteria('log_result', 'OK'));
91
        $crLogs->setStart(0);
92
        $crLogs->setLimit(1);
93
        $crLogs->setSort('log_id');
94
        $crLogs->setOrder('DESC');
95
        $logsAll = $logsHandler->getAll($crLogs);
96
        foreach (\array_keys($logsAll) as $i) {
97
            $lastUpdate = $logsAll[$i]->getVar('log_datecreated');
98
            $GLOBALS['xoopsTpl']->assign('lastUpdate', \formatTimestamp($lastUpdate, 'm'));
99
        }
100
        unset($crLogs);
101
        $crLogs = new \CriteriaCompo();
102
        $crLogs->setStart(0);
103
        $crLogs->setLimit(1);
104
        $crLogs->setSort('log_id');
105
        $crLogs->setOrder('DESC');
106
        $logsAll = $logsHandler->getAll($crLogs);
107
        foreach (\array_keys($logsAll) as $i) {
108
            if ($lastUpdate < $logsAll[$i]->getVar('log_datecreated')) {
109
                if (\strpos($logsAll[$i]->getVar('log_result'), 'API rate limit exceeded') > 0) {
110
                    $GLOBALS['xoopsTpl']->assign('apiexceed', true);
111
                } else {
112
                    $GLOBALS['xoopsTpl']->assign('apierror', true);
113
                }
114
            }
115
        }
116
        unset($crLogs);
117
118
        $menu  = Request::getInt('menu', 0);
119
120
        $crDirectories = new \CriteriaCompo();
121
        $crDirectories->add(new \Criteria('dir_online', 1));
122
        $crDirectories->setSort('dir_weight ASC, dir_id');
123
        $crDirectories->setOrder('ASC');
124
        $directoriesCount = $directoriesHandler->getCount($crDirectories);
125
        $GLOBALS['xoopsTpl']->assign('directoriesCount', $directoriesCount);
126
        if ($directoriesCount > 0) {
127
            $directoriesAll = $directoriesHandler->getAll($crDirectories);
128
            // Get All Directories
129
            $directories = [];
130
            foreach (\array_keys($directoriesAll) as $i) {
131
                $directories[$i] = $directoriesAll[$i]->getValuesDirectories();
132
                $dirName = $directoriesAll[$i]->getVar('dir_name');
133
                $dirFilterRelease = (bool)$directoriesAll[$i]->getVar('dir_filterrelease');
134
                $repos = [];
135
                $crRepositories = new \CriteriaCompo();
136
                //first block/parentheses
137
                $crRepo1 = new CriteriaCompo();
138
                $crRepo1->add(new Criteria('repo_user', $dirName));
139
                $crRepositories->add($crRepo1);
140
                //second
141
                $crRepo2 = new CriteriaCompo();
142
                $crRepo2->add(new Criteria('repo_status', Constants::STATUS_UPDATED));
143
                $crRepo2->add(new Criteria('repo_status', Constants::STATUS_UPTODATE), 'OR');
144
                $crRepositories->add($crRepo2);
145
                $repositoriesCountTotal = $repositoriesHandler->getCount($crRepositories);
146
                //third
147
                if ('any' === $filterRelease && $dirFilterRelease) {
148
                    $crRepo3 = new CriteriaCompo();
149
                    $crRepo3->add(new Criteria('repo_prerelease', 1));
150
                    $crRepo3->add(new Criteria('repo_release', 1), 'OR');
151
                    $crRepositories->add($crRepo3);
152
                } elseif ('final' === $filterRelease && $dirFilterRelease) {
153
                    $crRepo3 = new CriteriaCompo();
154
                    $crRepo3->add(new Criteria('repo_release', 1));
155
                    $crRepositories->add($crRepo3);
156
                }
157
                $repositoriesCount = $repositoriesHandler->getCount($crRepositories);
158
159
                $dirId = Request::getInt('dirId', 0);
160
                $dirStart[$i] = 0;
161
                $dirLimit[$i] = $helper->getConfig('userpager');
162
                if ($i == $dirId) {
163
                    $dirStart[$i] = Request::getInt('start', 0);
164
                    $dirLimit[$i] = Request::getInt('limit', 0);
165
                }
166
167
                $crRepositories->setStart($dirStart[$i]);
168
                $crRepositories->setLimit($dirLimit[$i]);
169
                switch ($filterSortby) {
170
                    case 'name':
171
                    default:
172
                        $crRepositories->setSort('repo_name');
173
                        $crRepositories->setOrder('ASC');
174
                        break;
175
                    case 'update':
176
                        $crRepositories->setSort('repo_updatedat');
177
                        $crRepositories->setOrder('DESC');
178
                        break;
179
                }
180
                if ($repositoriesCount > 0) {
181
                    $repositoriesAll = $repositoriesHandler->getAll($crRepositories);
182
                    foreach (\array_keys($repositoriesAll) as $j) {
183
                        $repoId = $repositoriesAll[$j]->getVar('repo_id');
184
                        $repos[$j] = $repositoriesAll[$j]->getValuesRepositories();
185
                        $repos[$j]['readme'] = ['content_clean' => _MA_WGGITHUB_README_NOFILE];
186
                        if ($repositoriesAll[$j]->getVar('repo_readme') > 0) {
187
                            $crReadmes = new \CriteriaCompo();
188
                            $crReadmes->add(new \Criteria('rm_repoid', $repoId));
189
                            $readmesAll = $readmesHandler->getAll($crReadmes);
190
                            foreach ($readmesAll as $readme) {
191
                                $repos[$j]['readme'] = $readme->getValuesReadmes();
192
                            }
193
                            unset($crReadmes, $readmesAll);
194
                        }
195
                        if ($repositoriesAll[$j]->getVar('repo_prerelease') > 0 || $repositoriesAll[$j]->getVar('repo_release') > 0) {
196
                            //$repos[$j]['releases'] = [];
197
                            $crReleases = new \CriteriaCompo();
198
                            $crReleases->add(new \Criteria('rel_repoid', $repoId));
199
                            $releasesAll = $releasesHandler->getAll($crReleases);
200
                            foreach ($releasesAll as $release) {
201
                                $repos[$j]['releases'][] = $release->getValuesReleases();
202
                            }
203
                            unset($crReleases, $releasesAll);
204
                        }
205
                    }
206
                    unset($repositoriesAll);
207
                }
208
                unset($crRepo1, $crRepo2, $crRepo3, $crRepositories);
209
                if ($repositoriesCount === $repositoriesCountTotal) {
210
                    $directories[$i]['countRepos'] = str_replace(['%s', '%t'], [$dirName, $repositoriesCountTotal], _MA_WGGITHUB_REPOSITORIES_COUNT2);
211
                } else {
212
                    $directories[$i]['countRepos'] = str_replace(['%s', '%r', '%t'], [$dirName, $repositoriesCount, $repositoriesCountTotal], _MA_WGGITHUB_REPOSITORIES_COUNT1);
213
                }
214
                $directories[$i]['repos'] = $repos;
215
                $directories[$i]['previousRepos'] = $dirStart[$i] > 0;
216
                $directories[$i]['previousOp'] = '&amp;dirId=' . $i . '&amp;start=' . ($dirStart[$i] - $dirLimit[$i]) . '&amp;limit=' . $dirLimit[$i] . '&amp;release=' . $filterRelease . '&amp;sortby=' . $filterSortby;
217
                $directories[$i]['nextRepos'] = ($repositoriesCount - $dirStart[$i]) > $limit;
218
                $directories[$i]['nextOp'] = '&amp;dirId=' . $i . '&amp;start=' . ($dirStart[$i] + $dirLimit[$i]) . '&amp;limit=' . $dirLimit[$i] . '&amp;release=' . $filterRelease . '&amp;sortby=' . $filterSortby;
219
                $GLOBALS['xoopsTpl']->assign('menu', $menu);
220
                $GLOBALS['xoopsTpl']->assign('directories', $directories);
221
            }
222
223
            unset($crDirectories, $directories);
224
225
            $GLOBALS['xoopsTpl']->assign('lang_thereare', \sprintf(\_MA_WGGITHUB_INDEX_THEREARE, $directoriesCount));
226
            $GLOBALS['xoopsTpl']->assign('divideby', $helper->getConfig('divideby'));
227
            $GLOBALS['xoopsTpl']->assign('numb_col', $helper->getConfig('numb_col'));
228
        }
229
230
        break;
231
    case 'update_dir':
232
        // Permissions
233
        if (!$permGlobalRead) {
234
            $GLOBALS['xoopsTpl']->assign('error', \_NOPERM);
235
            require __DIR__ . '/footer.php';
236
        }
237
        $dirName = Request::getString('dir_name', '');
238
        $redir   = 'index.php?op=list_afterupdate&amp;release=' . $filterRelease . '&amp;sortby=' . $filterSortby;
239
        $githubClient = GithubClient::getInstance();
240
        $result = $githubClient->executeUpdate($dirName);
241
        if ($result) {
242
            \redirect_header($redir, 2, \_MA_WGGITHUB_READGH_SUCCESS);
0 ignored issues
show
The function redirect_header was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

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

242
            /** @scrutinizer ignore-call */ \redirect_header($redir, 2, \_MA_WGGITHUB_READGH_SUCCESS);
Loading history...
243
        } else {
244
            \redirect_header($redir, 2, \_MA_WGGITHUB_READGH_ERROR_API);
245
        }
246
247
        break;
248
    case 'update_readme':
249
        // Permissions
250
        if (!$permReadmeUpdate) {
251
            $GLOBALS['xoopsTpl']->assign('error', \_NOPERM);
252
            require __DIR__ . '/footer.php';
253
        }
254
        $repoId   = Request::getInt('repo_id', 0);
255
        $repoUser = Request::getString('repo_user', 'none');
256
        $repoName = Request::getString('repo_name', 'none');
257
        $redir    = 'index.php?op=list_afterupdate&amp;release=' . $filterRelease . '&amp;sortby=' . $filterSortby;
258
        $result = $helper->getHandler('Readmes')->updateReadmes($repoId, $repoUser, $repoName);
259
        if ($result) {
260
            \redirect_header($redir, 2, \_MA_WGGITHUB_READGH_SUCCESS);
261
        } else {
262
            \redirect_header($redir, 2, \_MA_WGGITHUB_READGH_ERROR_API);
263
        }
264
        break;
265
}
266
267
$GLOBALS['xoopsTpl']->assign('table_type', $helper->getConfig('table_type'));
268
// Breadcrumbs
269
$xoBreadcrumbs[] = ['title' => \_MA_WGGITHUB_INDEX];
270
// Keywords
271
wggithubMetaKeywords($helper->getConfig('keywords') . ', ' . \implode(',', $keywords));
272
unset($keywords);
273
// Description
274
wggithubMetaDescription(\_MA_WGGITHUB_INDEX_DESC);
275
$GLOBALS['xoopsTpl']->assign('xoops_mpageurl', WGGITHUB_URL.'/index.php');
276
$GLOBALS['xoopsTpl']->assign('xoops_icons32_url', XOOPS_ICONS32_URL);
277
$GLOBALS['xoopsTpl']->assign('wggithub_upload_url', WGGITHUB_UPLOAD_URL);
278
require __DIR__ . '/footer.php';
279