mirror of
https://github.com/friendica/friendica
synced 2024-11-13 01:42:59 +00:00
Merge pull request #5831 from nupplaphil/addon_check
moving boot::check_addons to Friendica\Core\Addon::check
This commit is contained in:
commit
7ac652e20d
3 changed files with 67 additions and 65 deletions
56
boot.php
56
boot.php
|
@ -673,62 +673,6 @@ function run_update_function($x, $prefix)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Synchronise addons:
|
|
||||||
*
|
|
||||||
* system.addon contains a comma-separated list of names
|
|
||||||
* of addons which are used on this system.
|
|
||||||
* Go through the database list of already installed addons, and if we have
|
|
||||||
* an entry, but it isn't in the config list, call the uninstall procedure
|
|
||||||
* and mark it uninstalled in the database (for now we'll remove it).
|
|
||||||
* Then go through the config list and if we have a addon that isn't installed,
|
|
||||||
* call the install procedure and add it to the database.
|
|
||||||
*
|
|
||||||
* @param object $a App
|
|
||||||
*/
|
|
||||||
function check_addons(App $a)
|
|
||||||
{
|
|
||||||
$r = q("SELECT * FROM `addon` WHERE `installed` = 1");
|
|
||||||
if (DBA::isResult($r)) {
|
|
||||||
$installed = $r;
|
|
||||||
} else {
|
|
||||||
$installed = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
$addons = Config::get('system', 'addon');
|
|
||||||
$addons_arr = [];
|
|
||||||
|
|
||||||
if ($addons) {
|
|
||||||
$addons_arr = explode(',', str_replace(' ', '', $addons));
|
|
||||||
}
|
|
||||||
|
|
||||||
$a->addons = $addons_arr;
|
|
||||||
|
|
||||||
$installed_arr = [];
|
|
||||||
|
|
||||||
if (count($installed)) {
|
|
||||||
foreach ($installed as $i) {
|
|
||||||
if (!in_array($i['name'], $addons_arr)) {
|
|
||||||
Addon::uninstall($i['name']);
|
|
||||||
} else {
|
|
||||||
$installed_arr[] = $i['name'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count($addons_arr)) {
|
|
||||||
foreach ($addons_arr as $p) {
|
|
||||||
if (!in_array($p, $installed_arr)) {
|
|
||||||
Addon::install($p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Addon::loadHooks();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Used to end the current process, after saving session state.
|
* @brief Used to end the current process, after saving session state.
|
||||||
* @deprecated
|
* @deprecated
|
||||||
|
|
|
@ -172,7 +172,7 @@ if ($a->isInstallMode() && $a->module!="view") {
|
||||||
} else {
|
} else {
|
||||||
check_url($a);
|
check_url($a);
|
||||||
check_db(false);
|
check_db(false);
|
||||||
check_addons($a);
|
Addon::check();
|
||||||
}
|
}
|
||||||
|
|
||||||
Nav::setSelected('nothing');
|
Nav::setSelected('nothing');
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
namespace Friendica\Core;
|
namespace Friendica\Core;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
|
use Friendica\BaseObject;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
|
||||||
require_once 'include/dba.php';
|
require_once 'include/dba.php';
|
||||||
|
@ -12,8 +13,65 @@ require_once 'include/dba.php';
|
||||||
/**
|
/**
|
||||||
* Some functions to handle addons
|
* Some functions to handle addons
|
||||||
*/
|
*/
|
||||||
class Addon
|
class Addon extends BaseObject
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @brief Synchronise addons:
|
||||||
|
*
|
||||||
|
* system.addon contains a comma-separated list of names
|
||||||
|
* of addons which are used on this system.
|
||||||
|
* Go through the database list of already installed addons, and if we have
|
||||||
|
* an entry, but it isn't in the config list, call the uninstall procedure
|
||||||
|
* and mark it uninstalled in the database (for now we'll remove it).
|
||||||
|
* Then go through the config list and if we have a addon that isn't installed,
|
||||||
|
* call the install procedure and add it to the database.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function check()
|
||||||
|
{
|
||||||
|
$a = self::getApp();
|
||||||
|
|
||||||
|
$r = DBA::select('addon', [], ['installed' => 1]);
|
||||||
|
if (DBA::isResult($r)) {
|
||||||
|
$installed = DBA::toArray($r);
|
||||||
|
} else {
|
||||||
|
$installed = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$addons = Config::get('system', 'addon');
|
||||||
|
$addons_arr = [];
|
||||||
|
|
||||||
|
if ($addons) {
|
||||||
|
$addons_arr = explode(',', str_replace(' ', '', $addons));
|
||||||
|
}
|
||||||
|
|
||||||
|
$a->addons = $addons_arr;
|
||||||
|
|
||||||
|
$installed_arr = [];
|
||||||
|
|
||||||
|
if (count($installed)) {
|
||||||
|
foreach ($installed as $i) {
|
||||||
|
if (!in_array($i['name'], $addons_arr)) {
|
||||||
|
self::uninstall($i['name']);
|
||||||
|
} else {
|
||||||
|
$installed_arr[] = $i['name'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($addons_arr)) {
|
||||||
|
foreach ($addons_arr as $p) {
|
||||||
|
if (!in_array($p, $installed_arr)) {
|
||||||
|
self::install($p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self::loadHooks();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief uninstalls an addon.
|
* @brief uninstalls an addon.
|
||||||
*
|
*
|
||||||
|
@ -139,7 +197,7 @@ class Addon
|
||||||
*/
|
*/
|
||||||
public static function registerHook($hook, $file, $function, $priority = 0)
|
public static function registerHook($hook, $file, $function, $priority = 0)
|
||||||
{
|
{
|
||||||
$file = str_replace(get_app()->get_basepath() . DIRECTORY_SEPARATOR, '', $file);
|
$file = str_replace(self::getApp()->get_basepath() . DIRECTORY_SEPARATOR, '', $file);
|
||||||
|
|
||||||
$condition = ['hook' => $hook, 'file' => $file, 'function' => $function];
|
$condition = ['hook' => $hook, 'file' => $file, 'function' => $function];
|
||||||
$exists = DBA::exists('hook', $condition);
|
$exists = DBA::exists('hook', $condition);
|
||||||
|
@ -162,7 +220,7 @@ class Addon
|
||||||
*/
|
*/
|
||||||
public static function unregisterHook($hook, $file, $function)
|
public static function unregisterHook($hook, $file, $function)
|
||||||
{
|
{
|
||||||
$relative_file = str_replace(get_app()->get_basepath() . DIRECTORY_SEPARATOR, '', $file);
|
$relative_file = str_replace(self::getApp()->get_basepath() . DIRECTORY_SEPARATOR, '', $file);
|
||||||
|
|
||||||
// This here is only needed for fixing a problem that existed on the develop branch
|
// This here is only needed for fixing a problem that existed on the develop branch
|
||||||
$condition = ['hook' => $hook, 'file' => $file, 'function' => $function];
|
$condition = ['hook' => $hook, 'file' => $file, 'function' => $function];
|
||||||
|
@ -178,7 +236,7 @@ class Addon
|
||||||
*/
|
*/
|
||||||
public static function loadHooks()
|
public static function loadHooks()
|
||||||
{
|
{
|
||||||
$a = get_app();
|
$a = self::getApp();
|
||||||
$a->hooks = [];
|
$a->hooks = [];
|
||||||
$r = DBA::select('hook', ['hook', 'file', 'function'], [], ['order' => ['priority' => 'desc', 'file']]);
|
$r = DBA::select('hook', ['hook', 'file', 'function'], [], ['order' => ['priority' => 'desc', 'file']]);
|
||||||
|
|
||||||
|
@ -201,7 +259,7 @@ class Addon
|
||||||
*/
|
*/
|
||||||
public static function forkHooks($priority, $name, $data = null)
|
public static function forkHooks($priority, $name, $data = null)
|
||||||
{
|
{
|
||||||
$a = get_app();
|
$a = self::getApp();
|
||||||
|
|
||||||
if (is_array($a->hooks) && array_key_exists($name, $a->hooks)) {
|
if (is_array($a->hooks) && array_key_exists($name, $a->hooks)) {
|
||||||
foreach ($a->hooks[$name] as $hook) {
|
foreach ($a->hooks[$name] as $hook) {
|
||||||
|
@ -221,7 +279,7 @@ class Addon
|
||||||
*/
|
*/
|
||||||
public static function callHooks($name, &$data = null)
|
public static function callHooks($name, &$data = null)
|
||||||
{
|
{
|
||||||
$a = get_app();
|
$a = self::getApp();
|
||||||
|
|
||||||
if (is_array($a->hooks) && array_key_exists($name, $a->hooks)) {
|
if (is_array($a->hooks) && array_key_exists($name, $a->hooks)) {
|
||||||
foreach ($a->hooks[$name] as $hook) {
|
foreach ($a->hooks[$name] as $hook) {
|
||||||
|
@ -262,7 +320,7 @@ class Addon
|
||||||
*/
|
*/
|
||||||
public static function isApp($name)
|
public static function isApp($name)
|
||||||
{
|
{
|
||||||
$a = get_app();
|
$a = self::getApp();
|
||||||
|
|
||||||
if (is_array($a->hooks) && (array_key_exists('app_menu', $a->hooks))) {
|
if (is_array($a->hooks) && (array_key_exists('app_menu', $a->hooks))) {
|
||||||
foreach ($a->hooks['app_menu'] as $hook) {
|
foreach ($a->hooks['app_menu'] as $hook) {
|
||||||
|
@ -293,7 +351,7 @@ class Addon
|
||||||
*/
|
*/
|
||||||
public static function getInfo($addon)
|
public static function getInfo($addon)
|
||||||
{
|
{
|
||||||
$a = get_app();
|
$a = self::getApp();
|
||||||
|
|
||||||
$info = [
|
$info = [
|
||||||
'name' => $addon,
|
'name' => $addon,
|
||||||
|
|
Loading…
Reference in a new issue