2017-11-08 17:39:50 +01:00
|
|
|
<?php if(count(get_included_files()) ==1) exit("Direct access not permitted.");
|
|
|
|
|
|
|
|
class Programs
|
|
|
|
{
|
2018-01-26 21:49:09 +01:00
|
|
|
const URL_ORDER =
|
|
|
|
[
|
|
|
|
'github',
|
|
|
|
'sourceforge',
|
|
|
|
|
|
|
|
'download',
|
|
|
|
'playstore',
|
|
|
|
'amazonappstore',
|
|
|
|
'windowsstore',
|
|
|
|
'itunesstore',
|
|
|
|
|
|
|
|
'homepage',
|
|
|
|
'wiki',
|
|
|
|
'alternativeto',
|
|
|
|
];
|
|
|
|
|
|
|
|
const LICENSES =
|
|
|
|
[
|
|
|
|
'MIT' => 'https://choosealicense.com/licenses/mit/',
|
|
|
|
'Unlicense' => 'https://choosealicense.com/licenses/unlicense/',
|
|
|
|
'GPL-3.0' => 'https://choosealicense.com/licenses/gpl-3.0/',
|
|
|
|
'Apache-2.0' => 'https://choosealicense.com/licenses/apache-2.0/',
|
|
|
|
'Mozilla-2.0' => 'https://choosealicense.com/licenses/mpl-2.0/',
|
|
|
|
];
|
|
|
|
|
2018-01-03 22:08:56 +01:00
|
|
|
public static function readSingle($a)
|
2017-11-08 17:39:50 +01:00
|
|
|
{
|
2018-01-04 01:11:41 +01:00
|
|
|
$a['thumbnail_url'] = '/data/images/program_thumbnails/' . $a['internal_name'] . '.png';
|
2018-01-20 03:05:15 +01:00
|
|
|
$a['file_longdescription'] = (__DIR__ . '/../statics/programs/' . $a['internal_name'] . '_description.md');
|
2018-01-04 01:11:41 +01:00
|
|
|
$a['url'] = '/programs/view/' . $a['internal_name'];
|
|
|
|
|
2017-11-08 17:39:50 +01:00
|
|
|
return $a;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function listAll()
|
|
|
|
{
|
2018-01-03 22:08:56 +01:00
|
|
|
$all = require (__DIR__ . '/../statics/programs/__all.php');
|
|
|
|
|
|
|
|
return array_map('self::readSingle', $all);
|
2018-01-03 21:02:40 +01:00
|
|
|
}
|
|
|
|
|
2018-01-04 16:55:26 +01:00
|
|
|
public static function listAllNewestFirst($filter = '')
|
2018-01-03 21:02:40 +01:00
|
|
|
{
|
|
|
|
$data = self::listAll();
|
|
|
|
usort($data, function($a, $b) { return strcasecmp($b['add_date'], $a['add_date']); });
|
2018-01-04 16:55:26 +01:00
|
|
|
if ($filter !== '') $data = array_filter($data, function($a) use($filter) { return strtolower($a['category']) === strtolower($filter); });
|
2018-01-03 21:02:40 +01:00
|
|
|
return $data;
|
2017-11-08 17:39:50 +01:00
|
|
|
}
|
2017-11-20 17:15:12 +01:00
|
|
|
|
|
|
|
public static function listUpdateData()
|
|
|
|
{
|
|
|
|
$a = require (__DIR__ . '/../statics/updates/programupdates.php');
|
|
|
|
return $a;
|
|
|
|
}
|
2018-01-20 03:05:15 +01:00
|
|
|
|
|
|
|
public static function getProgramByInternalName($id)
|
|
|
|
{
|
|
|
|
foreach (self::listAll() as $prog) {
|
|
|
|
if (strcasecmp($prog['internal_name'], $id) === 0) return $prog;
|
|
|
|
if ($prog['internal_name_alt'] !== null && strcasecmp($prog['internal_name_alt'], $id) === 0) return $prog;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function getProgramDescription($prog)
|
|
|
|
{
|
|
|
|
return file_get_contents($prog['file_longdescription']);
|
|
|
|
}
|
2018-01-26 21:49:09 +01:00
|
|
|
|
|
|
|
public static function urlComparator($a, $b)
|
|
|
|
{
|
|
|
|
$ia = array_search($a, Programs::URL_ORDER);
|
|
|
|
$ib = array_search($b, Programs::URL_ORDER);
|
|
|
|
|
|
|
|
if ($ia === false && $ib === false) return strcasecmp($a, $b);
|
|
|
|
if ($ia === false && $ib !== false) return +1; // sort [IA | IB]
|
|
|
|
if ($ia !== false && $ib === false) return -1; // sort [IB | IA]
|
|
|
|
|
|
|
|
return ($ia < $ib) ? -1 : +1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function sortUrls($urls)
|
|
|
|
{
|
|
|
|
uksort($urls, 'self::urlComparator');
|
|
|
|
return $urls;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function getLicenseUrl($license)
|
|
|
|
{
|
|
|
|
return self::LICENSES[$license];
|
|
|
|
}
|
2017-11-08 17:39:50 +01:00
|
|
|
}
|