forked from grumpydevelop/federator
		
	folder restructuring, namespace adjustments
This commit is contained in:
		
							parent
							
								
									0d3a7c871b
								
							
						
					
					
						commit
						c4596ace03
					
				
					 24 changed files with 134 additions and 111 deletions
				
			
		
							
								
								
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
composer.lock
 | 
			
		||||
vendor
 | 
			
		||||
php/version.php
 | 
			
		||||
php/federator/version.php
 | 
			
		||||
php-docs
 | 
			
		||||
.phpdoc
 | 
			
		||||
phpdoc
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -367,7 +367,5 @@ return [
 | 
			
		|||
    // A list of individual files to include in analysis
 | 
			
		||||
    // with a path relative to the root directory of the
 | 
			
		||||
    // project.
 | 
			
		||||
    'file_list' => [
 | 
			
		||||
        'maintenance.php'
 | 
			
		||||
    ],
 | 
			
		||||
    'file_list' => [],
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,8 +9,8 @@ path = '../templates/'
 | 
			
		|||
compiledir = '../cache'
 | 
			
		||||
 | 
			
		||||
[plugins]
 | 
			
		||||
rediscache = '../plugins/rediscache.php'
 | 
			
		||||
dummy = '../plugins/dummyconnector.php'
 | 
			
		||||
rediscache = 'rediscache.php'
 | 
			
		||||
dummy = 'dummyconnector.php'
 | 
			
		||||
 | 
			
		||||
[maintenance]
 | 
			
		||||
username = 'federatoradmin'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,8 +12,6 @@ if (! array_key_exists('_call', $_REQUEST)) {
 | 
			
		|||
}
 | 
			
		||||
date_default_timezone_set("Europe/Berlin");
 | 
			
		||||
spl_autoload_register(static function (string $className) {
 | 
			
		||||
    // strip Federator from class path
 | 
			
		||||
    $className = str_replace('Federator\\', '', $className);
 | 
			
		||||
    include '../php/' . str_replace("\\", "/", strtolower($className)) . '.php';
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,95 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * SPDX-FileCopyrightText: 2024 Sascha Nitsch (grumpydeveloper) https://contentnation.net/@grumpydevelop
 | 
			
		||||
 * SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 *
 | 
			
		||||
 * @author Sascha Nitsch (grumpydeveloper)
 | 
			
		||||
 **/
 | 
			
		||||
 | 
			
		||||
function dbupgrade(\Federator\Main $main)
 | 
			
		||||
{
 | 
			
		||||
    $config = $main->getConfig();
 | 
			
		||||
    $maintenance = $config['maintenance'];
 | 
			
		||||
    $main->openDatabase($maintenance['username'], $maintenance['password']);
 | 
			
		||||
    $dbh = $main->getDatabase();
 | 
			
		||||
    if ($dbh === false) {
 | 
			
		||||
        die();
 | 
			
		||||
    }
 | 
			
		||||
    $sql = 'select `value` from settings where `key`="database_version"';
 | 
			
		||||
    try {
 | 
			
		||||
        $sth = $dbh->query($sql);
 | 
			
		||||
    } catch (mysqli_sql_exception) {
 | 
			
		||||
        $sth = false;
 | 
			
		||||
    }
 | 
			
		||||
    $version = '0';
 | 
			
		||||
    if ($sth instanceof mysqli_result) {
 | 
			
		||||
        $row = $sth->fetch_row();
 | 
			
		||||
        if (is_array($row)) {
 | 
			
		||||
            $version = $row[0];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    echo "current version: $version\n";
 | 
			
		||||
    $updateFolder = opendir("sql");
 | 
			
		||||
    if ($updateFolder === false) {
 | 
			
		||||
        die();
 | 
			
		||||
    }
 | 
			
		||||
    $updates = [];
 | 
			
		||||
    while (($file = readdir($updateFolder)) !== false) {
 | 
			
		||||
        $matches = [];
 | 
			
		||||
        if (preg_match('/^(\d{4}-\d{2}-\d{2}).sql$/', $file, $matches) == 1) {
 | 
			
		||||
            if (strcmp($matches[1], $version) > 0) { // file is newer than our version
 | 
			
		||||
                $updates[] = $file;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    closedir($updateFolder);
 | 
			
		||||
    sort($updates);
 | 
			
		||||
    foreach ($updates as $update) {
 | 
			
		||||
        echo "applying update $update\n";
 | 
			
		||||
        $u = fopen('sql/' . $update, 'r');
 | 
			
		||||
        if ($u !== false) {
 | 
			
		||||
            try {
 | 
			
		||||
                $dbh->begin_transaction();
 | 
			
		||||
                // apply updates line by line
 | 
			
		||||
                while (($line = fgets($u)) !== false) {
 | 
			
		||||
                    $line = trim($line);
 | 
			
		||||
                    $dbh->query($line);
 | 
			
		||||
                }
 | 
			
		||||
                $dbh->commit();
 | 
			
		||||
            } catch (mysqli_sql_exception $e) {
 | 
			
		||||
                //print_r($e);
 | 
			
		||||
                echo "error while applying update $update: " . $e->getMessage() . "\n";
 | 
			
		||||
            }
 | 
			
		||||
            fclose($u);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function printUsage()
 | 
			
		||||
{
 | 
			
		||||
    echo "usage php maintenance.php <command>\n";
 | 
			
		||||
    echo "command can be one of:\n";
 | 
			
		||||
    echo " dbupgrade - this upgrades the db to the most recent version. Run this after you updated the program files\n";
 | 
			
		||||
    exit();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
date_default_timezone_set("Europe/Berlin");
 | 
			
		||||
spl_autoload_register(static function (string $className) {
 | 
			
		||||
    $root = array_key_exists('DOCUMENT_ROOT', $_SERVER) ? $_SERVER['DOCUMENT_ROOT'] : '';
 | 
			
		||||
    // strip Federator from class path
 | 
			
		||||
    $className = str_replace('Federator\\', '', $className);
 | 
			
		||||
    include $root . 'php/' . str_replace("\\", "/", strtolower($className)) . '.php';
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
if ($argc < 2) {
 | 
			
		||||
    printUsage();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$main = new \Federator\Main('');
 | 
			
		||||
switch ($argv[1]) {
 | 
			
		||||
    case 'dbupgrade':
 | 
			
		||||
        dbupgrade($main);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        printUsage();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ class User
 | 
			
		|||
 | 
			
		||||
    /**
 | 
			
		||||
     * check if use has asked permission
 | 
			
		||||
     * @param string $p @unused-param
 | 
			
		||||
     * @param string $p
 | 
			
		||||
     *        permission to check
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool true if user has permission, false if not
 | 
			
		||||
| 
						 | 
				
			
			@ -79,11 +79,11 @@ class Main
 | 
			
		|||
    /**
 | 
			
		||||
     * constructor
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $rootDir root directory
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct($rootDir = '../')
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    {
 | 
			
		||||
        $this->responseCode = 200;
 | 
			
		||||
        $rootDir = $_SERVER['DOCUMENT_ROOT'] . '../';
 | 
			
		||||
        $config = parse_ini_file($rootDir . 'config.ini', true);
 | 
			
		||||
        if ($config !== false) {
 | 
			
		||||
            $this->config = $config;
 | 
			
		||||
| 
						 | 
				
			
			@ -141,9 +141,10 @@ class Main
 | 
			
		|||
    public function loadPlugins() : void
 | 
			
		||||
    {
 | 
			
		||||
        if (array_key_exists('plugins', $this->config)) {
 | 
			
		||||
            $basepath = $_SERVER['DOCUMENT_ROOT'] . '../plugins/federator/';
 | 
			
		||||
            $plugins = $this->config['plugins'];
 | 
			
		||||
            foreach ($plugins as $name => $file) {
 | 
			
		||||
                require_once($file);
 | 
			
		||||
                require_once($basepath . $file);
 | 
			
		||||
                $fktn = 'Federator\\' . $name . '_load';
 | 
			
		||||
                if (function_exists($fktn)) {
 | 
			
		||||
                    $fktn($this);
 | 
			
		||||
							
								
								
									
										121
									
								
								php/federator/maintenance.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								php/federator/maintenance.php
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,121 @@
 | 
			
		|||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * SPDX-FileCopyrightText: 2024 Sascha Nitsch (grumpydeveloper) https://contentnation.net/@grumpydevelop
 | 
			
		||||
 * SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 *
 | 
			
		||||
 * @author Sascha Nitsch (grumpydeveloper)
 | 
			
		||||
 **/
 | 
			
		||||
namespace Federator;
 | 
			
		||||
 | 
			
		||||
class Maintenance
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * run maintenance
 | 
			
		||||
     *
 | 
			
		||||
     * @param int $argc number of arguments
 | 
			
		||||
     * @param string[] $argv arguments
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function run($argc, $argv)
 | 
			
		||||
    {
 | 
			
		||||
        date_default_timezone_set("Europe/Berlin");
 | 
			
		||||
        spl_autoload_register(static function (string $className) {
 | 
			
		||||
            $root = $_SERVER['DOCUMENT_ROOT'];
 | 
			
		||||
            include $root . '../php/' . str_replace("\\", "/", strtolower($className)) . '.php';
 | 
			
		||||
        });
 | 
			
		||||
        if ($argc < 2) {
 | 
			
		||||
            self::printUsage();
 | 
			
		||||
        }
 | 
			
		||||
        // pretend that we are running from web directory
 | 
			
		||||
        $_SERVER['DOCUMENT_ROOT'] = realpath('../../htdocs') . '/';
 | 
			
		||||
        $main = new \Federator\Main();
 | 
			
		||||
        switch ($argv[1]) {
 | 
			
		||||
            case 'dbupgrade':
 | 
			
		||||
                self::dbupgrade($main);
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                self::printUsage();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * upgrade database to newest version
 | 
			
		||||
     *
 | 
			
		||||
     * @param \Federator\Main $main main instance
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function dbupgrade($main)
 | 
			
		||||
    {
 | 
			
		||||
        $config = $main->getConfig();
 | 
			
		||||
        $maintenance = $config['maintenance'];
 | 
			
		||||
        $main->openDatabase($maintenance['username'], $maintenance['password']);
 | 
			
		||||
        $dbh = $main->getDatabase();
 | 
			
		||||
        if ($dbh === false) {
 | 
			
		||||
            die();
 | 
			
		||||
        }
 | 
			
		||||
        $sql = 'select `value` from settings where `key`="database_version"';
 | 
			
		||||
        try {
 | 
			
		||||
            $sth = $dbh->query($sql);
 | 
			
		||||
        } catch (\mysqli_sql_exception) {
 | 
			
		||||
            $sth = false;
 | 
			
		||||
        }
 | 
			
		||||
        $version = '0';
 | 
			
		||||
        if ($sth instanceof \mysqli_result) {
 | 
			
		||||
            $row = $sth->fetch_row();
 | 
			
		||||
            if (is_array($row)) {
 | 
			
		||||
                $version = $row[0];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        echo "current version: $version\n";
 | 
			
		||||
        $root = $_SERVER['DOCUMENT_ROOT'] . '../';
 | 
			
		||||
        $updateFolder = opendir($root . 'sql');
 | 
			
		||||
        if ($updateFolder === false) {
 | 
			
		||||
            die();
 | 
			
		||||
        }
 | 
			
		||||
        $updates = [];
 | 
			
		||||
        while (($file = readdir($updateFolder)) !== false) {
 | 
			
		||||
            $matches = [];
 | 
			
		||||
            if (preg_match('/^(\d{4}-\d{2}-\d{2}).sql$/', $file, $matches) == 1) {
 | 
			
		||||
                if (strcmp($matches[1], $version) > 0) { // file is newer than our version
 | 
			
		||||
                    $updates[] = $file;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        closedir($updateFolder);
 | 
			
		||||
        sort($updates);
 | 
			
		||||
        foreach ($updates as $update) {
 | 
			
		||||
            echo "applying update $update\n";
 | 
			
		||||
            $u = fopen($root . 'sql/' . $update, 'r');
 | 
			
		||||
            if ($u !== false) {
 | 
			
		||||
                try {
 | 
			
		||||
                    $dbh->begin_transaction();
 | 
			
		||||
                    // apply updates line by line
 | 
			
		||||
                    while (($line = fgets($u)) !== false) {
 | 
			
		||||
                        $line = trim($line);
 | 
			
		||||
                        $dbh->query($line);
 | 
			
		||||
                    }
 | 
			
		||||
                    $dbh->commit();
 | 
			
		||||
                } catch (\mysqli_sql_exception $e) {
 | 
			
		||||
                    echo "error while applying update $update: " . $e->getMessage() . "\n";
 | 
			
		||||
                }
 | 
			
		||||
                fclose($u);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * print usage of maintenance tool
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function printUsage()
 | 
			
		||||
    {
 | 
			
		||||
        echo "usage php maintenance.php <command>\n";
 | 
			
		||||
        echo "command can be one of:\n";
 | 
			
		||||
        echo " dbupgrade - this upgrades the db to the most recent version. Run this after you updated the program files\n";
 | 
			
		||||
        exit();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Maintenance::run($argc, $argv);
 | 
			
		||||
| 
						 | 
				
			
			@ -35,9 +35,9 @@ class RedisCache implements Cache
 | 
			
		|||
    private $redis;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * user cache time to life
 | 
			
		||||
     * user cache time to live in secods
 | 
			
		||||
     *
 | 
			
		||||
     * @var int time to life in secons
 | 
			
		||||
     * @var int $userTTL
 | 
			
		||||
     */
 | 
			
		||||
    private $userTTL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
git log | head -n1 | awk '{print "<?php\nglobal $version;\n$version=\"" $2 "\";\n"}' > php/version.php
 | 
			
		||||
vendor/phan/phan/phan
 | 
			
		||||
git log | head -n1 | awk '{print "<?php\nglobal $version;\n$version=\"" $2 "\";\n"}' > php/federator/version.php
 | 
			
		||||
vendor/bin/phan
 | 
			
		||||
./phpdoc
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue