diff --git a/application/modules/backend/controllers/CgitlabController.php b/application/modules/backend/controllers/CgitlabController.php index aadea29a6..dde66624f 100644 --- a/application/modules/backend/controllers/CgitlabController.php +++ b/application/modules/backend/controllers/CgitlabController.php @@ -1,226 +1,226 @@ . * * Created: 06.08.2018 */ class Backend_CgitlabController extends Local_Controller_Action_CliAbstract { const filename = "members"; const filename_errors = "members"; protected $logfile; protected $errorlogfile; /** @var Zend_Config */ protected $config; protected $log; /** * @inheritDoc */ public function __construct( Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array() ) { parent::__construct($request, $response, $invokeArgs); $this->config = Zend_Registry::get('config')->settings->server->opencode; $this->log = new Local_Log_File($this->config->user_logfilename, self::filename); $this->_helper->viewRenderer->setNoRender(false); } /** * @throws Zend_Db_Statement_Exception * @throws Zend_Exception */ public function runAction() { ini_set('memory_limit', '1024M'); $force = (boolean)$this->getParam('force', false); $method = $this->getParam('method', 'create'); $this->log->info("METHOD: {$method}\n--------------\n"); if ($this->hasParam('member_id')) { $memberId = (int)$this->getParam('member_id'); $operator = $this->getParam('op', null); $members = $this->getMemberList($memberId, $operator); } else { $members = $this->getMemberList(); } if ('create' == $method) { $this->exportMembers($members, $force); return; } if ('update' == $method) { //$this->updateMembers($members); echo "not implemented"; return; } if ('validate' == $method) { $this->validateMembers($members, $force); return; } } /** * @param null $member_id * @param string $operator * * @return Zend_Db_Statement_Interface * @throws Zend_Db_Statement_Exception */ private function getMemberList($member_id = null, $operator = "=") { $filter = ""; if (empty($operator)) { $operator = "="; } if ($operator == "gt") { $operator = ">"; } if ($operator == "lt") { $operator = "<"; } if (isset($member_id)) { $filter = " AND `m`.`member_id` {$operator} " . $member_id; } $sql = " SELECT `mei`.`external_id`,`m`.`member_id`, `m`.`username`, `me`.`email_address`, `m`.`password`, `m`.`roleId`, `m`.`firstname`, `m`.`lastname`, `m`.`profile_image_url`, `m`.`created_at`, `m`.`changed_at`, `m`.`source_id`, `m`.`biography`, `m`.`is_active`, `m`.`is_deleted` FROM `member` AS `m` LEFT JOIN `member_email` AS `me` ON `me`.`email_member_id` = `m`.`member_id` AND `me`.`email_primary` = 1 LEFT JOIN `member_external_id` AS `mei` ON `mei`.`member_id` = `m`.`member_id` WHERE `m`.`is_active` = 1 AND `m`.`is_deleted` = 0 AND `me`.`email_checked` IS NOT NULL AND `me`.`email_deleted` = 0 AND LOCATE('_deactivated', `m`.`username`) = 0 AND LOCATE('_deactivated', `me`.`email_address`) = 0 " . $filter . " ORDER BY `m`.`member_id` DESC #LIMIT 25,125 "; $result = Zend_Db_Table::getDefaultAdapter()->query($sql); $this->log->info("Load : " . $result->rowCount() . " members..."); return $result; } /** * @param Zend_Db_Statement_Interface $members * * @param bool $force * * @return bool * @throws Zend_Db_Statement_Exception * @throws Zend_Exception */ private function exportMembers($members, $force = false) { // only usernames which are valid in github/gitlab $usernameValidChars = new Local_Validate_UsernameValid(); $emailValidate = new Zend_Validate_EmailAddress(); $modelOpenCode = new Default_Model_Ocs_Gitlab($this->config); while ($member = $members->fetch()) { $this->log->info("process " . Zend_Json::encode($member)); //if (false === $usernameValidChars->isValid($member['username'])) { // file_put_contents($this->errorlogfile, print_r($member, true) . "user name validation error" . "\n\n", FILE_APPEND); // continue; //} if (false === $emailValidate->isValid($member["email_address"])) { $this->log->info("messages [\"email address validation error\"] "); continue; } try { //Export User, if he not exists $modelOpenCode->createUserFromArray($member, $force); } catch (Exception $e) { $this->log->info($e->getMessage() . PHP_EOL . $e->getTraceAsString()); } $messages = $modelOpenCode->getMessages(); $this->log->info("messages " . Zend_Json::encode($messages)); } return true; } /** * @param Zend_Db_Statement_Interface $members * * @param bool $force * * @return bool * @throws Zend_Db_Statement_Exception */ private function validateMembers($members, $force) { $modelSubSystem = new Default_Model_Ocs_Gitlab($this->config); while ($member = $members->fetch()) { $modelSubSystem->resetMessages(); $this->log->info("process " . Zend_Json::encode($member)); try { $userSubsystem = $modelSubSystem->getUser($member['external_id'], $member['username']); if (empty($userSubsystem)) { - $this->log->info('Fail : user not exist (' . $member['member_id'] . ', ' . $member['username'] . ')'); + $this->log->info('Fail : user not exist (' . $member['member_id'] . ', ' . $member['username'] . ') ' . Zend_Json::encode($modelSubSystem->getMessages())); if ($force) { $modelSubSystem->createUserFromArray($member, true); $this->log->info("Message : " . Zend_Json::encode($modelSubSystem->getMessages())); } continue; } $result = $modelSubSystem->validateUserData($member, $userSubsystem); if (false === empty($result)) { $this->log->info('Fail : ' . implode(" ", $result)); if ($force) { $modelSubSystem->createUserFromArray($member, true); } } else { $this->log->info('Success'); } } catch (Exception $e) { $this->log->info($e->getMessage() . PHP_EOL . $e->getTraceAsString()); } $messages = $modelSubSystem->getMessages(); if (false === empty($messages)) { $this->log->info("Message : " . Zend_Json::encode($messages)); } } return true; } } \ No newline at end of file diff --git a/application/modules/default/Bootstrap.php b/application/modules/default/Bootstrap.php index 95df0514f..862c3ffff 100644 --- a/application/modules/default/Bootstrap.php +++ b/application/modules/default/Bootstrap.php @@ -1,1256 +1,1268 @@ . **/ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { /** * @return Zend_Application_Module_Autoloader * @throws Zend_Loader_Exception */ protected function _initAutoload() { $autoloader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Default', 'basePath' => realpath(dirname(__FILE__)), )); $autoloader->addResourceType('formelements', 'forms/elements', 'Form_Element'); $autoloader->addResourceType('formvalidators', 'forms/validators', 'Form_Validator'); return $autoloader; } /** * @throws Zend_Exception * @throws Zend_Session_Exception */ protected function _initSessionManagement() { $config = $this->getOption('settings')['session']; $domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false; if ($config['saveHandler']['replace']['enabled']) { $cacheClass = 'Zend_Cache_Backend_' . $config['saveHandler']['cache']['type']; $_cache = new $cacheClass($config['saveHandler']['options']); Zend_Loader::loadClass($config['saveHandler']['class']); Zend_Session::setSaveHandler(new $config['saveHandler']['class']($_cache)); Zend_Session::setOptions(array( 'cookie_domain' => $domain, 'cookie_path' => $config['auth']['cookie_path'], 'cookie_lifetime' => $config['auth']['cookie_lifetime'], 'cookie_httponly' => $config['auth']['cookie_httponly']) ); Zend_Session::start(); } $session_namespace = new Zend_Session_Namespace($config['auth']['name']); $session_namespace->setExpirationSeconds($config['auth']['cookie_lifetime']); Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_Session($session_namespace->getNamespace())); } protected function _initConfig() { /** $config Zend_Config */ $config = $this->getApplication()->getApplicationConfig(); Zend_Registry::set('config', $config); return $config; } /** * @return mixed|null|Zend_Cache_Core|Zend_Cache_Frontend * @throws Zend_Cache_Exception * @throws Zend_Exception */ protected function _initCache() { if (Zend_Registry::isRegistered('cache')) { return Zend_Registry::get('cache'); } $cache = null; $options = $this->getOption('settings'); if (true == $options['cache']['enabled']) { $cache = Zend_Cache::factory( $options['cache']['frontend']['type'], $options['cache']['backend']['type'], $options['cache']['frontend']['options'], $options['cache']['backend']['options'] ); } else { // Fallback settings for some (maybe development) environments which have no cache management installed. if (false === is_writeable(APPLICATION_CACHE)) { error_log('directory for cache files does not exists or not writable: ' . APPLICATION_CACHE); exit('directory for cache files does not exists or not writable: ' . APPLICATION_CACHE); } $frontendOptions = array( 'lifetime' => 600, 'automatic_serialization' => true, 'cache_id_prefix' => 'front_cache', 'cache' => true ); $backendOptions = array( 'cache_dir' => APPLICATION_CACHE, 'file_locking' => true, 'read_control' => true, 'read_control_type' => 'crc32', 'hashed_directory_level' => 1, 'hashed_directory_perm' => 0700, 'file_name_prefix' => 'ocs', 'cache_file_perm' => 0700 ); $cache = Zend_Cache::factory( 'Core', 'File', $frontendOptions, $backendOptions ); } Zend_Registry::set('cache', $cache); Zend_Locale::setCache($cache); Zend_Locale_Data::setCache($cache); Zend_Currency::setCache($cache); Zend_Translate::setCache($cache); Zend_Translate_Adapter::setCache($cache); Zend_Db_Table_Abstract::setDefaultMetadataCache($cache); Zend_Paginator::setCache($cache); return $cache; } /** * @throws Zend_Application_Bootstrap_Exception */ protected function _initViewConfig() { $view = $this->bootstrap('view')->getResource('view'); $view->addHelperPath(APPLICATION_PATH . '/modules/default/views/helpers', 'Default_View_Helper_'); $view->addHelperPath(APPLICATION_LIB . '/Zend/View/Helper', 'Zend_View_Helper_'); $options = $this->getOptions(); $docType = $options['resources']['view']['doctype'] ? $options['resources']['view']['doctype'] : 'XHTML1_TRANSITIONAL'; $view->doctype($docType); } /** * @throws Zend_Locale_Exception */ protected function _initLocale() { $configResources = $this->getOption('resources'); Zend_Locale::setDefault($configResources['locale']['default']); Zend_Registry::set($configResources['locale']['registry_key'], $configResources['locale']['default']); } /** * @return Zend_Translate * @throws Zend_Application_Resource_Exception * @throws Zend_Form_Exception * @throws Zend_Session_Exception * @throws Zend_Translate_Exception * @throws Zend_Validate_Exception */ protected function _initTranslate() { $options = $this->getOption('resources'); $options = $options['translate']; if (!isset($options['data'])) { throw new Zend_Application_Resource_Exception( 'not found the file'); } $adapter = isset($options['adapter']) ? $options['adapter'] : Zend_Translate::AN_ARRAY; $session = new Zend_Session_Namespace('aa'); if ($session->locale) { $locale = $session->locale; } else { $locale = isset($options['locale']) ? $options['locale'] : null; } $data = ''; if (isset($options['data'][$locale])) { $data = $options['data'][$locale]; } $translateOptions = isset($options['options']) ? $options['options'] : array(); $translate = new Zend_Translate($adapter, $data, $locale, $translateOptions); Zend_Form::setDefaultTranslator($translate); Zend_Validate_Abstract::setDefaultTranslator($translate); Zend_Registry::set('Zend_Translate', $translate); return $translate; } /** * @throws Zend_Application_Bootstrap_Exception */ protected function _initDbAdapter() { $db = $this->bootstrap('db')->getResource('db'); //( if ((APPLICATION_ENV == 'development') OR (APPLICATION_ENV == 'testing')) { // $profiler = new Zend_Db_Profiler_Firebug('All DB Queries'); // $profiler->setEnabled(true); // // // Attach the profiler to your db adapter // $db->setProfiler($profiler); // } Zend_Registry::set('db', $db); Zend_Db_Table::setDefaultAdapter($db); Zend_Db_Table_Abstract::setDefaultAdapter($db); } /** * @throws Zend_Log_Exception */ protected function _initLogger() { $settings = $this->getOption('settings'); $log = new Zend_Log(); $writer = new Zend_Log_Writer_Stream($settings['log']['path'] . 'all_' . date("Y-m-d")); $writer->addFilter(new Local_Log_Filter_MinMax(Zend_Log::WARN, Zend_Log::DEBUG)); $log->addWriter($writer); $errorWriter = new Zend_Log_Writer_Stream($settings['log']['path'] . 'err_' . date('Y-m-d')); $errorWriter->addFilter(new Zend_Log_Filter_Priority(Zend_Log::ERR)); $log->addWriter($errorWriter); Zend_Registry::set('logger', $log); if ((APPLICATION_ENV == 'development') OR (APPLICATION_ENV == 'testing')) { $firebugWriter = new Zend_Log_Writer_Firebug(); $firebugLog = new Zend_Log($firebugWriter); Zend_Registry::set('firebug_log', $firebugLog); } } protected function _initGlobals() { Zend_Paginator::setDefaultScrollingStyle('Elastic'); Zend_View_Helper_PaginationControl::setDefaultViewPartial('paginationControl.phtml'); Zend_Filter::addDefaultNamespaces('Local_Filter'); $version = $this->getOption('version'); defined('APPLICATION_VERSION') || define('APPLICATION_VERSION', $version); } /** * @return Default_Plugin_AclRules|false|mixed * @throws Zend_Cache_Exception */ protected function _initAclRules() { /** @var Zend_Cache_Core $appCache */ $appCache = $this->getResource('cache'); if (false == ($aclRules = $appCache->load('AclRules'))) { $aclRules = new Default_Plugin_AclRules(); Zend_Registry::set('acl', $aclRules); $appCache->save($aclRules, 'AclRules', array('AclRules'), 14400); } return $aclRules; } /** * @throws Zend_Application_Bootstrap_Exception * @throws Zend_Loader_PluginLoader_Exception */ protected function _initPlugins() { /** @var $front Zend_Controller_Front */ $front = $this->bootstrap('frontController')->getResource('frontController'); $aclRules = $this->bootstrap('aclRules')->getResource('aclRules'); $front->unregisterPlugin('Zend_Controller_Plugin_ErrorHandler'); $front->registerPlugin(new Default_Plugin_ErrorHandler()); $front->registerPlugin(new Default_Plugin_RememberMe(Zend_Auth::getInstance())); $front->registerPlugin(new Default_Plugin_SignOn(Zend_Auth::getInstance())); $front->registerPlugin(new Default_Plugin_Acl(Zend_Auth::getInstance(), $aclRules)); $loader = new Zend_Loader_PluginLoader(); $loader->addPrefixPath('Zend_View_Helper', APPLICATION_LIB . '/Zend/View/Helper/') ->addPrefixPath('Zend_Form_Element', APPLICATION_LIB . '/Zend/Form/Element') ->addPrefixPath('Default_View_Helper', APPLICATION_PATH . '/modules/default/views/helpers') ->addPrefixPath('Default_Form_Helper', APPLICATION_PATH . '/modules/default/forms/helpers') ->addPrefixPath('Default_Form_Element', APPLICATION_PATH . '/modules/default/forms/elements') ->addPrefixPath('Default_Form_Decorator', APPLICATION_PATH . '/modules/default/forms/decorators') ->addPrefixPath('Default_Form_Validator', APPLICATION_PATH . '/modules/default/forms/validators'); } /** * @throws Zend_Session_Exception */ //protected function _initAuthSessionNamespace() //{ // $config = $this->getResource('config'); // $auth_config = $config->settings->auth_session; // // $objSessionNamespace = new Zend_Session_Namespace($auth_config->name); // $objSessionNamespace->setExpirationSeconds($auth_config->timeout); // // Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_Session($auth_config->name)); //} protected function _initThirdParty() { $appConfig = $this->getResource('config'); $imageConfig = $appConfig->images; defined('IMAGES_UPLOAD_PATH') || define('IMAGES_UPLOAD_PATH', $imageConfig->upload->path); defined('IMAGES_MEDIA_SERVER') || define('IMAGES_MEDIA_SERVER', $imageConfig->media->server); // ppload $pploadConfig = $appConfig->third_party->ppload; defined('PPLOAD_API_URI') || define('PPLOAD_API_URI', $pploadConfig->api_uri); defined('PPLOAD_CLIENT_ID') || define('PPLOAD_CLIENT_ID', $pploadConfig->client_id); defined('PPLOAD_SECRET') || define('PPLOAD_SECRET', $pploadConfig->secret); defined('PPLOAD_DOWNLOAD_SECRET') || define('PPLOAD_DOWNLOAD_SECRET', $pploadConfig->download_secret); } /** * @return false|mixed|Zend_Controller_Router_Rewrite * @throws Zend_Application_Bootstrap_Exception * @throws Zend_Cache_Exception * @throws Zend_Controller_Exception * @throws Zend_Exception */ protected function _initRouter() { $this->bootstrap('frontController'); /** @var $front Zend_Controller_Front */ $front = $this->getResource('frontController'); /** @var Zend_Cache_Core $cache */ $cache = Zend_Registry::get('cache'); if (($router = $cache->load('ProjectRouter'))) { $front->setRouter($router); return $router; } /** @var $router Zend_Controller_Router_Rewrite */ $router = $front->getRouter(); /** RSS Feed */ $router->addRoute( 'rdf_store', new Zend_Controller_Router_Route( '/content.rdf', array( 'module' => 'default', 'controller' => 'rss', 'action' => 'rdf' ) ) ); $router->addRoute( 'rdf_events_hive', new Zend_Controller_Router_Route_Regex( '.*-events.rss', array( 'module' => 'default', 'controller' => 'rss', 'action' => 'rss' ) ) ); $router->addRoute( 'rdf_store_hive', new Zend_Controller_Router_Route_Regex( '.*-content.rdf', array( 'module' => 'default', 'controller' => 'rss', 'action' => 'rdf' ) ) ); $router->addRoute( 'rdf_store_hive_rss', new Zend_Controller_Router_Route_Regex( 'rss/.*-content.rdf', array( 'module' => 'default', 'controller' => 'rss', 'action' => 'rdf' ) ) ); /** new store dependent routing rules */ $router->addRoute( 'store_home', new Zend_Controller_Router_Route( '/s/:domain_store_id/', array( 'module' => 'default', 'controller' => 'home', 'action' => 'index' ) ) ); $router->addRoute( 'store_browse', new Zend_Controller_Router_Route( '/s/:domain_store_id/browse/*', array( 'module' => 'default', 'controller' => 'explore', 'action' => 'index' ) ) ); $router->addRoute( 'store_product', new Zend_Controller_Router_Route( '/s/:domain_store_id/p/:project_id/:action/*', array( 'module' => 'default', 'controller' => 'product', 'action' => 'show' ) ) ); $router->addRoute( 'store_user', new Zend_Controller_Router_Route( '/s/:domain_store_id/member/:member_id/:action/*', array( 'module' => 'default', 'controller' => 'user', 'action' => 'index' ) ) ); $router->addRoute( 'store_user_name', new Zend_Controller_Router_Route( '/s/:domain_store_id/u/:user_name/:action/*', array( 'module' => 'default', 'controller' => 'user', 'action' => 'index' ) ) ); /** general routing rules */ $router->addRoute( 'home', new Zend_Controller_Router_Route( '/', array( 'module' => 'default', 'controller' => 'home', 'action' => 'index' ) ) ); $router->addRoute( 'home_ajax', new Zend_Controller_Router_Route( '/showfeatureajax/*', array( 'module' => 'default', 'controller' => 'home', 'action' => 'showfeatureajax' ) ) ); $router->addRoute( 'backend', new Zend_Controller_Router_Route( '/backend/:controller/:action/*', array( 'module' => 'backend', 'controller' => 'index', 'action' => 'index' ) ) ); $router->addRoute( 'browse', new Zend_Controller_Router_Route( '/browse/*', array( 'module' => 'default', 'controller' => 'explore', 'action' => 'index' ) ) ); $router->addRoute( 'button_render', new Zend_Controller_Router_Route( '/button/:project_id/:size/', array( 'module' => 'default', 'controller' => 'button', 'action' => 'render', 'size' => 'large' ) ) ); $router->addRoute( 'button_action', new Zend_Controller_Router_Route( '/button/a/:action/', array( 'module' => 'default', 'controller' => 'button', 'action' => 'index' ) ) ); /* $router->addRoute( 'supporter_box_show', new Zend_Controller_Router_Route( '/supporterbox/:project_uuid/', array( 'module' => 'default', 'controller' => 'supporterbox', 'action' => 'render' ) ) ); */ $router->addRoute( 'pling_box_show', new Zend_Controller_Router_Route( '/supporterbox/:memberid/', array( 'module' => 'default', 'controller' => 'plingbox', 'action' => 'index' ) ) ); $router->addRoute( 'external_donation_list', new Zend_Controller_Router_Route( '/donationlist/:project_id/', array( 'module' => 'default', 'controller' => 'donationlist', 'action' => 'render' ) ) ); $router->addRoute( 'external_widget', new Zend_Controller_Router_Route( '/widget/:project_id/', array( 'module' => 'default', 'controller' => 'widget', 'action' => 'render' ) ) ); $router->addRoute( 'external_widget_save', new Zend_Controller_Router_Route( '/widget/save/*', array( 'module' => 'default', 'controller' => 'widget', 'action' => 'save' ) ) ); $router->addRoute( 'external_widget_save', new Zend_Controller_Router_Route( '/widget/config/:project_id/', array( 'module' => 'default', 'controller' => 'widget', 'action' => 'config' ) ) ); $router->addRoute( 'external_widget_save_default', new Zend_Controller_Router_Route( '/widget/savedefault/*', array( 'module' => 'default', 'controller' => 'widget', 'action' => 'savedefault' ) ) ); /** * Project/Product */ $router->addRoute( 'product_short_url', new Zend_Controller_Router_Route( '/p/:project_id/:action/*', array( 'module' => 'default', 'controller' => 'product', 'action' => 'show' ) ) ); $router->addRoute( 'product_referrer_url', new Zend_Controller_Router_Route( '/p/:project_id/er/:er/*', array( 'module' => 'default', 'controller' => 'product', 'action' => 'show' ) ) ); $router->addRoute( 'product_collectionid_url', new Zend_Controller_Router_Route( '/c/:collection_id', array( 'module' => 'default', 'controller' => 'product', 'action' => 'show' ) ) ); $router->addRoute( 'product_add', new Zend_Controller_Router_Route( '/product/add', array( 'module' => 'default', 'controller' => 'product', 'action' => 'add' ) ) ); $router->addRoute( 'search', new Zend_Controller_Router_Route( '/search/*', array( 'module' => 'default', 'controller' => 'product', 'action' => 'search' ) ) ); $router->addRoute( 'product_save', new Zend_Controller_Router_Route( '/p/save/*', array( 'module' => 'default', 'controller' => 'product', 'action' => 'saveproduct' ) ) ); /** * Member */ $router->addRoute( 'member_settings_old', new Zend_Controller_Router_Route( '/settings/:action/*', array( 'module' => 'default', 'controller' => 'settings', 'action' => 'index' ) ) ); $router->addRoute( 'user_show', new Zend_Controller_Router_Route( '/member/:member_id/:action/*', array( 'module' => 'default', 'controller' => 'user', 'action' => 'index' ) ) ); $router->addRoute( 'user_avatar', new Zend_Controller_Router_Route( '/member/avatar/:emailhash/:size', array( 'module' => 'default', 'controller' => 'user', 'action' => 'avatar' ) ) ); $router->addRoute( 'user_show_with_name', new Zend_Controller_Router_Route( '/u/:user_name/:action/*', array( 'module' => 'default', 'controller' => 'user', 'action' => 'index' ) ) ); $router->addRoute( 'user_recification', new Zend_Controller_Router_Route( '/r/:action/*', array( 'module' => 'default', 'controller' => 'rectification', 'action' => 'index' ) ) ); $router->addRoute( 'user_show_short', new Zend_Controller_Router_Route( '/me/:member_id/:action/*', array( 'module' => 'default', 'controller' => 'user', 'action' => 'index' ) ) ); $router->addRoute( 'register', new Zend_Controller_Router_Route_Static( '/register', array( 'module' => 'default', 'controller' => 'authorization', 'action' => 'register' ) ) ); $router->addRoute( 'register_validate', new Zend_Controller_Router_Route_Static( '/register/validate', array( 'module' => 'default', 'controller' => 'authorization', 'action' => 'validate' ) ) ); $router->addRoute( 'verification', new Zend_Controller_Router_Route( '/verification/:vid', array( 'module' => 'default', 'controller' => 'authorization', 'action' => 'verification' ) ) ); $router->addRoute( 'logout', new Zend_Controller_Router_Route_Static( '/logout', array( 'module' => 'default', 'controller' => 'logout', 'action' => 'logout' ) ) ); $router->addRoute( 'propagatelogout', new Zend_Controller_Router_Route_Static( '/logout/propagate', array( 'module' => 'default', 'controller' => 'authorization', 'action' => 'propagatelogout' ) ) ); $router->addRoute( 'checkuser', new Zend_Controller_Router_Route_Static( '/checkuser', array( 'module' => 'default', 'controller' => 'authorization', 'action' => 'checkuser' ) ) ); $router->addRoute( 'login', new Zend_Controller_Router_Route( '/login', array( 'module' => 'default', 'controller' => 'authorization', 'action' => 'login' ) ) ); $router->addRoute( 'login', new Zend_Controller_Router_Route( '/login/:action/*', array( 'module' => 'default', 'controller' => 'authorization', 'action' => 'login' ) ) ); + $router->addRoute( + 'LoginController', + new Zend_Controller_Router_Route( + '/l/:action/*', + array( + 'module' => 'default', + 'controller' => 'login', + 'action' => 'login' + ) + ) + ); + $router->addRoute( 'content', new Zend_Controller_Router_Route( '/content/:page', array( 'module' => 'default', 'controller' => 'content', 'action' => 'index' ) ) ); $router->addRoute( 'categories_about', new Zend_Controller_Router_Route( '/cat/:page/about', array( 'module' => 'default', 'controller' => 'categories', 'action' => 'about' ) ) ); // **** static routes $router->addRoute( 'static_faq', new Zend_Controller_Router_Route_Static( '/faq', array( 'module' => 'default', 'controller' => 'content', 'action' => 'index', 'page' => 'faq' ) ) ); $router->addRoute( 'static_terms', new Zend_Controller_Router_Route_Static( '/terms', array( 'module' => 'default', 'controller' => 'content', 'action' => 'index', 'page' => 'terms' ) ) ); $router->addRoute( 'static_terms_general', new Zend_Controller_Router_Route_Static( '/terms/general', array( 'module' => 'default', 'controller' => 'content', 'action' => 'index', 'page' => 'terms-general' ) ) ); $router->addRoute( 'static_terms_publish', new Zend_Controller_Router_Route_Static( '/terms/publishing', array( 'module' => 'default', 'controller' => 'content', 'action' => 'index', 'page' => 'terms-publishing' ) ) ); $router->addRoute( 'static_terms_dmca', new Zend_Controller_Router_Route_Static( '/terms/dmca', array( 'module' => 'default', 'controller' => 'content', 'action' => 'index', 'page' => 'terms-dmca' ) ) ); $router->addRoute( 'static_privacy', new Zend_Controller_Router_Route_Static( '/privacy', array( 'module' => 'default', 'controller' => 'content', 'action' => 'index', 'page' => 'privacy' ) ) ); $router->addRoute( 'static_contact', new Zend_Controller_Router_Route_Static( '/contact', array( 'module' => 'default', 'controller' => 'content', 'action' => 'index', 'page' => 'contact' ) ) ); // **** ppload $router->addRoute( 'pploadlogin', new Zend_Controller_Router_Route( '/pploadlogin/*', array( 'module' => 'default', 'controller' => 'authorization', 'action' => 'pploadlogin' ) ) ); // OCS API $router->addRoute( 'ocs_providers_xml', new Zend_Controller_Router_Route( '/ocs/providers.xml', array( 'module' => 'default', 'controller' => 'ocsv1', 'action' => 'providers' ) ) ); $router->addRoute( 'ocs_v1_config', new Zend_Controller_Router_Route( '/ocs/v1/config', array( 'module' => 'default', 'controller' => 'ocsv1', 'action' => 'config' ) ) ); $router->addRoute( 'ocs_v1_person_check', new Zend_Controller_Router_Route( '/ocs/v1/person/check', array( 'module' => 'default', 'controller' => 'ocsv1', 'action' => 'personcheck' ) ) ); $router->addRoute( 'ocs_v1_person_data', new Zend_Controller_Router_Route( '/ocs/v1/person/data', array( 'module' => 'default', 'controller' => 'ocsv1', 'action' => 'persondata' ) ) ); $router->addRoute( 'ocs_v1_person_data_personid', new Zend_Controller_Router_Route( '/ocs/v1/person/data/:personid', array( 'module' => 'default', 'controller' => 'ocsv1', 'action' => 'persondata' ) ) ); $router->addRoute( 'ocs_v1_person_self', new Zend_Controller_Router_Route( '/ocs/v1/person/self', array( 'module' => 'default', 'controller' => 'ocsv1', 'action' => 'personself' ) ) ); $router->addRoute( 'ocs_v1_content_categories', new Zend_Controller_Router_Route( '/ocs/v1/content/categories', array( 'module' => 'default', 'controller' => 'ocsv1', 'action' => 'contentcategories' ) ) ); $router->addRoute( 'ocs_v1_content_data_contentid', new Zend_Controller_Router_Route( '/ocs/v1/content/data/:contentid', array( 'module' => 'default', 'controller' => 'ocsv1', 'action' => 'contentdata', 'contentid' => null ) ) ); $router->addRoute( 'ocs_v1_content_download_contentid_itemid', new Zend_Controller_Router_Route( '/ocs/v1/content/download/:contentid/:itemid', array( 'module' => 'default', 'controller' => 'ocsv1', 'action' => 'contentdownload' ) ) ); $router->addRoute( 'ocs_v1_content_previewpic_contentid', new Zend_Controller_Router_Route( '/ocs/v1/content/previewpic/:contentid', array( 'module' => 'default', 'controller' => 'ocsv1', 'action' => 'contentpreviewpic' ) ) ); $router->addRoute('ocs_v1_comments', new Zend_Controller_Router_Route( '/ocs/v1/comments/data/:comment_type/:content_id/:second_id', array( 'module' => 'default', 'controller' => 'ocsv1', 'action' => 'comments', 'comment_type' => -1, 'content_id' => null, 'second_id' => null )) ); // embed $router->addRoute( 'embed_v1_member_projects', new Zend_Controller_Router_Route( '/embed/v1/member/:memberid', array( 'module' => 'default', 'controller' => 'embedv1', 'action' => 'memberprojects' ) ) ); $router->addRoute( 'embed_v1_member_projects_files', new Zend_Controller_Router_Route( '/embed/v1/ppload/:ppload_collection_id', array( 'module' => 'default', 'controller' => 'embedv1', 'action' => 'ppload' ) ) ); $router->addRoute( 'embed_v1_member_projectscomments', new Zend_Controller_Router_Route( '/embed/v1/comments/:id', array( 'module' => 'default', 'controller' => 'embedv1', 'action' => 'comments' ) ) ); $router->addRoute( 'embed_v1_member_projectdetail', new Zend_Controller_Router_Route( '/embed/v1/project/:projectid', array( 'module' => 'default', 'controller' => 'embedv1', 'action' => 'projectdetail' ) ) ); $router->addRoute( 'clones', new Zend_Controller_Router_Route( '/clones', array( 'module' => 'default', 'controller' => 'credits', 'action' => 'index' ) ) ); $cache->save($router, 'ProjectRouter', array('router'), 14400); return $router; } /** * @throws Zend_Cache_Exception * @throws Zend_Exception * @throws exception */ protected function _initCss() { if (APPLICATION_ENV != "development" && APPLICATION_ENV != "staging") { return; } $appConfig = $this->getResource('config'); if ((boolean)$appConfig->settings->noLESScompile === true) { return; } $sLess = realpath(APPLICATION_PATH . '/../httpdocs/theme/flatui/less/stylesheet.less'); $sCss = realpath(APPLICATION_PATH . '/../httpdocs/theme/flatui/css/stylesheet.css'); /** * @var Zend_Cache_Core $cache */ $cache = Zend_Registry::get('cache'); if (md5_file($sLess) !== $cache->load('md5Less')) { require_once APPLICATION_PATH . "/../library/lessphp/lessc.inc.php"; $oLessc = new lessc($sLess); $oLessc->setFormatter('compressed'); file_put_contents($sCss, $oLessc->parse()); $cache->save(md5_file($sLess), 'md5Less'); } } protected function _initGlobalApplicationVars() { $modelDomainConfig = new Default_Model_DbTable_ConfigStore(); Zend_Registry::set('application_store_category_list', $modelDomainConfig->fetchAllStoresAndCategories()); Zend_Registry::set('application_store_config_list', $modelDomainConfig->fetchAllStoresConfigArray()); Zend_Registry::set('application_store_config_id_list', $modelDomainConfig->fetchAllStoresConfigByIdArray()); } /** * @throws Zend_Application_Bootstrap_Exception */ protected function _initStoreDependentVars() { /** @var $front Zend_Controller_Front */ $front = $this->bootstrap('frontController')->getResource('frontController'); $front->registerPlugin(new Default_Plugin_InitGlobalStoreVars()); } } \ No newline at end of file diff --git a/application/modules/default/views/scripts/partials/header/metaheader.phtml b/application/modules/default/controllers/LoginController.php similarity index 53% copy from application/modules/default/views/scripts/partials/header/metaheader.phtml copy to application/modules/default/controllers/LoginController.php index 1b6e8a57d..81f9c79cd 100644 --- a/application/modules/default/views/scripts/partials/header/metaheader.phtml +++ b/application/modules/default/controllers/LoginController.php @@ -1,34 +1,35 @@ . - **/ -?> - - - -
- - -*/ -?> - - - + * + * Created: 30.11.2018 + */ +class LoginController extends Local_Controller_Action_DomainSwitch +{ + + public function setthemeAction() + { + $this->_helper->layout()->disableLayout(); + //$this->_helper->viewRenderer->setNoRender(true); + + } + +} \ No newline at end of file diff --git a/application/modules/default/controllers/LogoutController.php b/application/modules/default/controllers/LogoutController.php index 068ad1f41..1893968b6 100644 --- a/application/modules/default/controllers/LogoutController.php +++ b/application/modules/default/controllers/LogoutController.php @@ -1,68 +1,68 @@ . * * Created: 10.10.2018 */ class LogoutController extends Local_Controller_Action_DomainSwitch { public function logoutAction() { $this->_helper->layout()->disableLayout(); //$this->_helper->viewRenderer->setNoRender(true); $redir = "/"; if (isset($_GET['redirect'])) { $redir = $_GET['redirect']; $filter = new Local_Filter_Url_Decrypt(); $redir = $filter->filter($redir); } $this->view->redirect = $redir; if (Zend_Auth::getInstance()->hasIdentity()) { $user_id = Zend_Auth::getInstance()->getStorage()->read()->member_id; $modelAuth = new Default_Model_Authorization(); $modelAuth->logout(); - $modelToken = new Default_Model_SingleSignOnToken(); - $data = array( - 'remember_me' => false, - 'redirect' => $this->getParam('redirect'), - 'action' => Default_Model_SingleSignOnToken::ACTION_LOGOUT - ); - $token_id = $modelToken->createToken($data); - setcookie(Default_Model_SingleSignOnToken::ACTION_LOGOUT, $token_id, time() + 120, '/', - Local_Tools_ParseDomain::get_domain($this->getRequest()->getHttpHost()), null, true); + //$modelToken = new Default_Model_SingleSignOnToken(); + //$data = array( + // 'remember_me' => false, + // 'redirect' => $this->getParam('redirect'), + // 'action' => Default_Model_SingleSignOnToken::ACTION_LOGOUT + //); + //$token_id = $modelToken->createToken($data); + //setcookie(Default_Model_SingleSignOnToken::ACTION_LOGOUT, $token_id, time() + 120, '/', + // Local_Tools_ParseDomain::get_domain($this->getRequest()->getHttpHost()), null, true); $config = Zend_Registry::get('config')->settings->domain; $jwt = Default_Model_Jwt::encode($user_id); setcookie($config->openid->cookie_name, $jwt, time() - 120, '/', $config->openid->host, null, true); setcookie($config->forum->cookie_name, $jwt, time() - 120, '/', $config->forum->host, null, true); setcookie($config->opencode->cookie_name, $jwt, time() - 120, '/', $config->opencode->host, null, true); } } } \ No newline at end of file diff --git a/application/modules/default/models/Member.php b/application/modules/default/models/Member.php index e73cdcc76..9da914197 100644 --- a/application/modules/default/models/Member.php +++ b/application/modules/default/models/Member.php @@ -1,1184 +1,1207 @@ . **/ use YoHang88\LetterAvatar\LetterAvatar; class Default_Model_Member extends Default_Model_DbTable_Member { const CASE_INSENSITIVE = 1; /** * @param int $count * @param string $orderBy * @param string $dir * * @return Zend_Db_Table_Rowset * @throws Zend_Exception */ public function fetchNewActiveMembers($count = 100, $orderBy = 'created_at', $dir = 'DESC') { if (empty($count)) { return $this->generateRowSet($this->createRow()); } $allowedDirection = array('desc' => true, 'asc' => true); if (false == isset($allowedDirection[strtolower($dir)])) { $dir = null; } /** @var Zend_Cache_Core $cache */ $cache = Zend_Registry::get('cache'); $cacheName = __FUNCTION__ . md5($count . $orderBy . $dir); $members = $cache->load($cacheName); if ($members) { return $members; } else { $sql = ' SELECT count(*) AS `total_count` FROM `member` WHERE `is_active` = :activeVal AND `type` = :typeVal AND `profile_image_url` <> :defaultImgUrl AND `profile_image_url` LIKE :likeImgUrl '; $resultCnt = $this->_db->fetchRow($sql, array( 'activeVal' => Default_Model_Member::MEMBER_ACTIVE, 'typeVal' => Default_Model_Member::MEMBER_TYPE_PERSON, 'defaultImgUrl' => 'hive/user-pics/nopic.png', 'likeImgUrl' => 'hive/user-bigpics/0/%' )); $totalcnt = $resultCnt['total_count']; if ($totalcnt > $count) { $offset = ' offset ' . rand(0, $totalcnt - $count); } else { $offset = ''; } $sql = ' SELECT * FROM `member` WHERE `is_active` = :activeVal AND `type` = :typeVal AND `profile_image_url` <> :defaultImgUrl AND `profile_image_url` LIKE :likeImgUrl '; //$sql .= ' ORDER BY ' . $this->_db->quoteIdentifier($orderBy) . ' ' . $dir; $sql .= ' LIMIT ' . $this->_db->quote($count, Zend_Db::INT_TYPE); $sql .= $offset; $resultMembers = $this->getAdapter()->query($sql, array( 'activeVal' => Default_Model_Member::MEMBER_ACTIVE, 'typeVal' => Default_Model_Member::MEMBER_TYPE_PERSON, 'defaultImgUrl' => 'hive/user-pics/nopic.png', 'likeImgUrl' => 'hive/user-bigpics/0/%' ))->fetchAll() ; $resultSet = $this->generateRowSet($resultMembers); $cache->save($resultSet, $cacheName, array(), 14400); return $resultSet; } } /** * @param $data * * @return Zend_Db_Table_Rowset */ protected function generateRowSet($data) { $classRowSet = $this->getRowsetClass(); $returnRowSet = new $classRowSet(array( 'table' => $this, 'rowClass' => $this->getRowClass(), 'stored' => true, 'data' => $data )); return $returnRowSet; } /** * @return array * @deprecated */ public function getMembersForSelectList() { $selectArr = $this->_db->fetchAll("SELECT `member_id`,`username`,`firstname`, `lastname` FROM {$this->_name} WHERE is_active=1 AND is_deleted=0 ORDER BY username"); $arrayModified = array(); $arrayModified[0] = "Benutzer wählen"; foreach ($selectArr as $item) { $tmpStr = ($item['firstname']) ? $item['firstname'] : ""; $tmpStr .= ($item['lastname']) ? ", " . $item['lastname'] : ""; $tmpStr = ($tmpStr != "") ? " (" . $tmpStr . ")" : ""; $arrayModified[$item['member_id']] = stripslashes($item['username'] . $tmpStr); } return $arrayModified; } /** * @param int $member_id * * @param $verification_value * * @return boolean returns true if successful * @throws Zend_Db_Statement_Exception */ public function activateMemberFromVerification($member_id, $verification_value) { $sql = " UPDATE `member` STRAIGHT_JOIN `member_email` ON `member`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_checked` IS NULL AND `member`.`is_deleted` = 0 AND `member_email`.`email_deleted` = 0 SET `member`.`mail_checked` = 1, `member`.`is_active` = 1, `member`.`changed_at` = NOW(), `member_email`.`email_checked` = NOW() WHERE `member`.`member_id` = :memberId AND `member_email`.`email_verification_value` = :verificationValue; "; $stmnt = $this->_db->query($sql, array('memberId' => $member_id, 'verificationValue' => $verification_value)); return $stmnt->rowCount() > 0 ? true : false; } /** * @param int $member_id */ public function setDeleted($member_id) { $updateValues = array( 'is_active' => 0, 'is_deleted' => 1, 'deleted_at' => new Zend_Db_Expr('Now()'), ); $this->update($updateValues, $this->_db->quoteInto('member_id=?', $member_id, 'INTEGER')); $this->setMemberProjectsDeleted($member_id); $this->setMemberCommentsDeleted($member_id); $this->setMemberRatingsDeleted($member_id); $this->setMemberReportingsDeleted($member_id); $this->setMemberEmailsDeleted($member_id); //$this->setMemberPlingsDeleted($member_id); //$this->removeMemberProjectsFromSearch($member_id); $this->setDeletedInMaterializedView($member_id); $this->setDeletedInSubSystems($member_id); } + //User ist mind. 1 jahr alt, user ist supporter, user hat minimum 20 kommentare + public function validDeleteMemberFromSpam($member_id) + { + $sql ='select + m.created_at + , (m.created_at+ INTERVAL 12 MONTH < NOW()) is_old + ,(select count(1) from comments c where c.comment_member_id = m.member_id and comment_active = 1) comments + ,(select (DATE_ADD(max(active_time), INTERVAL 1 YEAR) > now()) from support s where s.status_id = 2 AND s.member_id =m.member_id) is_supporter + from member m where member_id = :member_id'; + $result = $this->_db->fetchRow($sql, array( + 'member_id' => $member_id, + )); + if($result['is_supporter'] && $result['is_supporter'] ==1) + { + return false; + } + if($result['is_old'] ==1 || $result['comments']>20) + { + return false; + } + return true; + } + private function setMemberProjectsDeleted($member_id) { $modelProject = new Default_Model_Project(); $modelProject->setAllProjectsForMemberDeleted($member_id); } private function setMemberCommentsDeleted($member_id) { $modelComments = new Default_Model_ProjectComments(); $modelComments->setAllCommentsForUserDeleted($member_id); } private function setMemberRatingsDeleted($member_id) { $modelRatings = new Default_Model_DbTable_ProjectRating(); $affectedRows = $modelRatings->setDeletedByMemberId($member_id); if (false === empty($affectedRows)) { $modelProject = new Default_Model_DbTable_Project(); $modelProject->deleteLikes($affectedRows); } } private function setMemberReportingsDeleted($member_id) { $modelReportsProject = new Default_Model_DbTable_ReportProducts(); $modelReportsProject->setDeleteByMember($member_id); $modelReportsComments = new Default_Model_DbTable_ReportComments(); $modelReportsComments->setDeleteByMember($member_id); } private function setMemberEmailsDeleted($member_id) { $modelEmail = new Default_Model_DbTable_MemberEmail(); $modelEmail->setDeletedByMember($member_id); } private function setDeletedInMaterializedView($member_id) { $sql = "UPDATE `stat_projects` SET `status` = :new_status WHERE `member_id` = :member_id"; $this->_db->query($sql, array('new_status' => Default_Model_DbTable_Project::PROJECT_DELETED, 'member_id' => $member_id)) ->execute() ; } /** * @param int $member_id * * @throws Zend_Db_Exception */ public function setActivated($member_id) { throw new Zend_Db_Exception('not implemented yet.'); $updateValues = array( 'is_active' => 1, 'is_deleted' => 0, 'changed_at' => new Zend_Db_Expr('Now()'), 'deleted_at' => null ); $this->update($updateValues, $this->_db->quoteInto('member_id=?', $member_id, 'INTEGER')); $this->setMemberProjectsActivated($member_id); $this->setMemberCommentsActivated($member_id); //$this->setMemberPlingsActivated($member_id); } private function setMemberProjectsActivated($member_id) { $modelProject = new Default_Model_Project(); $modelProject->setAllProjectsForMemberActivated($member_id); } private function setMemberCommentsActivated($member_id) { $modelComment = new Default_Model_ProjectComments(); $modelComment->setAllCommentsForUserActivated($member_id); } /** * @param int $member_id * * @param bool $onlyNotDeleted * * @return Zend_Db_Table_Row * @throws Zend_Db_Statement_Exception */ public function fetchMemberData($member_id, $onlyNotDeleted = true) { if (null === $member_id) { return null; } $sql = ' SELECT m.*, `member_email`.`email_address` AS `mail`, IF(ISNULL(`member_email`.`email_checked`),0,1) AS `mail_checked`, `member_email`.`email_address`, `mei`.`external_id`, `mei`.`gitlab_user_id` FROM `member` AS `m` JOIN `member_email` ON `m`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_primary` = 1 LEFT JOIN `member_external_id` AS `mei` ON `mei`.`member_id` = `m`.`member_id` WHERE (m.member_id = :memberId) '; if ($onlyNotDeleted) { $sql .= " AND (m.is_deleted = " . self::MEMBER_NOT_DELETED . ")"; } $result = $this->getAdapter()->query($sql, array('memberId' => $member_id))->fetch(); $classRow = $this->getRowClass(); return new $classRow(array('table' => $this, 'stored' => true, 'data' => $result)); } /** * @param $member_id * @param bool $onlyActive * * @return null|Zend_Db_Table_Row_Abstract * @throws Zend_Db_Statement_Exception */ public function fetchMember($member_id, $onlyActive = true) { if (empty($member_id)) { return null; } $sql = " SELECT `m`.*, `member_email`.`email_address` AS `mail`, IF(ISNULL(`member_email`.`email_checked`),0,1) AS `mail_checked`, `member_email`.`email_address`, `mei`.`external_id` FROM `member` AS `m` JOIN `member_email` ON `m`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_primary` = 1 LEFT JOIN `member_external_id` AS `mei` ON `mei`.`member_id` = `m`.`member_id` WHERE `m`.`member_id` = :memberId"; if ($onlyActive) { $sql .= " AND `m`.`is_deleted` = " . self::MEMBER_NOT_DELETED . " AND `m`.`is_active` = " . self::MEMBER_ACTIVE; } $stmnt = $this->_db->query($sql, array('memberId' => $member_id)); if ($stmnt->rowCount() == 0) { return null; } return $this->generateRowClass($stmnt->fetch()); } /** * @param string $user_name * * @return Zend_Db_Table_Row */ public function fetchMemberFromHiveUserName($user_name) { $sql = " SELECT * FROM `member` WHERE `source_id` = :sourceId AND `username` = :userName "; return $this->_db->fetchRow($sql, array('sourceId' => Default_Model_Member::SOURCE_HIVE, 'userName' => $user_name)); } /** * @param int $member_id * @param int $limit * * @return Zend_Db_Table_Rowset */ public function fetchFollowedMembers($member_id, $limit = null) { $sql = " SELECT member_follower.member_id, member_follower.follower_id, member.* FROM member_follower LEFT JOIN member ON member_follower.member_id = member.member_id WHERE member_follower.follower_id = :followerId AND member.is_active = :activeVal GROUP BY member_follower.member_id ORDER BY max(member_follower.member_follower_id) DESC "; if (null != $limit) { $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); } $result = $this->_db->fetchAll($sql, array('followerId' => $member_id, 'activeVal' => self::MEMBER_ACTIVE)); return $this->generateRowSet($result); } /** * @param int $member_id * @param null $limit * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchFollowedProjects($member_id, $limit = null) { $sql = " SELECT `project_follower`.`project_id`, `project`.`title`, `project`.`image_small` FROM `project_follower` JOIN `project` ON `project_follower`.`project_id` = `project`.`project_id` WHERE `project_follower`.`member_id` = :member_id AND `project`.`status` = :project_status AND `project`.`type_id` = 1 ORDER BY `project_follower`.`project_follower_id` DESC "; if (null != $limit) { $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE)); return $this->generateRowSet($result); } public function fetchPlingedProjects($member_id, $limit = null) { $sql = " SELECT project_category.title AS catTitle, project.*, member.*, plings.* FROM plings LEFT JOIN project ON plings.project_id = project.project_id LEFT JOIN project_category ON project.project_category_id = project_category.project_category_id LEFT JOIN member ON project.member_id = member.member_id WHERE plings.member_id = :member_id AND plings.status_id = 2 AND project.status = :project_status AND project.type_id = 1 ORDER BY plings.create_time DESC "; if (null != $limit) { $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE)); return $this->generateRowSet($result); } public function fetchProjectsSupported($member_id, $limit = null) { $sql = " SELECT `project_category`.`title` AS `catTitle`, `project`.`project_id`, `project`.`title`, `project`.`image_small`, `plings`.`member_id`, `plings`.`amount`, `plings`.`create_time`, `member`.`profile_image_url`, `member`.`username` FROM `plings` JOIN `project` ON `plings`.`project_id` = `project`.`project_id` JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id` JOIN `member` ON `plings`.`member_id` = `member`.`member_id` WHERE `project`.`member_id` = :member_id AND `plings`.`status_id` = 2 AND `project`.`status` = :project_status AND `project`.`type_id` = 1 ORDER BY `plings`.`create_time` DESC "; if (null != $limit) { $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE)); return $this->generateRowSet($result); } /** * @param $userData * * @return array * @throws Exception */ public function createNewUser($userData) { $uuidMember = Local_Tools_UUID::generateUUID(); if (false == isset($userData['password'])) { throw new Exception(__METHOD__ . ' - user password is not set.'); } $userData['password'] = Local_Auth_Adapter_Ocs::getEncryptedPassword($userData['password'], Default_Model_DbTable_Member::SOURCE_LOCAL); if (false == isset($userData['roleId'])) { $userData['roleId'] = self::ROLE_ID_DEFAULT; } if ((false == isset($userData['avatar'])) OR (false == isset($userData['profile_image_url']))) { $imageFilename = $this->generateIdentIcon($userData, $uuidMember); $userData['avatar'] = $imageFilename; $userData['profile_image_url'] = IMAGES_MEDIA_SERVER . '/cache/200x200-2/img/' . $imageFilename; } if (false == isset($userData['uuid'])) { $userData['uuid'] = $uuidMember; } if (false == isset($userData['mail_checked'])) { $userData['mail_checked'] = 0; } $newUser = $this->storeNewUser($userData)->toArray(); $memberMail = $this->createPrimaryMailAddress($newUser); $externalId = $this->createExternalId($newUser['member_id']); $newUser['verificationVal'] = $memberMail->email_verification_value; $newUser['externalId'] = $externalId; return $newUser; } /** * @param $userData * @param $uuidMember * * @return string * @throws Exception */ protected function generateIdentIcon_old($userData, $uuidMember) { $identIcon = new Local_Tools_Identicon(); $tmpImagePath = IMAGES_UPLOAD_PATH . 'tmp/' . $uuidMember . '.png'; imagepng($identIcon->renderIdentIcon(sha1($userData['mail']), 1100), $tmpImagePath); $imageService = new Default_Model_DbTable_Image(); $imageFilename = $imageService->saveImageOnMediaServer($tmpImagePath); return $imageFilename; } /** * @param $userData * @param $uuidMember * * @return string * @throws Exception */ protected function generateIdentIcon($userData, $uuidMember) { require_once 'vendor/autoload.php'; // $name = substr($userData['username'],0,1).' '.substr($userData['username'],1); $name = $userData['username'].' '; $avatar = new LetterAvatar($name,'square', 400); $tmpImagePath = IMAGES_UPLOAD_PATH . 'tmp/' . $uuidMember . '.png'; $avatar->saveAs($tmpImagePath, LetterAvatar::MIME_TYPE_PNG); $imageService = new Default_Model_DbTable_Image(); $imageFilename = $imageService->saveImageOnMediaServer($tmpImagePath); return $imageFilename; } /** * @param array $userData * * @return Zend_Db_Table_Row_Abstract */ public function storeNewUser($userData) { $newUserData = $this->createRow($userData); $newUserData->save(); //create a user specified main project in project table $projectId = $this->createPersonalProject($newUserData->toArray()); //and save the id in member table $newUserData->main_project_id = $projectId; $newUserData->save(); return $newUserData; } /** * @param array $userData * * @return mixed $projectId */ protected function createPersonalProject($userData) { $tableProject = new Default_Model_Project(); /** @var Default_Model_DbRow_Project $newPersonalProject */ $newPersonalProject = $tableProject->createRow($userData); $newPersonalProject->uuid = Local_Tools_UUID::generateUUID(); $newPersonalProject->project_category_id = $newPersonalProject::CATEGORY_DEFAULT_PROJECT; $newPersonalProject->status = $newPersonalProject::STATUS_PROJECT_ACTIVE; $newPersonalProject->image_big = $newPersonalProject::DEFAULT_AVATAR_IMAGE; $newPersonalProject->image_small = $newPersonalProject::DEFAULT_AVATAR_IMAGE; $newPersonalProject->creator_id = $userData['member_id']; $newPersonalProject->title = $newPersonalProject::PERSONAL_PROJECT_TITLE; $projectId = $newPersonalProject->save(); return $projectId; } /** * @param array $newUser * @param bool $isVerified * * @return Zend_Db_Table_Row_Abstract * @throws Exception */ private function createPrimaryMailAddress($newUser) { $modelEmail = new Default_Model_MemberEmail(); $userMail = $modelEmail->saveEmailAsPrimary($newUser['member_id'], $newUser['mail'], $newUser['mail_checked']); return $userMail; } /** * @param int $member_id * * @return string */ private function createExternalId($member_id) { $modelExternalId = new Default_Model_DbTable_MemberExternalId(); $externalId = $modelExternalId->createExternalId($member_id); return $externalId; } public function fetchTotalMembersCount() { $sql = " SELECT count(1) AS `total_member_count` FROM `member` "; $result = $this->_db->fetchRow($sql); return $result['total_member_count']; } public function fetchTotalMembersInStoreCount() { $sql = " SELECT count(1) AS `total_member_count` FROM `member` "; $result = $this->_db->fetchRow($sql); return $result['total_member_count']; } /** * @param string $email * * @return null|Zend_Db_Table_Row_Abstract * @deprecated */ public function fetchCheckedActiveLocalMemberByEmail($email) { $sel = $this->select()->where('mail=?', $email)->where('is_deleted = ?', Default_Model_DbTable_Member::MEMBER_NOT_DELETED) ->where('is_active = ?', Default_Model_DbTable_Member::MEMBER_ACTIVE) ->where('mail_checked = ?', Default_Model_DbTable_Member::MEMBER_MAIL_CHECKED) ->where('login_method = ?', Default_Model_DbTable_Member::MEMBER_LOGIN_LOCAL) ; return $this->fetchRow($sel); } public function fetchEarnings($member_id, $limit = null) { $sql = " SELECT `project_category`.`title` AS `catTitle`, `project`.*, `member`.*, `plings`.* FROM `plings` JOIN `project` ON `plings`.`project_id` = `project`.`project_id` JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id` JOIN `member` ON `project`.`member_id` = `member`.`member_id` WHERE `plings`.`status_id` = 2 AND `project`.`status` = :status AND `project`.`type_id` = 1 AND `project`.`member_id` = :memberId ORDER BY `plings`.`create_time` DESC "; if (null != $limit) { $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); } $result = $this->_db->fetchAll($sql, array('memberId' => $member_id, 'status' => Default_Model_Project::PROJECT_ACTIVE)); return $this->generateRowSet($result); } /** * Finds an active user by given username or email ($identity) * Returns an empty rowset when no user found. * * @param string $identity could be the username or users mail address * @param bool $withLoginLocal * * @return Zend_Db_Table_Row_Abstract */ public function findActiveMemberByIdentity($identity, $withLoginLocal = false) { $sqlName = "SELECT * FROM `member` WHERE `is_active` = :active AND `is_deleted` = :deleted AND `username` = :identity"; $sqlMail = "SELECT * FROM `member` WHERE `is_active` = :active AND `is_deleted` = :deleted AND `mail` = :identity"; if ($withLoginLocal) { $sqlName .= " AND login_method = '" . self::MEMBER_LOGIN_LOCAL . "'"; $sqlMail .= " AND login_method = '" . self::MEMBER_LOGIN_LOCAL . "'"; } // test identity as username $resultName = $this->getAdapter()->fetchRow($sqlName, array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity)) ; if ((false !== $resultName) AND (count($resultName) > 0)) { return $this->generateRowClass($resultName); } // test identity as mail $resultMail = $this->getAdapter()->fetchRow($sqlMail, array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity)) ; if ((false !== $resultMail) AND (count($resultMail) > 0)) { return $this->generateRowClass($resultMail); } return $this->createRow(); } /** * @param string $value * * @return mixed */ public function findMemberForMailHash($value) { $sql = " SELECT `m`.* FROM `member_email` `me` JOIN `member` `m` ON `m`.`member_id` = `me`.`email_member_id` WHERE `m`.`is_active` = 1 AND `m`.`is_deleted` = 0 AND `me`.`email_hash` = :email_hash "; $result = $this->getAdapter()->fetchAll($sql, array('email_hash' => $value)); if ($result && count($result) > 0) { $member = $result[0]; return $member; } } /** * @param Zend_Db_Table_Row_Abstract $memberData * * @return bool */ public function isHiveUser($memberData) { if (empty($memberData)) { return false; } //20180801 ronald: If a hive user change his password, he gets the ocs password type and we do //have to check against the old hive password style //if ($memberData->source_id == self::SOURCE_HIVE) { // return true; //} if ($memberData->password_type == self::PASSWORD_TYPE_HIVE) { return true; } return false; } public function fetchActiveHiveUserByUsername($username) { $sql = 'SELECT * FROM member WHERE username = :username AND is_active = 1 AND member.source_id = 1 AND member.is_deleted = 0'; $result = $this->getAdapter()->query($sql, array('username' => $username))->fetch(); return $result; } public function fetchActiveUserByUsername($username) { $sql = 'SELECT DISTINCT member.member_id FROM member JOIN activity_log on activity_log.member_id = member.member_id WHERE LOWER(username) = :username AND is_active = 1 AND member.is_deleted = 0 ORDER BY member.changed_at DESC, activity_log.time DESC'; $result = $this->getAdapter()->query($sql, array('username' => strtolower($username)))->fetchAll(); if($result && count($result)>0) { $member_id = $result[0]['member_id']; return $member_id; } return null; } public function fetchCommentsCount($member_id) { $sql = " SELECT count(1) AS count FROM comments where comment_target_id <> 0 and comment_member_id = :member_id and comment_active = :comment_status "; $result = $this->_db->fetchRow($sql, array( 'member_id' => $member_id, 'comment_status' => Default_Model_DbTable_Comments::COMMENT_ACTIVE )); return $result['count']; } /** * @param $member_id * @param null $limit * * @return Zend_Paginator * @throws Zend_Paginator_Exception */ public function fetchComments($member_id, $limit = null) { $sql = ' SELECT comment_id ,comment_text ,member.member_id ,member.profile_image_url ,comment_created_at ,stat_projects.username ,stat_projects.project_member_id ,comment_target_id ,stat_projects.title ,stat_projects.project_id ,stat_projects.laplace_score ,stat_projects.count_likes ,stat_projects.count_dislikes ,stat_projects.image_small ,stat_projects.version ,stat_projects.cat_title ,stat_projects.count_comments ,stat_projects.changed_at ,stat_projects.created_at FROM comments inner join member ON comments.comment_member_id = member.member_id inner JOIN stat_projects ON comments.comment_target_id = stat_projects.project_id AND comments.comment_type = 0 WHERE comments.comment_active = :comment_status AND stat_projects.status = :project_status AND comments.comment_member_id = :member_id ORDER BY comments.comment_created_at DESC '; if (isset($limit)) { $sql .= ' limit ' . (int)$limit; } $result = $this->_db->fetchAll($sql, array( 'member_id' => $member_id, 'project_status' => Default_Model_DbTable_Project::PROJECT_ACTIVE, 'comment_status' => Default_Model_DbTable_Comments::COMMENT_ACTIVE )); if (count($result) > 0) { return new Zend_Paginator(new Zend_Paginator_Adapter_Array($result)); } else { return new Zend_Paginator(new Zend_Paginator_Adapter_Array(array())); } } public function fetchCntSupporters($member_id) { $sql = ' SELECT DISTINCT `plings`.`member_id` FROM `plings` JOIN `project` ON `plings`.`project_id` = `project`.`project_id` JOIN `member` ON `project`.`member_id` = `member`.`member_id` WHERE `plings`.`status_id` = 2 AND `project`.`status` = :project_status AND `project`.`type_id` = 1 AND `project`.`member_id` = :member_id '; $result = $this->_db->fetchAll($sql, array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE)); return count($result); } public function fetchSupporterDonationInfo($member_id) { $sql = 'SELECT max(active_time) AS active_time_max ,min(active_time) AS active_time_min ,(DATE_ADD(max(active_time), INTERVAL 1 YEAR) > now()) AS issupporter ,count(1) AS cnt from support where status_id = 2 AND member_id = :member_id '; $result = $this->getAdapter()->fetchRow($sql, array('member_id' => $member_id)); return $result; } public function fetchLastActiveTime($member_id) { $sql_page_views = "SELECT `created_at` AS `lastactive` FROM `stat_page_views` WHERE `member_id` = :member_id ORDER BY `created_at` DESC LIMIT 1"; $sql_activities = "SELECT `time` AS lastactive FROM activity_log WHERE member_id = :member_id ORDER BY `time` DESC LIMIT 1"; $result_page_views = $this->getAdapter()->fetchRow($sql_page_views, array('member_id' => $member_id)); $result_activities = $this->getAdapter()->fetchRow($sql_activities, array('member_id' => $member_id)); if (count($result_page_views) > 0 AND count($result_activities) > 0) { return $result_page_views['lastactive'] > $result_activities['lastactive'] ? $result_page_views['lastactive'] : $result_activities['lastactive']; } if (count($result_page_views) > count($result_activities)) { return $result_page_views['lastactive']; } if (count($result_activities) > count($result_page_views)) { return $result_activities['lastactive']; } return null; } /** * @param int $member_id * * @return array */ public function fetchContributedProjectsByCat($member_id) { $projects = $this->fetchSupportedProjects($member_id); $catArray = array(); if (count($projects) == 0) { return $catArray; } foreach ($projects as $pro) { $catArray[$pro->catTitle] = array(); } $helperProductUrl = new Default_View_Helper_BuildProductUrl(); foreach ($projects as $pro) { $projArr = array(); $projArr['id'] = $pro->project_id; $projArr['name'] = $pro->title; $projArr['image'] = $pro->image_small; $projArr['url'] = $helperProductUrl->buildProductUrl($pro->project_id, '', null, true); $projArr['sumAmount'] = $pro->sumAmount; array_push($catArray[$pro->catTitle], $projArr); } return $catArray; } /** * @param int $member_id * @param null $limit * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchSupportedProjects($member_id, $limit = null) { $sql = " SELECT plings.project_id, project.title, project.image_small, project_category.title AS catTitle, (SELECT SUM(amount) FROM plings WHERE plings.project_id=project.project_id AND plings.status_id=2) AS sumAmount FROM plings JOIN project ON plings.project_id = project.project_id JOIN project_category ON project.project_category_id = project_category.project_category_id WHERE plings.status_id IN (2,3,4) AND plings.member_id = :member_id AND project.status = :project_status AND project.type_id = 1 GROUP BY plings.project_id ORDER BY sumAmount DESC "; if (null != $limit) { $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE)); return $this->generateRowSet($result); } /** * @param string $value * @param int $test_case_sensitive * * @param array $omitMember * * @return array */ public function findUsername($value, $test_case_sensitive = self::CASE_INSENSITIVE, $omitMember = array()) { $sql = " SELECT * FROM `member` "; if ($test_case_sensitive == self::CASE_INSENSITIVE) { $sql .= "WHERE LCASE(member.username) = LCASE(:username)"; } else { $sql .= "WHERE member.username = :username"; } if (count($omitMember) > 0) { $sql .= " AND member.member_id NOT IN (" . implode(',', $omitMember) . ")"; } return $this->_db->fetchAll($sql, array('username' => $value)); } /** * @param string $login * * @return int */ public function generateUniqueUsername($login) { $sql = "SELECT COUNT(*) AS `counter` FROM `member` WHERE `username` REGEXP CONCAT(:user_name,'[_0-9]*$')"; $result = $this->_db->fetchRow($sql, array('user_name' => $login)); return $login . '_' . $result['counter']; } /** * @param int $member_id * @param string $email * * @return bool * @throws Zend_Db_Statement_Exception */ public function setActive($member_id, $email) { $sql = " UPDATE `member` STRAIGHT_JOIN `member_email` ON `member`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_checked` IS NULL AND `member`.`is_deleted` = 0 AND `member_email`.`email_deleted` = 0 SET `member`.`mail_checked` = 1, `member`.`is_active` = 1, `member`.`changed_at` = NOW(), `member_email`.`email_checked` = NOW() WHERE `member`.`member_id` = :memberId AND `member_email`.`email_address` = :mailAddress; "; $stmnt = $this->_db->query($sql, array('memberId' => $member_id, 'mailAddress' => $email)); return $stmnt->rowCount() > 0 ? true : false; } /** * @param int $member_id * * @throws Exception * @deprecated since we're using solr server for searching */ private function removeMemberProjectsFromSearch($member_id) { $modelProject = new Default_Model_Project(); $memberProjects = $modelProject->fetchAllProjectsForMember($member_id); $modelSearch = new Default_Model_Search_Lucene(); foreach ($memberProjects as $memberProject) { $product = array(); $product['project_id'] = $memberProject->project_id; $product['project_category_id'] = $memberProject->project_category_id; $modelSearch->deleteDocument($product); } } /** * @param string $identity * * @return Zend_Db_Table_Row_Abstract */ public function findActiveMemberByMail($identity) { $sqlMail = " SELECT `m`.*, `me`.`email_address` AS `mail`, IF(ISNULL(`me`.`email_checked`),0,1) AS `mail_checked` FROM `member` AS `m` JOIN `member_email` AS `me` ON `me`.`email_member_id` = `m`.`member_id` AND `me`.`email_primary` = 1 WHERE `is_active` = :active AND `is_deleted` = :deleted AND `me`.`email_address` = :identity "; // test identity as mail $resultMail = $this->getAdapter()->fetchRow($sqlMail, array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity)) ; if ((false !== $resultMail) AND (count($resultMail) > 0)) { return $this->generateRowClass($resultMail); } return $this->createRow(); } private function setDeletedInSubSystems($member_id) { try { $id_server = new Default_Model_Ocs_OAuth(); $id_server->deleteUser($member_id); //Zend_Registry::get('logger')->debug(__METHOD__ . ' - : ' . implode(PHP_EOL." - ", $id_server->getMessages())); } catch (Exception $e) { Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); } try { $ldap_server = new Default_Model_Ocs_Ldap(); $ldap_server->deleteUser($member_id); Zend_Registry::get('logger')->debug(__METHOD__ . ' - ldap : ' . implode(PHP_EOL." - ", $ldap_server->getMessages())); } catch (Exception $e) { Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); } - try { - $openCode = new Default_Model_Ocs_Gitlab(); - $openCode->deleteUser($member_id); - Zend_Registry::get('logger')->debug(__METHOD__ . ' - opencode : ' . implode(PHP_EOL." - ", $openCode->getMessages())); - } catch (Exception $e) { - Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); - } - try { - $forum = new Default_Model_Ocs_Forum(); - $forum->deleteUser($member_id); - Zend_Registry::get('logger')->debug(__METHOD__ . ' - forum : ' . implode(PHP_EOL." - ", $forum->getMessages())); - } catch (Exception $e) { - Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); - } + //try { + // $openCode = new Default_Model_Ocs_Gitlab(); + // $openCode->deleteUser($member_id); + // Zend_Registry::get('logger')->debug(__METHOD__ . ' - opencode : ' . implode(PHP_EOL." - ", $openCode->getMessages())); + //} catch (Exception $e) { + // Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); + //} + //try { + // $forum = new Default_Model_Ocs_Forum(); + // $forum->deleteUser($member_id); + // Zend_Registry::get('logger')->debug(__METHOD__ . ' - forum : ' . implode(PHP_EOL." - ", $forum->getMessages())); + //} catch (Exception $e) { + // Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); + //} } public function getMembersAvatarOldAutogenerated($orderby='member_id desc',$limit = null, $offset = null) { $sql = " select * from tmp_member_avatar_unknow "; if(isset($orderby)){ $sql = $sql.' order by '.$orderby; } if (isset($limit)) { $sql .= ' limit ' . (int)$limit; } if (isset($offset)) { $sql .= ' offset ' . (int)$offset; } $resultSet = $this->_db->fetchAll($sql); return $resultSet; } public function getMembersAvatarOldAutogeneratedTotalCount() { $sql = " select count(1) as cnt from tmp_member_avatar_unknow "; $result = $this->getAdapter()->query($sql, array())->fetchAll(); return $result[0]['cnt']; } public function updateAvatarTypeId($member_id, $type_id) { $sql = " update member set avatar_type_id = :type_id where member_id = :member_id "; $this->getAdapter()->query($sql, array('type_id'=>$type_id,'member_id'=>$member_id)); } } \ No newline at end of file diff --git a/application/modules/default/models/Ocs/Gitlab.php b/application/modules/default/models/Ocs/Gitlab.php index 1b615e9f1..a18eb1d3f 100644 --- a/application/modules/default/models/Ocs/Gitlab.php +++ b/application/modules/default/models/Ocs/Gitlab.php @@ -1,1022 +1,1031 @@ . * * Created: 19.06.2018 */ class Default_Model_Ocs_Gitlab { /** @var Zend_Cache_Core */ protected $cache; protected $config; protected $messages; protected $httpClient; /** * @inheritDoc */ public function __construct($config = null) { if (isset($config)) { $this->config = $config; } else { $this->config = Zend_Registry::get('config')->settings->server->opencode; } $uri = $this->config->host; $this->httpClient = new Zend_Http_Client($uri, array('keepalive' => true, 'strictredirects' => true)); $this->cache = Zend_Registry::get('cache'); } /** * @param $member_data * @param $oldUsername * * @return array|bool|null * @throws Default_Model_Ocs_Exception * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Json_Exception */ public function updateUserFromArray($member_data, $oldUsername) { if (empty($member_data)) { return false; } $this->messages = array(); $data = $this->mapUserData($member_data); $user = $this->getUser($data['extern_uid'], $oldUsername); if (empty($user)) { $this->messages[] = "Fail"; return false; } // $data['skip_reconfirmation'] = 'true'; // unset($data['password']); try { foreach ($data as $datum) { $datum['skip_reconfirmation'] = 'true'; unset($datum['password']); $this->httpUserUpdate($data, $user['id']); } } catch (Zend_Exception $e) { $this->messages[] = "Fail " . $e->getMessage(); return false; } $this->messages[] = "overwritten : " . json_encode($user); return $user; } /** * @param array $user * * @return array */ protected function mapUserData($user) { $paramEmail = ''; if (isset($user['email_address'])) { $paramEmail = $user['email_address']; } else if (isset($user['mail'])) { $paramEmail = $user['mail']; } if (strlen($user['biography']) > 254) { $helperTruncate = new Default_View_Helper_Truncate(); $bio = $helperTruncate->truncate($user['biography'], 250); } else { $bio = empty($user['biography']) ? '' : $user['biography']; } $data = array( array( 'email' => $paramEmail, 'username' => mb_strtolower($user['username']), // 'name' => (false == empty($user['lastname'])) ? trim($user['firstname'] . ' ' . $user['lastname']) : $user['username'], 'name' => $user['username'], 'password' => $user['password'], 'provider' => $this->config->provider_name, 'extern_uid' => $user['external_id'], 'bio' => $bio, 'admin' => $user['roleId'] == 100 ? 'true' : 'false', 'can_create_group' => 'true' ), array( 'email' => $paramEmail, 'username' => mb_strtolower($user['username']), // 'name' => (false == empty($user['lastname'])) ? trim($user['firstname'] . ' ' . $user['lastname']) : $user['username'], 'name' => $user['username'], 'password' => $user['password'], 'provider' => "ldapmain", 'extern_uid' => $this->buildUserDn($user['username']), 'bio' => $bio, 'admin' => $user['roleId'] == 100 ? 'true' : 'false', 'can_create_group' => 'true' ) ); return $data; } private function buildUserDn($extern_uid) { $username = mb_strtolower($extern_uid); $baseDn = Default_Model_Ocs_Ldap::getBaseDn(); $dn = "cn={$username},{$baseDn}"; return $dn; } /** * @param $extern_uid * @param $username * * @return array|null * @throws Default_Model_Ocs_Exception * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Json_Exception */ public function getUser($extern_uid, $username) { $user_by_uid = $this->getUserByExternUid($extern_uid); if (false === empty($user_by_uid)) { return $user_by_uid; } + $this->messages[] = "external id not found. external_id: " . $extern_uid; $user_by_dn = $this->getUserByDN(urlencode($username)); if (false === empty($user_by_dn)) { return $user_by_dn; } + $this->messages[] = "ldap dn not found. username: " . $username; + + $user_by_name = $this->getUserWithName(urlencode($username)); + + if (false === empty($user_by_name)) { + return $user_by_name; + } + $this->messages[] = "username not found. username: " . $username; return null; } /** * @param string $extern_uid * * @return array * @throws Default_Model_Ocs_Exception * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Json_Exception */ public function getUserByExternUid($extern_uid) { $this->httpClient->resetParameters(); $uri = $this->config->host . "/api/v4/users?extern_uid={$extern_uid}&provider=" . $this->config->provider_name; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if (count($body) == 0) { return array(); } if (array_key_exists("message", $body)) { $result_code = substr(trim($body["message"]), 0, 3); if ((int)$result_code >= 300) { throw new Default_Model_Ocs_Exception($body["message"]); } } Zend_Registry::get('logger')->debug(__METHOD__ . " - body: " . $response->getRawBody()); return $body[0]; } /** * @param string $email * * @return array * @throws Default_Model_Ocs_Exception * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Json_Exception */ public function getUserByEmail($email) { $this->httpClient->resetParameters(); $uri = $this->config->host . "/api/v4/users?search={$email}"; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if (count($body) == 0) { return array(); } if (array_key_exists("message", $body)) { $result_code = substr(trim($body["message"]), 0, 3); if ((int)$result_code >= 300) { throw new Default_Model_Ocs_Exception($body["message"]); } } Zend_Registry::get('logger')->debug(__METHOD__ . " - body: " . $response->getRawBody()); return $body; } /** * @param $username * * @return array * @throws Default_Model_Ocs_Exception * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Json_Exception */ public function getUserByDN($username) { $user_id = $this->buildUserDn($username); $this->httpClient->resetParameters(); $uri = $this->config->host . "/api/v4/users?extern_uid={$user_id}&provider=ldapmain"; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if (count($body) == 0) { return array(); } if (array_key_exists("message", $body)) { $result_code = substr(trim($body["message"]), 0, 3); if ((int)$result_code >= 300) { throw new Default_Model_Ocs_Exception($body["message"]); } } Zend_Registry::get('logger')->debug(__METHOD__ . " - body: " . $response->getRawBody()); return $body[0]; } /** * @param $data * * @param $id * * @return bool * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Http_Exception */ private function httpUserUpdate($data, $id) { $this->httpClient->resetParameters(); $uri = $this->config->host . $this->config->url->user_create . '/' . $id; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::PUT); $this->httpClient->setParameterPost($data); $response = $this->httpClient->request(); if ($response->getStatus() < 200 OR $response->getStatus() >= 300) { throw new Default_Model_Ocs_Exception('update user data failed. OCS OpenCode server send message: ' . $response->getRawBody()); } $body = Zend_Json::decode($response->getRawBody()); if (array_key_exists("message", $body)) { throw new Default_Model_Ocs_Exception($body["message"]); } Zend_Registry::get('logger')->debug(__METHOD__ . ' - request: ' . $uri); Zend_Registry::get('logger')->debug(__METHOD__ . ' - response: ' . $response->getRawBody()); return $body; } public function validateUserData($member, $userSubsystem) { $name = (false == empty($member['lastname'])) ? trim($member['firstname'] . ' ' . $member['lastname']) : $member['username']; $userDn = $this->buildUserDn(strtolower($member['username'])); $result = array(); if (mb_strtolower($member['email_address']) != $userSubsystem['email']) { $result[] = 'email_address<=>email'; $result[] = $member['email_address'] . '<=>' . $userSubsystem['email']; } if (mb_strtolower($member['username']) != $userSubsystem['username']) { $result[] = 'username<=>username'; $result[] = mb_strtolower($member['username']) . '<=>' . $userSubsystem['username']; } if ($member['username'] != $userSubsystem['name']) { $result[] = 'username<=>name'; $result[] = $member['username'] . '<=>' . $userSubsystem['name']; } if (($member['roleId'] == 100 ? true : false) != $userSubsystem['is_admin']) { $result[] = 'roleId<=>admin'; $result[] = $member['roleId'] . '<=>' . $userSubsystem['admin']; } if ("active" != $userSubsystem['state']) { $result[] = 'is_active<=>state'; $result[] = ($member['is_active'] ? 'active' : 'inactive') . '<=>' . $userSubsystem['state']; } if (false === array_search('oauth_opendesktop', array_column($userSubsystem['identities'], 'provider'))) { $result[] = 'oauth_opendesktop missing'; } $provider = array_column($userSubsystem['identities'], 'extern_uid', 'provider'); $providerOauth = isset($provider['oauth_opendesktop']) ? $provider['oauth_opendesktop'] : ''; if ($member['external_id'] != $providerOauth) { $result[] = 'external_id<=>oauth_opendesktop->extern_uid'; $result[] = $member['external_id'] . '<=>' . $providerOauth; } if (false === array_search('ldapmain', array_column($userSubsystem['identities'], 'provider'))) { $result[] = 'ldapmain missing'; } $providerLdap = isset($provider['ldapmain']) ? $provider['ldapmain'] : ''; if ($userDn != $providerLdap) { $result[] = 'userDn<=>ldapmain->extern_uid'; $result[] = $userDn . '<=>' . $providerLdap; } return $result; } public function resetMessages() { $this->messages = array(); } /** * @param $member_data * * @param bool $force * * @return array|bool * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Json_Exception */ public function createUserFromArray($member_data, $force = false) { if (empty($member_data)) { return false; } $this->messages = array(); $data = $this->mapUserData($member_data); $user = $this->getUser($member_data['external_id'], $member_data['username']); if (empty($user)) { // $data['skip_confirmation'] = 'true'; try { $data[0]['skip_confirmation'] = 'true'; $user = $this->httpUserCreate($data[0]); $this->messages[] = "created : " . json_encode($user); $data[1]['skip_reconfirmation'] = 'true'; $updatedUser = $this->httpUserUpdate($data[1], $user['id']); $this->messages[] = "updated : " . json_encode($updatedUser); } catch (Zend_Exception $e) { $this->messages[] = "Fail " . $e->getMessage(); return false; } return $updatedUser; } if ($force === true) { //$data['skip_reconfirmation'] = 'true'; //unset($data['password']); try { foreach ($data as $datum) { $datum['skip_reconfirmation'] = 'true'; unset($datum['password']); $updatedUser = $this->httpUserUpdate($datum, $user['id']); } //$this->httpUserUpdate($data, $user['id']); } catch (Zend_Exception $e) { $this->messages[] = "Fail " . $e->getMessage(); return false; } $this->messages[] = "overwritten : " . json_encode($updatedUser); return $updatedUser; } $this->messages[0] = 'user already exists.'; return false; } /** * @param $data * * @return bool * @throws Default_Model_Ocs_Exception * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Json_Exception */ private function httpUserCreate($data) { $this->httpClient->resetParameters(); $uri = $this->config->host . $this->config->url->user_create; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::POST); $this->httpClient->setParameterPost($data); $response = $this->httpClient->request(); if ($response->getStatus() < 200 OR $response->getStatus() >= 300) { throw new Default_Model_Ocs_Exception('push user data failed. OCS OpenCode server send message: ' . $response->getRawBody()); } $body = Zend_Json::decode($response->getRawBody()); if (array_key_exists("message", $body)) { throw new Default_Model_Ocs_Exception(Zend_Json::encode($body["message"])); } Zend_Registry::get('logger')->debug(__METHOD__ . ' - request: ' . $uri); Zend_Registry::get('logger')->debug(__METHOD__ . ' - response: ' . $response->getRawBody()); return $body; } /** * @param int $member_id * * @return bool * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Http_Exception * @throws Zend_Json_Exception */ public function deleteUser($member_id) { if (empty($member_id)) { return false; } $member_data = $this->getMemberData($member_id, false); $user = $this->getUser($member_data['external_id'], mb_strtolower($member_data['username'])); if (empty($user)) { $this->messages[0] = 'Not deleted. User not exists. '; return false; } return $this->httpUserDelete($user['id']); } /** * @param int $member_id * * @return array * @throws Zend_Exception */ private function getMemberData($member_id, $onlyActive = true) { $onlyActiveFilter = ''; if ($onlyActive) { $onlyActiveFilter = " AND `m`.`is_active` = 1 AND `m`.`is_deleted` = 0 AND `me`.`email_checked` IS NOT NULL AND `me`.`email_deleted` = 0"; } $sql = " SELECT `mei`.`external_id`,`m`.`member_id`, `m`.`username`, `me`.`email_address`, `m`.`password`, `m`.`roleId`, `m`.`firstname`, `m`.`lastname`, `m`.`profile_image_url`, `m`.`biography`, `m`.`created_at`, `m`.`changed_at`, `m`.`source_id` FROM `member` AS `m` LEFT JOIN `member_email` AS `me` ON `me`.`email_member_id` = `m`.`member_id` AND `me`.`email_primary` = 1 LEFT JOIN `member_external_id` AS `mei` ON `mei`.`member_id` = `m`.`member_id` WHERE `m`.`member_id` = :memberId {$onlyActiveFilter} ORDER BY `m`.`member_id` DESC "; $result = Zend_Db_Table::getDefaultAdapter()->fetchRow($sql, array('memberId' => $member_id)); if (count($result) == 0) { throw new Default_Model_Ocs_Exception('member with id ' . $member_id . ' could not found.'); } return $result; } /** * @param $id * * @return bool * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Http_Exception */ private function httpUserDelete($id) { $this->httpClient->resetParameters(); $uri = $this->config->host . '/api/v4/users/' . $id; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::DELETE); $response = $this->httpClient->request(); if (204 == $response->getStatus()) { $this->messages[0] = ' - response : ' . $response->getRawBody() . " - user id: {$id}"; return true; } if ($response->getStatus() < 200 AND $response->getStatus() >= 300) { throw new Default_Model_Ocs_Exception('delete user failed. OCS OpenCode server send message: ' . $response->getRawBody() . PHP_EOL . " - OpenCode user id: {$id}"); } $body = Zend_Json::decode($response->getRawBody()); if (array_key_exists("message", $body)) { throw new Default_Model_Ocs_Exception($body["message"]); } Zend_Registry::get('logger')->debug(__METHOD__ . ' - request: ' . $uri); Zend_Registry::get('logger')->debug(__METHOD__ . ' - response: ' . $response->getRawBody()); $this->messages[0] = ' - response : ' . $response->getRawBody() . " - user id: {$id}"; return true; } /** * @param string $username * * @return bool * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Json_Exception */ public function userExists($username) { $this->httpClient->resetParameters(); $uri = $this->config->host . '/api/v4/users?username=' . $username; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if (array_key_exists("message", $body)) { throw new Default_Model_Ocs_Exception($body["message"]); } if (count($body) == 0) { return false; } Zend_Registry::get('logger')->debug(__METHOD__ . ' - request: ' . $uri); Zend_Registry::get('logger')->debug(__METHOD__ . ' - response: ' . $response->getBody()); if ($response->getStatus() < 200 AND $response->getStatus() >= 300) { throw new Zend_Exception('exists user failed. OCS OpenCode server send message: ' . $response->getBody() . PHP_EOL . " - OpenCode user id: {$username}"); } $this->messages[0] = ' - response for user exists request: ' . $response->getBody() . PHP_EOL . " - OpenCode user id: {$username}" . PHP_EOL; return $body[0]['id']; } /** * @return array|null */ public function getMessages() { return $this->messages; } /** * @param int $member_id * * @return array|bool * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Json_Exception */ public function createUser($member_id) { if (empty($member_id)) { return false; } $member_data = $this->getMemberData($member_id); $data = $this->mapUserData($member_data); $userId = $this->getUser($data['extern_uid'], $data['username']); if (empty($userId)) { try { $data[0]['skip_confirmation'] = 'true'; $user = $this->httpUserCreate($data[0]); $this->messages[] = "created : " . json_encode($user); $data[1]['skip_reconfirmation'] = 'true'; $updatedUser = $this->httpUserUpdate($data[1], $user['id']); $this->messages[] = "updated : " . json_encode($updatedUser); } catch (Zend_Exception $e) { $this->messages[] = "Fail " . $e->getMessage(); return false; } $this->messages[] = "Success"; return $data; } $this->messages[0] = 'user already exists.'; return false; } /** * @param string $name * * @return bool * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Json_Exception */ public function groupExists($name) { $this->httpClient->resetParameters(); $uri = $this->config->host . '/api/v4/groups?search=' . $name; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if (count($body) > 0) { return true; } if (array_key_exists("message", $body)) { $result_code = substr(trim($body["message"]), 0, 3); if ((int)$result_code >= 300) { throw new Default_Model_Ocs_Exception($body["message"]); } } if (array_key_exists("error_description", $body)) { throw new Default_Model_Ocs_Exception($body["error_description"]); } return false; } /** * @param $member_id * * @return bool * @throws Default_Model_Ocs_Exception * @throws Zend_Exception * @throws Zend_Http_Client_Exception * @throws Zend_Http_Exception * @throws Zend_Json_Exception */ public function updateMail($member_id) { if (empty($member_id)) { throw new Default_Model_Ocs_Exception('given member_id is empty'); } $member_data = $this->getMemberData($member_id, false); $entry = $this->getUser($member_data['external_id'], $member_data['username']); if (empty($entry)) { $this->messages[] = "Failed. User not found;"; return false; } $entry['skip_reconfirmation'] = 'true'; $entry['email'] = $member_data['email_address']; unset($entry['password']); $this->httpUserUpdate($entry, $entry['id']); $this->messages[] = "Success"; return true; } public function getUsers() { $this->httpClient->resetParameters(); $uri = $this->config->host . "/api/v4/users"; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if (count($body) == 0) { return array(); } if (array_key_exists("message", $body)) { $result_code = substr(trim($body["message"]), 0, 3); if ((int)$result_code >= 300) { throw new Default_Model_Ocs_Exception($body["message"]); } } return $body; } public function getUserWithName($username) { $this->httpClient->resetParameters(); $uri = $this->config->host . "/api/v4/users?username=" . $username; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if (count($body) == 0) { return array(); } if (array_key_exists("message", $body)) { $result_code = substr(trim($body["message"]), 0, 3); if ((int)$result_code >= 300) { throw new Default_Model_Ocs_Exception($body["message"]); } } return $body[0]; } public function getUserWithId($id) { $this->httpClient->resetParameters(); $uri = $this->config->host . "/api/v4/users/" . $id; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if (count($body) == 0) { return array(); } if (array_key_exists("message", $body)) { $result_code = substr(trim($body["message"]), 0, 3); if ((int)$result_code >= 300) { throw new Default_Model_Ocs_Exception($body["message"]); } } return $body; } public function getProjects($page = 1, $limit = 5, $order_by = 'created_at', $sort = 'desc') { $cache = $this->cache; $cacheName = __FUNCTION__; if (!($body = $cache->load($cacheName))) { $this->httpClient->resetParameters(); $uri = $this->config->host . '/api/v4/projects?order_by='.$order_by.'&sort='.$sort.'&visibility=public&page=' . $page . '&per_page=' . $limit; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); try { $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if (count($body) == 0) { return array(); } if (array_key_exists("message", $body)) { $result_code = substr(trim($body["message"]), 0, 3); if ((int)$result_code >= 300) { throw new Default_Model_Ocs_Exception($body["message"]); } } //fetch also user data $returnArray = array(); foreach ($body as $git_project) { $gituser = $this->getUserWithName($git_project['namespace']['name']); $git_project['namespace']['avatar_url'] = $gituser['avatar_url']; $returnArray[] = $git_project; } $body = $returnArray; } catch (Exception $exc) { return array(); } } return $body; } public function getProject($id) { $this->httpClient->resetParameters(); $uri = $this->config->host . "/api/v4/projects/" . $id . "/"; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if ($body['visibility'] <> 'public') { throw new Default_Model_Ocs_Exception('Project not found in gitlab'); } if (count($body) == 0) { return null; } if (array_key_exists("message", $body)) { $result_code = substr(trim($body["message"]), 0, 3); if ((int)$result_code >= 300) { throw new Default_Model_Ocs_Exception($body["message"]); } } return $body; } public function getProjectIssues($id, $state = 'opened', $page = 1, $limit = 5) { $this->httpClient->resetParameters(); $uri = $this->config->host . '/api/v4/projects/' . $id . '/issues?state=' . $state . '&page=' . $page . '&per_page=' . $limit; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if (count($body) == 0) { return array(); } if (array_key_exists("message", $body)) { $result_code = substr(trim($body["message"]), 0, 3); if ((int)$result_code >= 300) { throw new Default_Model_Ocs_Exception($body["message"]); } } return $body; } public function getUserProjects($user_id, $page = 1, $limit = 50) { $this->httpClient->resetParameters(); $uri = $this->config->host . '/api/v4/users/' . $user_id . '/projects?visibility=public&page=' . $page . '&per_page=' . $limit; $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod(Zend_Http_Client::GET); $response = $this->httpClient->request(); $body = Zend_Json::decode($response->getRawBody()); if (count($body) == 0) { return array(); } if (array_key_exists("message", $body)) { $result_code = substr(trim($body["message"]), 0, 3); if ((int)$result_code >= 300) { throw new Default_Model_Ocs_Exception($body["message"]); } } return $body; } /** * @param string $uri * @param string $uid * @param string $method * @param array|null $post_param * * @return bool|array * @throws Zend_Http_Client_Exception * @throws Zend_Json_Exception */ protected function httpRequest($uri, $uid, $method = Zend_Http_Client::GET, $post_param = null) { $this->httpClient->resetParameters(); $this->httpClient->setUri($uri); $this->httpClient->setHeaders('Private-Token', $this->config->private_token); $this->httpClient->setHeaders('Sudo', $this->config->user_sudo); $this->httpClient->setHeaders('User-Agent', $this->config->user_agent); $this->httpClient->setMethod($method); if (isset($post_param)) { $this->httpClient->setParameterPost($post_param); } $response = $this->httpClient->request(); if ($response->getStatus() < 200 OR $response->getStatus() >= 500) { $this->messages[] = 'Request failed.(' . $uri . ') OCS Forum server send message: ' . $response->getBody(); return false; } $body = Zend_Json::decode($response->getBody()); if (array_key_exists("message", $body)) { $this->messages[] = "id: {$uid} ($uri) - " . Zend_Json::encode($body["message"]); } return $body; } } \ No newline at end of file diff --git a/application/modules/default/models/Project.php b/application/modules/default/models/Project.php index d07a96b83..2fdc213e4 100644 --- a/application/modules/default/models/Project.php +++ b/application/modules/default/models/Project.php @@ -1,1642 +1,1666 @@ . **/ class Default_Model_Project extends Default_Model_DbTable_Project { const FILTER_NAME_PROJECT_ID_NOT_IN = 'project_id_not_in'; const FILTER_NAME_RANKING = 'ranking'; const FILTER_NAME_CATEGORY = 'category'; const FILTER_NAME_PACKAGETYPE = 'package_type'; const FILTER_NAME_ORIGINAL = 'original'; const FILTER_NAME_MEMBER = 'member'; const FILTER_NAME_ORDER = 'order'; const FILTER_NAME_LOCATION = 'location'; const ITEM_TYPE_DUMMY = 0; const ITEM_TYPE_PRODUCT = 1; const ITEM_TYPE_UPDATE = 2; const TAG_LICENCE_GID = 7; const TAG_TYPE_ID = 1; /** * @param int $status * @param int $id * * @throws Exception */ public function setStatus($status, $id) { if (false === in_array($status, $this->_allowedStatusTypes)) { throw new Exception('Wrong value for project status.'); } $updateValues = array( 'status' => $status, 'changed_at' => new Zend_Db_Expr('Now()') ); if (self::PROJECT_DELETED == $status) { $updateValues['deleted_at'] = new Zend_Db_Expr('NOW()'); } $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); } public function setClaimedByMember($member_id, $id) { $updateValues = array( 'claimed_by_member' => $member_id, 'changed_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); } public function resetClaimedByMember($id) { $updateValues = array( 'claimed_by_member' => new Zend_Db_Expr('NULL'), 'changed_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); } /** * @param int $id */ public function transferClaimToMember($id) { $updateValues = array( 'member_id' => new Zend_Db_Expr('claimed_by_member'), 'claimable' => new Zend_Db_Expr('NULL'), 'claimed_by_member' => new Zend_Db_Expr('NULL') ); $this->update($updateValues, $this->_db->quoteInto('project_id=? and claimable = 1', $id, 'INTEGER')); } /** * @param int $id */ public function setInActive($id) { $id = (int)$id; $updateValues = array( 'status' => self::PROJECT_INACTIVE, 'deleted_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 40 AND project_id=' . $id); $this->setInActiveForUpdates($id); $this->setDeletedForComments($id); } /** * @param int $id */ protected function setInActiveForUpdates($id) { $id = (int)$id; $updateValues = array( 'status' => self::PROJECT_INACTIVE, 'changed_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 40 AND pid=' . $id); } /** * @param $id */ private function setDeletedForComments($id) { $modelComments = new Default_Model_ProjectComments(); $modelComments->setAllCommentsForProjectDeleted($id); } /** * @param int $id * * @return mixed * @throws Zend_Db_Statement_Exception */ public function fetchActiveBySourcePk($id) { $q = $this->select()->where('status = ?', self::PROJECT_ACTIVE)->where('source_pk = ?', (int)$id) ->where('source_type = "project"'); return $q->query()->fetch(); } /** * @param int $member_id * @param bool $onlyActiveProjects * * @return mixed */ public function countAllProjectsForMember($member_id, $onlyActiveProjects = false) { $q = $this->select()->from($this, array('countAll' => new Zend_Db_Expr('count(*)')))->setIntegrityCheck(false) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER') ->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD); $resultSet = $q->query()->fetchAll(); return $resultSet[0]['countAll']; } /** * @param int $member_id * @param bool $onlyActiveProjects * @param $catids * * @return mixed */ public function countAllProjectsForMemberCatFilter($member_id, $onlyActiveProjects = false, $catids = null) { $q = $this->select()->from($this, array('countAll' => new Zend_Db_Expr('count(*)')))->setIntegrityCheck(false) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER') ->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD); if (isset($catids)) { $q->where('project_category_id in (' . $this->_getCatIds($catids) . ')'); } $resultSet = $q->query()->fetchAll(); return $resultSet[0]['countAll']; } /** * @param $catids * @return string */ protected function _getCatIds($catids) { $sqlwhereCat = ""; $sqlwhereSubCat = ""; $idCategory = explode(',', $catids); if (false === is_array($idCategory)) { $idCategory = array($idCategory); } $sqlwhereCat .= implode(',', $idCategory); $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildElements($idCategory); if (count($subCategories) > 0) { foreach ($subCategories as $element) { $sqlwhereSubCat .= "{$element['project_category_id']},"; } } return $sqlwhereSubCat . $sqlwhereCat; } /** * By default it will show all projects for a member included the unpublished elements. * * @param int $member_id * @param int|null $limit * @param int|null $offset * @param bool $onlyActiveProjects * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchAllProjectsForMember($member_id, $limit = null, $offset = null, $onlyActiveProjects = false) { $q = $this->select()->from($this, array( '*', 'project_validated' => 'project.validated', 'project_uuid' => 'project.uuid', 'project_status' => 'project.status', 'project_created_at' => 'project.created_at', 'project_changed_at' => 'project.changed_at', 'member_type' => 'member.type', 'project_member_id' => 'member_id', 'laplace_score' => new Zend_Db_Expr('laplace_score(count_likes,count_dislikes)'), 'catTitle' => new Zend_Db_Expr('(SELECT title FROM project_category WHERE project_category_id = project.project_category_id)') ))->setIntegrityCheck(false)->join('member', 'project.member_id = member.member_id', array('username')) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER') ->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD)->order('project_changed_at DESC'); if (isset($limit)) { $q->limit($limit, $offset); } return $this->generateRowSet($q->query()->fetchAll()); } /** * @param array $data * * @return Zend_Db_Table_Rowset_Abstract */ protected function generateRowSet($data) { $classRowSet = $this->getRowsetClass(); return new $classRowSet(array( 'table' => $this, 'rowClass' => $this->getRowClass(), 'stored' => true, 'data' => $data )); } /** * By default it will show all projects for a member included the unpublished elements. * * @param int $member_id * @param int|null $limit * @param int|null $offset * @param bool $onlyActiveProjects * * @param null $catids * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchAllProjectsForMemberCatFilter( $member_id, $limit = null, $offset = null, $onlyActiveProjects = false, $catids = null ) { $q = $this->select()->from($this, array( '*', 'project_validated' => 'project.validated', 'project_uuid' => 'project.uuid', 'project_status' => 'project.status', 'project_created_at' => 'project.created_at', 'project_changed_at' => 'project.changed_at', 'member_type' => 'member.type', 'project_member_id' => 'member_id', 'laplace_score' => new Zend_Db_Expr('laplace_score(count_likes,count_dislikes)'), 'catTitle' => new Zend_Db_Expr('(SELECT title FROM project_category WHERE project_category_id = project.project_category_id)') ))->setIntegrityCheck(false)->join('member', 'project.member_id = member.member_id', array('username')) ->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE)) ->where('project.member_id = ?', $member_id, 'INTEGER') ->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD)->order('project_changed_at DESC'); if (isset($catids)) { $q->where('project_category_id in (' . $this->_getCatIds($catids) . ')'); } if (isset($limit)) { $q->limit($limit, $offset); } return $this->generateRowSet($q->query()->fetchAll()); } /** * @param $collection_id * @return null|Zend_Db_Table_Row_Abstract */ public function fetchProductForCollectionId($collection_id) { $sql = ' SELECT p.* FROM project AS p WHERE p.ppload_collection_id = :collectionId AND p.status >= :projectStatus AND p.type_id = :typeId '; $result = $this->_db->fetchRow($sql, array( 'collectionId' => $collection_id, 'projectStatus' => self::PROJECT_INACTIVE, 'typeId' => self::PROJECT_TYPE_STANDARD )); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @param int $project_id * * @return null|Zend_Db_Table_Row_Abstract */ public function fetchProductInfo($project_id) { $sql = ' SELECT p.*, p.validated AS project_validated, p.uuid AS project_uuid, p.status AS project_status, p.created_at AS project_created_at, p.changed_at AS project_changed_at, p.member_id AS project_member_id, p.source_pk AS project_source_pk, p.version AS project_version, pc.title AS cat_title, m.username, m.avatar, m.profile_image_url, m.roleId, m.mail, m.paypal_mail, m.dwolla_id, laplace_score(p.count_likes,p.count_dislikes) AS laplace_score, `view_reported_projects`.`amount_reports` AS `amount_reports`, (select tag.tag_fullname from tag_object, tag where tag_object.tag_id=tag.tag_id and tag_object_id = p.project_id and tag_object.is_deleted=0 and tag_group_id = :tag_licence_gid and tag_type_id = :tag_type_id order by tag_object.tag_created desc limit 1) AS project_license_title FROM project AS p JOIN member AS m ON p.member_id = m.member_id AND m.is_active = 1 AND m.is_deleted = 0 JOIN project_category AS pc ON p.project_category_id = pc.project_category_id LEFT JOIN `view_reported_projects` ON ((`view_reported_projects`.`project_id` = p.`project_id`)) WHERE p.project_id = :projectId AND p.status >= :projectStatus AND p.type_id = :typeId '; $result = $this->_db->fetchRow($sql, array( 'projectId' => $project_id, 'projectStatus' => self::PROJECT_INACTIVE, 'typeId' => self::PROJECT_TYPE_STANDARD, 'tag_licence_gid' => self::TAG_LICENCE_GID, 'tag_type_id' => self::TAG_TYPE_ID )); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @param int $project_id * * @return null|Zend_Db_Table_Row_Abstract */ public function fetchProductInfo_($project_id) { $sql = ' SELECT p.*, p.validated AS project_validated, p.uuid AS project_uuid, p.status AS project_status, p.created_at AS project_created_at, p.changed_at AS project_changed_at, p.member_id AS project_member_id, p.source_pk AS project_source_pk, p.version AS project_version, pc.title AS cat_title, m.username, m.avatar, m.profile_image_url, m.roleId, m.mail, m.paypal_mail, m.dwolla_id, laplace_score(p.count_likes,p.count_dislikes) AS laplace_score, `view_reported_projects`.`amount_reports` AS `amount_reports`, `project_license`.title AS project_license_title FROM project AS p JOIN member AS m ON p.member_id = m.member_id AND m.is_active = 1 AND m.is_deleted = 0 JOIN project_category AS pc ON p.project_category_id = pc.project_category_id LEFT JOIN `view_reported_projects` ON ((`view_reported_projects`.`project_id` = p.`project_id`)) LEFT JOIN `project_license` ON ((`project_license`.`project_license_id` = p.`project_license_id`)) WHERE p.project_id = :projectId AND p.status >= :projectStatus AND p.type_id = :typeId '; $result = $this->_db->fetchRow($sql, array( 'projectId' => $project_id, 'projectStatus' => self::PROJECT_INACTIVE, 'typeId' => self::PROJECT_TYPE_STANDARD )); if ($result) { return $this->generateRowClass($result); } else { return null; } } /** * @param $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchProjectUpdates($project_id) { $projectSel = $this->select()->setIntegrityCheck(false)->from($this->_name) ->join('member', 'project.member_id = member.member_id', array('*')) ->where('project.pid=?', $project_id, 'INTEGER') ->where('project.status>?', self::PROJECT_INACTIVE) ->where('project.type_id=?', self::PROJECT_TYPE_UPDATE)->order('RAND()'); return $this->fetchAll($projectSel); } /** * @param $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchAllProjectUpdates($project_id) { $projectSel = $this->select()->setIntegrityCheck(false)->from($this->_name) ->where('project.pid=?', $project_id, 'INTEGER') ->where('project.status>?', self::PROJECT_INACTIVE) ->where('project.type_id=?', self::PROJECT_TYPE_UPDATE); return $this->fetchAll($projectSel); } /** * @param $project * @param int $count * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchSimilarProjects($project, $count = 10) { $count = (int)$count; $sql = " SELECT * FROM stat_projects AS p WHERE p.project_category_id = :cat_id and project_id <> :project_id ORDER BY p.changed_at DESC LIMIT {$count} "; $result = $this->_db->fetchAll($sql, array( 'cat_id' => $project->project_category_id, 'project_id' => $project->project_id )); return $this->generateRowSet($result); } /** * @param Zend_Db_Table_Row $project * @param int $count * * @return Zend_Db_Table_Rowset_Abstract * @throws Zend_Exception */ public function fetchMoreProjects($project, $count = 6) { $cache = Zend_Registry::get('cache'); $cacheName = __FUNCTION__ . '_' . md5($project->project_id); if (false !== ($result = $cache->load($cacheName))) { return $result; } $q = $this->select()->from('stat_projects', array( 'project_id', 'image_small', 'title', 'catTitle' => 'cat_title' ))->setIntegrityCheck(false) ->where('status = ?', self::PROJECT_ACTIVE) ->where('member_id = ?', $project->member_id, 'INTEGER') ->where('project_id != ?', $project->project_id, 'INTEGER') ->where('type_id = ?', self::PROJECT_TYPE_STANDARD) ->where('project_category_id = ?', $project->project_category_id, 'INTEGER') ->limit($count) ->order('project_created_at DESC'); $storeConfig = Zend_Registry::isRegistered('store_config') ? Zend_Registry::get('store_config') : null; $storePackageTypeIds = null; if ($storeConfig) { $storePackageTypeIds = $storeConfig->package_type; } if ($storePackageTypeIds) { $q = $this->generatePackageTypeFilter($q, array(self::FILTER_NAME_PACKAGETYPE => $storePackageTypeIds)); } $result = $this->fetchAll($q); $cache->save($result, $cacheName, array(), 300); return $result; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select */ protected function generatePackageTypeFilter(Zend_Db_Select $statement, $filterArrayValue) { if (false == isset($filterArrayValue[self::FILTER_NAME_PACKAGETYPE])) { return $statement; } $filter = $filterArrayValue[self::FILTER_NAME_PACKAGETYPE]; if (is_array($filter)) { $statement->join(array( 'package_type' => new Zend_Db_Expr('(SELECT DISTINCT project_id FROM project_package_type WHERE package_type_id in (' . $filter . '))') ), 'project.project_id = package_type.project_id', array()); } else { $statement->where('find_in_set(?, package_types)', $filter); } return $statement; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select */ protected function generateOriginalFilter(Zend_Db_Select $statement, $filterArrayValue) { if (false == isset($filterArrayValue[self::FILTER_NAME_ORIGINAL])) { return $statement; } $filter = $filterArrayValue[self::FILTER_NAME_ORIGINAL]; if (is_array($filter)) { // todo maybe for other tags filter } else { $statement->where('find_in_set(?, tags)', $filter); } return $statement; } /** * @param $project * @param int $count * * @return Zend_Db_Table_Rowset_Abstract * @throws Zend_Db_Statement_Exception * @throws Zend_Exception * @todo improve processing speed */ public function fetchMoreProjectsOfOtherUsr($project, $count = 8) { $cache = Zend_Registry::get('cache'); $cacheName = __FUNCTION__ . '_' . md5($project->project_id); if (false !== ($result = $cache->load($cacheName))) { return $result; } $sql = " SELECT count(1) AS `count` FROM stat_projects WHERE status = :current_status AND member_id <> :current_member_id AND project_category_id = :category_id AND type_id = :project_type "; $result = $this->_db->query($sql, array( 'current_status' => self::PROJECT_ACTIVE, 'current_member_id' => $project->member_id, 'category_id' => $project->project_category_id, 'project_type' => self::PROJECT_TYPE_STANDARD ))->fetch(); if ($result['count'] > $count) { $offset = rand(0, $result['count'] - $count); } else { $offset = 0; } $q = $this->select()->from('stat_projects', array( 'project_id', 'image_small', 'title', 'catTitle' => 'cat_title' ))->setIntegrityCheck(false) ->where('status = ?', self::PROJECT_ACTIVE) ->where('member_id != ?', $project->member_id, 'INTEGER') ->where('type_id = ?', 1) ->where('project_category_id = ?', $project->project_category_id, 'INTEGER') ->limit($count, $offset) ->order('project_created_at DESC'); $storeConfig = Zend_Registry::isRegistered('store_config') ? Zend_Registry::get('store_config') : null; $storePackageTypeIds = null; if ($storeConfig) { $storePackageTypeIds = $storeConfig->package_type; } if ($storePackageTypeIds) { $q = $this->generatePackageTypeFilter($q, array(self::FILTER_NAME_PACKAGETYPE => $storePackageTypeIds)); } $result = $this->fetchAll($q); $cache->save($result, $cacheName, array(), 300); return $result; } /** * @param int $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchProjectSupporter($project_id) { $plingTable = new Default_Model_DbTable_Plings(); return $plingTable->getSupporterForProjectId($project_id); } /** * @param int $project_id * * @return Zend_Db_Table_Rowset_Abstract */ public function fetchProjectSupporterWithPlings($project_id) { $plingTable = new Default_Model_DbTable_Plings(); return $plingTable->getSupporterWithPlingsForProjectId($project_id); } /** * @param $projectId * @param $sources */ public function updateGalleryPictures($projectId, $sources) { $galleryPictureTable = new Default_Model_DbTable_ProjectGalleryPicture(); $galleryPictureTable->clean($projectId); $galleryPictureTable->insertAll($projectId, $sources); } /** * @param $projectId * * @return array */ public function getGalleryPictureSources($projectId) { $galleryPictureTable = new Default_Model_DbTable_ProjectGalleryPicture(); $stmt = $galleryPictureTable->select()->where('project_id = ?', $projectId)->order(array('sequence')); $pics = array(); foreach ($galleryPictureTable->fetchAll($stmt) as $pictureRow) { $pics[] = $pictureRow['picture_src']; } return $pics; } /** * @param int $project_id * * @return array * @throws Zend_Db_Statement_Exception */ public function fetchProjectViews($project_id) { $sql = " SELECT `project_id`, `count_views`, `count_visitor`, `last_view` FROM `stat_page_views_mv` WHERE `project_id` = ? "; $database = Zend_Db_Table::getDefaultAdapter(); $sql = $database->quoteInto($sql, $project_id, 'INTEGER', 1); $resultSet = $database->query($sql)->fetchAll(); if (count($resultSet) > 0) { $result = $resultSet[0]['count_views']; } else { $result = 0; } return $result; } /** * @param int $member_id * * @return int * @throws Zend_Db_Statement_Exception */ public function fetchOverallPageViewsByMember($member_id) { $sql = " SELECT sum(stat.amount) AS page_views FROM project JOIN (SELECT project_id, count(project_id) AS amount FROM stat_page_views GROUP BY project_id) AS stat ON stat.project_id = project.project_id WHERE project.member_id = :member_id AND project.status = :project_status GROUP BY member_id "; $result = $this->_db->query($sql, array('member_id' => $member_id, 'project_status' => self::PROJECT_ACTIVE)); if ($result->rowCount() > 0) { $row = $result->fetch(); return $row['page_views']; } else { return 0; } } /** * @return array * @throws Zend_Db_Statement_Exception */ public function getStatsForNewProjects() { $sql = " SELECT DATE_FORMAT(`time`, '%M %D') AS projectdate, count(1) AS daycount FROM activity_log WHERE activity_type_id = 0 GROUP BY DATE_FORMAT(`time`, '%Y%M%D') ORDER BY `time` DESC LIMIT 14 ;"; $database = Zend_Db_Table::getDefaultAdapter(); $resultSet = $database->query($sql)->fetchAll(); return $resultSet; } /** * @param $idCategory * @param null $limit * @return Zend_Db_Table_Rowset_Abstract */ public function fetchProductsByCategory($idCategory, $limit = null) { $select = $this->select()->setIntegrityCheck(false)->from($this->_name) ->where('project.project_category_id in (?)', $idCategory) ->where('project.status = ?', self::PROJECT_ACTIVE) ->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD) ->joinLeft(array( 'pling_amount' => new Zend_Db_Expr('(SELECT project_id as plinged_project_id, SUM(amount) AS sumAmount, count(1) as countPlings FROM plings where status_id >= 2 group by project_id order by sumAmount DESC)') ), 'pling_amount.plinged_project_id = project.project_id') ->joinLeft('project_category', 'project_category.project_category_id = project.project_category_id', array('cat_title' => 'title')) ->order('pling_amount.sumAmount DESC'); if (false === is_null($limit)) { $select->limit($limit); } $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildElements($idCategory); if (count($subCategories) > 0) { $sqlwhere = ''; foreach ($subCategories as $element) { $sqlwhere .= "{$element['project_category_id']},"; } $sqlwhere = substr($sqlwhere, 0, -1); if (!empty($sqlwhere)) { $sqlwhere = explode(',', $sqlwhere); } $select->orWhere('project.project_category_id in (?)', $sqlwhere); } return $this->fetchAll($select); } /** * @param int|array $idCategory id of a category or an array of id's * @param bool $withSubCat if was set true it will also count products in sub categories * @param null $store_id * * @return int count of products in given category * @throws Zend_Exception * @deprecated */ public function countProductsInCategory($idCategory = null, $withSubCat = true, $store_id = null) { if (empty($idCategory)) { throw new Zend_Exception('idCategory param was not set'); } if (false == is_array($idCategory)) { $idCategory = array($idCategory); } if (isset($store_id)) { $configurations = Zend_Registry::get('application_store_config_id_list'); $store_config = isset($configurations[$store_id]) ? $configurations[$store_id] : null; } else { $store_config = Zend_Registry::isRegistered('store_config') ? Zend_Registry::get('store_config') : null; } $storePackageTypeIds = (false === empty($store_config->package_type)) ? $store_config->package_type : null; $cacheName = __FUNCTION__ . '_' . md5(serialize($idCategory) . $withSubCat . serialize($storePackageTypeIds)); /** @var Zend_Cache_Core $cache */ $cache = Zend_Registry::get('cache'); if (false !== ($resultSet = $cache->load($cacheName))) { return (int)$resultSet[0]['count_active_projects']; } $select = $this->select()->setIntegrityCheck(false) ->from('stat_projects', array('count_active_projects' => 'COUNT(1)')) ->where('status = ? ', self::PROJECT_ACTIVE) ->where('type_id = ?', self::PROJECT_TYPE_STANDARD); $select = $this->generatePackageTypeFilter($select, array(self::FILTER_NAME_PACKAGETYPE => $storePackageTypeIds)); if ($withSubCat) { $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildIds($idCategory); $inCategories = implode(',', array_unique(array_merge($idCategory, $subCategories))); } else { $inCategories = implode(',', $idCategory); } $select->where('project_category_id in (' . $inCategories . ')'); $resultSet = $this->fetchAll($select)->toArray(); $cache->save($resultSet, $cacheName, array(), 60); return (int)$resultSet[0]['count_active_projects']; } /** * @param int|array $idCategory * * @return int * @throws Zend_Exception */ public function countActiveMembersForCategory($idCategory) { //Zend_Registry::get('logger')->debug(__METHOD__ . ' - ' . print_r(func_get_args(), true)); /* if (is_null($idCategory) OR $idCategory == '' OR is_array($idCategory)) { return $this->countActiveProjects(); }*/ $cacheName = __FUNCTION__ . md5(serialize($idCategory)); $cache = Zend_Registry::get('cache'); $result = $cache->load($cacheName); if ($result) { return (int)$result['count_active_members']; } /** * $select = $this->select()->setIntegrityCheck(false)->from($this->_name, * array('count_active_projects' => 'COUNT(1)')) * ->group('member_id') * ->where('project.status = ? ', self::PROJECT_ACTIVE) * ->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD); */ $sqlwhereCat = ""; $sqlwhereSubCat = ""; if (false === is_array($idCategory)) { $idCategory = array($idCategory); } $sqlwhereCat .= implode(',', $idCategory); $modelCategory = new Default_Model_DbTable_ProjectCategory(); $subCategories = $modelCategory->fetchChildElements($idCategory); if (count($subCategories) > 0) { foreach ($subCategories as $element) { $sqlwhereSubCat .= "{$element['project_category_id']},"; } } //$select->where('project.project_category_id in (' . $sqlwhereSubCat . $sqlwhereCat . ')'); $selectWhere = 'AND p.project_category_id in (' . $sqlwhereSubCat . $sqlwhereCat . ')'; $sql = "SELECT count(1) AS count_active_members FROM ( SELECT count(1) AS count_active_projects FROM project p WHERE p.`status` = 100 AND p.type_id = 1 {$selectWhere} GROUP BY p.member_id ) AS A;"; //$resultSet = $this->fetchRow($select); $result = $this->_db->fetchRow($sql); $cache->save($result, $cacheName); return (int)$result['count_active_members']; } public function isProjectFeatured($project_id) { $sql_object= "SELECT project_id FROM project where project_id= :project_id and status = 100 and type_id = 1 and featured = 1"; $r = $this->getAdapter()->fetchRow($sql_object, array('project_id' => $project_id)); if($r){ return true; }else { return false; } } /** * @return mixed */ public function fetchTotalProjectsCount() { $sql = "SELECT count(1) AS total_project_count FROM project WHERE project.status = :status AND project.type_id = :ptype"; $result = $this->_db->fetchRow($sql, array('status' => self::PROJECT_ACTIVE, 'ptype' => self::PROJECT_TYPE_STANDARD)); return $result['total_project_count']; } /** * @param $member_id * @throws Zend_Db_Statement_Exception */ public function setAllProjectsForMemberDeleted($member_id) { $sql = "SELECT project_id FROM project WHERE member_id = :memberId AND type_id = :typeId AND status > :project_status"; $projectForDelete = $this->_db->fetchAll($sql, array( 'memberId' => $member_id, 'typeId' => self::PROJECT_TYPE_STANDARD, 'project_status' => self::PROJECT_DELETED )); foreach ($projectForDelete as $item) { $this->setDeleted($item['project_id']); } // set personal page deleted $sql = "UPDATE project SET `status` = :statusCode, deleted_at = NOW() WHERE member_id = :memberId AND type_id = :typeId"; $this->_db->query($sql, array( 'statusCode' => self::PROJECT_DELETED, 'memberId' => $member_id, 'typeId' => self::PROJECT_TYPE_PERSONAL ))->execute(); } /** * @param int $id */ public function setDeleted($id) { $id = (int)$id; $updateValues = array( 'status' => self::PROJECT_DELETED, 'deleted_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 30 AND project_id=' . $id); $this->setDeletedForUpdates($id); $this->setDeletedForComments($id); $this->setDeletedInMaterializedView($id); } /** * @param int $id */ protected function setDeletedForUpdates($id) { $id = (int)$id; $updateValues = array( 'status' => self::PROJECT_DELETED, 'deleted_at' => new Zend_Db_Expr('Now()') ); $this->update($updateValues, 'status > 30 AND pid=' . $id); } /** * @param $id * @throws Zend_Db_Statement_Exception */ private function setDeletedInMaterializedView($id) { $sql = "UPDATE stat_projects SET status = :new_status WHERE project_id = :project_id"; $result = $this->_db->query($sql, array('new_status' => self::PROJECT_DELETED, 'project_id' => $id))->execute(); } /** * @param $member_id * @throws Zend_Db_Statement_Exception */ public function setAllProjectsForMemberActivated($member_id) { $sql = "SELECT project_id FROM project WHERE member_id = :memberId AND type_id = :typeId"; $projectForDelete = $this->_db->fetchAll($sql, array( 'memberId' => $member_id, 'typeId' => self::PROJECT_TYPE_STANDARD )); foreach ($projectForDelete as $item) { $this->setActive($item['project_id']); } // set personal page active $sql = "UPDATE project SET `status` = :statusCode, deleted_at = NULL WHERE member_id = :memberId AND type_id = :typeId"; $this->_db->query($sql, array( 'statusCode' => self::PROJECT_ACTIVE, 'memberId' => $member_id, 'typeId' => self::PROJECT_TYPE_PERSONAL ))->execute(); } /** * @param int $id */ public function setActive($id) { $updateValues = array( 'status' => self::PROJECT_ACTIVE, 'deleted_at' => null ); $this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER')); $this->setActiveForUpdates($id); $this->setActiveForComments($id); } /** * @param int $id */ protected function setActiveForUpdates($id) { $updateValues = array( 'status' => self::PROJECT_ACTIVE, 'deleted_at' => null ); $this->update($updateValues, $this->_db->quoteInto('pid=?', $id, 'INTEGER')); } /** * @param $id */ private function setActiveForComments($id) { $modelComments = new Default_Model_ProjectComments(); $modelComments->setAllCommentsForProjectActivated($id); } /** * @param array $inputFilterParams * @param int|null $limit * @param int|null $offset * * @return array * @throws Zend_Cache_Exception * @throws Zend_Db_Select_Exception * @throws Zend_Exception */ public function fetchProjectsByFilter($inputFilterParams, $limit = null, $offset = null) { $cacheName = __FUNCTION__ . '_' . md5(serialize($inputFilterParams) . (string)$limit . (string)$offset); /** @var Zend_Cache_Core $cache */ $cache = Zend_Registry::get('cache'); if (false === ($returnValue = $cache->load($cacheName))) { $statement = $this->generateStatement($inputFilterParams, $limit, $offset); /** @var Zend_Db_Table_Rowset $fetchedElements */ $fetchedElements = $this->fetchAll($statement); $statement->reset('limitcount')->reset('limitoffset'); $statement->reset('columns')->columns(array('count' => new Zend_Db_Expr('count(*)'))); $countElements = $this->fetchRow($statement); $returnValue = array('elements' => $fetchedElements, 'total_count' => $countElements->count); $cache->save($returnValue, $cacheName, array(), 120); } return $returnValue; } /** * @param array $inputFilterParams * @param int|null $limit * @param int|null $offset * * @return Zend_Db_Select */ protected function generateStatement($inputFilterParams, $limit = null, $offset = null) { $statement = $this->generateBaseStatement(); $statement = $this->generateCategoryFilter($statement, $inputFilterParams); $statement = $this->generateOrderFilter($statement, $inputFilterParams); $statement = $this->generatePackageTypeFilter($statement, $inputFilterParams); $statement = $this->generateOriginalFilter($statement, $inputFilterParams); $statement = $this->generateReportedSpamFilter($statement); $statement->limit($limit, $offset); return $statement; } /** * @return Zend_Db_Select */ protected function generateBaseStatement() { $statement = $this->select()->setIntegrityCheck(false); //$statement->from(array('project' => $this->_name), array( $statement->from(array('project' => 'stat_projects'), array( '*' )); $statement->where('project.status = ?', self::PROJECT_ACTIVE) ->where('project.type_id=?', self::PROJECT_TYPE_STANDARD); return $statement; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select */ protected function generateCategoryFilter(Zend_Db_Select $statement, $filterArrayValue) { if (false == isset($filterArrayValue[self::FILTER_NAME_CATEGORY])) { return $statement; } $filter = $filterArrayValue[self::FILTER_NAME_CATEGORY]; if (false === is_array($filter)) { $filter = array($filter); } // fetch child elements for each category $modelProjectCategories = new Default_Model_DbTable_ProjectCategory(); $childElements = $modelProjectCategories->fetchChildIds($filter); $allCategories = array_unique(array_merge($filter, $childElements)); $stringCategories = implode(',', $allCategories); $statement->where("( project.project_category_id IN ({$stringCategories}) )"); return $statement; } /** * @param Zend_Db_Select $statement * @param array $filterArrayValue * * @return Zend_Db_Select */ protected function generateOrderFilter(Zend_Db_Select $statement, $filterArrayValue) { if (!isset($filterArrayValue[self::FILTER_NAME_ORDER])) { $filterValue = ''; } else { $filterValue = $filterArrayValue[self::FILTER_NAME_ORDER]; } switch ($filterValue) { case 'latest': $statement->order('project.changed_at DESC'); break; case 'top': //$statement->order(array('amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC')); //$statement->order(array(new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'),'amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC')); $statement->order(array( new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'), 'project.created_at DESC' )); break; case 'download': $statement->order('project.count_downloads_hive DESC'); break; case 'downloadQuarter': $statement->order('project.count_downloads_quarter DESC'); break; case 'hot': //$statement->order(array('amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC')); $statement->order(array( new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'), 'amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC' )); $statement->where(' project.created_at >= (NOW()- INTERVAL 14 DAY)'); break; case 'alpha': default: $statement->order('project.title'); } return $statement; } /** * @param Zend_Db_Select $statement * @return Zend_Db_Select */ protected function generateReportedSpamFilter(Zend_Db_Select $statement) { return $statement->where('(amount_reports is null)'); } /** * @param int $member_id * @param array $values * @param string $username * * @return Zend_Db_Table_Row_Abstract * @throws Exception * @throws Zend_Db_Table_Exception */ public function createProject($member_id, $values, $username) { $values = (array)$values; if (empty($member_id)) { throw new Zend_Db_Table_Exception('member_id is not set'); } if (empty($username)) { throw new Zend_Db_Table_Exception('username is not set'); } // check important values for a new project $values['uuid'] = (!array_key_exists('uuid', $values)) ? Local_Tools_UUID::generateUUID() : $values['uuid']; $values['member_id'] = (!array_key_exists('member_id', $values)) ? $member_id : $values['member_id']; $values['status'] = (!array_key_exists('status', $values)) ? self::PROJECT_INACTIVE : $values['status']; $values['type_id'] = (!array_key_exists('type_id', $values)) ? self::ITEM_TYPE_PRODUCT : $values['type_id']; $values['created_at'] = (!array_key_exists('created_at', $values)) ? new Zend_Db_Expr('NOW()') : $values['created_at']; $values['start_date'] = (!array_key_exists('start_date', $values)) ? new Zend_Db_Expr('NULL') : $values['start_date']; $values['creator_id'] = (!array_key_exists('creator_id', $values)) ? $member_id : $values['creator_id']; if ($username == 'pling editor') { $values['claimable'] = (!array_key_exists('claimable', $values)) ? self::PROJECT_CLAIMABLE : $values['claimable']; } $savedRow = $this->save($values); return $savedRow; } /** * @param int $project_id * @param array $values * * @return Zend_Db_Table_Row_Abstract * @throws Exception * @throws Zend_Db_Table_Exception */ public function updateProject($project_id, $values) { $values = (array)$values; $projectData = $this->find($project_id)->current(); if (empty($projectData)) { throw new Zend_Db_Table_Exception('project_id not found'); } $projectData->setFromArray($values)->save(); return $projectData; } // /** // * @param int|array $storeCategories // * @param boolean $withoutUpdates // * // * @return array // * @throws Zend_Db_Statement_Exception // * @throws Zend_Exception // * @todo: update the sql. It is deprecated since we store only one cat_id for the product. // */ // public function fetchProductsForCategories($storeCategories, $withoutUpdates = true) // { // // Zend_Registry::get('logger')->debug(__METHOD__ . ' - ' . print_r(func_get_args(), true)); // if (empty($storeCategories)) { // return array(); // } // $storeConfig = Zend_Registry::isRegistered('store_config') ? Zend_Registry::get('store_config') : null; // $storePackageTypeIds = null; // if ($storeConfig) { // $storePackageTypeIds = $storeConfig->package_type; // } // $sql = ' // SELECT // p.*, // p.changed_at AS project_changed_at, // pc.title AS cat_title, // m.username, // m.avatar, // m.profile_image_url, // m.roleId, // m.mail, // m.paypal_mail, // m.dwolla_id, // laplace_score(p.count_likes,p.count_dislikes) AS laplace_score // FROM project AS p // JOIN member AS m ON p.member_id = m.member_id AND m.is_active = 1 AND m.is_deleted = 0 // JOIN project_category AS pc ON p.project_category_id = pc.project_category_id'; // if ($storePackageTypeIds) { // $sql .= ' JOIN (SELECT DISTINCT project_id FROM project_package_type WHERE package_type_id in (' // . $storePackageTypeIds . ')) package_type ON p.project_id = package_type.project_id'; // } // $sql .= ' WHERE p.project_category_id IN (' . implode(',', $storeCategories) . ') AND p.status >= 100'; // if ($withoutUpdates) { // $sql .= ' AND p.type_id = 1'; // } // // $this->_db->getProfiler()->setEnabled(true); // $result = $this->_db->query($sql)->fetchAll(); // // $dummy = $this->_db->getProfiler()->getLastQueryProfile()->getQuery(); // // $this->_db->getProfiler()->setEnabled(true); // return $result; // } /** * @param int $member_id * * @return array|mixed */ public function fetchMainProject($member_id) { $sql = "SELECT * FROM {$this->_name} WHERE type_id = :type AND member_id = :member"; // $this->_db->getProfiler()->setEnabled(true); $result = $this->_db->fetchRow($sql, array('type' => self::PROJECT_TYPE_PERSONAL, 'member' => (int)$member_id)); // $dummy = $this->_db->getProfiler()->getLastQueryProfile()->getQuery(); // $this->_db->getProfiler()->setEnabled(true); if (count($result) > 0) { return $result; } else { return array(); } } /** * @param $project_id * @return Zend_Db_Table_Row_Abstract * @throws Zend_Db_Statement_Exception */ public function fetchProductDataFromMV($project_id) { $sql = "SELECT * FROM stat_projects WHERE project_id = :project_id"; $resultSet = $this->_db->query($sql, array('project_id' => $project_id))->fetch(); if (false === $resultSet) { return $this->generateRowClass(array()); } return $this->generateRowClass($resultSet); } /** * @return array */ public function fetchGhnsExcludedProjects() { $sql = " SELECT p.project_id, p.title, l.member_id AS exclude_member_id, l.time AS exclude_time, m.username AS exclude_member_name FROM project p JOIN activity_log l ON l.project_id = p.project_id AND l.activity_type_id = 314 INNER JOIN member m ON m.member_id = l.member_id WHERE p.ghns_excluded = 1 "; $list = $this->_db->fetchAll($sql); return $list; } /** * @return array */ public function getUserActiveProjects($member_id,$limit = null, $offset = null) { // for member me page $sql = " SELECT p.project_id, p.title, p.created_at as project_created_at, p.changed_at as project_changed_at, p.count_likes, p.count_dislikes, p.laplace_score, p.member_id, p.cat_title as catTitle, p.image_small, (select count(1) from project_plings l where p.project_id = l.project_id and l.is_deleted = 0 and l.is_active = 1 ) countplings FROM stat_projects p where p.status =100 and p.member_id = :member_id order by p.changed_at DESC "; if (isset($limit)) { $sql = $sql.' limit '.$limit; } if (isset($offset)) { $sql = $sql.' offset '.$offset; } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); if ($result) { return $this->generateRowClass($result); } else { return null; } } public function fetchAllFeaturedProjectsForMember($member_id, $limit = null, $offset = null) { // for member me page $sql = " SELECT p.project_id, p.title, p.created_at as project_created_at, p.changed_at as project_changed_at, p.count_likes, p.count_dislikes, p.laplace_score, p.member_id, p.cat_title as catTitle, p.image_small, (select count(1) from project_plings l where p.project_id = l.project_id and l.is_deleted = 0 and l.is_active = 1 ) countplings FROM stat_projects p where p.status =100 and featured = 1 and p.member_id = :member_id order by p.changed_at DESC "; if (isset($limit)) { $sql = $sql.' limit '.$limit; } if (isset($offset)) { $sql = $sql.' offset '.$offset; } $result = $this->_db->fetchAll($sql, array('member_id' => $member_id)); if ($result) { return $this->generateRowClass($result); } else { return null; } } public function fetchDuplatedSourceProjects($orderby='source_url asc',$limit = null, $offset = null) { $sql = " select source_url ,count(1) as cnt, GROUP_CONCAT(p.project_id ORDER BY p.created_at) pids from stat_projects_source_url p group by source_url having count(1)>1 "; if(isset($orderby)){ $sql = $sql.' order by '.$orderby; } if (isset($limit)) { $sql .= ' limit ' . (int)$limit; } if (isset($offset)) { $sql .= ' offset ' . (int)$offset; } $result = $this->_db->fetchAll($sql); return $result; } public function getTotalCountDuplicates() { $sql = " select count(1) as cnt from ( select source_url ,count(1) as cnt, GROUP_CONCAT(p.project_id ORDER BY p.created_at) pids from stat_projects_source_url p group by p.source_url having count(1)>1 ) a "; $result = $this->_db->fetchAll($sql); return $result[0]['cnt'];; } public function getCountSourceUrl($source_url) { $last = substr($source_url, -1); if($last=='/'){ $source_url = substr($source_url, 0, -1); } $sql = " select count(1) as cnt from stat_projects_source_url p where p.source_url= :source_url "; $result = $this->_db->fetchAll($sql,array('source_url' => $source_url)); return $result[0]['cnt']; } public function getCountProjectsDuplicateSourceurl($member_id) { $sql = " select count(1) as cnt from ( select distinct p.source_url ,(select count(1) from stat_projects_source_url pp where pp.source_url=p.source_url) cnt from stat_projects_source_url p where p.member_id = :member_id ) t where t.cnt>1 "; $result = $this->_db->fetchAll($sql,array('member_id' => $member_id)); return $result[0]['cnt']; } /** * @param $ids * @return Zend_Db_Table_Row_Abstract * @throws Zend_Db_Statement_Exception */ public function fetchProjects($ids) { $sql = "SELECT * FROM stat_projects WHERE project_id in (".$ids.")"; $resultSet = $this->_db->fetchAll($sql); return $this->generateRowSet($resultSet); } + /** + * @param $project_id + * @return true/false + * @throws Zend_Db_Statement_Exception + */ + public function validateDeleteProjectFromSpam($project_id) + { + //produkt ist ueber 6 monate alt oder produkt hat ueber 5 kommentare oder produkt hat minimum 1 pling + // darf nicht gelöscht werden + $sql ='select count_comments + ,created_at + , (created_at+ INTERVAL 6 MONTH < NOW()) is_old + ,(select count(1) from project_plings f where f.project_id = p.project_id and f.is_deleted = 0) plings + FROM project p where project_id =:project_id'; + $result = $this->_db->fetchRow($sql, array( + 'project_id' => $project_id, + )); + + if($result['count_comments'] >5 || $result['is_old'] ==1 || $result['plings']>0) + { + return false; + } + return true; + } } \ No newline at end of file diff --git a/application/modules/default/plugins/AclRules.php b/application/modules/default/plugins/AclRules.php index 6fa6ffe0b..11b143fd7 100644 --- a/application/modules/default/plugins/AclRules.php +++ b/application/modules/default/plugins/AclRules.php @@ -1,337 +1,339 @@ . **/ class Default_Plugin_AclRules extends Zend_Acl { const ROLENAME_GUEST = 'guest'; const ROLENAME_COOKIEUSER = 'cookieuser'; const ROLENAME_FEUSER = 'feuser'; const ROLENAME_MODERATOR = 'moderator'; const ROLENAME_STAFF = 'staff'; const ROLENAME_ADMIN = 'admin'; const ROLENAME_SYSUSER = 'sysuser'; function __construct() { $this->addRole(new Zend_Acl_Role (self::ROLENAME_GUEST)); $this->addRole(new Zend_Acl_Role (self::ROLENAME_COOKIEUSER), self::ROLENAME_GUEST); $this->addRole(new Zend_Acl_Role (self::ROLENAME_FEUSER), self::ROLENAME_COOKIEUSER); $this->addRole(new Zend_Acl_Role (self::ROLENAME_MODERATOR), self::ROLENAME_FEUSER); $this->addRole(new Zend_Acl_Role (self::ROLENAME_STAFF), self::ROLENAME_FEUSER); $this->addRole(new Zend_Acl_Role (self::ROLENAME_ADMIN)); $this->addRole(new Zend_Acl_Role (self::ROLENAME_SYSUSER)); $this->addResource(new Zend_Acl_Resource ('default_logout')); $this->addResource(new Zend_Acl_Resource ('default_oauth')); $this->addResource(new Zend_Acl_Resource ('default_authorization')); $this->addResource(new Zend_Acl_Resource ('default_button')); $this->addResource(new Zend_Acl_Resource ('default_categories')); $this->addResource(new Zend_Acl_Resource ('default_community')); $this->addResource(new Zend_Acl_Resource ('default_content')); $this->addResource(new Zend_Acl_Resource ('default_discovery')); $this->addResource(new Zend_Acl_Resource ('default_donationlist')); $this->addResource(new Zend_Acl_Resource ('default_support')); $this->addResource(new Zend_Acl_Resource ('default_error')); $this->addResource(new Zend_Acl_Resource ('default_explore')); $this->addResource(new Zend_Acl_Resource ('default_gateway')); $this->addResource(new Zend_Acl_Resource ('default_hive')); $this->addResource(new Zend_Acl_Resource ('default_home')); $this->addResource(new Zend_Acl_Resource ('default_ocsv1')); // OCS API $this->addResource(new Zend_Acl_Resource ('default_embedv1')); // embed API $this->addResource(new Zend_Acl_Resource ('default_productcategory')); $this->addResource(new Zend_Acl_Resource ('default_productcomment')); $this->addResource(new Zend_Acl_Resource ('default_product')); $this->addResource(new Zend_Acl_Resource ('default_report')); $this->addResource(new Zend_Acl_Resource ('default_rectification')); $this->addResource(new Zend_Acl_Resource ('default_rss')); $this->addResource(new Zend_Acl_Resource ('default_settings')); $this->addResource(new Zend_Acl_Resource ('default_supporterbox')); $this->addResource(new Zend_Acl_Resource ('default_plingbox')); $this->addResource(new Zend_Acl_Resource ('default_user')); $this->addResource(new Zend_Acl_Resource ('default_widget')); $this->addResource(new Zend_Acl_Resource ('default_file')); $this->addResource(new Zend_Acl_Resource ('default_plings')); $this->addResource(new Zend_Acl_Resource ('default_spam')); $this->addResource(new Zend_Acl_Resource ('default_moderation')); $this->addResource(new Zend_Acl_Resource ('default_duplicates')); $this->addResource(new Zend_Acl_Resource ('default_misuse')); $this->addResource(new Zend_Acl_Resource ('default_credits')); $this->addResource(new Zend_Acl_Resource ('default_ads')); $this->addResource(new Zend_Acl_Resource ('default_dl')); $this->addResource(new Zend_Acl_Resource ('default_password')); $this->addResource(new Zend_Acl_Resource ('default_verify')); + $this->addResource(new Zend_Acl_Resource ('default_login')); $this->addResource(new Zend_Acl_Resource ('default_stati')); $this->addResource(new Zend_Acl_Resource ('default_tag')); $this->addResource(new Zend_Acl_Resource ('backend_categories')); $this->addResource(new Zend_Acl_Resource ('backend_vcategories')); $this->addResource(new Zend_Acl_Resource ('backend_categorytag')); $this->addResource(new Zend_Acl_Resource ('backend_claim')); $this->addResource(new Zend_Acl_Resource ('backend_comments')); $this->addResource(new Zend_Acl_Resource ('backend_content')); $this->addResource(new Zend_Acl_Resource ('backend_faq')); $this->addResource(new Zend_Acl_Resource ('backend_hive')); $this->addResource(new Zend_Acl_Resource ('backend_hiveuser')); $this->addResource(new Zend_Acl_Resource ('backend_index')); $this->addResource(new Zend_Acl_Resource ('backend_mail')); $this->addResource(new Zend_Acl_Resource ('backend_member')); $this->addResource(new Zend_Acl_Resource ('backend_memberpayout')); $this->addResource(new Zend_Acl_Resource ('backend_memberpaypaladdress')); $this->addResource(new Zend_Acl_Resource ('backend_paypalvalidstatus')); $this->addResource(new Zend_Acl_Resource ('backend_payoutstatus')); $this->addResource(new Zend_Acl_Resource ('backend_operatingsystem')); $this->addResource(new Zend_Acl_Resource ('backend_project')); $this->addResource(new Zend_Acl_Resource ('backend_ranking')); $this->addResource(new Zend_Acl_Resource ('backend_reportcomments')); $this->addResource(new Zend_Acl_Resource ('backend_reportproducts')); $this->addResource(new Zend_Acl_Resource ('backend_search')); $this->addResource(new Zend_Acl_Resource ('backend_storecategories')); $this->addResource(new Zend_Acl_Resource ('backend_vstorecategories')); $this->addResource(new Zend_Acl_Resource ('backend_store')); $this->addResource(new Zend_Acl_Resource ('backend_tag')); $this->addResource(new Zend_Acl_Resource ('backend_user')); $this->addResource(new Zend_Acl_Resource ('backend_tags')); $this->addResource(new Zend_Acl_Resource ('backend_ghnsexcluded')); $this->addResource(new Zend_Acl_Resource ('backend_letteravatar')); $this->addResource(new Zend_Acl_Resource ('backend_group')); $this->addResource(new Zend_Acl_Resource ('backend_cdiscourse')); $this->addResource(new Zend_Acl_Resource ('backend_cgitlab')); $this->addResource(new Zend_Acl_Resource ('backend_cldap')); $this->addResource(new Zend_Acl_Resource ('backend_coauth')); $this->addResource(new Zend_Acl_Resource ('backend_cexport')); $this->addResource(new Zend_Acl_Resource ('statistics_data')); $this->allow(self::ROLENAME_GUEST, array( 'statistics_data' )); $this->allow(self::ROLENAME_GUEST, array( 'default_logout', 'default_authorization', 'default_button', 'default_categories', 'default_content', 'default_community', 'default_donationlist', 'default_error', 'default_explore', 'default_gateway', 'default_hive', 'default_home', 'default_ocsv1', // OCS API 'default_embedv1', // embed API 'default_productcategory', 'default_rss', 'default_supporterbox', 'default_plingbox', 'default_oauth', 'default_plings', 'default_ads', 'default_dl', 'default_stati', 'default_password', - 'default_verify' + 'default_verify', + 'default_login' )); $this->allow(self::ROLENAME_SYSUSER, array( 'default_authorization', 'default_button', 'default_categories', 'default_content', 'default_community', 'default_donationlist', 'default_error', 'default_explore', 'default_gateway', 'default_hive', 'default_home', 'default_ocsv1', // OCS API 'default_embedv1', // embed API 'default_productcategory', 'default_report', 'default_rss', 'default_supporterbox', 'default_plingbox', 'default_oauth', 'default_plings', 'default_ads', 'default_dl', 'default_stati', 'default_password' )); $this->allow(self::ROLENAME_COOKIEUSER, array( 'default_logout', 'default_productcomment', 'default_settings', 'default_support', 'default_tag', 'default_rectification' )); $this->allow(self::ROLENAME_STAFF, array( 'backend_index', 'backend_categories', 'backend_categorytag', 'backend_claim', 'backend_comments', 'backend_content', 'backend_store', 'backend_storecategories', 'backend_operatingsystem', 'backend_reportcomments', 'backend_reportproducts', 'backend_search', 'backend_group' )); $this->allow(self::ROLENAME_ADMIN); // resource access rights in detail $this->allow(self::ROLENAME_GUEST, 'backend_group', array('newgroup')); // resource default_product $this->allow(self::ROLENAME_GUEST, 'default_product', array( 'index', 'show', 'getupdatesajax', 'updates', 'follows', 'fetch', 'search', 'startdownload', 'ppload', 'loadratings', 'loadinstallinstruction' )); // resource default_product $this->allow(self::ROLENAME_SYSUSER, 'default_product', array( 'index', 'show', 'getupdatesajax', 'updates', 'follows', 'fetch', 'search', 'startdownload', 'ppload', 'loadratings' )); $this->allow(self::ROLENAME_COOKIEUSER, 'default_product', array( 'add', 'rating', 'follow', 'unfollow', 'plingproject', 'followproject', 'unplingproject', 'add', 'pling', 'pay', 'dwolla', 'paymentok', 'paymentcancel', 'saveproduct', 'claim' )); $this->allow(self::ROLENAME_MODERATOR, 'backend_project', array( 'doghnsexclude' )); $this->allow(self::ROLENAME_MODERATOR, 'default_moderation', array( 'index' )); $this->allow(self::ROLENAME_MODERATOR, 'default_duplicates', array( 'index' )); $this->allow(self::ROLENAME_COOKIEUSER, 'default_product', array( 'edit', 'saveupdateajax', 'deleteupdateajax', 'update', 'preview', 'delete', 'unpublish', 'publish', 'verifycode', 'makerconfig', 'addpploadfile', 'updatepploadfile', 'deletepploadfile', 'deletepploadfiles', 'updatepackagetype', 'updatearchitecture', ), new Default_Plugin_Acl_IsProjectOwnerAssertion()); // resource default_support $this->allow(self::ROLENAME_COOKIEUSER, 'default_support', array('index', 'pay', 'paymentok', 'paymentcancel')); // resource default_support $this->allow(self::ROLENAME_COOKIEUSER, 'default_report', array('comment', 'product', 'productfraud', 'productclone')); // resource default_widget $this->allow(self::ROLENAME_GUEST, 'default_widget', array('index', 'render')); $this->allow(self::ROLENAME_COOKIEUSER, 'default_widget', array('save', 'savedefault', 'config'), new Default_Plugin_Acl_IsProjectOwnerAssertion()); $this->allow(self::ROLENAME_COOKIEUSER, 'default_file', array( 'gitlink', 'link', ), new Default_Plugin_Acl_IsProjectOwnerAssertion()); // resource default_user $this->allow(self::ROLENAME_GUEST, 'default_home', array('baseurlajax','forumurlajax','blogurlajax','storenameajax','domainsajax', 'userdataajax', 'loginurlajax', 'metamenujs','metamenubundlejs','fetchforgit')); // resource default_user $this->allow(self::ROLENAME_GUEST, 'default_user', array('index', 'aboutme', 'share', 'report', 'about', 'tooltip', 'avatar', 'userdataajax')); $this->allow(self::ROLENAME_COOKIEUSER, 'default_user', array( 'follow', 'unfollow', 'settings', 'products', 'news', 'activities', 'payments', 'income', 'payout', 'plings', 'downloadhistory', 'likes' )); $this->allow(self::ROLENAME_COOKIEUSER, 'default_tag', array('filter', 'add', 'del', 'assign', 'remove')); } } diff --git a/application/modules/default/views/scripts/home/redirectme.phtml b/application/modules/default/views/scripts/home/redirectme.phtml index 73f1bf0b4..90237f3ef 100644 --- a/application/modules/default/views/scripts/home/redirectme.phtml +++ b/application/modules/default/views/scripts/home/redirectme.phtml @@ -1,79 +1,68 @@ getRequest(); $http_scheme = $request->getScheme(); $baseurl = Zend_Registry::get('config')->settings->client->default->baseurl; $url_forum = Zend_Registry::get('config')->settings->client->default->url_forum; $url_gitlab = Zend_Registry::get('config')->settings->client->default->url_gitlab; $url_myopendesktop = Zend_Registry::get('config')->settings->client->default->url_myopendesktop; $config = Zend_Registry::get('config')->settings->domain; $getAuthUser = new Default_View_Helper_GetAuthUser(); $member = $getAuthUser->getAuthUser(); $phash = null; $ltat = ''; if (Zend_Auth::getInstance()->hasIdentity()) { $sess = new Zend_Session_Namespace('ocs_meta'); $phash = $sess->phash; $ltat = $sess->openid; } $info = new Default_Model_Info(); $domains = $info->getActiveStoresForCrossDomainLogin(); ?> phpSettings->session->name, Zend_Session::getId()); - $cookie = Local_LoginCookie::createJwt($data, 120); - $url = sprintf('https://%s/external/settheme.php?k=%s&XDEBUG_SESSION=PHPSTORM', $domain, $cookie); + $id = crc32($domain.Zend_Session::getId()); + $data = array('domain' => Zend_Registry::get('config')->phpSettings->session->name, 'id' => Zend_Session::getId()); + Zend_Registry::get('cache')->save($data, $id); + $cookie = Local_LoginCookie::createJwt($id, 120); + $url = sprintf('%s://%s/l/settheme?k=%s', $http_scheme, $domain, $cookie); echo(''.PHP_EOL); } ?>

Please Wait...

-member_id.'&name='.$member->username.'&mail='.$member->mail.'&avatar='.$this->Image($member->profile_image_url,array('width' => 210, 'height' => 210, 'crop' => 2)).'" height="0" width="0">'; - -} -?> - \ No newline at end of file diff --git a/application/modules/default/views/scripts/login/settheme.phtml b/application/modules/default/views/scripts/login/settheme.phtml new file mode 100644 index 000000000..6562b4db7 --- /dev/null +++ b/application/modules/default/views/scripts/login/settheme.phtml @@ -0,0 +1,18 @@ +load($id)) { + $cookie_params = session_get_cookie_params(); + setcookie($data['domain'], $data['id'], time()+31536000, $cookie_params['path'], $_SERVER['HTTP_HOST'], $cookie_params['secure'], true); + $cache->remove($id); + } + } +} +include APPLICATION_PATH . "/../httpdocs/theme/flatui/css/empty.css"; \ No newline at end of file diff --git a/application/modules/default/views/scripts/partials/header/metaheader.phtml b/application/modules/default/views/scripts/partials/header/metaheader.phtml index 1b6e8a57d..173d1dc3c 100644 --- a/application/modules/default/views/scripts/partials/header/metaheader.phtml +++ b/application/modules/default/views/scripts/partials/header/metaheader.phtml @@ -1,34 +1,35 @@ . **/ ?>
*/ ?> - + + diff --git a/application/modules/default/views/scripts/spam/list.phtml b/application/modules/default/views/scripts/spam/list.phtml index 4ea8df2e2..acbcfd591 100644 --- a/application/modules/default/views/scripts/spam/list.phtml +++ b/application/modules/default/views/scripts/spam/list.phtml @@ -1,192 +1,206 @@ . * * Created: 31.05.2017 */ + $project = new Default_Model_Project(); + $member = new Default_Model_Member(); ?>
rownum = (1 + (($this->page - 1) * 10)); $pageLimit = 10; $modelSpam = new Default_Model_Spam(); $candidateProducts = $modelSpam->fetchSpamCandidate(); $paginator = Zend_Paginator::factory($candidateProducts); $paginator->setItemCountPerPage($pageLimit); $paginator->setCurrentPageNumber($this->page); //$paginator->setTotalItemCount(count($candidateProducts)); $this->products = $paginator; if ($paginator->count() == 0) { echo ''; } foreach ($this->products as $this->product) { $updateTime = $helperPrintDate->printDate($this->product['project_changed_at']); ?>
rownum) ?>.

