sintonia/legacy/public/setup/media-setup.php

160 lines
5.1 KiB
PHP
Raw Normal View History

2014-12-09 23:48:16 +01:00
<?php
define('CONFIG_PATH', dirname(__DIR__, 2) . '/application/configs/');
2021-10-11 16:10:47 +02:00
define('DEFAULT_STOR_DIR', '/srv/airtime/stor/');
2014-12-09 23:48:16 +01:00
require_once dirname(__DIR__, 2) . '/vendor/jooola/propel1/runtime/lib/Propel.php';
2014-12-09 23:48:16 +01:00
2021-10-11 16:10:47 +02:00
require_once CONFIG_PATH . 'conf.php';
require_once dirname(__DIR__, 2) . '/application/models/airtime/map/CcMusicDirsTableMap.php';
2021-10-11 16:10:47 +02:00
require_once dirname(__DIR__, 2) . '/application/models/airtime/om/BaseCcMusicDirsQuery.php';
2021-10-11 16:10:47 +02:00
require_once dirname(__DIR__, 2) . '/application/models/airtime/CcMusicDirsQuery.php';
2021-10-11 16:10:47 +02:00
require_once dirname(__DIR__, 2) . '/application/models/airtime/om/BaseCcMusicDirs.php';
2021-10-11 16:10:47 +02:00
require_once dirname(__DIR__, 2) . '/application/models/airtime/CcMusicDirs.php';
2021-10-11 16:10:47 +02:00
require_once dirname(__DIR__, 2) . '/application/models/airtime/om/BaseCcMusicDirsPeer.php';
2021-10-11 16:10:47 +02:00
require_once dirname(__DIR__, 2) . '/application/models/airtime/CcMusicDirsPeer.php';
2014-12-09 23:48:16 +01:00
/**
* Author: sourcefabric
2021-10-11 16:10:47 +02:00
* Date: 08/12/14.
2014-12-09 23:48:16 +01:00
*
* Class MediaSetup
*
* Wrapper class for validating and setting up media folder during the installation process
*/
2021-10-11 16:10:47 +02:00
class MediaSetup extends Setup
{
public const MEDIA_FOLDER = 'mediaFolder';
public const LIBRETIME_CONF_FILE_NAME = 'airtime.conf';
2021-10-11 16:10:47 +02:00
public static $path;
public static $message;
public static $errors = [];
2014-12-09 23:48:16 +01:00
2021-10-11 16:10:47 +02:00
public function __construct($settings)
{
2014-12-09 23:48:16 +01:00
self::$path = $settings[self::MEDIA_FOLDER];
}
/**
* @return array associative array containing a display message and fields with errors
*/
2021-10-11 16:10:47 +02:00
public function runSetup()
{
2014-12-09 23:48:16 +01:00
// If the path passed in is empty, set it to the default
if (strlen(self::$path) == 0) {
self::$path = DEFAULT_STOR_DIR;
if (!file_exists(DEFAULT_STOR_DIR)) {
mkdir(DEFAULT_STOR_DIR, 0755, true);
}
2014-12-09 23:48:16 +01:00
}
// Append a trailing / if they didn't
2021-10-11 16:10:47 +02:00
if (!(substr(self::$path, -1) == '/')) {
self::$path .= '/';
2014-12-09 23:48:16 +01:00
}
if (file_exists(self::$path)) {
$this->setupMusicDirectory();
} else {
2021-10-11 16:10:47 +02:00
self::$message = 'Invalid path!';
2014-12-09 23:48:16 +01:00
self::$errors[] = self::MEDIA_FOLDER;
}
2021-10-11 16:10:47 +02:00
2015-01-12 19:41:39 +01:00
// Finalize and move airtime.conf.temp
2021-10-11 16:10:47 +02:00
if (file_exists('/etc/airtime/')) {
2015-01-12 19:41:39 +01:00
if (!$this->moveAirtimeConfig()) {
2021-10-11 16:10:47 +02:00
self::$message = 'Error moving airtime.conf or deleting /tmp/airtime.conf.temp!';
self::$errors[] = 'ERR';
}
2021-10-11 16:10:47 +02:00
/*
* If we're upgrading from an old Airtime instance (pre-2.5.2) we rename their old
* airtime.conf to airtime.conf.tmp during the setup process. Now that we're done,
* we can rename it to airtime.conf.bak to avoid confusion.
*/
$fileName = LIBRETIME_CONF_DIR . '/' . self::LIBRETIME_CONF_FILE_NAME;
$tmpFile = $fileName . '.tmp';
$bakFile = $fileName . '.bak';
if (file_exists($tmpFile)) {
rename($tmpFile, $bakFile);
}
2015-01-12 19:41:39 +01:00
} else {
self::$message = "Failed to move airtime.conf; /etc/airtime doesn't exist!";
2021-10-11 16:10:47 +02:00
self::$errors[] = 'ERR';
2015-01-12 19:41:39 +01:00
}
2021-10-11 16:10:47 +02:00
return [
'message' => self::$message,
'errors' => self::$errors,
];
2014-12-09 23:48:16 +01:00
}
2015-01-12 19:41:39 +01:00
/**
2021-10-11 16:10:47 +02:00
* Moves /tmp/airtime.conf.temp to /etc/airtime.conf and then removes it to complete setup.
*
* @return bool false if either of the copy or removal operations fail
2015-01-12 19:41:39 +01:00
*/
2021-10-11 16:10:47 +02:00
public function moveAirtimeConfig()
{
return copy(AIRTIME_CONF_TEMP_PATH, LIBRETIME_CONF_DIR . '/' . self::LIBRETIME_CONF_FILE_NAME)
&& unlink(AIRTIME_CONF_TEMP_PATH);
2015-01-12 19:41:39 +01:00
}
2014-12-09 23:48:16 +01:00
/**
* Add the given directory to cc_music_dirs
* TODO Should we check for an existing entry in cc_music_dirs?
*/
2021-10-11 16:10:47 +02:00
public function setupMusicDirectory()
{
2014-12-09 23:48:16 +01:00
try {
$_SERVER['AIRTIME_CONF'] = AIRTIME_CONF_TEMP_PATH;
2021-10-11 16:10:47 +02:00
Propel::init(CONFIG_PATH . 'airtime-conf-production.php');
2014-12-09 23:48:16 +01:00
$con = Propel::getConnection();
2021-10-11 16:10:47 +02:00
} catch (Exception $e) {
2014-12-09 23:48:16 +01:00
self::$message = "Failed to insert media folder; database isn't configured properly!";
self::$errors[] = self::MEDIA_FOLDER;
2021-10-11 16:10:47 +02:00
2014-12-09 23:48:16 +01:00
return;
}
$this->runMusicDirsQuery($con);
}
2021-10-11 16:10:47 +02:00
public function runMusicDirsQuery($con)
{
2014-12-09 23:48:16 +01:00
try {
if ($this->checkMusicDirectoryExists($con)) {
$dir = CcMusicDirsQuery::create()->findPk(1, $con);
} else {
$dir = new CcMusicDirs();
}
$dir->setDirectory(self::$path)
2021-10-11 16:10:47 +02:00
->setType('stor')
->save()
;
self::$message = 'Successfully set up media folder!';
2014-12-09 23:48:16 +01:00
Propel::close();
unset($_SERVER['AIRTIME_CONF']);
} catch (Exception $e) {
2021-10-11 16:10:47 +02:00
self::$message = 'Failed to insert ' . self::$path . ' into cc_music_dirs';
2014-12-09 23:48:16 +01:00
self::$errors[] = self::MEDIA_FOLDER;
}
}
2021-10-11 16:10:47 +02:00
public function checkMusicDirectoryExists($con)
{
2014-12-09 23:48:16 +01:00
$entry = CcMusicDirsQuery::create()->findPk(1, $con);
2021-10-11 16:10:47 +02:00
2014-12-09 23:48:16 +01:00
return isset($entry) && $entry;
}
}