forked from GNUsocial/gnu-social
		
	[DATABASE][CONFIG] Loading defaults into database, doctrine static wrapper
This commit is contained in:
		| @@ -31,6 +31,7 @@ | ||||
| namespace App\Controller; | ||||
|  | ||||
| use App\Core\GSEvent as Event; | ||||
| use App\Util\Common; | ||||
| use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; | ||||
|  | ||||
| class NetworkPublic extends AbstractController | ||||
| @@ -39,6 +40,8 @@ class NetworkPublic extends AbstractController | ||||
|     { | ||||
|         Event::handle('Test', ['foobar']); | ||||
|  | ||||
|         Common::config('url', 'shortener'); | ||||
|  | ||||
|         return $this->render('network/public.html.twig', []); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -30,18 +30,18 @@ | ||||
|  | ||||
| namespace App\Core; | ||||
|  | ||||
| use Doctrine\ORM\EntityManager; | ||||
| use Doctrine\ORM\EntityManagerInterface; | ||||
|  | ||||
| abstract class DB | ||||
| { | ||||
|     private static ?EntityManager $em; | ||||
|     public static function setEntityManager($m): void | ||||
|     private static ?EntityManagerInterface $em; | ||||
|     public static function setManager($m): void | ||||
|     { | ||||
|         self::$em = $m; | ||||
|     } | ||||
|  | ||||
|     public static function __call($method, array $args = []) | ||||
|     public static function __callStatic(string $name, array $args) | ||||
|     { | ||||
|         $em->{$method}(...$args); | ||||
|         return self::$em->{$name}(...$args); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -33,16 +33,12 @@ namespace App\Core; | ||||
| abstract class DefaultSettings | ||||
| { | ||||
|     public static array $defaults; | ||||
|     public function setDefaults() | ||||
|     public static function setDefaults() | ||||
|     { | ||||
|         $this->defaults = | ||||
|             ['site' => | ||||
|                  ['name'                => 'Just another GNU social node', | ||||
|         self::$defaults = ['site' => ['name' => 'Just another GNU social node', | ||||
|                 'nickname'                   => 'gnusocial', | ||||
|                 'wildcard'                   => null, | ||||
|                   'server'              => $_server, | ||||
|                 'theme'                      => 'neo-gnu', | ||||
|                   'path'                => $_path, | ||||
|                 'logfile'                    => null, | ||||
|                 'logdebug'                   => false, | ||||
|                 'logo'                       => null, | ||||
| @@ -73,8 +69,7 @@ abstract class DefaultSettings | ||||
|                 'build'                      => 1,     // build number, for code-dependent cache | ||||
|             ], | ||||
|                 'security' => ['hash_algos' => ['sha1', 'sha256', 'sha512']],   // set to null for anything that hash_hmac() can handle (and is in hash_algos()) | ||||
|              'db' => | ||||
|                  ['database'             => null, // must be set | ||||
|                 'db'       => ['database'  => null, // must be set | ||||
|                     'schema_location'      => INSTALLDIR . '/classes', | ||||
|                     'class_location'       => INSTALLDIR . '/classes', | ||||
|                     'require_prefix'       => 'classes/', | ||||
| @@ -90,20 +85,17 @@ abstract class DefaultSettings | ||||
|                     'log_queries'          => false,     // true to log all DB queries | ||||
|                     'log_slow_queries'     => 0,         // if set, log queries taking over N seconds | ||||
|                     'mysql_foreign_keys'   => false, ],  // if set, enables experimental foreign key support on MySQL | ||||
|              'fix' => | ||||
|                  ['fancyurls'   => true,   // makes sure aliases in WebFinger etc. are not f'd by index.php/ URLs | ||||
|                 'fix' => ['fancyurls'      => true,   // makes sure aliases in WebFinger etc. are not f'd by index.php/ URLs | ||||
|                     'legacy_http'          => false,  // set this to true if you have upgraded your site from http=>https | ||||
|                 ], | ||||
|                 'log' => [ | ||||
|                     'debugtrace' => false,  // index.php handleError function, whether to include exception backtrace in log | ||||
|                 ], | ||||
|              'syslog' => | ||||
|                  ['appname'  => 'statusnet', // for syslog | ||||
|                 'syslog' => ['appname' => 'statusnet', // for syslog | ||||
|                     'priority'         => 'debug',     // XXX: currently ignored | ||||
|                     'facility'         => LOG_USER, | ||||
|                 ], | ||||
|              'queue' => | ||||
|                  ['enabled'               => true, | ||||
|                 'queue' => ['enabled'       => true, | ||||
|                     'daemon'                => false, // Use queuedaemon. Default to false | ||||
|                     'threads'               => null,  // an empty value here uses processor count to determine | ||||
|                     'subsystem'             => 'db',  // default to database, or 'stomp' | ||||
| @@ -130,23 +122,20 @@ abstract class DefaultSettings | ||||
|                     'max_retries'     => 10,    // drop messages after N failed attempts to process (Stomp) | ||||
|                     'dead_letter_dir' => false, // set to directory to save dropped messages into (Stomp) | ||||
|                 ], | ||||
|              'license' => | ||||
|                  ['type'  => 'cc',  // can be 'cc', 'allrightsreserved', 'private' | ||||
|                 'license' => ['type' => 'cc',  // can be 'cc', 'allrightsreserved', 'private' | ||||
|                     'owner'          => null,  // can be name of content owner e.g. for enterprise | ||||
|                     'url'            => 'https://creativecommons.org/licenses/by/3.0/', | ||||
|                     'title'          => 'Creative Commons Attribution 3.0', | ||||
|                   'image' => $_path . '/theme/licenses/cc_by_3.0_80x15.png', ], | ||||
|              'mail' => | ||||
|                  ['backend'      => 'mail', | ||||
|                     // 'image' => $_path . '/theme/licenses/cc_by_3.0_80x15.png', | ||||
|                 ], | ||||
|                 'mail' => ['backend' => 'mail', | ||||
|                     'params'         => null, | ||||
|                     'domain_check'   => true, | ||||
|                 ], | ||||
|              'nickname' => | ||||
|                  ['blacklist' => [], | ||||
|                 'nickname' => ['blacklist' => [], | ||||
|                     'featured'             => [], | ||||
|                 ], | ||||
|              'profile' => | ||||
|                  ['banned'       => [], | ||||
|                 'profile' => ['banned' => [], | ||||
|                     'biolimit'         => null, | ||||
|                     'changenick'       => false, | ||||
|                     'allowprivate'     => false,  // whether to allow setting stream to private ("only followers can read") | ||||
| @@ -156,32 +145,27 @@ abstract class DefaultSettings | ||||
|                     'move'             => true, | ||||
|                 ], | ||||
|                 'image'  => ['jpegquality' => 85], | ||||
|              'avatar' => | ||||
|                  ['server'   => null, | ||||
|                 'avatar' => ['server' => null, | ||||
|                     'dir'             => INSTALLDIR . '/file/avatar/', | ||||
|                   'url_base' => $_path . '/avatar/', | ||||
|                     // 'url_base' => $_path . '/avatar/', | ||||
|                     'ssl'     => null, | ||||
|                     'maxsize' => 300, | ||||
|                 ], | ||||
|                 'foaf'   => ['mbox_sha1sum' => false], | ||||
|              'public' => | ||||
|                  ['localonly'  => false, | ||||
|                 'public' => ['localonly' => false, | ||||
|                     'blacklist'          => [], | ||||
|                     'autosource'         => [], | ||||
|                 ], | ||||
|              'theme' => | ||||
|                  ['server' => null, | ||||
|                 'theme' => ['server' => null, | ||||
|                     'dir'            => null, | ||||
|                     'path'           => null, | ||||
|                     'ssl'            => null, | ||||
|                 ], | ||||
|              'usertheme' => | ||||
|                  ['linkcolor'       => 'black', | ||||
|                 'usertheme' => ['linkcolor' => 'black', | ||||
|                     'backgroundcolor'       => 'black', | ||||
|                 ], | ||||
|                 'theme_upload' => ['enabled' => extension_loaded('zip')], | ||||
|              'javascript'   => | ||||
|                   ['server'     => null, | ||||
|                 'javascript'   => ['server' => null, | ||||
|                     'path'                  => null, | ||||
|                     'ssl'                   => null, | ||||
|                     'bustframes'            => true, | ||||
| @@ -192,45 +176,37 @@ abstract class DefaultSettings | ||||
|                         'path' => null, | ||||
|                         'ssl'  => null, | ||||
|                     ], | ||||
|              'throttle' => | ||||
|                  ['enabled'  => false, // whether to throttle edits; false by default | ||||
|                 'throttle' => ['enabled' => false, // whether to throttle edits; false by default | ||||
|                     'count'              => 20,    // number of allowed messages in timespan | ||||
|                     'timespan'           => 600,   // timespan for throttling | ||||
|                 ], | ||||
|                 'invite' => ['enabled' => true], | ||||
|              'tag' => | ||||
|                  ['dropoff' => 864000.0,   // controls weighting based on age | ||||
|                 'tag'    => ['dropoff' => 864000.0,   // controls weighting based on age | ||||
|                     'cutoff'           => 86400 * 90, // only look at notices posted in last 90 days | ||||
|                 ], | ||||
|              'popular' => | ||||
|                  ['dropoff' => 864000.0,   // controls weighting based on age | ||||
|                 'popular' => ['dropoff' => 864000.0,   // controls weighting based on age | ||||
|                     'cutoff'            => 86400 * 90, // only look at notices favorited in last 90 days | ||||
|                 ], | ||||
|              'daemon' => | ||||
|                  ['piddir' => sys_get_temp_dir(), | ||||
|                 'daemon' => ['piddir' => sys_get_temp_dir(), | ||||
|                     'user'            => false, | ||||
|                     'group'           => false, | ||||
|                 ], | ||||
|                 'emailpost'     => ['enabled' => false], | ||||
|                 'sms'           => ['enabled' => false], | ||||
|                 'twitterimport' => ['enabled' => false], | ||||
|              'integration' => | ||||
|                  ['source' => 'StatusNet', // source attribute for Twitter | ||||
|                 'integration'   => ['source' => 'StatusNet', // source attribute for Twitter | ||||
|                     'taguri'                 => null,        // base for tag URIs | ||||
|                 ], | ||||
|              'twitter' => | ||||
|                  ['signin'          => true, | ||||
|                 'twitter' => ['signin' => true, | ||||
|                     'consumer_key'     => null, | ||||
|                     'consumer_secret'  => null, | ||||
|                 ], | ||||
|                 'cache' => ['base' => null], | ||||
|              'ping'  => | ||||
|                  ['notify'  => [], | ||||
|                 'ping'  => ['notify' => [], | ||||
|                     'timeout'        => 2, | ||||
|                 ], | ||||
|                 'inboxes' => ['enabled' => true], // ignored after 0.9.x | ||||
|              'newuser' => | ||||
|                 ['default' => null, | ||||
|                 'newuser' => ['default' => null, | ||||
|                     'welcome'           => null, | ||||
|                 ], | ||||
|                 'linkify' => // "bare" below means "without schema", like domain.com vs. https://domain.com | ||||
| @@ -238,15 +214,13 @@ abstract class DefaultSettings | ||||
|                         'bare_ipv4' => false, // convert IPv4 addresses to hyperlinks? | ||||
|                         'bare_ipv6' => false, // convert IPv6 addresses to hyperlinks? | ||||
|                     ], | ||||
|              'attachments' => | ||||
|                  ['server'    => null, | ||||
|                 'attachments' => ['server' => null, | ||||
|                     'dir'                  => INSTALLDIR . '/file/', | ||||
|                   'path'      => $_path . '/file/', | ||||
|                     // 'path'      => $_path . '/file/', | ||||
|                     'sslserver' => null, | ||||
|                     'sslpath'   => null, | ||||
|                     'ssl'       => null, | ||||
|                   'supported' => | ||||
|                       ['application/vnd.oasis.opendocument.chart'                 => 'odc', | ||||
|                     'supported' => ['application/vnd.oasis.opendocument.chart'     => 'odc', | ||||
|                         'application/vnd.oasis.opendocument.formula'               => 'odf', | ||||
|                         'application/vnd.oasis.opendocument.graphics'              => 'odg', | ||||
|                         'application/vnd.oasis.opendocument.graphics-template'     => 'otg', | ||||
| @@ -281,7 +255,7 @@ abstract class DefaultSettings | ||||
|                         'video/quicktime'                                          => 'mov', | ||||
|                         'video/webm'                                               => 'webm', | ||||
|                     ], | ||||
|                   'file_quota'    => common_get_preferred_php_upload_limit(), | ||||
|                     // 'file_quota'    => common_get_preferred_php_upload_limit(), | ||||
|                     'user_quota'    => 50000000, | ||||
|                     'monthly_quota' => 15000000, | ||||
|                     'uploads'       => true, | ||||
| @@ -291,8 +265,7 @@ abstract class DefaultSettings | ||||
|                     'extblacklist'  => [], | ||||
|                     'memory_limit'  => '1024M', // PHP's memory limit to use temporarily when handling images | ||||
|                 ], | ||||
|              'thumbnail' => | ||||
|                  ['dir'      => null,  // falls back to File::path('thumb') (equivalent to ['attachments']['dir'] .  '/thumb/') | ||||
|                 'thumbnail' => ['dir' => null,  // falls back to File::path('thumb') (equivalent to ['attachments']['dir'] .  '/thumb/') | ||||
|                     'path'            => null,  // falls back to generating a URL with File::url('thumb/$filename') (equivalent to ['attachments']['path'] . '/thumb/') | ||||
|                     'server'          => null,  // Only used if ['thumbnail']['path'] is NOT empty, and then it falls back to ['site']['server'], schema is decided from GNUsocial::useHTTPS() | ||||
|                     'crop'            => false, // overridden to true if thumb height === null | ||||
| @@ -303,20 +276,17 @@ abstract class DefaultSettings | ||||
|                     'animated'        => false, // null="UseFileAsThumbnail", false="can use still frame". true requires ImageMagickPlugin | ||||
|                 ], | ||||
|                 'application' => ['desclimit' => null], | ||||
|              'group'       => | ||||
|                  ['maxaliases' => 3, | ||||
|                 'group'       => ['maxaliases' => 3, | ||||
|                     'desclimit'                => null, | ||||
|                     'addtag'                   => true, | ||||
|                 ], | ||||
|              'peopletag' => | ||||
|                  ['maxtags'       => 100,             // maximum number of tags a user can create. | ||||
|                 'peopletag' => ['maxtags' => 100,             // maximum number of tags a user can create. | ||||
|                     'maxpeople'           => 500,             // maximum no. of people with the same tag by the same user | ||||
|                     'allow_tagging'       => ['all' => true], // equivalent to array('local' => true, 'remote' => true) | ||||
|                     'desclimit'           => null, | ||||
|                 ], | ||||
|                 'search'   => ['type' => 'like'], | ||||
|              'sessions' => | ||||
|                  ['handle'   => false, // whether to handle sessions ourselves | ||||
|                 'sessions' => ['handle' => false, // whether to handle sessions ourselves | ||||
|                     'debug'             => false, // debugging output for sessions | ||||
|                     'gc_limit'          => 1000,  // max sessions to expire at a time | ||||
|                 ], | ||||
| @@ -329,20 +299,16 @@ abstract class DefaultSettings | ||||
|                     ['Cache.DefinitionImpl'    => 'Serializer', | ||||
|                         'Cache.SerializerPath' => implode(DIRECTORY_SEPARATOR, [sys_get_temp_dir(), 'gnusocial']), | ||||
|                     ], | ||||
|              'notice' => | ||||
|                  ['contentlimit' => null, | ||||
|                 'notice' => ['contentlimit' => null, | ||||
|                     'allowprivate'          => false, // whether to allow users to "check the padlock" to publish notices available for their subscribers. | ||||
|                     'defaultscope'          => null,  // null means 1 if site/private, 0 otherwise | ||||
|                     'hidespam'              => true,  // Whether to hide silenced users from timelines | ||||
|                 ], | ||||
|                 'message'  => ['contentlimit' => null], | ||||
|              'location' => | ||||
|                  ['share'        => 'user', // whether to share location; 'always', 'user', 'never' | ||||
|                 'location' => ['share' => 'user', // whether to share location; 'always', 'user', 'never' | ||||
|                     'sharedefault'     => false, ], | ||||
|                 'logincommand' => ['disabled' => true], | ||||
|              'plugins'      => | ||||
|                  ['core' => | ||||
|                      ['Activity'            => [], | ||||
|                 'plugins'      => ['core' => ['Activity' => [], | ||||
|                     'ActivityModeration'                 => [], | ||||
|                     'ActivityVerb'                       => [], | ||||
|                     'ActivityVerbPost'                   => [], | ||||
| @@ -354,8 +320,7 @@ abstract class DefaultSettings | ||||
|                         'protocols' => ['ActivityPub' => 'Activitypub_profile', 'OStatus' => 'Ostatus_profile'], | ||||
|                     ], | ||||
|                 ], | ||||
|                   'default' => | ||||
|                       ['AccountManager'      => [], | ||||
|                     'default' => ['AccountManager' => [], | ||||
|                         'AntiBrute'                => [], | ||||
|                         'Blacklist'                => [], | ||||
|                         'Bookmark'                 => [], | ||||
| @@ -387,28 +352,22 @@ abstract class DefaultSettings | ||||
|                     'path'        => null, | ||||
|                     'sslpath'     => null, | ||||
|                 ], | ||||
|              'admin'      => | ||||
|                  ['panels' => | ||||
|                       ['site', 'user', 'paths', 'access', 'sessions', 'sitenotice', 'license', 'plugins', | ||||
|                       ] | ||||
|                 'admin' => ['panels' => ['site', 'user', 'paths', 'access', 'sessions', 'sitenotice', 'license', 'plugins', | ||||
|                 ], | ||||
|              'singleuser' => | ||||
|                  ['enabled'  => false, | ||||
|                 ], | ||||
|                 'singleuser' => ['enabled' => false, | ||||
|                     'nickname'             => null, | ||||
|                 ], | ||||
|              'robotstxt' => | ||||
|                  ['crawldelay' => 0, | ||||
|                 'robotstxt' => ['crawldelay' => 0, | ||||
|                     'disallow'               => ['main', 'settings', 'admin', 'search', 'message'], | ||||
|                 ], | ||||
|                 'api'      => ['realm' => null], | ||||
|              'nofollow' => | ||||
|                  ['subscribers' => true, | ||||
|                 'nofollow' => ['subscribers' => true, | ||||
|                     'members'                => true, | ||||
|                     'peopletag'              => true, | ||||
|                     'external'               => 'sometimes', // Options: 'sometimes', 'never', default = 'sometimes' | ||||
|                 ], | ||||
|              'url' => | ||||
|                  ['shortener'        => 'internal', | ||||
|                 'url' => ['shortener' => 'internal', | ||||
|                     'maxurllength'    => 100, | ||||
|                     'maxnoticelength' => -1, | ||||
|                 ], | ||||
| @@ -428,5 +387,21 @@ abstract class DefaultSettings | ||||
|                 'discovery'   => ['cors' => false], // Allow Cross-Origin Resource Sharing for service discovery (host-meta, XRD, etc.) | ||||
|                 'performance' => ['high' => false], // disable some features for higher performance; default false | ||||
|             ]; | ||||
|  | ||||
|         if ($_ENV['APP_DEBUG']) { | ||||
|             $config = DB::getRepository('\App\Entity\Config')->findAll(); | ||||
|             if (count($config) < count(self::$defaults)) { | ||||
|                 foreach (self::$defaults as $section => $def) { | ||||
|                     foreach ($def as $setting => $value) { | ||||
|                         if (!isset($config[$section][$setting])) { | ||||
|                             $config[$section][$setting] | ||||
|                                 = DB::getReference('\App\Entity\Config', ['section' => $section, 'setting' => $setting]); | ||||
|                             DB::persist($config[$section][$setting]->setValue(serialize($value))); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 DB::flush(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -63,7 +63,7 @@ class GNUsocial implements EventSubscriberInterface | ||||
|     public function __construct(ContainerInterface $container, | ||||
|                                 LoggerInterface $logger, | ||||
|                                 TranslatorInterface $translator, | ||||
|                                 EntityManager $em) | ||||
|                                 EntityManagerInterface $em) | ||||
|     { | ||||
|         $this->container      = $container; | ||||
|         $this->logger         = $logger; | ||||
| @@ -81,9 +81,9 @@ class GNUsocial implements EventSubscriberInterface | ||||
|         Log::setLogger($this->logger); | ||||
|         GSEvent::setDispatcher($event_dispatcher); | ||||
|         I18n::setTranslator($this->translator); | ||||
|         DB::setEntityManager($this->entity_manager); | ||||
|         DB::setManager($this->entity_manager); | ||||
|  | ||||
|         DefaultSettings::setDefault(); | ||||
|         DefaultSettings::setDefaults(); | ||||
|         ModulesManager::loadModules(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -44,6 +44,6 @@ abstract class Common | ||||
|      */ | ||||
|     public static function config(string $section, string $setting) | ||||
|     { | ||||
|         return DB::find('\App\Entity\Config', [$section, $setting]); | ||||
|         return DB::find('\App\Entity\Config', ['section' => $section, 'setting' => $setting]); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user