product['version']); ?> product['title']; ?>

product['cat_title'] ?> by product['username'] ?> product['package_names'])) { $list_packages = explode(',', $this->product['package_names']); $resultString = ""; foreach ($list_packages as $item) { $resultString = $resultString . ' ' . stripslashes($item) . ''; } echo $resultString; } /*$helperPackageTypes = new Default_View_Helper_FetchProjectPackageTypes(); $type = $helperPackageTypes->FetchProjectPackageTypes($this->product['project_id']); if (!empty($type)) { ?>
product['count_plingers']; $count_comments = $this->product['count_comments']; echo ($count_plingers > 0 ? '' . $count_plingers . ' supporter' : '') . ($count_plingers > 1 ? 's' : '') . ($count_plingers > 0 ? '' : ''); echo ($count_comments > 0 ? '' . $count_comments . ' comment' : '') . ($count_comments > 1 ? 's' : '') . ($count_comments > 0 ? '' : ''); ?>
widgetRating = new stdClass(); $this->widgetRating->project_id = $this->product['project_id']; $this->widgetRating->laplace_score = $this->product['laplace_score']; $this->widgetRating->count_likes = $this->product['count_likes']; $this->widgetRating->count_dislikes = $this->product['count_dislikes']; // it is a trial include APPLICATION_PATH . '/modules/default/views/scripts/partials/widgetRating.phtml'; //echo $this->render('partials/widgetRating.phtml'); ?>
+ validateDeleteProjectFromSpam($this->product['project_id'])) + { + ?> delete product -
+
+ + + validDeleteMemberFromSpam($this->product['member_id'])) + { + ?> delete user
+ + delete reports (product['amount_reports'] ?>)
validate misuse
rownum++; } ?>
\ No newline at end of file diff --git a/application/modules/default/views/scripts/user/aboutme.phtml b/application/modules/default/views/scripts/user/aboutme.phtml index 567f774f8..16ab583db 100644 --- a/application/modules/default/views/scripts/user/aboutme.phtml +++ b/application/modules/default/views/scripts/user/aboutme.phtml @@ -1,617 +1,619 @@ . **/ $helperBuildMemberUrl = new Default_View_Helper_BuildMemberUrl(); $helperImage = new Default_View_Helper_Image(); $helpTruncate = new Default_View_Helper_Truncate(); $this->headTitle($this->member->username . ' - ' . $_SERVER['HTTP_HOST'], 'SET'); $this->doctype(Zend_View_Helper_Doctype::XHTML1_RDFA); $desc= isset($this->mainProject->description) ? nl2br(strip_tags($this->mainProject->description)): $this->member->username; $this->headMeta()->setName('description', $helpTruncate->truncate($desc, 200, '...', false, true)); $this->headMeta()->setName('title', $this->member->username . ' - ' . $_SERVER['HTTP_HOST']); $this->headMeta()->appendProperty('og:url', $helperBuildMemberUrl->buildMemberUrl($this->member->username)); $this->headMeta()->appendProperty('og:type', 'website'); $this->headMeta()->appendProperty('og:title', $this->member->username); $this->headMeta()->appendProperty('og:description', $helpTruncate->truncate($desc, 200, '...', false, true)); $this->headMeta()->appendProperty('og:image', $helperImage->Image($this->member->profile_image_url,array('width' => 110, 'height' => 110, 'crop' => 2))); $helperFetchMainCategories = new Default_View_Helper_FetchMainCategories(); $helperRatingWidget = new Default_View_Helper_PrintRatingWidget(); $categories = $helperFetchMainCategories->fetchMainCategories(); $helperAddDefaultScheme = new Default_View_Helper_AddDefaultScheme(); $helperBuildProductUrl = new Default_View_Helper_BuildProductUrl(); $helperTruncate = new Default_View_Helper_Truncate(); $helperImage = new Default_View_Helper_Image(); $helperPrintDate = new Default_View_Helper_PrintDate(); $textCountryCity = $this->member->city; $textCountryCity .= $this->member->country ? ', ' . $this->member->country : ''; $helperMemberScore = new Default_View_Helper_FetchMemberScore(); $isSupporter = $this->stat['donationIssupporter']; +$url_gitlab = Zend_Registry::get('config')->settings->client->default->url_gitlab; +$url_forum = Zend_Registry::get('config')->settings->client->default->url_forum; ?>
S profile-image member->roleId==Default_Model_DbTable_Member::ROLE_ID_MODERATOR) { ?>
MODERATOR

member->username; ?>

member->firstname ) :?> member->firstname; ?> member->lastname; ?>
userRole(); ?>
link to hive delete user
member->pling_excluded == 1 ? ' checked=\'checked\' ' : ''; ?> /> user-pling-excluded
userProducts) { ?>
render('user/partials/aboutme-products.phtml'); ?>
stat['cntFProducts']>0){ ?>
userProducts = $this->userFeaturedProducts; $this->projectpage = 1; $this->total_records=0; if ($this->userProducts) { ?>
render('user/partials/aboutme-products.phtml'); ?>
supportingTeaser) > 0) { ?> render('user/partials/supportProducts.phtml') ?> translate('No supported products.') ?>
followedProducts) > 0) { ?> render('user/partials/loopFollow.phtml') ?>
render('user/partials/loopMyDonations.phtml'); ?>
*/ ?>
render('user/partials/loopMyComments.phtml'); ?>
likes->getTotalItemCount()>0){ ?>
render('user/partials/aboutme-likes.phtml'); ?>
plings->getTotalItemCount()>0){ ?>
render('user/partials/aboutme-plings.phtml'); ?>
supportersplings->getTotalItemCount()>0){ ?>
render('user/partials/aboutme-supporters.phtml'); ?>
rated)>0){ ?>
render('user/partials/loopRated.phtml'); ?>
inlineScript()->appendScript( ' $(document).ready(function(){ InitActiveHashTab.setup(); AboutMeMyProjectsPaging.setup(); AboutMeMyProjectsPagingButton.setup(); TooltipUser.setup("tooltipuser","right"); $(\'[data-toggle="popover"]\').popover(); }); '); diff --git a/httpdocs/external/settheme.php b/httpdocs/external/settheme.php deleted file mode 100644 index 43b8fdd73..000000000 --- a/httpdocs/external/settheme.php +++ /dev/null @@ -1,21 +0,0 @@ -0?o(r(e),9007199254740991):0}},function(e,t,n){var r=n(3),o=n(14),i=n(13),a=n(30)("src"),l=Function.toString,u=(""+l).split("toString");n(9).inspectSource=function(e){return l.call(e)},(e.exports=function(e,t,n,l){var c="function"==typeof n;c&&(i(n,"name")||o(n,"name",t)),e[t]!==n&&(c&&(i(n,a)||o(n,a,e[t]?""+e[t]:u.join(String(t)))),e===r?e[t]=n:l?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||l.call(this)})},function(e,t,n){var r=n(1),o=n(2),i=n(24),a=/"/g,l=function(e,t,n,r){var o=String(i(e)),l="<"+t;return""!==n&&(l+=" "+n+'="'+String(r).replace(a,""")+'"'),l+">"+o+""};e.exports=function(e,t){var n={};n[e]=t(l),r(r.P+r.F*o(function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}),"String",n)}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,n){var r=n(7),o=n(29);e.exports=n(8)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(44),o=n(24);e.exports=function(e){return r(o(e))}},function(e,t,n){var r=n(24);e.exports=function(e){return Object(r(e))}},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){return!!e&&r(function(){t?e.call(null,function(){},1):e.call(null)})}},function(e,t,n){var r=n(45),o=n(29),i=n(15),a=n(27),l=n(13),u=n(82),c=Object.getOwnPropertyDescriptor;t.f=n(8)?c:function(e,t){if(e=i(e),t=a(t,!0),u)try{return c(e,t)}catch(e){}if(l(e,t))return o(!r.f.call(e,t),e[t])}},function(e,t,n){var r=n(1),o=n(9),i=n(2);e.exports=function(e,t){var n=(o.Object||{})[e]||Object[e],a={};a[e]=t(n),r(r.S+r.F*i(function(){n(1)}),"Object",a)}},function(e,t,n){var r=n(21),o=n(44),i=n(16),a=n(10),l=n(208);e.exports=function(e,t){var n=1==e,u=2==e,c=3==e,s=4==e,f=6==e,p=5==e||f,d=t||l;return function(t,l,h){for(var m,v,y=i(t),g=o(y),b=r(l,h,3),w=a(g.length),E=0,k=n?d(t,w):u?d(t,0):void 0;w>E;E++)if((p||E in g)&&(v=b(m=g[E],E,y),e))if(n)k[E]=v;else if(v)switch(e){case 3:return!0;case 5:return m;case 6:return E;case 2:k.push(m)}else if(s)return!1;return f?-1:c||s?s:k}}},function(e,t,n){var r=n(22);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){"use strict";if(n(8)){var r=n(31),o=n(3),i=n(2),a=n(1),l=n(56),u=n(81),c=n(21),s=n(41),f=n(29),p=n(14),d=n(42),h=n(25),m=n(10),v=n(107),y=n(33),g=n(27),b=n(13),w=n(48),E=n(4),k=n(16),x=n(74),_=n(34),S=n(36),C=n(35).f,T=n(76),N=n(30),P=n(6),O=n(20),M=n(46),F=n(53),A=n(78),U=n(38),L=n(50),I=n(40),j=n(77),D=n(99),R=n(7),W=n(18),z=R.f,V=W.f,B=o.RangeError,H=o.TypeError,G=o.Uint8Array,$=Array.prototype,q=u.ArrayBuffer,K=u.DataView,Q=O(0),Y=O(2),X=O(3),J=O(4),Z=O(5),ee=O(6),te=M(!0),ne=M(!1),re=A.values,oe=A.keys,ie=A.entries,ae=$.lastIndexOf,le=$.reduce,ue=$.reduceRight,ce=$.join,se=$.sort,fe=$.slice,pe=$.toString,de=$.toLocaleString,he=P("iterator"),me=P("toStringTag"),ve=N("typed_constructor"),ye=N("def_constructor"),ge=l.CONSTR,be=l.TYPED,we=l.VIEW,Ee=O(1,function(e,t){return Ce(F(e,e[ye]),t)}),ke=i(function(){return 1===new G(new Uint16Array([1]).buffer)[0]}),xe=!!G&&!!G.prototype.set&&i(function(){new G(1).set({})}),_e=function(e,t){var n=h(e);if(n<0||n%t)throw B("Wrong offset!");return n},Se=function(e){if(E(e)&&be in e)return e;throw H(e+" is not a typed array!")},Ce=function(e,t){if(!(E(e)&&ve in e))throw H("It is not a typed array constructor!");return new e(t)},Te=function(e,t){return Ne(F(e,e[ye]),t)},Ne=function(e,t){for(var n=0,r=t.length,o=Ce(e,r);r>n;)o[n]=t[n++];return o},Pe=function(e,t,n){z(e,t,{get:function(){return this._d[n]}})},Oe=function(e){var t,n,r,o,i,a,l=k(e),u=arguments.length,s=u>1?arguments[1]:void 0,f=void 0!==s,p=T(l);if(null!=p&&!x(p)){for(a=p.call(l),r=[],t=0;!(i=a.next()).done;t++)r.push(i.value);l=r}for(f&&u>2&&(s=c(s,arguments[2],2)),t=0,n=m(l.length),o=Ce(this,n);n>t;t++)o[t]=f?s(l[t],t):l[t];return o},Me=function(){for(var e=0,t=arguments.length,n=Ce(this,t);t>e;)n[e]=arguments[e++];return n},Fe=!!G&&i(function(){de.call(new G(1))}),Ae=function(){return de.apply(Fe?fe.call(Se(this)):Se(this),arguments)},Ue={copyWithin:function(e,t){return D.call(Se(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return J(Se(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return j.apply(Se(this),arguments)},filter:function(e){return Te(this,Y(Se(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Z(Se(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ee(Se(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){Q(Se(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return ne(Se(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return te(Se(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return ce.apply(Se(this),arguments)},lastIndexOf:function(e){return ae.apply(Se(this),arguments)},map:function(e){return Ee(Se(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return le.apply(Se(this),arguments)},reduceRight:function(e){return ue.apply(Se(this),arguments)},reverse:function(){for(var e,t=Se(this).length,n=Math.floor(t/2),r=0;r1?arguments[1]:void 0)},sort:function(e){return se.call(Se(this),e)},subarray:function(e,t){var n=Se(this),r=n.length,o=y(e,r);return new(F(n,n[ye]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,m((void 0===t?r:y(t,r))-o))}},Le=function(e,t){return Te(this,fe.call(Se(this),e,t))},Ie=function(e){Se(this);var t=_e(arguments[1],1),n=this.length,r=k(e),o=m(r.length),i=0;if(o+t>n)throw B("Wrong length!");for(;i255?255:255&r),o.v[d](n*t+o.o,r,ke)}(this,n,e)},enumerable:!0})};b?(h=n(function(e,n,r,o){s(e,h,c,"_d");var i,a,l,u,f=0,d=0;if(E(n)){if(!(n instanceof q||"ArrayBuffer"==(u=w(n))||"SharedArrayBuffer"==u))return be in n?Ne(h,n):Oe.call(h,n);i=n,d=_e(r,t);var y=n.byteLength;if(void 0===o){if(y%t)throw B("Wrong length!");if((a=y-d)<0)throw B("Wrong length!")}else if((a=m(o)*t)+d>y)throw B("Wrong length!");l=a/t}else l=v(n),i=new q(a=l*t);for(p(e,"_d",{b:i,o:d,l:a,e:l,v:new K(i)});fdocument.F=Object<\/script>"),e.close(),u=e.F;r--;)delete u.prototype[i[r]];return u()};e.exports=Object.create||function(e,t){var n;return null!==e?(l.prototype=r(e),n=new l,l.prototype=null,n[a]=e):n=u(),void 0===t?n:o(n,t)}},function(e,t,n){var r=n(84),o=n(61).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},function(e,t,n){var r=n(13),o=n(16),i=n(60)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},function(e,t,n){var r=n(7).f,o=n(13),i=n(6)("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},function(e,t){e.exports={}},function(e,t,n){var r=n(6)("unscopables"),o=Array.prototype;null==o[r]&&n(14)(o,r,{}),e.exports=function(e){o[r][e]=!0}},function(e,t,n){"use strict";var r=n(3),o=n(7),i=n(8),a=n(6)("species");e.exports=function(e){var t=r[e];i&&t&&!t[a]&&o.f(t,a,{configurable:!0,get:function(){return this}})}},function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var r=n(11);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},function(e,t,n){var r=n(4);e.exports=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},function(e,t,n){var r=n(23);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var r=n(15),o=n(10),i=n(33);e.exports=function(e){return function(t,n,a){var l,u=r(t),c=o(u.length),s=i(a,c);if(e&&n!=n){for(;c>s;)if((l=u[s++])!=l)return!0}else for(;c>s;s++)if((e||s in u)&&u[s]===n)return e||s||0;return!e&&-1}}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){var r=n(23),o=n(6)("toStringTag"),i="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?n:i?r(t):"Object"==(a=r(t))&&"function"==typeof t.callee?"Arguments":a}},function(e,t,n){var r=n(1),o=n(24),i=n(2),a=n(65),l="["+a+"]",u=RegExp("^"+l+l+"*"),c=RegExp(l+l+"*$"),s=function(e,t,n){var o={},l=i(function(){return!!a[e]()||"​…"!="​…"[e]()}),u=o[e]=l?t(f):a[e];n&&(o[n]=u),r(r.P+r.F*l,"String",o)},f=s.trim=function(e,t){return e=String(o(e)),1&t&&(e=e.replace(u,"")),2&t&&(e=e.replace(c,"")),e};e.exports=s},function(e,t,n){var r=n(6)("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},e(i)}catch(e){}return n}},function(e,t,n){"use strict";var r=n(14),o=n(11),i=n(2),a=n(24),l=n(6);e.exports=function(e,t,n){var u=l(e),c=n(a,u,""[e]),s=c[0],f=c[1];i(function(){var t={};return t[u]=function(){return 7},7!=""[e](t)})&&(o(String.prototype,e,s),r(RegExp.prototype,u,2==t?function(e,t){return f.call(e,this,t)}:function(e){return f.call(e,this)}))}},function(e,t,n){var r=n(21),o=n(97),i=n(74),a=n(5),l=n(10),u=n(76),c={},s={};(t=e.exports=function(e,t,n,f,p){var d,h,m,v,y=p?function(){return e}:u(e),g=r(n,f,t?2:1),b=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(i(y)){for(d=l(e.length);d>b;b++)if((v=t?g(a(h=e[b])[0],h[1]):g(e[b]))===c||v===s)return v}else for(m=y.call(e);!(h=m.next()).done;)if((v=o(m,g,h.value,t))===c||v===s)return v}).BREAK=c,t.RETURN=s},function(e,t,n){var r=n(5),o=n(22),i=n(6)("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||null==(n=r(a)[i])?t:o(n)}},function(e,t,n){var r=n(3).navigator;e.exports=r&&r.userAgent||""},function(e,t,n){"use strict";var r=n(3),o=n(1),i=n(11),a=n(42),l=n(28),u=n(52),c=n(41),s=n(4),f=n(2),p=n(50),d=n(37),h=n(66);e.exports=function(e,t,n,m,v,y){var g=r[e],b=g,w=v?"set":"add",E=b&&b.prototype,k={},x=function(e){var t=E[e];i(E,e,"delete"==e?function(e){return!(y&&!s(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(y&&!s(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return y&&!s(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof b&&(y||E.forEach&&!f(function(){(new b).entries().next()}))){var _=new b,S=_[w](y?{}:-0,1)!=_,C=f(function(){_.has(1)}),T=p(function(e){new b(e)}),N=!y&&f(function(){for(var e=new b,t=5;t--;)e[w](t,t);return!e.has(-0)});T||((b=t(function(t,n){c(t,b,e);var r=h(new g,t,b);return null!=n&&u(n,v,r[w],r),r})).prototype=E,E.constructor=b),(C||N)&&(x("delete"),x("has"),v&&x("get")),(N||S)&&x(w),y&&E.clear&&delete E.clear}else b=m.getConstructor(t,e,v,w),a(b.prototype,n),l.NEED=!0;return d(b,e),k[e]=b,o(o.G+o.W+o.F*(b!=g),k),y||m.setStrong(b,e,v),b}},function(e,t,n){for(var r,o=n(3),i=n(14),a=n(30),l=a("typed_array"),u=a("view"),c=!(!o.ArrayBuffer||!o.DataView),s=c,f=0,p="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");f<9;)(r=o[p[f++]])?(i(r.prototype,l,!0),i(r.prototype,u,!0)):s=!1;e.exports={ABV:c,CONSTR:s,TYPED:l,VIEW:u}},function(e,t,n){var r=n(4),o=n(3).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t,n){var r=n(9),o=n(3),i=o["__core-js_shared__"]||(o["__core-js_shared__"]={});(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(31)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},function(e,t,n){t.f=n(6)},function(e,t,n){var r=n(58)("keys"),o=n(30);e.exports=function(e){return r[e]||(r[e]=o(e))}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){var r=n(23);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(3).document;e.exports=r&&r.documentElement},function(e,t,n){var r=n(4),o=n(5),i=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{(r=n(21)(Function.call,n(18).f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return i(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:i}},function(e,t){e.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(e,t,n){var r=n(4),o=n(64).set;e.exports=function(e,t,n){var i,a=t.constructor;return a!==n&&"function"==typeof a&&(i=a.prototype)!==n.prototype&&r(i)&&o&&o(e,i),e}},function(e,t,n){"use strict";var r=n(25),o=n(24);e.exports=function(e){var t=String(o(this)),n="",i=r(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n}},function(e,t){e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(e,t){var n=Math.expm1;e.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||-2e-17!=n(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:n},function(e,t,n){"use strict";var r=n(31),o=n(1),i=n(11),a=n(14),l=n(38),u=n(96),c=n(37),s=n(36),f=n(6)("iterator"),p=!([].keys&&"next"in[].keys()),d=function(){return this};e.exports=function(e,t,n,h,m,v,y){u(n,t,h);var g,b,w,E=function(e){if(!p&&e in S)return S[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},k=t+" Iterator",x="values"==m,_=!1,S=e.prototype,C=S[f]||S["@@iterator"]||m&&S[m],T=C||E(m),N=m?x?E("entries"):T:void 0,P="Array"==t&&S.entries||C;if(P&&(w=s(P.call(new e)))!==Object.prototype&&w.next&&(c(w,k,!0),r||"function"==typeof w[f]||a(w,f,d)),x&&C&&"values"!==C.name&&(_=!0,T=function(){return C.call(this)}),r&&!y||!p&&!_&&S[f]||a(S,f,T),l[t]=T,l[k]=d,m)if(g={values:x?T:E("values"),keys:v?T:E("keys"),entries:N},y)for(b in g)b in S||i(S,b,g[b]);else o(o.P+o.F*(p||_),t,g);return g}},function(e,t,n){var r=n(72),o=n(24);e.exports=function(e,t,n){if(r(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(e))}},function(e,t,n){var r=n(4),o=n(23),i=n(6)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==o(e))}},function(e,t,n){var r=n(6)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,!"/./"[e](t)}catch(e){}}return!0}},function(e,t,n){var r=n(38),o=n(6)("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},function(e,t,n){"use strict";var r=n(7),o=n(29);e.exports=function(e,t,n){t in e?r.f(e,t,o(0,n)):e[t]=n}},function(e,t,n){var r=n(48),o=n(6)("iterator"),i=n(38);e.exports=n(9).getIteratorMethod=function(e){if(null!=e)return e[o]||e["@@iterator"]||i[r(e)]}},function(e,t,n){"use strict";var r=n(16),o=n(33),i=n(10);e.exports=function(e){for(var t=r(this),n=i(t.length),a=arguments.length,l=o(a>1?arguments[1]:void 0,n),u=a>2?arguments[2]:void 0,c=void 0===u?n:o(u,n);c>l;)t[l++]=e;return t}},function(e,t,n){"use strict";var r=n(39),o=n(100),i=n(38),a=n(15);e.exports=n(70)(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,o(1)):o(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},function(e,t,n){"use strict";var r=n(5);e.exports=function(){var e=r(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},function(e,t,n){var r,o,i,a=n(21),l=n(89),u=n(63),c=n(57),s=n(3),f=s.process,p=s.setImmediate,d=s.clearImmediate,h=s.MessageChannel,m=s.Dispatch,v=0,y={},g=function(){var e=+this;if(y.hasOwnProperty(e)){var t=y[e];delete y[e],t()}},b=function(e){g.call(e.data)};p&&d||(p=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return y[++v]=function(){l("function"==typeof e?e:Function(e),t)},r(v),v},d=function(e){delete y[e]},"process"==n(23)(f)?r=function(e){f.nextTick(a(g,e,1))}:m&&m.now?r=function(e){m.now(a(g,e,1))}:h?(i=(o=new h).port2,o.port1.onmessage=b,r=a(i.postMessage,i,1)):s.addEventListener&&"function"==typeof postMessage&&!s.importScripts?(r=function(e){s.postMessage(e+"","*")},s.addEventListener("message",b,!1)):r="onreadystatechange"in c("script")?function(e){u.appendChild(c("script")).onreadystatechange=function(){u.removeChild(this),g.call(e)}}:function(e){setTimeout(a(g,e,1),0)}),e.exports={set:p,clear:d}},function(e,t,n){"use strict";var r=n(3),o=n(8),i=n(31),a=n(56),l=n(14),u=n(42),c=n(2),s=n(41),f=n(25),p=n(10),d=n(107),h=n(35).f,m=n(7).f,v=n(77),y=n(37),g="prototype",b="Wrong index!",w=r.ArrayBuffer,E=r.DataView,k=r.Math,x=r.RangeError,_=r.Infinity,S=w,C=k.abs,T=k.pow,N=k.floor,P=k.log,O=k.LN2,M=o?"_b":"buffer",F=o?"_l":"byteLength",A=o?"_o":"byteOffset";function U(e,t,n){var r,o,i,a=new Array(n),l=8*n-t-1,u=(1<>1,s=23===t?T(2,-24)-T(2,-77):0,f=0,p=e<0||0===e&&1/e<0?1:0;for((e=C(e))!=e||e===_?(o=e!=e?1:0,r=u):(r=N(P(e)/O),e*(i=T(2,-r))<1&&(r--,i*=2),(e+=r+c>=1?s/i:s*T(2,1-c))*i>=2&&(r++,i/=2),r+c>=u?(o=0,r=u):r+c>=1?(o=(e*i-1)*T(2,t),r+=c):(o=e*T(2,c-1)*T(2,t),r=0));t>=8;a[f++]=255&o,o/=256,t-=8);for(r=r<0;a[f++]=255&r,r/=256,l-=8);return a[--f]|=128*p,a}function L(e,t,n){var r,o=8*n-t-1,i=(1<>1,l=o-7,u=n-1,c=e[u--],s=127&c;for(c>>=7;l>0;s=256*s+e[u],u--,l-=8);for(r=s&(1<<-l)-1,s>>=-l,l+=t;l>0;r=256*r+e[u],u--,l-=8);if(0===s)s=1-a;else{if(s===i)return r?NaN:c?-_:_;r+=T(2,t),s-=a}return(c?-1:1)*r*T(2,s-t)}function I(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function j(e){return[255&e]}function D(e){return[255&e,e>>8&255]}function R(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function W(e){return U(e,52,8)}function z(e){return U(e,23,4)}function V(e,t,n){m(e[g],t,{get:function(){return this[n]}})}function B(e,t,n,r){var o=d(+n);if(o+t>e[F])throw x(b);var i=e[M]._b,a=o+e[A],l=i.slice(a,a+t);return r?l:l.reverse()}function H(e,t,n,r,o,i){var a=d(+n);if(a+t>e[F])throw x(b);for(var l=e[M]._b,u=a+e[A],c=r(+o),s=0;sK;)(G=q[K++])in w||l(w,G,S[G]);i||($.constructor=w)}var Q=new E(new w(2)),Y=E[g].setInt8;Q.setInt8(0,2147483648),Q.setInt8(1,2147483649),!Q.getInt8(0)&&Q.getInt8(1)||u(E[g],{setInt8:function(e,t){Y.call(this,e,t<<24>>24)},setUint8:function(e,t){Y.call(this,e,t<<24>>24)}},!0)}else w=function(e){s(this,w,"ArrayBuffer");var t=d(e);this._b=v.call(new Array(t),0),this[F]=t},E=function(e,t,n){s(this,E,"DataView"),s(e,w,"DataView");var r=e[F],o=f(t);if(o<0||o>r)throw x("Wrong offset!");if(o+(n=void 0===n?r-o:p(n))>r)throw x("Wrong length!");this[M]=e,this[A]=o,this[F]=n},o&&(V(w,"byteLength","_l"),V(E,"buffer","_b"),V(E,"byteLength","_l"),V(E,"byteOffset","_o")),u(E[g],{getInt8:function(e){return B(this,1,e)[0]<<24>>24},getUint8:function(e){return B(this,1,e)[0]},getInt16:function(e){var t=B(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=B(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return I(B(this,4,e,arguments[1]))},getUint32:function(e){return I(B(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return L(B(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return L(B(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){H(this,1,e,j,t)},setUint8:function(e,t){H(this,1,e,j,t)},setInt16:function(e,t){H(this,2,e,D,t,arguments[2])},setUint16:function(e,t){H(this,2,e,D,t,arguments[2])},setInt32:function(e,t){H(this,4,e,R,t,arguments[2])},setUint32:function(e,t){H(this,4,e,R,t,arguments[2])},setFloat32:function(e,t){H(this,4,e,z,t,arguments[2])},setFloat64:function(e,t){H(this,8,e,W,t,arguments[2])}});y(w,"ArrayBuffer"),y(E,"DataView"),l(E[g],a.VIEW,!0),t.ArrayBuffer=w,t.DataView=E},function(e,t,n){e.exports=!n(8)&&!n(2)(function(){return 7!=Object.defineProperty(n(57)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var r=n(3),o=n(9),i=n(31),a=n(59),l=n(7).f;e.exports=function(e){var t=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||l(t,e,{value:a.f(e)})}},function(e,t,n){var r=n(13),o=n(15),i=n(46)(!1),a=n(60)("IE_PROTO");e.exports=function(e,t){var n,l=o(e),u=0,c=[];for(n in l)n!=a&&r(l,n)&&c.push(n);for(;t.length>u;)r(l,n=t[u++])&&(~i(c,n)||c.push(n));return c}},function(e,t,n){var r=n(7),o=n(5),i=n(32);e.exports=n(8)?Object.defineProperties:function(e,t){o(e);for(var n,a=i(t),l=a.length,u=0;l>u;)r.f(e,n=a[u++],t[n]);return e}},function(e,t,n){var r=n(15),o=n(35).f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return a&&"[object Window]"==i.call(e)?function(e){try{return o(e)}catch(e){return a.slice()}}(e):o(r(e))}},function(e,t,n){"use strict";var r=n(32),o=n(47),i=n(45),a=n(16),l=n(44),u=Object.assign;e.exports=!u||n(2)(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=u({},e)[n]||Object.keys(u({},t)).join("")!=r})?function(e,t){for(var n=a(e),u=arguments.length,c=1,s=o.f,f=i.f;u>c;)for(var p,d=l(arguments[c++]),h=s?r(d).concat(s(d)):r(d),m=h.length,v=0;m>v;)f.call(d,p=h[v++])&&(n[p]=d[p]);return n}:u},function(e,t,n){"use strict";var r=n(22),o=n(4),i=n(89),a=[].slice,l={};e.exports=Function.bind||function(e){var t=r(this),n=a.call(arguments,1),u=function(){var r=n.concat(a.call(arguments));return this instanceof u?function(e,t,n){if(!(t in l)){for(var r=[],o=0;o>>0||(a.test(n)?16:10))}:r},function(e,t,n){var r=n(3).parseFloat,o=n(49).trim;e.exports=1/r(n(65)+"-0")!=-1/0?function(e){var t=o(String(e),3),n=r(t);return 0===n&&"-"==t.charAt(0)?-0:n}:r},function(e,t,n){var r=n(23);e.exports=function(e,t){if("number"!=typeof e&&"Number"!=r(e))throw TypeError(t);return+e}},function(e,t,n){var r=n(4),o=Math.floor;e.exports=function(e){return!r(e)&&isFinite(e)&&o(e)===e}},function(e,t){e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)}},function(e,t,n){var r=n(25),o=n(24);e.exports=function(e){return function(t,n){var i,a,l=String(o(t)),u=r(n),c=l.length;return u<0||u>=c?e?"":void 0:(i=l.charCodeAt(u))<55296||i>56319||u+1===c||(a=l.charCodeAt(u+1))<56320||a>57343?e?l.charAt(u):i:e?l.slice(u,u+2):a-56320+(i-55296<<10)+65536}}},function(e,t,n){"use strict";var r=n(34),o=n(29),i=n(37),a={};n(14)(a,n(6)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},function(e,t,n){var r=n(5);e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var i=e.return;throw void 0!==i&&r(i.call(e)),t}}},function(e,t,n){var r=n(22),o=n(16),i=n(44),a=n(10);e.exports=function(e,t,n,l,u){r(t);var c=o(e),s=i(c),f=a(c.length),p=u?f-1:0,d=u?-1:1;if(n<2)for(;;){if(p in s){l=s[p],p+=d;break}if(p+=d,u?p<0:f<=p)throw TypeError("Reduce of empty array with no initial value")}for(;u?p>=0:f>p;p+=d)p in s&&(l=t(l,s[p],p,c));return l}},function(e,t,n){"use strict";var r=n(16),o=n(33),i=n(10);e.exports=[].copyWithin||function(e,t){var n=r(this),a=i(n.length),l=o(e,a),u=o(t,a),c=arguments.length>2?arguments[2]:void 0,s=Math.min((void 0===c?a:o(c,a))-u,a-l),f=1;for(u0;)u in n?n[l]=n[u]:delete n[l],l+=f,u+=f;return n}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){n(8)&&"g"!=/./g.flags&&n(7).f(RegExp.prototype,"flags",{configurable:!0,get:n(79)})},function(e,t,n){"use strict";var r,o,i,a,l=n(31),u=n(3),c=n(21),s=n(48),f=n(1),p=n(4),d=n(22),h=n(41),m=n(52),v=n(53),y=n(80).set,g=n(229)(),b=n(103),w=n(230),E=n(54),k=n(104),x=u.TypeError,_=u.process,S=_&&_.versions,C=S&&S.v8||"",T=u.Promise,N="process"==s(_),P=function(){},O=o=b.f,M=!!function(){try{var e=T.resolve(1),t=(e.constructor={})[n(6)("species")]=function(e){e(P,P)};return(N||"function"==typeof PromiseRejectionEvent)&&e.then(P)instanceof t&&0!==C.indexOf("6.6")&&-1===E.indexOf("Chrome/66")}catch(e){}}(),F=function(e){var t;return!(!p(e)||"function"!=typeof(t=e.then))&&t},A=function(e,t){if(!e._n){e._n=!0;var n=e._c;g(function(){for(var r=e._v,o=1==e._s,i=0,a=function(t){var n,i,a,l=o?t.ok:t.fail,u=t.resolve,c=t.reject,s=t.domain;try{l?(o||(2==e._h&&I(e),e._h=1),!0===l?n=r:(s&&s.enter(),n=l(r),s&&(s.exit(),a=!0)),n===t.promise?c(x("Promise-chain cycle")):(i=F(n))?i.call(n,u,c):u(n)):c(r)}catch(e){s&&!a&&s.exit(),c(e)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&U(e)})}},U=function(e){y.call(u,function(){var t,n,r,o=e._v,i=L(e);if(i&&(t=w(function(){N?_.emit("unhandledRejection",o,e):(n=u.onunhandledrejection)?n({promise:e,reason:o}):(r=u.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=N||L(e)?2:1),e._a=void 0,i&&t.e)throw t.v})},L=function(e){return 1!==e._h&&0===(e._a||e._c).length},I=function(e){y.call(u,function(){var t;N?_.emit("rejectionHandled",e):(t=u.onrejectionhandled)&&t({promise:e,reason:e._v})})},j=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),A(t,!0))},D=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw x("Promise can't be resolved itself");(t=F(e))?g(function(){var r={_w:n,_d:!1};try{t.call(e,c(D,r,1),c(j,r,1))}catch(e){j.call(r,e)}}):(n._v=e,n._s=1,A(n,!1))}catch(e){j.call({_w:n,_d:!1},e)}}};M||(T=function(e){h(this,T,"Promise","_h"),d(e),r.call(this);try{e(c(D,this,1),c(j,this,1))}catch(e){j.call(this,e)}},(r=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=n(42)(T.prototype,{then:function(e,t){var n=O(v(this,T));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=N?_.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&A(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),i=function(){var e=new r;this.promise=e,this.resolve=c(D,e,1),this.reject=c(j,e,1)},b.f=O=function(e){return e===T||e===a?new i(e):o(e)}),f(f.G+f.W+f.F*!M,{Promise:T}),n(37)(T,"Promise"),n(40)("Promise"),a=n(9).Promise,f(f.S+f.F*!M,"Promise",{reject:function(e){var t=O(this);return(0,t.reject)(e),t.promise}}),f(f.S+f.F*(l||!M),"Promise",{resolve:function(e){return k(l&&this===a?T:this,e)}}),f(f.S+f.F*!(M&&n(50)(function(e){T.all(e).catch(P)})),"Promise",{all:function(e){var t=this,n=O(t),r=n.resolve,o=n.reject,i=w(function(){var n=[],i=0,a=1;m(e,!1,function(e){var l=i++,u=!1;n.push(void 0),a++,t.resolve(e).then(function(e){u||(u=!0,n[l]=e,--a||r(n))},o)}),--a||r(n)});return i.e&&o(i.v),n.promise},race:function(e){var t=this,n=O(t),r=n.reject,o=w(function(){m(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o.e&&r(o.v),n.promise}})},function(e,t,n){"use strict";var r=n(22);function o(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r}),this.resolve=r(t),this.reject=r(n)}e.exports.f=function(e){return new o(e)}},function(e,t,n){var r=n(5),o=n(4),i=n(103);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=i.f(e);return(0,n.resolve)(t),n.promise}},function(e,t,n){"use strict";var r=n(7).f,o=n(34),i=n(42),a=n(21),l=n(41),u=n(52),c=n(70),s=n(100),f=n(40),p=n(8),d=n(28).fastKey,h=n(43),m=p?"_s":"size",v=function(e,t){var n,r=d(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,c){var s=e(function(e,r){l(e,s,t,"_i"),e._t=t,e._i=o(null),e._f=void 0,e._l=void 0,e[m]=0,null!=r&&u(r,n,e[c],e)});return i(s.prototype,{clear:function(){for(var e=h(this,t),n=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];e._f=e._l=void 0,e[m]=0},delete:function(e){var n=h(this,t),r=v(n,e);if(r){var o=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=o),o&&(o.p=i),n._f==r&&(n._f=o),n._l==r&&(n._l=i),n[m]--}return!!r},forEach:function(e){h(this,t);for(var n,r=a(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!v(h(this,t),e)}}),p&&r(s.prototype,"size",{get:function(){return h(this,t)[m]}}),s},def:function(e,t,n){var r,o,i=v(e,t);return i?i.v=n:(e._l=i={i:o=d(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=i),r&&(r.n=i),e[m]++,"F"!==o&&(e._i[o]=i)),e},getEntry:v,setStrong:function(e,t,n){c(e,t,function(e,n){this._t=h(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?s(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,s(1))},n?"entries":"values",!n,!0),f(t)}}},function(e,t,n){"use strict";var r=n(42),o=n(28).getWeak,i=n(5),a=n(4),l=n(41),u=n(52),c=n(20),s=n(13),f=n(43),p=c(5),d=c(6),h=0,m=function(e){return e._l||(e._l=new v)},v=function(){this.a=[]},y=function(e,t){return p(e.a,function(e){return e[0]===t})};v.prototype={get:function(e){var t=y(this,e);if(t)return t[1]},has:function(e){return!!y(this,e)},set:function(e,t){var n=y(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=d(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,i){var c=e(function(e,r){l(e,c,t,"_i"),e._t=t,e._i=h++,e._l=void 0,null!=r&&u(r,n,e[i],e)});return r(c.prototype,{delete:function(e){if(!a(e))return!1;var n=o(e);return!0===n?m(f(this,t)).delete(e):n&&s(n,this._i)&&delete n[this._i]},has:function(e){if(!a(e))return!1;var n=o(e);return!0===n?m(f(this,t)).has(e):n&&s(n,this._i)}}),c},def:function(e,t,n){var r=o(i(t),!0);return!0===r?m(e).set(t,n):r[e._i]=n,e},ufstore:m}},function(e,t,n){var r=n(25),o=n(10);e.exports=function(e){if(void 0===e)return 0;var t=r(e),n=o(t);if(t!==n)throw RangeError("Wrong length!");return n}},function(e,t,n){var r=n(35),o=n(47),i=n(5),a=n(3).Reflect;e.exports=a&&a.ownKeys||function(e){var t=r.f(i(e)),n=o.f;return n?t.concat(n(e)):t}},function(e,t,n){var r=n(10),o=n(67),i=n(24);e.exports=function(e,t,n,a){var l=String(i(e)),u=l.length,c=void 0===n?" ":String(n),s=r(t);if(s<=u||""==c)return l;var f=s-u,p=o.call(c,Math.ceil(f/c.length));return p.length>f&&(p=p.slice(0,f)),a?p+l:l+p}},function(e,t,n){var r=n(32),o=n(15),i=n(45).f;e.exports=function(e){return function(t){for(var n,a=o(t),l=r(a),u=l.length,c=0,s=[];u>c;)i.call(a,n=l[c++])&&s.push(e?[n,a[n]]:a[n]);return s}}},function(e,t,n){"use strict"; /* object-assign (c) Sindre Sorhus @license MIT -*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,a,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),u=1;u=910?t="large":e<910&&e>=610?t="mid":e<610&&(t="tablet"),t},generatePopupLinks:function(){var e={plingListUrl:"/#plingList",ocsapiContentUrl:"/#ocsapiContent",aboutContentUrl:"/#aboutContent",linkTarget:"_blank"};return-1!==window.location.hostname.indexOf("opendesktop")&&"git.opendesktop.org"!==window.location.hostname&&"git.opendesktop.cc"!==window.location.hostname&&"forum.opendesktop.org"!==window.location.hostname&&"forum.opendesktop.cc"!==window.location.hostname&&"my.opendesktop.org"!==window.location.hostname&&"my.opendesktop.cc"!==window.location.hostname||(e.plingListUrl="/plings",e.ocsapiContentUrl="/partials/ocsapicontent.phtml",e.aboutContentUrl="/partials/about.phtml",e.linkTarget=""),e},getPopupUrl:function(e,t,n){return n}}}();var _=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={domains:E.domains,baseUrl:E.baseUrl,blogUrl:E.blogUrl,forumUrl:E.forumUrl,loginUrl:E.loginUrl,logoutUrl:E.logoutUrl,gitlabUrl:E.gitlabUrl,sName:E.sName,isExternal:E.isExternal,user:E.user,showModal:!1,modalUrl:"",isAdmin:E.json_isAdmin},n.initMetaHeader=n.initMetaHeader.bind(g(g(n))),n.updateDimensions=n.updateDimensions.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){this.updateDimensions()}},{key:"componentDidMount",value:function(){this.initMetaHeader()}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.updateDimensions),window.removeEventListener("orientationchange",this.updateDimensions)}},{key:"initMetaHeader",value:function(){window.addEventListener("resize",this.updateDimensions),window.addEventListener("orientationchange",this.updateDimensions)}},{key:"getUser",value:function(){var e=decodeURIComponent(document.cookie).split("ocs_data=")[1];if(e){e.indexOf(";")>-1&&(e=e.split(";")[0]);var t=JSON.parse(e);this.setState({user:t})}}},{key:"updateDimensions",value:function(){var e,t=window.innerWidth;t>=910?e="large":t<910&&t>=610?e="mid":t<610&&(e="tablet"),this.setState({device:e})}},{key:"render",value:function(){var e;return e="tablet"===this.state.device?o.a.createElement(L,{device:this.state.device,domains:this.state.domains,user:this.state.user,baseUrl:this.state.baseUrl,blogUrl:this.state.blogUrl,forumUrl:this.state.forumUrl,sName:this.state.sName,isAdmin:this.state.isAdmin}):o.a.createElement(S,{device:this.state.device,domains:this.state.domains,user:this.state.user,baseUrl:this.state.baseUrl,blogUrl:this.state.blogUrl,forumUrl:this.state.forumUrl,sName:this.state.sName,isAdmin:this.state.isAdmin}),o.a.createElement("nav",{id:"metaheader-nav",className:"metaheader"},o.a.createElement("div",{className:"metamenu"},e,o.a.createElement(F,{device:this.state.device,user:this.state.user,baseUrl:this.state.baseUrl,blogUrl:this.state.blogUrl,forumUrl:this.state.forumUrl,loginUrl:this.state.loginUrl,logoutUrl:this.state.logoutUrl,gitlabUrl:this.state.gitlabUrl})))}}]),t}(),S=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n}return v(t,o.a.Component),d(t,[{key:"render",value:function(){var e,t,n;return"large"!==this.props.device&&(e=o.a.createElement(O,{domains:this.props.domains,baseUrl:this.props.baseUrl,blogUrl:this.props.blogUrl})),!0===this.props.isAdmin&&(t=o.a.createElement(N,{user:this.props.user,baseUrl:this.props.baseUrl,gitlabUrl:this.props.gitlabUrl}),n=o.a.createElement(P,null)),o.a.createElement("ul",{className:"metaheader-menu left",id:"domains-menu"},o.a.createElement("li",{className:"active"},o.a.createElement("a",{href:this.props.baseUrl},o.a.createElement("img",{src:this.props.baseUrl+"/images/system/ocs-logo-rounded-16x16.png",className:"logo"}),"openDesktop.org :")),o.a.createElement(C,{domains:this.props.domains}),t,n,o.a.createElement(T,{forumUrl:this.props.forumUrl}),e)}}]),t}(),C=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentDidMount",value:function(){var e=[];this.props.domains.forEach(function(t,n){-1===e.indexOf(t.menugroup)&&e.push(t.menugroup)}),this.setState({menuGroups:e})}},{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&"domains-menu-link-item"===e.target.className?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e,t,n=this;return this.state.menuGroups&&(e=this.state.menuGroups.slice(0,2).map(function(e,t){return o.a.createElement(M,{key:t,domains:n.props.domains,menuGroup:e,sName:n.props.sName})}),t=this.state.menuGroups.slice(2).map(function(e,t){return o.a.createElement(M,{key:t,domains:n.props.domains,menuGroup:e,sName:n.props.sName})})),o.a.createElement("li",{ref:function(e){return n.node=e},id:"domains-dropdown-menu",className:this.state.dropdownClass},o.a.createElement("a",{className:"domains-menu-link-item"},"Themes & Apps"),o.a.createElement("ul",{className:"dropdown-menu dropdown-menu-right"},o.a.createElement("li",{className:"submenu-container"},o.a.createElement("ul",null,e)),o.a.createElement("li",{className:"submenu-container"},o.a.createElement("ul",null,t))))}}]),t}(),T=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&"discussion-menu-link-item"===e.target.className?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e=this;return o.a.createElement("li",{ref:function(t){return e.node=t},id:"discussion-boards",className:this.state.dropdownClass},o.a.createElement("a",{className:"discussion-menu-link-item"},"Discussion Boards"),o.a.createElement("ul",{className:"discussion-menu dropdown-menu dropdown-menu-right"},o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/general"},"General")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/themes-and-apps"},"Themes & Apps")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/coding"},"Coding"))))}}]),t}(),N=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.state={gitlabLink:E.gitlabUrl+"/dashboard/issues?assignee_id="},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"componentDidMount",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4==this.readyState&&200==this.status){var t=JSON.parse(this.response),n=e.state.gitlabLink+t[0].id;e.setState({gitlabLink:n,loading:!1})}},t.open("GET",E.gitlabUrl+"/api/v4/users?username="+this.props.user.username,!0),t.send()}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&"admins-menu-link-item"===e.target.className?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e=this;return o.a.createElement("li",{ref:function(t){return e.node=t},id:"admins-dropdown-menu",className:this.state.dropdownClass},o.a.createElement("a",{className:"admins-menu-link-item"},"Development"),o.a.createElement("ul",{className:"dropdown-menu dropdown-menu-right"},o.a.createElement("li",null,o.a.createElement("a",{href:E.gitlabUrl+"/dashboard/projects"},"Projects")),o.a.createElement("li",null,o.a.createElement("a",{href:this.state.gitlabLink},"Issues"))))}}]),t}(),P=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&"cd-menu-link-item"===e.target.className?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e=this,t=E.baseUrl.split("opendesktop.")[1];return o.a.createElement("li",{ref:function(t){return e.node=t},id:"cd-dropdown-menu",className:this.state.dropdownClass},o.a.createElement("a",{className:"cd-menu-link-item"},"Clouds & Services"),o.a.createElement("ul",{className:"dropdown-menu dropdown-menu-right"},o.a.createElement("li",null,o.a.createElement("a",{href:"https://my.opendesktop."+t},"Storage")),o.a.createElement("li",null,o.a.createElement("a",{href:"https://music.opendesktop."+t},"Music")),o.a.createElement("li",null,o.a.createElement("a",{href:"https://docs.opendesktop."+t},"Docs"))))}}]),t}(),O=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&"more-menu-link-item"===e.target.className?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e,t,n,r=this;return!1===E.isExternal?(e=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"faq",href:"/plings"},"FAQ")),t=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"api",href:"/partials/ocsapicontent.phtml"},"API")),n=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"about",href:"/partials/about.phtml"},"About"))):(e=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"faq",href:E.baseUrl+"/#faq"},"FAQ")),t=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"api",href:E.baseUrl+"/#api"},"API")),n=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"about",href:E.baseUrl+"/#about"},"About"))),o.a.createElement("li",{ref:function(e){return r.node=e},id:"more-dropdown-menu",className:this.state.dropdownClass},o.a.createElement("a",{className:"more-menu-link-item"},"More"),o.a.createElement("ul",{className:"dropdown-menu"},o.a.createElement("li",null,o.a.createElement("a",{href:this.props.baseUrl+"/community"},"Community")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.blogUrl,target:"_blank"},"Blog")),e,t,n))}}]),t}(),M=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.filterDomainsByMenuGroup=n.filterDomainsByMenuGroup.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"filterDomainsByMenuGroup",value:function(e){if(e.menugroup===this.props.menuGroup)return e}},{key:"render",value:function(){var e=this.props.domains.filter(this.filterDomainsByMenuGroup).map(function(e,t){var n="";return-1===e.menuhref.indexOf("https://")&&-1===e.menuhref.indexOf("http://")&&(n+="http://"),o.a.createElement("li",{key:t},o.a.createElement("a",{href:n+e.menuhref},e.name))});return o.a.createElement("li",null,o.a.createElement("a",{className:"groupname"},o.a.createElement("b",null,this.props.menuGroup)),o.a.createElement("ul",{className:"domains-sub-menu"},e))}}]),t}(),F=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n}return v(t,o.a.Component),d(t,[{key:"render",value:function(){var e,t,n,r,i,a;(this.props.user&&this.props.user.member_id?(e=o.a.createElement(U,{user:this.props.user,logoutUrl:this.props.logoutUrl,baseUrl:this.props.baseUrl}),t=o.a.createElement(A,{user:this.props.user,forumUrl:this.props.forumUrl,gitlabUrl:this.props.gitlabUrl})):e=o.a.createElement("li",{id:"user-login-container"},o.a.createElement("a",{href:this.props.loginUrl,className:"btn btn-metaheader"},"Login")),"large"===this.props.device)?(!1===E.isExternal?(r=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"faq",href:"/plings"},"FAQ")),i=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"api",href:"/partials/ocsapicontent.phtml"},"API")),a=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"about",href:"/partials/about.phtml"},"About"))):(r=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"faq",href:E.baseUrl+"/#faq"},"FAQ")),i=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"api",href:E.baseUrl+"/#api"},"API")),a=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"about",href:E.baseUrl+"/#about"},"About"))),n=o.a.createElement("ul",{className:"metaheader-menu",id:"user-menu"},o.a.createElement("li",null,o.a.createElement("a",{href:this.props.baseUrl+"/community"},"Community")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.blogUrl,target:"_blank"},"Blog")),r,i,a,t,e)):n=o.a.createElement("ul",{className:"metaheader-menu",id:"user-menu"},t,e);return o.a.createElement("div",{id:"user-menu-container",className:"right"},n)}}]),t}(),A=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={gitlabLink:E.gitlabUrl+"/dashboard/issues?assignee_id="},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"componentDidMount",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4==this.readyState&&200==this.status){var t=JSON.parse(this.response),n=e.state.gitlabLink+t[0].id;e.setState({gitlabLink:n,loading:!1})}},t.open("GET",E.gitlabUrl+"/api/v4/users?username="+this.props.user.username,!0),t.send()}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&("th-icon"===e.target.className||"btn btn-default dropdown-toggle"===e.target.className)?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e=this;return o.a.createElement("li",{ref:function(t){return e.node=t},id:"user-context-menu-container"},o.a.createElement("div",{className:"user-dropdown "+this.state.dropdownClass},o.a.createElement("button",{className:"btn btn-default dropdown-toggle",type:"button",onClick:this.toggleDropDown},o.a.createElement("span",{className:"th-icon"})),o.a.createElement("ul",{id:"user-context-dropdown",className:"dropdown-menu dropdown-menu-right"},o.a.createElement("li",{id:"opencode-link-item"},o.a.createElement("a",{href:this.props.gitlabUrl+"/dashboard/projects"},o.a.createElement("div",{className:"icon"}),o.a.createElement("span",null,"Projects"))),o.a.createElement("li",{id:"issues-link-item"},o.a.createElement("a",{href:this.state.gitlabLink},o.a.createElement("div",{className:"icon"}),o.a.createElement("span",null,"Issues"))),o.a.createElement("li",{id:"messages-link-item"},o.a.createElement("a",{href:this.props.forumUrl+"/u/"+this.props.user.username+"/messages"},o.a.createElement("div",{className:"icon"}),o.a.createElement("span",null,"Messages"))))))}}]),t}(),U=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&("th-icon"===e.target.className||"btn btn-default dropdown-toggle"===e.target.className)?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e=this;return o.a.createElement("li",{id:"user-login-menu-container",ref:function(t){return e.node=t}},o.a.createElement("div",{className:"user-dropdown "+this.state.dropdownClass},o.a.createElement("button",{className:"btn btn-default dropdown-toggle",type:"button",id:"userLoginDropdown"},o.a.createElement("img",{className:"th-icon",src:this.props.user.avatar})),o.a.createElement("ul",{className:"dropdown-menu dropdown-menu-right"},o.a.createElement("li",{id:"user-info-menu-item"},o.a.createElement("div",{id:"user-info-section"},o.a.createElement("div",{className:"user-avatar"},o.a.createElement("div",{className:"no-avatar-user-letter"},o.a.createElement("img",{src:this.props.user.avatar}))),o.a.createElement("div",{className:"user-details"},o.a.createElement("ul",null,o.a.createElement("li",null,o.a.createElement("b",null,this.props.user.username)),o.a.createElement("li",null,this.props.user.mail))))),o.a.createElement("li",{className:"buttons"},o.a.createElement("a",{href:this.props.baseUrl+"/settings/",className:"btn btn-default btn-metaheader"},o.a.createElement("span",null,"Settings")),o.a.createElement("a",{href:this.props.logoutUrl,className:"btn btn-default pull-right btn-metaheader"},o.a.createElement("span",null,"Logout"))))))}}]),t}(),L=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={overlayClass:""},n.toggleLeftSideOverlay=n.toggleLeftSideOverlay.bind(g(g(n))),n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){window.addEventListener("mousedown",this.handleClick,!1),window.addEventListener("touchend",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("mousedown",this.handleClick,!1),window.addEventListener("touchend",this.handleClick,!1)}},{key:"toggleLeftSideOverlay",value:function(){var e="open";"open"===this.state.overlayClass&&(e=""),this.setState({overlayClass:e})}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.overlayClass&&("left-side-overlay"===e.target.id||"menu-toggle-item"===e.target.id)?"":"open"),this.setState({overlayClass:t})}},{key:"render",value:function(){var e,t=this;return o.a.createElement("div",{ref:function(e){return t.node=e},id:"metaheader-left-mobile",className:this.state.overlayClass},o.a.createElement("a",{className:"menu-toggle",id:"menu-toggle-item"}),o.a.createElement("div",{id:"left-side-overlay"},o.a.createElement(I,(c(e={baseUrl:this.props.baseUrl,domains:this.props.domains},"baseUrl",this.props.baseUrl),c(e,"blogUrl",this.props.blogUrl),c(e,"forumUrl",this.props.forumUrl),e))))}}]),t}(),I=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n}return v(t,o.a.Component),d(t,[{key:"componentDidMount",value:function(){var e=[];this.props.domains.forEach(function(t,n){-1===e.indexOf(t.menugroup)&&e.push(t.menugroup)}),this.setState({menuGroups:e})}},{key:"render",value:function(){var e,t,n,r,i=this;return this.state.menuGroups&&(e=this.state.menuGroups.map(function(e,t){return o.a.createElement(M,{key:t,domains:i.props.domains,menuGroup:e,sName:i.props.sName})})),!1===E.isExternal?(t=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"faq",href:"/plings"},"FAQ")),n=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"api",href:"/partials/ocsapicontent.phtml"},"API")),r=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"about",href:"/partials/about.phtml"},"About"))):(t=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"faq",href:E.baseUrl+"/#faq"},"FAQ")),n=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"api",href:E.baseUrl+"/#api"},"API")),r=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"about",href:E.baseUrl+"/#about"},"About"))),o.a.createElement("div",{id:"left-side-panel"},o.a.createElement("div",{id:"panel-header"},o.a.createElement("a",{href:this.props.baseUrl},o.a.createElement("img",{src:this.props.baseUrl+"/images/system/opendesktop-logo.png",className:"logo"})," openDesktop.org")),o.a.createElement("div",{id:"panel-menu"},o.a.createElement("ul",null,e,o.a.createElement("li",null,o.a.createElement("a",{className:"groupname"},o.a.createElement("b",null,"Discussion Boards")),o.a.createElement("ul",null,o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/general"},"General")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/themes-and-apps"},"Themes & Apps")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/coding"},"Coding")))),o.a.createElement("li",null,o.a.createElement("a",{className:"groupname"},o.a.createElement("b",null,"More")),o.a.createElement("ul",null,o.a.createElement("li",null,o.a.createElement("a",{href:this.props.baseUrl+"/community"},"Community")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.blogUrl,target:"_blank"},"Blog")),t,n,r)))))}}]),t}();customElements.define("opendesktop-metaheader",function(e){function t(){var e;return f(this,t),(e=h(this,m(t).call(this))).buildComponent(),e}var n;return v(t,l(HTMLElement)),d(t,[{key:"buildComponent",value:(n=w(regeneratorRuntime.mark(function e(){var t,n;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,k(this.getAttribute("config-target"));case 2:(t=document.createElement("div")).id="metaheader",a.a.render(o.a.createElement(_,null),t),(n=document.createElement("link")).rel="stylesheet",n.href="https://www.opendesktop.org/theme/react/assets/css/metaheader.css",location.hostname.endsWith("opendesktop.org")||(location.hostname.endsWith("cc")?n.href="https://www.opendesktop.cc/theme/react/assets/css/metaheader.css":location.hostname.endsWith("localhost")?n.href="https://www.opendesktop.cc/theme/react/assets/css/metaheader.css":n.href="https://www.opendesktop.org/theme/react/assets/css/metaheader.css"),this.appendChild(n),this.appendChild(t);case 11:case"end":return e.stop()}},e,this)})),function(){return n.apply(this,arguments)})}]),t}())},function(e,t,n){"use strict";(function(e){n(116),n(260),n(262),n(264),n(266),n(268),n(270),n(272),n(274),n(276),n(280),e._babelPolyfill&&"undefined"!=typeof console&&console.warn&&console.warn("@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended and may have consequences if different versions of the polyfills are applied sequentially. If you do need to load the polyfill more than once, use @babel/polyfill/noConflict instead to bypass the warning."),e._babelPolyfill=!0}).call(this,n(115))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){n(117),n(119),n(120),n(121),n(122),n(123),n(124),n(125),n(126),n(127),n(128),n(129),n(130),n(131),n(132),n(133),n(135),n(136),n(137),n(138),n(139),n(140),n(141),n(142),n(143),n(144),n(145),n(146),n(147),n(148),n(149),n(150),n(151),n(152),n(153),n(154),n(155),n(156),n(157),n(158),n(159),n(160),n(161),n(163),n(164),n(165),n(166),n(167),n(168),n(169),n(170),n(171),n(172),n(173),n(174),n(175),n(176),n(177),n(178),n(179),n(180),n(181),n(182),n(183),n(184),n(185),n(186),n(187),n(188),n(189),n(190),n(191),n(192),n(193),n(194),n(195),n(196),n(198),n(199),n(201),n(202),n(203),n(204),n(205),n(206),n(207),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(217),n(218),n(219),n(220),n(221),n(222),n(78),n(223),n(224),n(101),n(225),n(226),n(227),n(228),n(102),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(248),n(249),n(250),n(251),n(252),n(253),n(254),n(255),n(256),n(257),n(258),n(259),e.exports=n(9)},function(e,t,n){"use strict";var r=n(3),o=n(13),i=n(8),a=n(1),l=n(11),u=n(28).KEY,c=n(2),s=n(58),f=n(37),p=n(30),d=n(6),h=n(59),m=n(83),v=n(118),y=n(62),g=n(5),b=n(4),w=n(15),E=n(27),k=n(29),x=n(34),_=n(86),S=n(18),C=n(7),T=n(32),N=S.f,P=C.f,O=_.f,M=r.Symbol,F=r.JSON,A=F&&F.stringify,U=d("_hidden"),L=d("toPrimitive"),I={}.propertyIsEnumerable,j=s("symbol-registry"),D=s("symbols"),R=s("op-symbols"),W=Object.prototype,z="function"==typeof M,V=r.QObject,B=!V||!V.prototype||!V.prototype.findChild,H=i&&c(function(){return 7!=x(P({},"a",{get:function(){return P(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=N(W,t);r&&delete W[t],P(e,t,n),r&&e!==W&&P(W,t,r)}:P,G=function(e){var t=D[e]=x(M.prototype);return t._k=e,t},$=z&&"symbol"==typeof M.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof M},q=function(e,t,n){return e===W&&q(R,t,n),g(e),t=E(t,!0),g(n),o(D,t)?(n.enumerable?(o(e,U)&&e[U][t]&&(e[U][t]=!1),n=x(n,{enumerable:k(0,!1)})):(o(e,U)||P(e,U,k(1,{})),e[U][t]=!0),H(e,t,n)):P(e,t,n)},K=function(e,t){g(e);for(var n,r=v(t=w(t)),o=0,i=r.length;i>o;)q(e,n=r[o++],t[n]);return e},Q=function(e){var t=I.call(this,e=E(e,!0));return!(this===W&&o(D,e)&&!o(R,e))&&(!(t||!o(this,e)||!o(D,e)||o(this,U)&&this[U][e])||t)},Y=function(e,t){if(e=w(e),t=E(t,!0),e!==W||!o(D,t)||o(R,t)){var n=N(e,t);return!n||!o(D,t)||o(e,U)&&e[U][t]||(n.enumerable=!0),n}},X=function(e){for(var t,n=O(w(e)),r=[],i=0;n.length>i;)o(D,t=n[i++])||t==U||t==u||r.push(t);return r},J=function(e){for(var t,n=e===W,r=O(n?R:w(e)),i=[],a=0;r.length>a;)!o(D,t=r[a++])||n&&!o(W,t)||i.push(D[t]);return i};z||(l((M=function(){if(this instanceof M)throw TypeError("Symbol is not a constructor!");var e=p(arguments.length>0?arguments[0]:void 0),t=function(n){this===W&&t.call(R,n),o(this,U)&&o(this[U],e)&&(this[U][e]=!1),H(this,e,k(1,n))};return i&&B&&H(W,e,{configurable:!0,set:t}),G(e)}).prototype,"toString",function(){return this._k}),S.f=Y,C.f=q,n(35).f=_.f=X,n(45).f=Q,n(47).f=J,i&&!n(31)&&l(W,"propertyIsEnumerable",Q,!0),h.f=function(e){return G(d(e))}),a(a.G+a.W+a.F*!z,{Symbol:M});for(var Z="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ee=0;Z.length>ee;)d(Z[ee++]);for(var te=T(d.store),ne=0;te.length>ne;)m(te[ne++]);a(a.S+a.F*!z,"Symbol",{for:function(e){return o(j,e+="")?j[e]:j[e]=M(e)},keyFor:function(e){if(!$(e))throw TypeError(e+" is not a symbol!");for(var t in j)if(j[t]===e)return t},useSetter:function(){B=!0},useSimple:function(){B=!1}}),a(a.S+a.F*!z,"Object",{create:function(e,t){return void 0===t?x(e):K(x(e),t)},defineProperty:q,defineProperties:K,getOwnPropertyDescriptor:Y,getOwnPropertyNames:X,getOwnPropertySymbols:J}),F&&a(a.S+a.F*(!z||c(function(){var e=M();return"[null]"!=A([e])||"{}"!=A({a:e})||"{}"!=A(Object(e))})),"JSON",{stringify:function(e){for(var t,n,r=[e],o=1;arguments.length>o;)r.push(arguments[o++]);if(n=t=r[1],(b(t)||void 0!==e)&&!$(e))return y(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!$(t))return t}),r[1]=t,A.apply(F,r)}}),M.prototype[L]||n(14)(M.prototype,L,M.prototype.valueOf),f(M,"Symbol"),f(Math,"Math",!0),f(r.JSON,"JSON",!0)},function(e,t,n){var r=n(32),o=n(47),i=n(45);e.exports=function(e){var t=r(e),n=o.f;if(n)for(var a,l=n(e),u=i.f,c=0;l.length>c;)u.call(e,a=l[c++])&&t.push(a);return t}},function(e,t,n){var r=n(1);r(r.S,"Object",{create:n(34)})},function(e,t,n){var r=n(1);r(r.S+r.F*!n(8),"Object",{defineProperty:n(7).f})},function(e,t,n){var r=n(1);r(r.S+r.F*!n(8),"Object",{defineProperties:n(85)})},function(e,t,n){var r=n(15),o=n(18).f;n(19)("getOwnPropertyDescriptor",function(){return function(e,t){return o(r(e),t)}})},function(e,t,n){var r=n(16),o=n(36);n(19)("getPrototypeOf",function(){return function(e){return o(r(e))}})},function(e,t,n){var r=n(16),o=n(32);n(19)("keys",function(){return function(e){return o(r(e))}})},function(e,t,n){n(19)("getOwnPropertyNames",function(){return n(86).f})},function(e,t,n){var r=n(4),o=n(28).onFreeze;n(19)("freeze",function(e){return function(t){return e&&r(t)?e(o(t)):t}})},function(e,t,n){var r=n(4),o=n(28).onFreeze;n(19)("seal",function(e){return function(t){return e&&r(t)?e(o(t)):t}})},function(e,t,n){var r=n(4),o=n(28).onFreeze;n(19)("preventExtensions",function(e){return function(t){return e&&r(t)?e(o(t)):t}})},function(e,t,n){var r=n(4);n(19)("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}})},function(e,t,n){var r=n(4);n(19)("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}})},function(e,t,n){var r=n(4);n(19)("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}})},function(e,t,n){var r=n(1);r(r.S+r.F,"Object",{assign:n(87)})},function(e,t,n){var r=n(1);r(r.S,"Object",{is:n(134)})},function(e,t){e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},function(e,t,n){var r=n(1);r(r.S,"Object",{setPrototypeOf:n(64).set})},function(e,t,n){"use strict";var r=n(48),o={};o[n(6)("toStringTag")]="z",o+""!="[object z]"&&n(11)(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},function(e,t,n){var r=n(1);r(r.P,"Function",{bind:n(88)})},function(e,t,n){var r=n(7).f,o=Function.prototype,i=/^\s*function ([^ (]*)/;"name"in o||n(8)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(e){return""}}})},function(e,t,n){"use strict";var r=n(4),o=n(36),i=n(6)("hasInstance"),a=Function.prototype;i in a||n(7).f(a,i,{value:function(e){if("function"!=typeof this||!r(e))return!1;if(!r(this.prototype))return e instanceof this;for(;e=o(e);)if(this.prototype===e)return!0;return!1}})},function(e,t,n){var r=n(1),o=n(90);r(r.G+r.F*(parseInt!=o),{parseInt:o})},function(e,t,n){var r=n(1),o=n(91);r(r.G+r.F*(parseFloat!=o),{parseFloat:o})},function(e,t,n){"use strict";var r=n(3),o=n(13),i=n(23),a=n(66),l=n(27),u=n(2),c=n(35).f,s=n(18).f,f=n(7).f,p=n(49).trim,d=r.Number,h=d,m=d.prototype,v="Number"==i(n(34)(m)),y="trim"in String.prototype,g=function(e){var t=l(e,!1);if("string"==typeof t&&t.length>2){var n,r,o,i=(t=y?t.trim():p(t,3)).charCodeAt(0);if(43===i||45===i){if(88===(n=t.charCodeAt(2))||120===n)return NaN}else if(48===i){switch(t.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+t}for(var a,u=t.slice(2),c=0,s=u.length;co)return NaN;return parseInt(u,r)}}return+t};if(!d(" 0o1")||!d("0b1")||d("+0x1")){d=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof d&&(v?u(function(){m.valueOf.call(n)}):"Number"!=i(n))?a(new h(g(t)),n,d):g(t)};for(var b,w=n(8)?c(h):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),E=0;w.length>E;E++)o(h,b=w[E])&&!o(d,b)&&f(d,b,s(h,b));d.prototype=m,m.constructor=d,n(11)(r,"Number",d)}},function(e,t,n){"use strict";var r=n(1),o=n(25),i=n(92),a=n(67),l=1..toFixed,u=Math.floor,c=[0,0,0,0,0,0],s="Number.toFixed: incorrect invocation!",f=function(e,t){for(var n=-1,r=t;++n<6;)r+=e*c[n],c[n]=r%1e7,r=u(r/1e7)},p=function(e){for(var t=6,n=0;--t>=0;)n+=c[t],c[t]=u(n/e),n=n%e*1e7},d=function(){for(var e=6,t="";--e>=0;)if(""!==t||0===e||0!==c[e]){var n=String(c[e]);t=""===t?n:t+a.call("0",7-n.length)+n}return t},h=function(e,t,n){return 0===t?n:t%2==1?h(e,t-1,n*e):h(e*e,t/2,n)};r(r.P+r.F*(!!l&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!n(2)(function(){l.call({})})),"Number",{toFixed:function(e){var t,n,r,l,u=i(this,s),c=o(e),m="",v="0";if(c<0||c>20)throw RangeError(s);if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return String(u);if(u<0&&(m="-",u=-u),u>1e-21)if(n=(t=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}(u*h(2,69,1))-69)<0?u*h(2,-t,1):u/h(2,t,1),n*=4503599627370496,(t=52-t)>0){for(f(0,n),r=c;r>=7;)f(1e7,0),r-=7;for(f(h(10,r,1),0),r=t-1;r>=23;)p(1<<23),r-=23;p(1<0?m+((l=v.length)<=c?"0."+a.call("0",c-l)+v:v.slice(0,l-c)+"."+v.slice(l-c)):m+v}})},function(e,t,n){"use strict";var r=n(1),o=n(2),i=n(92),a=1..toPrecision;r(r.P+r.F*(o(function(){return"1"!==a.call(1,void 0)})||!o(function(){a.call({})})),"Number",{toPrecision:function(e){var t=i(this,"Number#toPrecision: incorrect invocation!");return void 0===e?a.call(t):a.call(t,e)}})},function(e,t,n){var r=n(1);r(r.S,"Number",{EPSILON:Math.pow(2,-52)})},function(e,t,n){var r=n(1),o=n(3).isFinite;r(r.S,"Number",{isFinite:function(e){return"number"==typeof e&&o(e)}})},function(e,t,n){var r=n(1);r(r.S,"Number",{isInteger:n(93)})},function(e,t,n){var r=n(1);r(r.S,"Number",{isNaN:function(e){return e!=e}})},function(e,t,n){var r=n(1),o=n(93),i=Math.abs;r(r.S,"Number",{isSafeInteger:function(e){return o(e)&&i(e)<=9007199254740991}})},function(e,t,n){var r=n(1);r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(e,t,n){var r=n(1);r(r.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(e,t,n){var r=n(1),o=n(91);r(r.S+r.F*(Number.parseFloat!=o),"Number",{parseFloat:o})},function(e,t,n){var r=n(1),o=n(90);r(r.S+r.F*(Number.parseInt!=o),"Number",{parseInt:o})},function(e,t,n){var r=n(1),o=n(94),i=Math.sqrt,a=Math.acosh;r(r.S+r.F*!(a&&710==Math.floor(a(Number.MAX_VALUE))&&a(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:o(e-1+i(e-1)*i(e+1))}})},function(e,t,n){var r=n(1),o=Math.asinh;r(r.S+r.F*!(o&&1/o(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}})},function(e,t,n){var r=n(1),o=Math.atanh;r(r.S+r.F*!(o&&1/o(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}})},function(e,t,n){var r=n(1),o=n(68);r(r.S,"Math",{cbrt:function(e){return o(e=+e)*Math.pow(Math.abs(e),1/3)}})},function(e,t,n){var r=n(1);r(r.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}})},function(e,t,n){var r=n(1),o=Math.exp;r(r.S,"Math",{cosh:function(e){return(o(e=+e)+o(-e))/2}})},function(e,t,n){var r=n(1),o=n(69);r(r.S+r.F*(o!=Math.expm1),"Math",{expm1:o})},function(e,t,n){var r=n(1);r(r.S,"Math",{fround:n(162)})},function(e,t,n){var r=n(68),o=Math.pow,i=o(2,-52),a=o(2,-23),l=o(2,127)*(2-a),u=o(2,-126);e.exports=Math.fround||function(e){var t,n,o=Math.abs(e),c=r(e);return ol||n!=n?c*(1/0):c*n}},function(e,t,n){var r=n(1),o=Math.abs;r(r.S,"Math",{hypot:function(e,t){for(var n,r,i=0,a=0,l=arguments.length,u=0;a0?(r=n/u)*r:n;return u===1/0?1/0:u*Math.sqrt(i)}})},function(e,t,n){var r=n(1),o=Math.imul;r(r.S+r.F*n(2)(function(){return-5!=o(4294967295,5)||2!=o.length}),"Math",{imul:function(e,t){var n=+e,r=+t,o=65535&n,i=65535&r;return 0|o*i+((65535&n>>>16)*i+o*(65535&r>>>16)<<16>>>0)}})},function(e,t,n){var r=n(1);r(r.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}})},function(e,t,n){var r=n(1);r(r.S,"Math",{log1p:n(94)})},function(e,t,n){var r=n(1);r(r.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}})},function(e,t,n){var r=n(1);r(r.S,"Math",{sign:n(68)})},function(e,t,n){var r=n(1),o=n(69),i=Math.exp;r(r.S+r.F*n(2)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(o(e)-o(-e))/2:(i(e-1)-i(-e-1))*(Math.E/2)}})},function(e,t,n){var r=n(1),o=n(69),i=Math.exp;r(r.S,"Math",{tanh:function(e){var t=o(e=+e),n=o(-e);return t==1/0?1:n==1/0?-1:(t-n)/(i(e)+i(-e))}})},function(e,t,n){var r=n(1);r(r.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}})},function(e,t,n){var r=n(1),o=n(33),i=String.fromCharCode,a=String.fromCodePoint;r(r.S+r.F*(!!a&&1!=a.length),"String",{fromCodePoint:function(e){for(var t,n=[],r=arguments.length,a=0;r>a;){if(t=+arguments[a++],o(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?i(t):i(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}})},function(e,t,n){var r=n(1),o=n(15),i=n(10);r(r.S,"String",{raw:function(e){for(var t=o(e.raw),n=i(t.length),r=arguments.length,a=[],l=0;n>l;)a.push(String(t[l++])),l=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){"use strict";var r=n(1),o=n(95)(!1);r(r.P,"String",{codePointAt:function(e){return o(this,e)}})},function(e,t,n){"use strict";var r=n(1),o=n(10),i=n(71),a="".endsWith;r(r.P+r.F*n(73)("endsWith"),"String",{endsWith:function(e){var t=i(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,r=o(t.length),l=void 0===n?r:Math.min(o(n),r),u=String(e);return a?a.call(t,u,l):t.slice(l-u.length,l)===u}})},function(e,t,n){"use strict";var r=n(1),o=n(71);r(r.P+r.F*n(73)("includes"),"String",{includes:function(e){return!!~o(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var r=n(1);r(r.P,"String",{repeat:n(67)})},function(e,t,n){"use strict";var r=n(1),o=n(10),i=n(71),a="".startsWith;r(r.P+r.F*n(73)("startsWith"),"String",{startsWith:function(e){var t=i(this,e,"startsWith"),n=o(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),r=String(e);return a?a.call(t,r,n):t.slice(n,n+r.length)===r}})},function(e,t,n){"use strict";n(12)("anchor",function(e){return function(t){return e(this,"a","name",t)}})},function(e,t,n){"use strict";n(12)("big",function(e){return function(){return e(this,"big","","")}})},function(e,t,n){"use strict";n(12)("blink",function(e){return function(){return e(this,"blink","","")}})},function(e,t,n){"use strict";n(12)("bold",function(e){return function(){return e(this,"b","","")}})},function(e,t,n){"use strict";n(12)("fixed",function(e){return function(){return e(this,"tt","","")}})},function(e,t,n){"use strict";n(12)("fontcolor",function(e){return function(t){return e(this,"font","color",t)}})},function(e,t,n){"use strict";n(12)("fontsize",function(e){return function(t){return e(this,"font","size",t)}})},function(e,t,n){"use strict";n(12)("italics",function(e){return function(){return e(this,"i","","")}})},function(e,t,n){"use strict";n(12)("link",function(e){return function(t){return e(this,"a","href",t)}})},function(e,t,n){"use strict";n(12)("small",function(e){return function(){return e(this,"small","","")}})},function(e,t,n){"use strict";n(12)("strike",function(e){return function(){return e(this,"strike","","")}})},function(e,t,n){"use strict";n(12)("sub",function(e){return function(){return e(this,"sub","","")}})},function(e,t,n){"use strict";n(12)("sup",function(e){return function(){return e(this,"sup","","")}})},function(e,t,n){var r=n(1);r(r.S,"Date",{now:function(){return(new Date).getTime()}})},function(e,t,n){"use strict";var r=n(1),o=n(16),i=n(27);r(r.P+r.F*n(2)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(e){var t=o(this),n=i(t);return"number"!=typeof n||isFinite(n)?t.toISOString():null}})},function(e,t,n){var r=n(1),o=n(197);r(r.P+r.F*(Date.prototype.toISOString!==o),"Date",{toISOString:o})},function(e,t,n){"use strict";var r=n(2),o=Date.prototype.getTime,i=Date.prototype.toISOString,a=function(e){return e>9?e:"0"+e};e.exports=r(function(){return"0385-07-25T07:06:39.999Z"!=i.call(new Date(-5e13-1))})||!r(function(){i.call(new Date(NaN))})?function(){if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var e=this,t=e.getUTCFullYear(),n=e.getUTCMilliseconds(),r=t<0?"-":t>9999?"+":"";return r+("00000"+Math.abs(t)).slice(r?-6:-4)+"-"+a(e.getUTCMonth()+1)+"-"+a(e.getUTCDate())+"T"+a(e.getUTCHours())+":"+a(e.getUTCMinutes())+":"+a(e.getUTCSeconds())+"."+(n>99?n:"0"+a(n))+"Z"}:i},function(e,t,n){var r=Date.prototype,o=r.toString,i=r.getTime;new Date(NaN)+""!="Invalid Date"&&n(11)(r,"toString",function(){var e=i.call(this);return e==e?o.call(this):"Invalid Date"})},function(e,t,n){var r=n(6)("toPrimitive"),o=Date.prototype;r in o||n(14)(o,r,n(200))},function(e,t,n){"use strict";var r=n(5),o=n(27);e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return o(r(this),"number"!=e)}},function(e,t,n){var r=n(1);r(r.S,"Array",{isArray:n(62)})},function(e,t,n){"use strict";var r=n(21),o=n(1),i=n(16),a=n(97),l=n(74),u=n(10),c=n(75),s=n(76);o(o.S+o.F*!n(50)(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,o,f,p=i(e),d="function"==typeof this?this:Array,h=arguments.length,m=h>1?arguments[1]:void 0,v=void 0!==m,y=0,g=s(p);if(v&&(m=r(m,h>2?arguments[2]:void 0,2)),null==g||d==Array&&l(g))for(n=new d(t=u(p.length));t>y;y++)c(n,y,v?m(p[y],y):p[y]);else for(f=g.call(p),n=new d;!(o=f.next()).done;y++)c(n,y,v?a(f,m,[o.value,y],!0):o.value);return n.length=y,n}})},function(e,t,n){"use strict";var r=n(1),o=n(75);r(r.S+r.F*n(2)(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)o(n,e,arguments[e++]);return n.length=t,n}})},function(e,t,n){"use strict";var r=n(1),o=n(15),i=[].join;r(r.P+r.F*(n(44)!=Object||!n(17)(i)),"Array",{join:function(e){return i.call(o(this),void 0===e?",":e)}})},function(e,t,n){"use strict";var r=n(1),o=n(63),i=n(23),a=n(33),l=n(10),u=[].slice;r(r.P+r.F*n(2)(function(){o&&u.call(o)}),"Array",{slice:function(e,t){var n=l(this.length),r=i(this);if(t=void 0===t?n:t,"Array"==r)return u.call(this,e,t);for(var o=a(e,n),c=a(t,n),s=l(c-o),f=new Array(s),p=0;p1&&(r=Math.min(r,i(arguments[1]))),r<0&&(r=n+r);r>=0;r--)if(r in t&&t[r]===e)return r||0;return-1}})},function(e,t,n){var r=n(1);r(r.P,"Array",{copyWithin:n(99)}),n(39)("copyWithin")},function(e,t,n){var r=n(1);r(r.P,"Array",{fill:n(77)}),n(39)("fill")},function(e,t,n){"use strict";var r=n(1),o=n(20)(5),i=!0;"find"in[]&&Array(1).find(function(){i=!1}),r(r.P+r.F*i,"Array",{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(39)("find")},function(e,t,n){"use strict";var r=n(1),o=n(20)(6),i="findIndex",a=!0;i in[]&&Array(1)[i](function(){a=!1}),r(r.P+r.F*a,"Array",{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(39)(i)},function(e,t,n){n(40)("Array")},function(e,t,n){var r=n(3),o=n(66),i=n(7).f,a=n(35).f,l=n(72),u=n(79),c=r.RegExp,s=c,f=c.prototype,p=/a/g,d=/a/g,h=new c(p)!==p;if(n(8)&&(!h||n(2)(function(){return d[n(6)("match")]=!1,c(p)!=p||c(d)==d||"/a/i"!=c(p,"i")}))){c=function(e,t){var n=this instanceof c,r=l(e),i=void 0===t;return!n&&r&&e.constructor===c&&i?e:o(h?new s(r&&!i?e.source:e,t):s((r=e instanceof c)?e.source:e,r&&i?u.call(e):t),n?this:f,c)};for(var m=function(e){e in c||i(c,e,{configurable:!0,get:function(){return s[e]},set:function(t){s[e]=t}})},v=a(s),y=0;v.length>y;)m(v[y++]);f.constructor=c,c.prototype=f,n(11)(r,"RegExp",c)}n(40)("RegExp")},function(e,t,n){"use strict";n(101);var r=n(5),o=n(79),i=n(8),a=/./.toString,l=function(e){n(11)(RegExp.prototype,"toString",e,!0)};n(2)(function(){return"/a/b"!=a.call({source:"a",flags:"b"})})?l(function(){var e=r(this);return"/".concat(e.source,"/","flags"in e?e.flags:!i&&e instanceof RegExp?o.call(e):void 0)}):"toString"!=a.name&&l(function(){return a.call(this)})},function(e,t,n){n(51)("match",1,function(e,t,n){return[function(n){"use strict";var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},n]})},function(e,t,n){n(51)("replace",2,function(e,t,n){return[function(r,o){"use strict";var i=e(this),a=null==r?void 0:r[t];return void 0!==a?a.call(r,i,o):n.call(String(i),r,o)},n]})},function(e,t,n){n(51)("search",1,function(e,t,n){return[function(n){"use strict";var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},n]})},function(e,t,n){n(51)("split",2,function(e,t,r){"use strict";var o=n(72),i=r,a=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var l=void 0===/()??/.exec("")[1];r=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!o(e))return i.call(n,e,t);var r,u,c,s,f,p=[],d=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),h=0,m=void 0===t?4294967295:t>>>0,v=new RegExp(e.source,d+"g");for(l||(r=new RegExp("^"+v.source+"$(?!\\s)",d));(u=v.exec(n))&&!((c=u.index+u[0].length)>h&&(p.push(n.slice(h,u.index)),!l&&u.length>1&&u[0].replace(r,function(){for(f=1;f1&&u.index=m));)v.lastIndex===u.index&&v.lastIndex++;return h===n.length?!s&&v.test("")||p.push(""):p.push(n.slice(h)),p.length>m?p.slice(0,m):p}}else"0".split(void 0,0).length&&(r=function(e,t){return void 0===e&&0===t?[]:i.call(this,e,t)});return[function(n,o){var i=e(this),a=null==n?void 0:n[t];return void 0!==a?a.call(n,i,o):r.call(String(i),n,o)},r]})},function(e,t,n){var r=n(3),o=n(80).set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,l=r.Promise,u="process"==n(23)(a);e.exports=function(){var e,t,n,c=function(){var r,o;for(u&&(r=a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(u)n=function(){a.nextTick(c)};else if(!i||r.navigator&&r.navigator.standalone)if(l&&l.resolve){var s=l.resolve(void 0);n=function(){s.then(c)}}else n=function(){o.call(r,c)};else{var f=!0,p=document.createTextNode("");new i(c).observe(p,{characterData:!0}),n=function(){p.data=f=!f}}return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},function(e,t){e.exports=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}}},function(e,t,n){"use strict";var r=n(105),o=n(43);e.exports=n(55)("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=r.getEntry(o(this,"Map"),e);return t&&t.v},set:function(e,t){return r.def(o(this,"Map"),0===e?0:e,t)}},r,!0)},function(e,t,n){"use strict";var r=n(105),o=n(43);e.exports=n(55)("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(o(this,"Set"),e=0===e?0:e,e)}},r)},function(e,t,n){"use strict";var r,o=n(20)(0),i=n(11),a=n(28),l=n(87),u=n(106),c=n(4),s=n(2),f=n(43),p=a.getWeak,d=Object.isExtensible,h=u.ufstore,m={},v=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},y={get:function(e){if(c(e)){var t=p(e);return!0===t?h(f(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return u.def(f(this,"WeakMap"),e,t)}},g=e.exports=n(55)("WeakMap",v,y,u,!0,!0);s(function(){return 7!=(new g).set((Object.freeze||Object)(m),7).get(m)})&&(l((r=u.getConstructor(v,"WeakMap")).prototype,y),a.NEED=!0,o(["delete","has","get","set"],function(e){var t=g.prototype,n=t[e];i(t,e,function(t,o){if(c(t)&&!d(t)){this._f||(this._f=new r);var i=this._f[e](t,o);return"set"==e?this:i}return n.call(this,t,o)})}))},function(e,t,n){"use strict";var r=n(106),o=n(43);n(55)("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(o(this,"WeakSet"),e,!0)}},r,!1,!0)},function(e,t,n){"use strict";var r=n(1),o=n(56),i=n(81),a=n(5),l=n(33),u=n(10),c=n(4),s=n(3).ArrayBuffer,f=n(53),p=i.ArrayBuffer,d=i.DataView,h=o.ABV&&s.isView,m=p.prototype.slice,v=o.VIEW;r(r.G+r.W+r.F*(s!==p),{ArrayBuffer:p}),r(r.S+r.F*!o.CONSTR,"ArrayBuffer",{isView:function(e){return h&&h(e)||c(e)&&v in e}}),r(r.P+r.U+r.F*n(2)(function(){return!new p(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==m&&void 0===t)return m.call(a(this),e);for(var n=a(this).byteLength,r=l(e,n),o=l(void 0===t?n:t,n),i=new(f(this,p))(u(o-r)),c=new d(this),s=new d(i),h=0;r=t.length)return{value:void 0,done:!0}}while(!((e=t[this._i++])in this._t));return{value:e,done:!1}}),r(r.S,"Reflect",{enumerate:function(e){return new i(e)}})},function(e,t,n){var r=n(18),o=n(36),i=n(13),a=n(1),l=n(4),u=n(5);a(a.S,"Reflect",{get:function e(t,n){var a,c,s=arguments.length<3?t:arguments[2];return u(t)===s?t[n]:(a=r.f(t,n))?i(a,"value")?a.value:void 0!==a.get?a.get.call(s):void 0:l(c=o(t))?e(c,n,s):void 0}})},function(e,t,n){var r=n(18),o=n(1),i=n(5);o(o.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return r.f(i(e),t)}})},function(e,t,n){var r=n(1),o=n(36),i=n(5);r(r.S,"Reflect",{getPrototypeOf:function(e){return o(i(e))}})},function(e,t,n){var r=n(1);r(r.S,"Reflect",{has:function(e,t){return t in e}})},function(e,t,n){var r=n(1),o=n(5),i=Object.isExtensible;r(r.S,"Reflect",{isExtensible:function(e){return o(e),!i||i(e)}})},function(e,t,n){var r=n(1);r(r.S,"Reflect",{ownKeys:n(108)})},function(e,t,n){var r=n(1),o=n(5),i=Object.preventExtensions;r(r.S,"Reflect",{preventExtensions:function(e){o(e);try{return i&&i(e),!0}catch(e){return!1}}})},function(e,t,n){var r=n(7),o=n(18),i=n(36),a=n(13),l=n(1),u=n(29),c=n(5),s=n(4);l(l.S,"Reflect",{set:function e(t,n,l){var f,p,d=arguments.length<4?t:arguments[3],h=o.f(c(t),n);if(!h){if(s(p=i(t)))return e(p,n,l,d);h=u(0)}if(a(h,"value")){if(!1===h.writable||!s(d))return!1;if(f=o.f(d,n)){if(f.get||f.set||!1===f.writable)return!1;f.value=l,r.f(d,n,f)}else r.f(d,n,u(0,l));return!0}return void 0!==h.set&&(h.set.call(d,l),!0)}})},function(e,t,n){var r=n(1),o=n(64);o&&r(r.S,"Reflect",{setPrototypeOf:function(e,t){o.check(e,t);try{return o.set(e,t),!0}catch(e){return!1}}})},function(e,t,n){n(261),e.exports=n(9).Array.includes},function(e,t,n){"use strict";var r=n(1),o=n(46)(!0);r(r.P,"Array",{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(39)("includes")},function(e,t,n){n(263),e.exports=n(9).String.padStart},function(e,t,n){"use strict";var r=n(1),o=n(109),i=n(54);r(r.P+r.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(i),"String",{padStart:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(e,t,n){n(265),e.exports=n(9).String.padEnd},function(e,t,n){"use strict";var r=n(1),o=n(109),i=n(54);r(r.P+r.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(i),"String",{padEnd:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0,!1)}})},function(e,t,n){n(267),e.exports=n(59).f("asyncIterator")},function(e,t,n){n(83)("asyncIterator")},function(e,t,n){n(269),e.exports=n(9).Object.getOwnPropertyDescriptors},function(e,t,n){var r=n(1),o=n(108),i=n(15),a=n(18),l=n(75);r(r.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,r=i(e),u=a.f,c=o(r),s={},f=0;c.length>f;)void 0!==(n=u(r,t=c[f++]))&&l(s,t,n);return s}})},function(e,t,n){n(271),e.exports=n(9).Object.values},function(e,t,n){var r=n(1),o=n(110)(!1);r(r.S,"Object",{values:function(e){return o(e)}})},function(e,t,n){n(273),e.exports=n(9).Object.entries},function(e,t,n){var r=n(1),o=n(110)(!0);r(r.S,"Object",{entries:function(e){return o(e)}})},function(e,t,n){"use strict";n(102),n(275),e.exports=n(9).Promise.finally},function(e,t,n){"use strict";var r=n(1),o=n(9),i=n(3),a=n(53),l=n(104);r(r.P+r.R,"Promise",{finally:function(e){var t=a(this,o.Promise||i.Promise),n="function"==typeof e;return this.then(n?function(n){return l(t,e()).then(function(){return n})}:e,n?function(n){return l(t,e()).then(function(){throw n})}:e)}})},function(e,t,n){n(277),n(278),n(279),e.exports=n(9)},function(e,t,n){var r=n(3),o=n(1),i=n(54),a=[].slice,l=/MSIE .\./.test(i),u=function(e){return function(t,n){var r=arguments.length>2,o=!!r&&a.call(arguments,2);return e(r?function(){("function"==typeof t?t:Function(t)).apply(this,o)}:t,n)}};o(o.G+o.B+o.F*l,{setTimeout:u(r.setTimeout),setInterval:u(r.setInterval)})},function(e,t,n){var r=n(1),o=n(80);r(r.G+r.B,{setImmediate:o.set,clearImmediate:o.clear})},function(e,t,n){for(var r=n(78),o=n(32),i=n(11),a=n(3),l=n(14),u=n(38),c=n(6),s=c("iterator"),f=c("toStringTag"),p=u.Array,d={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},h=o(d),m=0;m=0;--i){var a=this.tryEntries[i],l=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var u=o.call(a,"catchLoc"),c=o.call(a,"finallyLoc");if(u&&c){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&o.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;P(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:M(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=n),m}}}function w(e,t,n,r){var o=t&&t.prototype instanceof k?t:k,i=Object.create(o.prototype),a=new O(r||[]);return i._invoke=function(e,t,n){var r=f;return function(o,i){if(r===d)throw new Error("Generator is already running");if(r===h){if("throw"===o)throw i;return F()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var l=T(a,n);if(l){if(l===m)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===f)throw r=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=d;var u=E(e,t,n);if("normal"===u.type){if(r=n.done?h:p,u.arg===m)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r=h,n.method="throw",n.arg=u.arg)}}}(e,n,a),i}function E(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function k(){}function x(){}function _(){}function S(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function C(e){var t;this._invoke=function(n,r){function i(){return new Promise(function(t,i){!function t(n,r,i,a){var l=E(e[n],e,r);if("throw"!==l.type){var u=l.arg,c=u.value;return c&&"object"==typeof c&&o.call(c,"__await")?Promise.resolve(c.__await).then(function(e){t("next",e,i,a)},function(e){t("throw",e,i,a)}):Promise.resolve(c).then(function(e){u.value=e,i(u)},a)}a(l.arg)}(n,r,t,i)})}return t=t?t.then(i,i):i()}}function T(e,t){var r=e.iterator[t.method];if(r===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,T(e,t),"throw"===t.method))return m;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var o=E(r,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,m;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,m):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function N(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function O(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(N,this),this.reset(!0)}function M(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=910?t="large":e<910&&e>=610?t="mid":e<610&&(t="tablet"),t},generatePopupLinks:function(){var e={plingListUrl:"/#plingList",ocsapiContentUrl:"/#ocsapiContent",aboutContentUrl:"/#aboutContent",linkTarget:"_blank"};return-1!==window.location.hostname.indexOf("opendesktop")&&"git.opendesktop.org"!==window.location.hostname&&"git.opendesktop.cc"!==window.location.hostname&&"forum.opendesktop.org"!==window.location.hostname&&"forum.opendesktop.cc"!==window.location.hostname&&"my.opendesktop.org"!==window.location.hostname&&"my.opendesktop.cc"!==window.location.hostname||(e.plingListUrl="/plings",e.ocsapiContentUrl="/partials/ocsapicontent.phtml",e.aboutContentUrl="/partials/about.phtml",e.linkTarget=""),e},getPopupUrl:function(e,t,n){return n}}}();var _=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={domains:E.domains,baseUrl:E.baseUrl,blogUrl:E.blogUrl,forumUrl:E.forumUrl,loginUrl:E.loginUrl,logoutUrl:E.logoutUrl,gitlabUrl:E.gitlabUrl,sName:E.sName,isExternal:E.isExternal,user:E.user,showModal:!1,modalUrl:"",isAdmin:E.json_isAdmin},n.initMetaHeader=n.initMetaHeader.bind(g(g(n))),n.updateDimensions=n.updateDimensions.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){this.updateDimensions()}},{key:"componentDidMount",value:function(){this.initMetaHeader()}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.updateDimensions),window.removeEventListener("orientationchange",this.updateDimensions)}},{key:"initMetaHeader",value:function(){window.addEventListener("resize",this.updateDimensions),window.addEventListener("orientationchange",this.updateDimensions)}},{key:"getUser",value:function(){var e=decodeURIComponent(document.cookie).split("ocs_data=")[1];if(e){e.indexOf(";")>-1&&(e=e.split(";")[0]);var t=JSON.parse(e);this.setState({user:t})}}},{key:"updateDimensions",value:function(){var e,t=window.innerWidth;t>=910?e="large":t<910&&t>=610?e="mid":t<610&&(e="tablet"),this.setState({device:e})}},{key:"render",value:function(){var e;return e="tablet"===this.state.device?o.a.createElement(L,{device:this.state.device,domains:this.state.domains,user:this.state.user,baseUrl:this.state.baseUrl,blogUrl:this.state.blogUrl,forumUrl:this.state.forumUrl,sName:this.state.sName,isAdmin:this.state.isAdmin}):o.a.createElement(S,{device:this.state.device,domains:this.state.domains,user:this.state.user,baseUrl:this.state.baseUrl,blogUrl:this.state.blogUrl,forumUrl:this.state.forumUrl,sName:this.state.sName,isAdmin:this.state.isAdmin}),o.a.createElement("nav",{id:"metaheader-nav",className:"metaheader"},o.a.createElement("div",{className:"metamenu"},e,o.a.createElement(F,{device:this.state.device,user:this.state.user,baseUrl:this.state.baseUrl,blogUrl:this.state.blogUrl,forumUrl:this.state.forumUrl,loginUrl:this.state.loginUrl,logoutUrl:this.state.logoutUrl,gitlabUrl:this.state.gitlabUrl})))}}]),t}(),S=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n}return v(t,o.a.Component),d(t,[{key:"render",value:function(){var e,t,n;return"large"!==this.props.device&&(e=o.a.createElement(O,{domains:this.props.domains,baseUrl:this.props.baseUrl,blogUrl:this.props.blogUrl})),!0===this.props.isAdmin&&(t=o.a.createElement(N,{user:this.props.user,baseUrl:this.props.baseUrl,gitlabUrl:this.props.gitlabUrl}),n=o.a.createElement(P,null)),o.a.createElement("ul",{className:"metaheader-menu left",id:"domains-menu"},o.a.createElement("li",{className:"active"},o.a.createElement("a",{href:this.props.baseUrl},o.a.createElement("img",{src:this.props.baseUrl+"/images/system/ocs-logo-rounded-16x16.png",className:"logo"}),"openDesktop.org :")),o.a.createElement(C,{domains:this.props.domains}),t,n,o.a.createElement(T,{forumUrl:this.props.forumUrl}),e)}}]),t}(),C=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentDidMount",value:function(){var e=[];this.props.domains.forEach(function(t,n){-1===e.indexOf(t.menugroup)&&e.push(t.menugroup)}),this.setState({menuGroups:e})}},{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&"domains-menu-link-item"===e.target.className?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e,t,n=this;return this.state.menuGroups&&(e=this.state.menuGroups.slice(0,2).map(function(e,t){return o.a.createElement(M,{key:t,domains:n.props.domains,menuGroup:e,sName:n.props.sName})}),t=this.state.menuGroups.slice(2).map(function(e,t){return o.a.createElement(M,{key:t,domains:n.props.domains,menuGroup:e,sName:n.props.sName})})),o.a.createElement("li",{ref:function(e){return n.node=e},id:"domains-dropdown-menu",className:this.state.dropdownClass},o.a.createElement("a",{className:"domains-menu-link-item"},"Themes & Apps"),o.a.createElement("ul",{className:"dropdown-menu dropdown-menu-right"},o.a.createElement("li",{className:"submenu-container"},o.a.createElement("ul",null,e)),o.a.createElement("li",{className:"submenu-container"},o.a.createElement("ul",null,t))))}}]),t}(),T=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&"discussion-menu-link-item"===e.target.className?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e=this;return o.a.createElement("li",{ref:function(t){return e.node=t},id:"discussion-boards",className:this.state.dropdownClass},o.a.createElement("a",{className:"discussion-menu-link-item"},"Discussion Boards"),o.a.createElement("ul",{className:"discussion-menu dropdown-menu dropdown-menu-right"},o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/general"},"General")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/themes-and-apps"},"Themes & Apps")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/coding"},"Coding"))))}}]),t}(),N=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.state={gitlabLink:E.gitlabUrl+"/dashboard/issues?assignee_id="},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"componentDidMount",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4==this.readyState&&200==this.status){var t=JSON.parse(this.response),n=e.state.gitlabLink+t[0].id;e.setState({gitlabLink:n,loading:!1})}},t.open("GET",E.gitlabUrl+"/api/v4/users?username="+this.props.user.username,!0),t.send()}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&"admins-menu-link-item"===e.target.className?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e=this;return o.a.createElement("li",{ref:function(t){return e.node=t},id:"admins-dropdown-menu",className:this.state.dropdownClass},o.a.createElement("a",{className:"admins-menu-link-item"},"Development"),o.a.createElement("ul",{className:"dropdown-menu dropdown-menu-right"},o.a.createElement("li",null,o.a.createElement("a",{href:E.gitlabUrl+"/dashboard/projects"},"Projects")),o.a.createElement("li",null,o.a.createElement("a",{href:this.state.gitlabLink},"Issues"))))}}]),t}(),P=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&"cd-menu-link-item"===e.target.className?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e=this,t=E.baseUrl.split("opendesktop.")[1];return o.a.createElement("li",{ref:function(t){return e.node=t},id:"cd-dropdown-menu",className:this.state.dropdownClass},o.a.createElement("a",{className:"cd-menu-link-item"},"Clouds & Services"),o.a.createElement("ul",{className:"dropdown-menu dropdown-menu-right"},o.a.createElement("li",null,o.a.createElement("a",{href:"https://my.opendesktop."+t},"Storage")),o.a.createElement("li",null,o.a.createElement("a",{href:"https://music.opendesktop."+t},"Music")),o.a.createElement("li",null,o.a.createElement("a",{href:"https://docs.opendesktop."+t},"Docs"))))}}]),t}(),O=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&"more-menu-link-item"===e.target.className?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e,t,n,r=this;return!1===E.isExternal?(e=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"faq",href:"/plings"},"FAQ")),t=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"api",href:"/partials/ocsapicontent.phtml"},"API")),n=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"about",href:"/partials/about.phtml"},"About"))):(e=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"faq",href:E.baseUrl+"/#faq"},"FAQ")),t=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"api",href:E.baseUrl+"/#api"},"API")),n=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"about",href:E.baseUrl+"/#about"},"About"))),o.a.createElement("li",{ref:function(e){return r.node=e},id:"more-dropdown-menu",className:this.state.dropdownClass},o.a.createElement("a",{className:"more-menu-link-item"},"More"),o.a.createElement("ul",{className:"dropdown-menu"},o.a.createElement("li",null,o.a.createElement("a",{href:this.props.baseUrl+"/community"},"Community")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.blogUrl,target:"_blank"},"Blog")),e,t,n))}}]),t}(),M=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.filterDomainsByMenuGroup=n.filterDomainsByMenuGroup.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"filterDomainsByMenuGroup",value:function(e){if(e.menugroup===this.props.menuGroup)return e}},{key:"render",value:function(){var e=this.props.domains.filter(this.filterDomainsByMenuGroup).map(function(e,t){var n="";return-1===e.menuhref.indexOf("https://")&&-1===e.menuhref.indexOf("http://")&&(n+="http://"),o.a.createElement("li",{key:t},o.a.createElement("a",{href:n+e.menuhref},e.name))});return o.a.createElement("li",null,o.a.createElement("a",{className:"groupname"},o.a.createElement("b",null,this.props.menuGroup)),o.a.createElement("ul",{className:"domains-sub-menu"},e))}}]),t}(),F=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n}return v(t,o.a.Component),d(t,[{key:"render",value:function(){var e,t,n,r,i,a;(this.props.user&&this.props.user.member_id?(e=o.a.createElement(U,{user:this.props.user,logoutUrl:this.props.logoutUrl,baseUrl:this.props.baseUrl}),t=o.a.createElement(A,{user:this.props.user,forumUrl:this.props.forumUrl,gitlabUrl:this.props.gitlabUrl})):e=o.a.createElement("li",{id:"user-login-container"},o.a.createElement("a",{href:this.props.loginUrl,className:"btn btn-metaheader"},"Login")),"large"===this.props.device)?(!1===E.isExternal?(r=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"faq",href:"/plings"},"FAQ")),i=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"api",href:"/partials/ocsapicontent.phtml"},"API")),a=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"about",href:"/partials/about.phtml"},"About"))):(r=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"faq",href:E.baseUrl+"/#faq"},"FAQ")),i=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"api",href:E.baseUrl+"/#api"},"API")),a=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"about",href:E.baseUrl+"/#about"},"About"))),n=o.a.createElement("ul",{className:"metaheader-menu",id:"user-menu"},o.a.createElement("li",null,o.a.createElement("a",{href:this.props.baseUrl+"/community"},"Community")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.blogUrl,target:"_blank"},"Blog")),r,i,a,t,e)):n=o.a.createElement("ul",{className:"metaheader-menu",id:"user-menu"},t,e);return o.a.createElement("div",{id:"user-menu-container",className:"right"},n)}}]),t}(),A=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={gitlabLink:E.gitlabUrl+"/dashboard/issues?assignee_id="},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"componentDidMount",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4==this.readyState&&200==this.status){var t=JSON.parse(this.response),n=e.state.gitlabLink+t[0].id;e.setState({gitlabLink:n,loading:!1})}},t.open("GET",E.gitlabUrl+"/api/v4/users?username="+this.props.user.username,!0),t.send()}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&("th-icon"===e.target.className||"btn btn-default dropdown-toggle"===e.target.className)?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e=this;return o.a.createElement("li",{ref:function(t){return e.node=t},id:"user-context-menu-container"},o.a.createElement("div",{className:"user-dropdown "+this.state.dropdownClass},o.a.createElement("button",{className:"btn btn-default dropdown-toggle",type:"button",onClick:this.toggleDropDown},o.a.createElement("span",{className:"th-icon"})),o.a.createElement("ul",{id:"user-context-dropdown",className:"dropdown-menu dropdown-menu-right"},o.a.createElement("li",{id:"opencode-link-item"},o.a.createElement("a",{href:this.props.gitlabUrl+"/dashboard/projects"},o.a.createElement("div",{className:"icon"}),o.a.createElement("span",null,"Projects"))),o.a.createElement("li",{id:"issues-link-item"},o.a.createElement("a",{href:this.state.gitlabLink},o.a.createElement("div",{className:"icon"}),o.a.createElement("span",null,"Issues"))),o.a.createElement("li",{id:"messages-link-item"},o.a.createElement("a",{href:this.props.forumUrl+"/u/"+this.props.user.username+"/messages"},o.a.createElement("div",{className:"icon"}),o.a.createElement("span",null,"Messages"))))))}}]),t}(),U=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){document.addEventListener("mousedown",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.handleClick,!1)}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.dropdownClass&&("th-icon"===e.target.className||"btn btn-default dropdown-toggle"===e.target.className)?"":"open"),this.setState({dropdownClass:t})}},{key:"render",value:function(){var e=this;return o.a.createElement("li",{id:"user-login-menu-container",ref:function(t){return e.node=t}},o.a.createElement("div",{className:"user-dropdown "+this.state.dropdownClass},o.a.createElement("button",{className:"btn btn-default dropdown-toggle",type:"button",id:"userLoginDropdown"},o.a.createElement("img",{className:"th-icon",src:this.props.user.avatar})),o.a.createElement("ul",{className:"dropdown-menu dropdown-menu-right"},o.a.createElement("li",{id:"user-info-menu-item"},o.a.createElement("div",{id:"user-info-section"},o.a.createElement("div",{className:"user-avatar"},o.a.createElement("div",{className:"no-avatar-user-letter"},o.a.createElement("img",{src:this.props.user.avatar}))),o.a.createElement("div",{className:"user-details"},o.a.createElement("ul",null,o.a.createElement("li",null,o.a.createElement("b",null,this.props.user.username)),o.a.createElement("li",null,this.props.user.mail))))),o.a.createElement("li",{className:"buttons"},o.a.createElement("a",{href:this.props.baseUrl+"/settings/",className:"btn btn-default btn-metaheader"},o.a.createElement("span",null,"Settings")),o.a.createElement("a",{href:this.props.logoutUrl,className:"btn btn-default pull-right btn-metaheader"},o.a.createElement("span",null,"Logout"))))))}}]),t}(),L=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={overlayClass:""},n.toggleLeftSideOverlay=n.toggleLeftSideOverlay.bind(g(g(n))),n.handleClick=n.handleClick.bind(g(g(n))),n}return v(t,o.a.Component),d(t,[{key:"componentWillMount",value:function(){window.addEventListener("mousedown",this.handleClick,!1),window.addEventListener("touchend",this.handleClick,!1)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("mousedown",this.handleClick,!1),window.addEventListener("touchend",this.handleClick,!1)}},{key:"toggleLeftSideOverlay",value:function(){var e="open";"open"===this.state.overlayClass&&(e=""),this.setState({overlayClass:e})}},{key:"handleClick",value:function(e){var t="";this.node.contains(e.target)&&(t="open"===this.state.overlayClass&&("left-side-overlay"===e.target.id||"menu-toggle-item"===e.target.id)?"":"open"),this.setState({overlayClass:t})}},{key:"render",value:function(){var e,t=this;return o.a.createElement("div",{ref:function(e){return t.node=e},id:"metaheader-left-mobile",className:this.state.overlayClass},o.a.createElement("a",{className:"menu-toggle",id:"menu-toggle-item"}),o.a.createElement("div",{id:"left-side-overlay"},o.a.createElement(I,(c(e={baseUrl:this.props.baseUrl,domains:this.props.domains},"baseUrl",this.props.baseUrl),c(e,"blogUrl",this.props.blogUrl),c(e,"forumUrl",this.props.forumUrl),e))))}}]),t}(),I=function(e){function t(e){var n;return f(this,t),(n=h(this,m(t).call(this,e))).state={},n}return v(t,o.a.Component),d(t,[{key:"componentDidMount",value:function(){var e=[];this.props.domains.forEach(function(t,n){-1===e.indexOf(t.menugroup)&&e.push(t.menugroup)}),this.setState({menuGroups:e})}},{key:"render",value:function(){var e,t,n,r,i=this;return this.state.menuGroups&&(e=this.state.menuGroups.map(function(e,t){return o.a.createElement(M,{key:t,domains:i.props.domains,menuGroup:e,sName:i.props.sName})})),!1===E.isExternal?(t=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"faq",href:"/plings"},"FAQ")),n=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"api",href:"/partials/ocsapicontent.phtml"},"API")),r=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",id:"about",href:"/partials/about.phtml"},"About"))):(t=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"faq",href:E.baseUrl+"/#faq"},"FAQ")),n=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"api",href:E.baseUrl+"/#api"},"API")),r=o.a.createElement("li",null,o.a.createElement("a",{className:"popuppanel",target:"_blank",id:"about",href:E.baseUrl+"/#about"},"About"))),o.a.createElement("div",{id:"left-side-panel"},o.a.createElement("div",{id:"panel-header"},o.a.createElement("a",{href:this.props.baseUrl},o.a.createElement("img",{src:this.props.baseUrl+"/images/system/opendesktop-logo.png",className:"logo"})," openDesktop.org")),o.a.createElement("div",{id:"panel-menu"},o.a.createElement("ul",null,e,o.a.createElement("li",null,o.a.createElement("a",{className:"groupname"},o.a.createElement("b",null,"Discussion Boards")),o.a.createElement("ul",null,o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/general"},"General")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/themes-and-apps"},"Themes & Apps")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.forumUrl+"/c/coding"},"Coding")))),o.a.createElement("li",null,o.a.createElement("a",{className:"groupname"},o.a.createElement("b",null,"More")),o.a.createElement("ul",null,o.a.createElement("li",null,o.a.createElement("a",{href:this.props.baseUrl+"/community"},"Community")),o.a.createElement("li",null,o.a.createElement("a",{href:this.props.blogUrl,target:"_blank"},"Blog")),t,n,r)))))}}]),t}();customElements.define("opendesktop-metaheader",function(e){function t(){var e;return f(this,t),(e=h(this,m(t).call(this))).buildComponent(),e}var n;return v(t,l(HTMLElement)),d(t,[{key:"buildComponent",value:(n=w(regeneratorRuntime.mark(function e(){var t,n;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,k(this.getAttribute("config-target"),this.getAttribute("config-url"));case 2:(t=document.createElement("div")).id="metaheader",a.a.render(o.a.createElement(_,null),t),(n=document.createElement("link")).rel="stylesheet",n.href="https://www.opendesktop.org/theme/react/assets/css/metaheader.css",location.hostname.endsWith("cc")?n.href="https://www.opendesktop.cc/theme/react/assets/css/metaheader.css":location.hostname.endsWith("localhost")?n.href="https://www.opendesktop.cc/theme/react/assets/css/metaheader.css":n.href="https://www.opendesktop.org/theme/react/assets/css/metaheader.css",this.appendChild(n),this.appendChild(t);case 11:case"end":return e.stop()}},e,this)})),function(){return n.apply(this,arguments)})}]),t}())},function(e,t,n){"use strict";(function(e){n(116),n(260),n(262),n(264),n(266),n(268),n(270),n(272),n(274),n(276),n(280),e._babelPolyfill&&"undefined"!=typeof console&&console.warn&&console.warn("@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended and may have consequences if different versions of the polyfills are applied sequentially. If you do need to load the polyfill more than once, use @babel/polyfill/noConflict instead to bypass the warning."),e._babelPolyfill=!0}).call(this,n(115))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){n(117),n(119),n(120),n(121),n(122),n(123),n(124),n(125),n(126),n(127),n(128),n(129),n(130),n(131),n(132),n(133),n(135),n(136),n(137),n(138),n(139),n(140),n(141),n(142),n(143),n(144),n(145),n(146),n(147),n(148),n(149),n(150),n(151),n(152),n(153),n(154),n(155),n(156),n(157),n(158),n(159),n(160),n(161),n(163),n(164),n(165),n(166),n(167),n(168),n(169),n(170),n(171),n(172),n(173),n(174),n(175),n(176),n(177),n(178),n(179),n(180),n(181),n(182),n(183),n(184),n(185),n(186),n(187),n(188),n(189),n(190),n(191),n(192),n(193),n(194),n(195),n(196),n(198),n(199),n(201),n(202),n(203),n(204),n(205),n(206),n(207),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(217),n(218),n(219),n(220),n(221),n(222),n(78),n(223),n(224),n(101),n(225),n(226),n(227),n(228),n(102),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(248),n(249),n(250),n(251),n(252),n(253),n(254),n(255),n(256),n(257),n(258),n(259),e.exports=n(9)},function(e,t,n){"use strict";var r=n(3),o=n(13),i=n(8),a=n(1),l=n(11),u=n(28).KEY,c=n(2),s=n(58),f=n(37),p=n(30),d=n(6),h=n(59),m=n(83),v=n(118),y=n(62),g=n(5),b=n(4),w=n(15),E=n(27),k=n(29),x=n(34),_=n(86),S=n(18),C=n(7),T=n(32),N=S.f,P=C.f,O=_.f,M=r.Symbol,F=r.JSON,A=F&&F.stringify,U=d("_hidden"),L=d("toPrimitive"),I={}.propertyIsEnumerable,j=s("symbol-registry"),D=s("symbols"),R=s("op-symbols"),W=Object.prototype,z="function"==typeof M,V=r.QObject,B=!V||!V.prototype||!V.prototype.findChild,H=i&&c(function(){return 7!=x(P({},"a",{get:function(){return P(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=N(W,t);r&&delete W[t],P(e,t,n),r&&e!==W&&P(W,t,r)}:P,G=function(e){var t=D[e]=x(M.prototype);return t._k=e,t},$=z&&"symbol"==typeof M.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof M},q=function(e,t,n){return e===W&&q(R,t,n),g(e),t=E(t,!0),g(n),o(D,t)?(n.enumerable?(o(e,U)&&e[U][t]&&(e[U][t]=!1),n=x(n,{enumerable:k(0,!1)})):(o(e,U)||P(e,U,k(1,{})),e[U][t]=!0),H(e,t,n)):P(e,t,n)},K=function(e,t){g(e);for(var n,r=v(t=w(t)),o=0,i=r.length;i>o;)q(e,n=r[o++],t[n]);return e},Q=function(e){var t=I.call(this,e=E(e,!0));return!(this===W&&o(D,e)&&!o(R,e))&&(!(t||!o(this,e)||!o(D,e)||o(this,U)&&this[U][e])||t)},Y=function(e,t){if(e=w(e),t=E(t,!0),e!==W||!o(D,t)||o(R,t)){var n=N(e,t);return!n||!o(D,t)||o(e,U)&&e[U][t]||(n.enumerable=!0),n}},X=function(e){for(var t,n=O(w(e)),r=[],i=0;n.length>i;)o(D,t=n[i++])||t==U||t==u||r.push(t);return r},J=function(e){for(var t,n=e===W,r=O(n?R:w(e)),i=[],a=0;r.length>a;)!o(D,t=r[a++])||n&&!o(W,t)||i.push(D[t]);return i};z||(l((M=function(){if(this instanceof M)throw TypeError("Symbol is not a constructor!");var e=p(arguments.length>0?arguments[0]:void 0),t=function(n){this===W&&t.call(R,n),o(this,U)&&o(this[U],e)&&(this[U][e]=!1),H(this,e,k(1,n))};return i&&B&&H(W,e,{configurable:!0,set:t}),G(e)}).prototype,"toString",function(){return this._k}),S.f=Y,C.f=q,n(35).f=_.f=X,n(45).f=Q,n(47).f=J,i&&!n(31)&&l(W,"propertyIsEnumerable",Q,!0),h.f=function(e){return G(d(e))}),a(a.G+a.W+a.F*!z,{Symbol:M});for(var Z="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ee=0;Z.length>ee;)d(Z[ee++]);for(var te=T(d.store),ne=0;te.length>ne;)m(te[ne++]);a(a.S+a.F*!z,"Symbol",{for:function(e){return o(j,e+="")?j[e]:j[e]=M(e)},keyFor:function(e){if(!$(e))throw TypeError(e+" is not a symbol!");for(var t in j)if(j[t]===e)return t},useSetter:function(){B=!0},useSimple:function(){B=!1}}),a(a.S+a.F*!z,"Object",{create:function(e,t){return void 0===t?x(e):K(x(e),t)},defineProperty:q,defineProperties:K,getOwnPropertyDescriptor:Y,getOwnPropertyNames:X,getOwnPropertySymbols:J}),F&&a(a.S+a.F*(!z||c(function(){var e=M();return"[null]"!=A([e])||"{}"!=A({a:e})||"{}"!=A(Object(e))})),"JSON",{stringify:function(e){for(var t,n,r=[e],o=1;arguments.length>o;)r.push(arguments[o++]);if(n=t=r[1],(b(t)||void 0!==e)&&!$(e))return y(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!$(t))return t}),r[1]=t,A.apply(F,r)}}),M.prototype[L]||n(14)(M.prototype,L,M.prototype.valueOf),f(M,"Symbol"),f(Math,"Math",!0),f(r.JSON,"JSON",!0)},function(e,t,n){var r=n(32),o=n(47),i=n(45);e.exports=function(e){var t=r(e),n=o.f;if(n)for(var a,l=n(e),u=i.f,c=0;l.length>c;)u.call(e,a=l[c++])&&t.push(a);return t}},function(e,t,n){var r=n(1);r(r.S,"Object",{create:n(34)})},function(e,t,n){var r=n(1);r(r.S+r.F*!n(8),"Object",{defineProperty:n(7).f})},function(e,t,n){var r=n(1);r(r.S+r.F*!n(8),"Object",{defineProperties:n(85)})},function(e,t,n){var r=n(15),o=n(18).f;n(19)("getOwnPropertyDescriptor",function(){return function(e,t){return o(r(e),t)}})},function(e,t,n){var r=n(16),o=n(36);n(19)("getPrototypeOf",function(){return function(e){return o(r(e))}})},function(e,t,n){var r=n(16),o=n(32);n(19)("keys",function(){return function(e){return o(r(e))}})},function(e,t,n){n(19)("getOwnPropertyNames",function(){return n(86).f})},function(e,t,n){var r=n(4),o=n(28).onFreeze;n(19)("freeze",function(e){return function(t){return e&&r(t)?e(o(t)):t}})},function(e,t,n){var r=n(4),o=n(28).onFreeze;n(19)("seal",function(e){return function(t){return e&&r(t)?e(o(t)):t}})},function(e,t,n){var r=n(4),o=n(28).onFreeze;n(19)("preventExtensions",function(e){return function(t){return e&&r(t)?e(o(t)):t}})},function(e,t,n){var r=n(4);n(19)("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}})},function(e,t,n){var r=n(4);n(19)("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}})},function(e,t,n){var r=n(4);n(19)("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}})},function(e,t,n){var r=n(1);r(r.S+r.F,"Object",{assign:n(87)})},function(e,t,n){var r=n(1);r(r.S,"Object",{is:n(134)})},function(e,t){e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},function(e,t,n){var r=n(1);r(r.S,"Object",{setPrototypeOf:n(64).set})},function(e,t,n){"use strict";var r=n(48),o={};o[n(6)("toStringTag")]="z",o+""!="[object z]"&&n(11)(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},function(e,t,n){var r=n(1);r(r.P,"Function",{bind:n(88)})},function(e,t,n){var r=n(7).f,o=Function.prototype,i=/^\s*function ([^ (]*)/;"name"in o||n(8)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(e){return""}}})},function(e,t,n){"use strict";var r=n(4),o=n(36),i=n(6)("hasInstance"),a=Function.prototype;i in a||n(7).f(a,i,{value:function(e){if("function"!=typeof this||!r(e))return!1;if(!r(this.prototype))return e instanceof this;for(;e=o(e);)if(this.prototype===e)return!0;return!1}})},function(e,t,n){var r=n(1),o=n(90);r(r.G+r.F*(parseInt!=o),{parseInt:o})},function(e,t,n){var r=n(1),o=n(91);r(r.G+r.F*(parseFloat!=o),{parseFloat:o})},function(e,t,n){"use strict";var r=n(3),o=n(13),i=n(23),a=n(66),l=n(27),u=n(2),c=n(35).f,s=n(18).f,f=n(7).f,p=n(49).trim,d=r.Number,h=d,m=d.prototype,v="Number"==i(n(34)(m)),y="trim"in String.prototype,g=function(e){var t=l(e,!1);if("string"==typeof t&&t.length>2){var n,r,o,i=(t=y?t.trim():p(t,3)).charCodeAt(0);if(43===i||45===i){if(88===(n=t.charCodeAt(2))||120===n)return NaN}else if(48===i){switch(t.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+t}for(var a,u=t.slice(2),c=0,s=u.length;co)return NaN;return parseInt(u,r)}}return+t};if(!d(" 0o1")||!d("0b1")||d("+0x1")){d=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof d&&(v?u(function(){m.valueOf.call(n)}):"Number"!=i(n))?a(new h(g(t)),n,d):g(t)};for(var b,w=n(8)?c(h):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),E=0;w.length>E;E++)o(h,b=w[E])&&!o(d,b)&&f(d,b,s(h,b));d.prototype=m,m.constructor=d,n(11)(r,"Number",d)}},function(e,t,n){"use strict";var r=n(1),o=n(25),i=n(92),a=n(67),l=1..toFixed,u=Math.floor,c=[0,0,0,0,0,0],s="Number.toFixed: incorrect invocation!",f=function(e,t){for(var n=-1,r=t;++n<6;)r+=e*c[n],c[n]=r%1e7,r=u(r/1e7)},p=function(e){for(var t=6,n=0;--t>=0;)n+=c[t],c[t]=u(n/e),n=n%e*1e7},d=function(){for(var e=6,t="";--e>=0;)if(""!==t||0===e||0!==c[e]){var n=String(c[e]);t=""===t?n:t+a.call("0",7-n.length)+n}return t},h=function(e,t,n){return 0===t?n:t%2==1?h(e,t-1,n*e):h(e*e,t/2,n)};r(r.P+r.F*(!!l&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!n(2)(function(){l.call({})})),"Number",{toFixed:function(e){var t,n,r,l,u=i(this,s),c=o(e),m="",v="0";if(c<0||c>20)throw RangeError(s);if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return String(u);if(u<0&&(m="-",u=-u),u>1e-21)if(n=(t=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}(u*h(2,69,1))-69)<0?u*h(2,-t,1):u/h(2,t,1),n*=4503599627370496,(t=52-t)>0){for(f(0,n),r=c;r>=7;)f(1e7,0),r-=7;for(f(h(10,r,1),0),r=t-1;r>=23;)p(1<<23),r-=23;p(1<0?m+((l=v.length)<=c?"0."+a.call("0",c-l)+v:v.slice(0,l-c)+"."+v.slice(l-c)):m+v}})},function(e,t,n){"use strict";var r=n(1),o=n(2),i=n(92),a=1..toPrecision;r(r.P+r.F*(o(function(){return"1"!==a.call(1,void 0)})||!o(function(){a.call({})})),"Number",{toPrecision:function(e){var t=i(this,"Number#toPrecision: incorrect invocation!");return void 0===e?a.call(t):a.call(t,e)}})},function(e,t,n){var r=n(1);r(r.S,"Number",{EPSILON:Math.pow(2,-52)})},function(e,t,n){var r=n(1),o=n(3).isFinite;r(r.S,"Number",{isFinite:function(e){return"number"==typeof e&&o(e)}})},function(e,t,n){var r=n(1);r(r.S,"Number",{isInteger:n(93)})},function(e,t,n){var r=n(1);r(r.S,"Number",{isNaN:function(e){return e!=e}})},function(e,t,n){var r=n(1),o=n(93),i=Math.abs;r(r.S,"Number",{isSafeInteger:function(e){return o(e)&&i(e)<=9007199254740991}})},function(e,t,n){var r=n(1);r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(e,t,n){var r=n(1);r(r.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(e,t,n){var r=n(1),o=n(91);r(r.S+r.F*(Number.parseFloat!=o),"Number",{parseFloat:o})},function(e,t,n){var r=n(1),o=n(90);r(r.S+r.F*(Number.parseInt!=o),"Number",{parseInt:o})},function(e,t,n){var r=n(1),o=n(94),i=Math.sqrt,a=Math.acosh;r(r.S+r.F*!(a&&710==Math.floor(a(Number.MAX_VALUE))&&a(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:o(e-1+i(e-1)*i(e+1))}})},function(e,t,n){var r=n(1),o=Math.asinh;r(r.S+r.F*!(o&&1/o(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}})},function(e,t,n){var r=n(1),o=Math.atanh;r(r.S+r.F*!(o&&1/o(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}})},function(e,t,n){var r=n(1),o=n(68);r(r.S,"Math",{cbrt:function(e){return o(e=+e)*Math.pow(Math.abs(e),1/3)}})},function(e,t,n){var r=n(1);r(r.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}})},function(e,t,n){var r=n(1),o=Math.exp;r(r.S,"Math",{cosh:function(e){return(o(e=+e)+o(-e))/2}})},function(e,t,n){var r=n(1),o=n(69);r(r.S+r.F*(o!=Math.expm1),"Math",{expm1:o})},function(e,t,n){var r=n(1);r(r.S,"Math",{fround:n(162)})},function(e,t,n){var r=n(68),o=Math.pow,i=o(2,-52),a=o(2,-23),l=o(2,127)*(2-a),u=o(2,-126);e.exports=Math.fround||function(e){var t,n,o=Math.abs(e),c=r(e);return ol||n!=n?c*(1/0):c*n}},function(e,t,n){var r=n(1),o=Math.abs;r(r.S,"Math",{hypot:function(e,t){for(var n,r,i=0,a=0,l=arguments.length,u=0;a0?(r=n/u)*r:n;return u===1/0?1/0:u*Math.sqrt(i)}})},function(e,t,n){var r=n(1),o=Math.imul;r(r.S+r.F*n(2)(function(){return-5!=o(4294967295,5)||2!=o.length}),"Math",{imul:function(e,t){var n=+e,r=+t,o=65535&n,i=65535&r;return 0|o*i+((65535&n>>>16)*i+o*(65535&r>>>16)<<16>>>0)}})},function(e,t,n){var r=n(1);r(r.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}})},function(e,t,n){var r=n(1);r(r.S,"Math",{log1p:n(94)})},function(e,t,n){var r=n(1);r(r.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}})},function(e,t,n){var r=n(1);r(r.S,"Math",{sign:n(68)})},function(e,t,n){var r=n(1),o=n(69),i=Math.exp;r(r.S+r.F*n(2)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(o(e)-o(-e))/2:(i(e-1)-i(-e-1))*(Math.E/2)}})},function(e,t,n){var r=n(1),o=n(69),i=Math.exp;r(r.S,"Math",{tanh:function(e){var t=o(e=+e),n=o(-e);return t==1/0?1:n==1/0?-1:(t-n)/(i(e)+i(-e))}})},function(e,t,n){var r=n(1);r(r.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}})},function(e,t,n){var r=n(1),o=n(33),i=String.fromCharCode,a=String.fromCodePoint;r(r.S+r.F*(!!a&&1!=a.length),"String",{fromCodePoint:function(e){for(var t,n=[],r=arguments.length,a=0;r>a;){if(t=+arguments[a++],o(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?i(t):i(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}})},function(e,t,n){var r=n(1),o=n(15),i=n(10);r(r.S,"String",{raw:function(e){for(var t=o(e.raw),n=i(t.length),r=arguments.length,a=[],l=0;n>l;)a.push(String(t[l++])),l=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){"use strict";var r=n(1),o=n(95)(!1);r(r.P,"String",{codePointAt:function(e){return o(this,e)}})},function(e,t,n){"use strict";var r=n(1),o=n(10),i=n(71),a="".endsWith;r(r.P+r.F*n(73)("endsWith"),"String",{endsWith:function(e){var t=i(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,r=o(t.length),l=void 0===n?r:Math.min(o(n),r),u=String(e);return a?a.call(t,u,l):t.slice(l-u.length,l)===u}})},function(e,t,n){"use strict";var r=n(1),o=n(71);r(r.P+r.F*n(73)("includes"),"String",{includes:function(e){return!!~o(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}})},function(e,t,n){var r=n(1);r(r.P,"String",{repeat:n(67)})},function(e,t,n){"use strict";var r=n(1),o=n(10),i=n(71),a="".startsWith;r(r.P+r.F*n(73)("startsWith"),"String",{startsWith:function(e){var t=i(this,e,"startsWith"),n=o(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),r=String(e);return a?a.call(t,r,n):t.slice(n,n+r.length)===r}})},function(e,t,n){"use strict";n(12)("anchor",function(e){return function(t){return e(this,"a","name",t)}})},function(e,t,n){"use strict";n(12)("big",function(e){return function(){return e(this,"big","","")}})},function(e,t,n){"use strict";n(12)("blink",function(e){return function(){return e(this,"blink","","")}})},function(e,t,n){"use strict";n(12)("bold",function(e){return function(){return e(this,"b","","")}})},function(e,t,n){"use strict";n(12)("fixed",function(e){return function(){return e(this,"tt","","")}})},function(e,t,n){"use strict";n(12)("fontcolor",function(e){return function(t){return e(this,"font","color",t)}})},function(e,t,n){"use strict";n(12)("fontsize",function(e){return function(t){return e(this,"font","size",t)}})},function(e,t,n){"use strict";n(12)("italics",function(e){return function(){return e(this,"i","","")}})},function(e,t,n){"use strict";n(12)("link",function(e){return function(t){return e(this,"a","href",t)}})},function(e,t,n){"use strict";n(12)("small",function(e){return function(){return e(this,"small","","")}})},function(e,t,n){"use strict";n(12)("strike",function(e){return function(){return e(this,"strike","","")}})},function(e,t,n){"use strict";n(12)("sub",function(e){return function(){return e(this,"sub","","")}})},function(e,t,n){"use strict";n(12)("sup",function(e){return function(){return e(this,"sup","","")}})},function(e,t,n){var r=n(1);r(r.S,"Date",{now:function(){return(new Date).getTime()}})},function(e,t,n){"use strict";var r=n(1),o=n(16),i=n(27);r(r.P+r.F*n(2)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(e){var t=o(this),n=i(t);return"number"!=typeof n||isFinite(n)?t.toISOString():null}})},function(e,t,n){var r=n(1),o=n(197);r(r.P+r.F*(Date.prototype.toISOString!==o),"Date",{toISOString:o})},function(e,t,n){"use strict";var r=n(2),o=Date.prototype.getTime,i=Date.prototype.toISOString,a=function(e){return e>9?e:"0"+e};e.exports=r(function(){return"0385-07-25T07:06:39.999Z"!=i.call(new Date(-5e13-1))})||!r(function(){i.call(new Date(NaN))})?function(){if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var e=this,t=e.getUTCFullYear(),n=e.getUTCMilliseconds(),r=t<0?"-":t>9999?"+":"";return r+("00000"+Math.abs(t)).slice(r?-6:-4)+"-"+a(e.getUTCMonth()+1)+"-"+a(e.getUTCDate())+"T"+a(e.getUTCHours())+":"+a(e.getUTCMinutes())+":"+a(e.getUTCSeconds())+"."+(n>99?n:"0"+a(n))+"Z"}:i},function(e,t,n){var r=Date.prototype,o=r.toString,i=r.getTime;new Date(NaN)+""!="Invalid Date"&&n(11)(r,"toString",function(){var e=i.call(this);return e==e?o.call(this):"Invalid Date"})},function(e,t,n){var r=n(6)("toPrimitive"),o=Date.prototype;r in o||n(14)(o,r,n(200))},function(e,t,n){"use strict";var r=n(5),o=n(27);e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return o(r(this),"number"!=e)}},function(e,t,n){var r=n(1);r(r.S,"Array",{isArray:n(62)})},function(e,t,n){"use strict";var r=n(21),o=n(1),i=n(16),a=n(97),l=n(74),u=n(10),c=n(75),s=n(76);o(o.S+o.F*!n(50)(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,o,f,p=i(e),d="function"==typeof this?this:Array,h=arguments.length,m=h>1?arguments[1]:void 0,v=void 0!==m,y=0,g=s(p);if(v&&(m=r(m,h>2?arguments[2]:void 0,2)),null==g||d==Array&&l(g))for(n=new d(t=u(p.length));t>y;y++)c(n,y,v?m(p[y],y):p[y]);else for(f=g.call(p),n=new d;!(o=f.next()).done;y++)c(n,y,v?a(f,m,[o.value,y],!0):o.value);return n.length=y,n}})},function(e,t,n){"use strict";var r=n(1),o=n(75);r(r.S+r.F*n(2)(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)o(n,e,arguments[e++]);return n.length=t,n}})},function(e,t,n){"use strict";var r=n(1),o=n(15),i=[].join;r(r.P+r.F*(n(44)!=Object||!n(17)(i)),"Array",{join:function(e){return i.call(o(this),void 0===e?",":e)}})},function(e,t,n){"use strict";var r=n(1),o=n(63),i=n(23),a=n(33),l=n(10),u=[].slice;r(r.P+r.F*n(2)(function(){o&&u.call(o)}),"Array",{slice:function(e,t){var n=l(this.length),r=i(this);if(t=void 0===t?n:t,"Array"==r)return u.call(this,e,t);for(var o=a(e,n),c=a(t,n),s=l(c-o),f=new Array(s),p=0;p1&&(r=Math.min(r,i(arguments[1]))),r<0&&(r=n+r);r>=0;r--)if(r in t&&t[r]===e)return r||0;return-1}})},function(e,t,n){var r=n(1);r(r.P,"Array",{copyWithin:n(99)}),n(39)("copyWithin")},function(e,t,n){var r=n(1);r(r.P,"Array",{fill:n(77)}),n(39)("fill")},function(e,t,n){"use strict";var r=n(1),o=n(20)(5),i=!0;"find"in[]&&Array(1).find(function(){i=!1}),r(r.P+r.F*i,"Array",{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(39)("find")},function(e,t,n){"use strict";var r=n(1),o=n(20)(6),i="findIndex",a=!0;i in[]&&Array(1)[i](function(){a=!1}),r(r.P+r.F*a,"Array",{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(39)(i)},function(e,t,n){n(40)("Array")},function(e,t,n){var r=n(3),o=n(66),i=n(7).f,a=n(35).f,l=n(72),u=n(79),c=r.RegExp,s=c,f=c.prototype,p=/a/g,d=/a/g,h=new c(p)!==p;if(n(8)&&(!h||n(2)(function(){return d[n(6)("match")]=!1,c(p)!=p||c(d)==d||"/a/i"!=c(p,"i")}))){c=function(e,t){var n=this instanceof c,r=l(e),i=void 0===t;return!n&&r&&e.constructor===c&&i?e:o(h?new s(r&&!i?e.source:e,t):s((r=e instanceof c)?e.source:e,r&&i?u.call(e):t),n?this:f,c)};for(var m=function(e){e in c||i(c,e,{configurable:!0,get:function(){return s[e]},set:function(t){s[e]=t}})},v=a(s),y=0;v.length>y;)m(v[y++]);f.constructor=c,c.prototype=f,n(11)(r,"RegExp",c)}n(40)("RegExp")},function(e,t,n){"use strict";n(101);var r=n(5),o=n(79),i=n(8),a=/./.toString,l=function(e){n(11)(RegExp.prototype,"toString",e,!0)};n(2)(function(){return"/a/b"!=a.call({source:"a",flags:"b"})})?l(function(){var e=r(this);return"/".concat(e.source,"/","flags"in e?e.flags:!i&&e instanceof RegExp?o.call(e):void 0)}):"toString"!=a.name&&l(function(){return a.call(this)})},function(e,t,n){n(51)("match",1,function(e,t,n){return[function(n){"use strict";var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},n]})},function(e,t,n){n(51)("replace",2,function(e,t,n){return[function(r,o){"use strict";var i=e(this),a=null==r?void 0:r[t];return void 0!==a?a.call(r,i,o):n.call(String(i),r,o)},n]})},function(e,t,n){n(51)("search",1,function(e,t,n){return[function(n){"use strict";var r=e(this),o=null==n?void 0:n[t];return void 0!==o?o.call(n,r):new RegExp(n)[t](String(r))},n]})},function(e,t,n){n(51)("split",2,function(e,t,r){"use strict";var o=n(72),i=r,a=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var l=void 0===/()??/.exec("")[1];r=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!o(e))return i.call(n,e,t);var r,u,c,s,f,p=[],d=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),h=0,m=void 0===t?4294967295:t>>>0,v=new RegExp(e.source,d+"g");for(l||(r=new RegExp("^"+v.source+"$(?!\\s)",d));(u=v.exec(n))&&!((c=u.index+u[0].length)>h&&(p.push(n.slice(h,u.index)),!l&&u.length>1&&u[0].replace(r,function(){for(f=1;f1&&u.index=m));)v.lastIndex===u.index&&v.lastIndex++;return h===n.length?!s&&v.test("")||p.push(""):p.push(n.slice(h)),p.length>m?p.slice(0,m):p}}else"0".split(void 0,0).length&&(r=function(e,t){return void 0===e&&0===t?[]:i.call(this,e,t)});return[function(n,o){var i=e(this),a=null==n?void 0:n[t];return void 0!==a?a.call(n,i,o):r.call(String(i),n,o)},r]})},function(e,t,n){var r=n(3),o=n(80).set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,l=r.Promise,u="process"==n(23)(a);e.exports=function(){var e,t,n,c=function(){var r,o;for(u&&(r=a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(u)n=function(){a.nextTick(c)};else if(!i||r.navigator&&r.navigator.standalone)if(l&&l.resolve){var s=l.resolve(void 0);n=function(){s.then(c)}}else n=function(){o.call(r,c)};else{var f=!0,p=document.createTextNode("");new i(c).observe(p,{characterData:!0}),n=function(){p.data=f=!f}}return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},function(e,t){e.exports=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}}},function(e,t,n){"use strict";var r=n(105),o=n(43);e.exports=n(55)("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=r.getEntry(o(this,"Map"),e);return t&&t.v},set:function(e,t){return r.def(o(this,"Map"),0===e?0:e,t)}},r,!0)},function(e,t,n){"use strict";var r=n(105),o=n(43);e.exports=n(55)("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(o(this,"Set"),e=0===e?0:e,e)}},r)},function(e,t,n){"use strict";var r,o=n(20)(0),i=n(11),a=n(28),l=n(87),u=n(106),c=n(4),s=n(2),f=n(43),p=a.getWeak,d=Object.isExtensible,h=u.ufstore,m={},v=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},y={get:function(e){if(c(e)){var t=p(e);return!0===t?h(f(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return u.def(f(this,"WeakMap"),e,t)}},g=e.exports=n(55)("WeakMap",v,y,u,!0,!0);s(function(){return 7!=(new g).set((Object.freeze||Object)(m),7).get(m)})&&(l((r=u.getConstructor(v,"WeakMap")).prototype,y),a.NEED=!0,o(["delete","has","get","set"],function(e){var t=g.prototype,n=t[e];i(t,e,function(t,o){if(c(t)&&!d(t)){this._f||(this._f=new r);var i=this._f[e](t,o);return"set"==e?this:i}return n.call(this,t,o)})}))},function(e,t,n){"use strict";var r=n(106),o=n(43);n(55)("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(o(this,"WeakSet"),e,!0)}},r,!1,!0)},function(e,t,n){"use strict";var r=n(1),o=n(56),i=n(81),a=n(5),l=n(33),u=n(10),c=n(4),s=n(3).ArrayBuffer,f=n(53),p=i.ArrayBuffer,d=i.DataView,h=o.ABV&&s.isView,m=p.prototype.slice,v=o.VIEW;r(r.G+r.W+r.F*(s!==p),{ArrayBuffer:p}),r(r.S+r.F*!o.CONSTR,"ArrayBuffer",{isView:function(e){return h&&h(e)||c(e)&&v in e}}),r(r.P+r.U+r.F*n(2)(function(){return!new p(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==m&&void 0===t)return m.call(a(this),e);for(var n=a(this).byteLength,r=l(e,n),o=l(void 0===t?n:t,n),i=new(f(this,p))(u(o-r)),c=new d(this),s=new d(i),h=0;r=t.length)return{value:void 0,done:!0}}while(!((e=t[this._i++])in this._t));return{value:e,done:!1}}),r(r.S,"Reflect",{enumerate:function(e){return new i(e)}})},function(e,t,n){var r=n(18),o=n(36),i=n(13),a=n(1),l=n(4),u=n(5);a(a.S,"Reflect",{get:function e(t,n){var a,c,s=arguments.length<3?t:arguments[2];return u(t)===s?t[n]:(a=r.f(t,n))?i(a,"value")?a.value:void 0!==a.get?a.get.call(s):void 0:l(c=o(t))?e(c,n,s):void 0}})},function(e,t,n){var r=n(18),o=n(1),i=n(5);o(o.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return r.f(i(e),t)}})},function(e,t,n){var r=n(1),o=n(36),i=n(5);r(r.S,"Reflect",{getPrototypeOf:function(e){return o(i(e))}})},function(e,t,n){var r=n(1);r(r.S,"Reflect",{has:function(e,t){return t in e}})},function(e,t,n){var r=n(1),o=n(5),i=Object.isExtensible;r(r.S,"Reflect",{isExtensible:function(e){return o(e),!i||i(e)}})},function(e,t,n){var r=n(1);r(r.S,"Reflect",{ownKeys:n(108)})},function(e,t,n){var r=n(1),o=n(5),i=Object.preventExtensions;r(r.S,"Reflect",{preventExtensions:function(e){o(e);try{return i&&i(e),!0}catch(e){return!1}}})},function(e,t,n){var r=n(7),o=n(18),i=n(36),a=n(13),l=n(1),u=n(29),c=n(5),s=n(4);l(l.S,"Reflect",{set:function e(t,n,l){var f,p,d=arguments.length<4?t:arguments[3],h=o.f(c(t),n);if(!h){if(s(p=i(t)))return e(p,n,l,d);h=u(0)}if(a(h,"value")){if(!1===h.writable||!s(d))return!1;if(f=o.f(d,n)){if(f.get||f.set||!1===f.writable)return!1;f.value=l,r.f(d,n,f)}else r.f(d,n,u(0,l));return!0}return void 0!==h.set&&(h.set.call(d,l),!0)}})},function(e,t,n){var r=n(1),o=n(64);o&&r(r.S,"Reflect",{setPrototypeOf:function(e,t){o.check(e,t);try{return o.set(e,t),!0}catch(e){return!1}}})},function(e,t,n){n(261),e.exports=n(9).Array.includes},function(e,t,n){"use strict";var r=n(1),o=n(46)(!0);r(r.P,"Array",{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),n(39)("includes")},function(e,t,n){n(263),e.exports=n(9).String.padStart},function(e,t,n){"use strict";var r=n(1),o=n(109),i=n(54);r(r.P+r.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(i),"String",{padStart:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(e,t,n){n(265),e.exports=n(9).String.padEnd},function(e,t,n){"use strict";var r=n(1),o=n(109),i=n(54);r(r.P+r.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(i),"String",{padEnd:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0,!1)}})},function(e,t,n){n(267),e.exports=n(59).f("asyncIterator")},function(e,t,n){n(83)("asyncIterator")},function(e,t,n){n(269),e.exports=n(9).Object.getOwnPropertyDescriptors},function(e,t,n){var r=n(1),o=n(108),i=n(15),a=n(18),l=n(75);r(r.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,r=i(e),u=a.f,c=o(r),s={},f=0;c.length>f;)void 0!==(n=u(r,t=c[f++]))&&l(s,t,n);return s}})},function(e,t,n){n(271),e.exports=n(9).Object.values},function(e,t,n){var r=n(1),o=n(110)(!1);r(r.S,"Object",{values:function(e){return o(e)}})},function(e,t,n){n(273),e.exports=n(9).Object.entries},function(e,t,n){var r=n(1),o=n(110)(!0);r(r.S,"Object",{entries:function(e){return o(e)}})},function(e,t,n){"use strict";n(102),n(275),e.exports=n(9).Promise.finally},function(e,t,n){"use strict";var r=n(1),o=n(9),i=n(3),a=n(53),l=n(104);r(r.P+r.R,"Promise",{finally:function(e){var t=a(this,o.Promise||i.Promise),n="function"==typeof e;return this.then(n?function(n){return l(t,e()).then(function(){return n})}:e,n?function(n){return l(t,e()).then(function(){throw n})}:e)}})},function(e,t,n){n(277),n(278),n(279),e.exports=n(9)},function(e,t,n){var r=n(3),o=n(1),i=n(54),a=[].slice,l=/MSIE .\./.test(i),u=function(e){return function(t,n){var r=arguments.length>2,o=!!r&&a.call(arguments,2);return e(r?function(){("function"==typeof t?t:Function(t)).apply(this,o)}:t,n)}};o(o.G+o.B+o.F*l,{setTimeout:u(r.setTimeout),setInterval:u(r.setInterval)})},function(e,t,n){var r=n(1),o=n(80);r(r.G+r.B,{setImmediate:o.set,clearImmediate:o.clear})},function(e,t,n){for(var r=n(78),o=n(32),i=n(11),a=n(3),l=n(14),u=n(38),c=n(6),s=c("iterator"),f=c("toStringTag"),p=u.Array,d={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},h=o(d),m=0;m=0;--i){var a=this.tryEntries[i],l=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var u=o.call(a,"catchLoc"),c=o.call(a,"finallyLoc");if(u&&c){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&o.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;P(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:M(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=n),m}}}function w(e,t,n,r){var o=t&&t.prototype instanceof k?t:k,i=Object.create(o.prototype),a=new O(r||[]);return i._invoke=function(e,t,n){var r=f;return function(o,i){if(r===d)throw new Error("Generator is already running");if(r===h){if("throw"===o)throw i;return F()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var l=T(a,n);if(l){if(l===m)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===f)throw r=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=d;var u=E(e,t,n);if("normal"===u.type){if(r=n.done?h:p,u.arg===m)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r=h,n.method="throw",n.arg=u.arg)}}}(e,n,a),i}function E(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function k(){}function x(){}function _(){}function S(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function C(e){var t;this._invoke=function(n,r){function i(){return new Promise(function(t,i){!function t(n,r,i,a){var l=E(e[n],e,r);if("throw"!==l.type){var u=l.arg,c=u.value;return c&&"object"==typeof c&&o.call(c,"__await")?Promise.resolve(c.__await).then(function(e){t("next",e,i,a)},function(e){t("throw",e,i,a)}):Promise.resolve(c).then(function(e){u.value=e,i(u)},a)}a(l.arg)}(n,r,t,i)})}return t=t?t.then(i,i):i()}}function T(e,t){var r=e.iterator[t.method];if(r===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,T(e,t),"throw"===t.method))return m;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var o=E(r,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,m;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,m):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function N(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function O(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(N,this),this.reset(!0)}function M(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++rM.length&&M.push(e)}function U(e,t,n){return null==e?0:function e(t,n,r,o){var l=typeof t;"undefined"!==l&&"boolean"!==l||(t=null);var u=!1;if(null===t)u=!0;else switch(l){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case i:case a:u=!0}}if(u)return r(o,t,""===n?"."+L(t,0):n),1;if(u=0,n=""===n?".":n+":",Array.isArray(t))for(var c=0;cthis.eventPool.length&&this.eventPool.push(e)}function fe(e){e.eventPool=[],e.getPooled=ce,e.release=se}o(ue.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=ae)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=ae)},persist:function(){this.isPersistent=ae},isPersistent:le,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=le,this._dispatchInstances=this._dispatchListeners=null}}),ue.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},ue.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var i=new t;return o(i,n.prototype),n.prototype=i,n.prototype.constructor=n,n.Interface=o({},r.Interface,e),n.extend=r.extend,fe(n),n},fe(ue);var pe=ue.extend({data:null}),de=ue.extend({data:null}),he=[9,13,27,32],me=G&&"CompositionEvent"in window,ve=null;G&&"documentMode"in document&&(ve=document.documentMode);var ye=G&&"TextEvent"in window&&!ve,ge=G&&(!me||ve&&8=ve),be=String.fromCharCode(32),we={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},Ee=!1;function ke(e,t){switch(e){case"keyup":return-1!==he.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function xe(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var _e=!1;var Se={eventTypes:we,extractEvents:function(e,t,n,r){var o=void 0,i=void 0;if(me)e:{switch(e){case"compositionstart":o=we.compositionStart;break e;case"compositionend":o=we.compositionEnd;break e;case"compositionupdate":o=we.compositionUpdate;break e}o=void 0}else _e?ke(e,n)&&(o=we.compositionEnd):"keydown"===e&&229===n.keyCode&&(o=we.compositionStart);return o?(ge&&"ko"!==n.locale&&(_e||o!==we.compositionStart?o===we.compositionEnd&&_e&&(i=ie()):(re="value"in(ne=r)?ne.value:ne.textContent,_e=!0)),o=pe.getPooled(o,t,n,r),i?o.data=i:null!==(i=xe(n))&&(o.data=i),H(o),i=o):i=null,(e=ye?function(e,t){switch(e){case"compositionend":return xe(t);case"keypress":return 32!==t.which?null:(Ee=!0,be);case"textInput":return(e=t.data)===be&&Ee?null:e;default:return null}}(e,n):function(e,t){if(_e)return"compositionend"===e||!me&&ke(e,t)?(e=ie(),oe=re=ne=null,_e=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1