= $this->translate('Profile') ?>
++ +
diff --git a/application/configs/application.ini b/application/configs/application.ini index 8aa58ab7f..9c1c8ec39 100644 --- a/application/configs/application.ini +++ b/application/configs/application.ini @@ -1,409 +1,412 @@ [production] version = "v1.93" ;phpSettings.date.timezone = "America/New_York" phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 resources.frontController.params.displayExceptions = 0 includePaths.library = APPLICATION_PATH "/../library" autoloaderNamespaces[] = "Local_" autoloaderNamespaces[] = "Ppload_" autoloaderNamespaces[] = "Crontab_" autoloaderNamespaces[] = "Cgsmith" bootstrap.path = APPLICATION_PATH "/modules/default/Bootstrap.php" bootstrap.class = "Bootstrap" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.defaultModule = "default" resources.frontController.baseurl = "/" resources.modules[] = resources.layout.layout = "flat_ui_template" resources.layout.layoutPath = APPLICATION_PATH "/modules/default/views/layout" resources.view[] = resources.view.encoding = "UTF-8" resources.view.doctype = "XHTML5" resources.view.contentType = "text/html;charset=utf-8" resources.locale.default = "en_US" resources.locale.force = false resources.locale.registry_key = "Zend_Locale" resources.db.adapter = "pdo_mysql" resources.db.params.host = "host" resources.db.params.username = "uname" resources.db.params.password = "pass" resources.db.params.dbname = "dbname" resources.db.params.charset = "utf8" resources.db.params.type = "pdo_mysql" resources.db.params.driver_options.1002 = "SET NAMES utf8" resources.db.isDefaultTableAdapter = true resources.mail.transport.type = Zend_Mail_Transport_Smtp resources.mail.transport.host = "email-host" resources.mail.transport.port = 587 resources.mail.transport.auth = "login" resources.mail.transport.username = "uname" resources.mail.transport.password = "pass" resources.mail.transport.ssl = "tls" resources.mail.defaultFrom.email = from@ocs-webserver.org resources.mail.defaultFrom.name = "ocs-webserver.org" resources.mail.defaultReplyTo.email = contact@ocs-webserver.org resources.mail.defaultReplyTo.name = "ocs-webserver.org" resources.translate.registry_key = "Zend_Translate" resources.translate.adapter = array resources.translate.options.scan = "directory" resources.translate.locale = "en_US" resources.translate.data.de_DE = APPLICATION_DATA "/locales/de_DE.php" resources.translate.data.en_US = APPLICATION_DATA "/locales/en_US.php" resources.translate.data.zh_CN = APPLICATION_DATA "/locales/zh_CN.php" resources.log.stream.writerName = "Stream" resources.log.stream.writerParams.stream = APPLICATION_PATH "/../data/logs/application.log" resources.log.stream.writerParams.mode = "a" ;resources.log.stream.filterName = "Priority" ;resources.log.stream.filterParams.priority = 8 queue.validate.name = "website_validate" queue.validate.dbAdapter = "Local_Queue_Adapter_Db" queue.validate.messageAdapter = "Local_Queue_Adapter_Db_Message" queue.validate.maxMessages = 1 images.upload.path = APPLICATION_PATH "/../httpdocs/img/data/" images.media.server = "http://cn.ocs-webserver.org" images.media.upload = "http://cn.ocs-webserver.org/image_bucket_upload.php" videos.upload.path = APPLICATION_PATH "/../httpdocs/video/data/" videos.media.server = "http://video.ocs-webserver.org" videos.media.upload = "http://video.ocs-webserver.org/video_upload.php" videos.media.cdnserver = "http://cdn.ocs-webserver.org/" third_party.paypal.sandbox.active = 0 third_party.paypal.security.userid = "ppuid" third_party.paypal.security.password = "pppass" third_party.paypal.security.signature = "ppsig" third_party.paypal.facilitator_fee_receiver = "receiver@mail.com" third_party.paypal.facilitator_fee = 0 third_party.paypal.application.id = "APP-ID" third_party.paypal.api.endpoint = "https://svcs.paypal.com" third_party.paypal.form.endpoint = "https://ic.paypal.com" third_party.paypal.ipn.endpoint = "https://www.paypal.com" third_party.paypal.masspay.endpoint = "https://api-3t.paypal.com/nvp" third_party.paypal.masspay.ipn.endpoint = "https://ipnpb.paypal.com/cgi-bin" third_party.paypal.service.version = "1.2.0" third_party.paypal.request.data.format = "NV" third_party.paypal.response.data.format = "NV" third_party.paypal.client.auth = "Nocert" third_party.paypal.client.application_id = "app" third_party.paypal.client.partner_name = "partner" third_party.paypal.merchantid = 0 third_party.dwolla.consumer.access_key = "key" third_party.dwolla.consumer.access_secret = "sec" third_party.dwolla.consumer.token = "token" third_party.dwolla.api.endpoint = "https://www.dwolla.com" third_party.dwolla.facilitator_fee = 0 third_party.github.client_id = "" third_party.github.client_secret = "" third_party.github.client_callback = $_SERVER['HTTP_HOST'] "/oauth/github" third_party.ocs.client_id = "" third_party.ocs.client_secret = "" third_party.ocs.client_callback = $_SERVER['HTTP_HOST'] "/oauth/ocs" ; ppload third_party.ppload.server = "https://www.ocs-fileserver.org" third_party.ppload.api_uri = "https://www.ocs-fileserver.org/api/" third_party.ppload.client_id = "clientid" third_party.ppload.secret = "sec" third_party.ppload.download_secret = "sec" admin.email = "contact@ocs-webserver.org" website.tracking.chartbeat = "/js/tracking/chartbeat.js" website.tracking.google = "/js/tracking/goggle.js" settings.cache.path = APPLICATION_CACHE settings.log.path = APPLICATION_DATA "/logs/" settings.search.path = APPLICATION_DATA "/indexes/" phpSettings.session.name = "OcsWebserverId" phpSettings.session.save_path = APPLICATION_DATA "/sessions" phpSettings.session.cookie_httponly = true phpSettings.session.cookie_lifetime = 31536000 phpSettings.session.gc_maxlifetime = 7776000 settings.session.remember_me.name = "OcsWebserverRememberMe" settings.session.remember_me.cookie_lifetime = 31536000 settings.session.remember_me.cookie_httponly = true settings.session.auth.name = "OcsWebserverSession" settings.session.auth.cookie_lifetime = 31536000 settings.session.auth.cookie_path = "/" settings.session.auth.cookie_httponly = true settings.session.filter_browse_original = 'FilterBrowseOriginalSession' settings.session.saveHandler.replace.enabled = true settings.session.saveHandler.cache.type = "Libmemcached" settings.session.saveHandler.class = "Local_Session_Handler_Memcache" settings.session.saveHandler.options.servers.0.host = "memcachehost" settings.session.saveHandler.options.servers.0.port = 11211 settings.session.saveHandler.options.servers.0.persistent = true settings.session.saveHandler.options.servers.0.status = true settings.session.saveHandler.options.compression = true settings.cache.enabled = true settings.cache.frontend.type = Core settings.cache.frontend.options.lifetime = 600 settings.cache.frontend.options.automatic_serialization = true settings.cache.frontend.options.cache_id_prefix = "[some string]" settings.cache.frontend.options.cache = true settings.cache.backend.type = "Libmemcached" settings.cache.backend.options.servers.0.host = "memcachehost" settings.cache.backend.options.servers.0.port = 11211 settings.cache.backend.options.servers.0.persistent = true settings.cache.backend.options.servers.0.weight = 1 settings.cache.backend.options.servers.0.timeout = 5 settings.cache.backend.options.servers.0.retry_interval = 15 ; alternative backend file cache, if no memcache installed (only for development environments) ;settings.cache.backend.type = "File" ;settings.cache.backend.options.cache_dir = APPLICATION_CACHE ;settings.cache.backend.options.file_locking = true ;settings.cache.backend.options.read_control = true ;settings.cache.backend.options.read_control_type = 'crc32' ;settings.cache.backend.options.hashed_directory_level = 1 ;settings.cache.backend.options.hashed_directory_perm = 0700 ;settings.cache.backend.options.file_name_prefix = 'ocs' ;settings.cache.backend.options.cache_file_perm = 0700 settings.search.host = 'localhost' settings.search.port = '8983' settings.search.http_path = '/solr/opendesktop/' settings.client.default.name = 'default' settings.client.config.path = APPLICATION_PATH "/configs/" settings.client.default.baseurl = 'opendesktop.org' settings.client.default.baseurl_store = 'www.pling.com' settings.client.default.baseurl_meta = 'opendesktop.org' settings.client.default.baseurl_member = 'opendesktop.org' settings.client.default.baselogo = 'images/system/storeLogo.png' settings.client.default.url_forum = "" settings.client.default.url_blog = "" settings.client.default.url_gitlab = "" settings.client.default.url_myopendesktop = "" settings.client.default.url_cloudopendesktop = "" settings.client.default.url_musicopendesktop = "" settings.client.default.url_mastodon = "" settings.client.default.url_riot = "" settings.client.default.collection_cat_id = '' settings.client.default.ranking_cat_id = '' settings.client.default.tag_group_collection_type_id = '' settings.client.default.tag_collection_type_collection_id = '' settings.client.default.tag_collection_type_ranking_id = '' ;ebook tag config settings.client.default.tag_group_ebook = '' settings.client.default.tag_group_ebook_author = '' settings.client.default.tag_group_ebook_editor = '' settings.client.default.tag_group_ebook_illustrator = '' settings.client.default.tag_group_ebook_translator = '' settings.client.default.tag_group_ebook_subject = '' settings.client.default.tag_group_ebook_shelf = '' settings.client.default.tag_group_ebook_language = '' settings.client.default.tag_group_ebook_type = '' settings.client.default.tag_is_ebook = '' +;os-user tag config +settings.client.default.tag_group_osuser = '' +settings.client.default.tag_type_osuser = '' settings.static.include_path = APPLICATION_PATH "/../httpdocs/partials/" settings.static.include.contact = "contact.phtml" settings.static.include.privacy = "privacy.phtml" settings.static.include.terms = "terms.phtml" settings.static.include.terms-general = "terms-general.phtml" settings.static.include.terms-publishing = "terms-publishing.phtml" settings.static.include.terms-payout = "terms-payout.phtml" settings.static.include.terms-dmca = "terms-dmca.phtml" settings.static.include.faq = "faq.phtml" settings.static.include.gitfaq = "gitfaq.phtml" settings.static.include.faqold = "faqold.phtml" settings.static.include.about = "about.phtml" settings.queue.general.name = "ocs_jobs" ; timeout in microseconds settings.queue.general.timeout = 600000 settings.queue.general.message_count = 1 settings.noLESScompile = 1 ; set it 1 to prevent that the LESS files are processed and dont forget to kill the cache. otherwise 0 to process less files. settings.savePageView = 1 ; in some server environment we don't want to store the page views. I this case set this value to 0. settings.dwh.db.adapter = "pdo_mysql" settings.dwh.db.params.host = "host" settings.dwh.db.params.username = "uname" settings.dwh.db.params.password = "pass" settings.dwh.db.params.dbname = "dbname" settings.dwh.db.params.charset = "utf8" settings.dwh.db.params.type = "pdo_mysql" settings.dwh.db.params.driver_options.1002 = "SET NAMES utf8" settings.dwh.db.isDefaultTableAdapter = false settings.server.oauth.authorize_url = "" settings.server.oauth.token_url = "" settings.server.oauth.callback = $_SERVER['HTTP_HOST'] "/oauth/ocs" settings.server.oauth.client_id = "" settings.server.oauth.client_secret = "" settings.server.oauth.create_user_url = "" settings.server.oauth.profile_user_url = "" settings.server.opencode.host = "" settings.server.opencode.user_logfilename = "opencode" settings.server.opencode.user_sudo = "" settings.server.opencode.user_agent = "OCS Opendesktop" settings.server.opencode.private_token = "" settings.server.opencode.url.user_create = "" settings.server.opencode.provider_name = "oauth_opendesktop" settings.server.ldap.host = "" settings.server.ldap.port = "389" settings.server.ldap.username = "" settings.server.ldap.password = "" settings.server.ldap.bindRequiresDn = true settings.server.ldap.accountDomainName = "" settings.server.ldap.baseDn = "" settings.server.ldap.accountFilterFormat = "(objectClass=account)" settings.server.ldap.tryUsernameSplit = false settings.server.ldap_group.baseDn = "" settings.server.forum.host = "" settings.server.forum.user_logfilename = "forum" settings.server.forum.user_sudo = "" settings.server.forum.user_agent = "OCS Opendesktop" settings.server.forum.private_token = "" settings.server.chat.host = "" settings.server.chat.user_logfilename = "chat" settings.server.chat.sudo_user = "" settings.server.chat.sudo_user_pw = "" settings.server.chat.home_server = "" settings.server.chat.user_agent = "OCS Opendesktop" settings.ocs_server.apiUri = "http://ocs-server.org" settings.jwt.secret = "" settings.jwt.expire.accessToken = "2 hours" settings.jwt.expire.refreshToken = "180 days" settings.jwt.expire.cookie = "30 days" settings.jwt.expire.authorizationCode = "10 minutes" settings.jwt.expire.resetCode = "2 hours" settings.jwt.issuer_ident = "http://localhost:80" settings.domain.base.host = "www.example.com" settings.domain.forum.host = "forum.example.com" settings.domain.forum.cookie_name = "_t" settings.domain.openid.host = "id.example.com" settings.domain.openid.cookie_name = "ltat" settings.domain.opencode.host = "git.example.com" settings.domain.opencode.cookie_name = "_example.com_session" settings.domain.mastodon.host = "mastodon.example.com" [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1 resources.db.adapter = "pdo_mysql" resources.db.params.host = "dev-host" resources.db.params.username = "uname" resources.db.params.password = "pass" resources.db.params.dbname = "db" resources.db.params.charset = "utf8" resources.db.isDefaultTableAdapter = true ;resources.db.params.profiler.enabled = "true" ;resources.db.params.profiler.class = "Zend_Db_Profiler_Firebug" third_party.paypal.security.userid = "pp.sandbox.uid" third_party.paypal.security.password = "pppass" third_party.paypal.security.signature = "ppsig" third_party.paypal.sandbox.email = "sanbaox@mail.com" third_party.paypal.facilitator_fee_receiver = "sanbaox@mail.com" third_party.paypal.facilitator_fee = 0 third_party.paypal.application.id = "SANDBOX-APP-ID" third_party.paypal.api.endpoint = "https://svcs.sandbox.paypal.com" third_party.paypal.form.endpoint = "https://www.sandbox.paypal.com" third_party.paypal.ipn.endpoint = "https://www.sandbox.paypal.com" third_party.dwolla.consumer.access_key = "sandbox.key" third_party.dwolla.consumer.access_secret = "sandbox.sec" third_party.dwolla.consumer.token = "sandbox.token" third_party.dwolla.api.endpoint = "https://uat.dwolla.com" third_party.dwolla.facilitator_fee = 0 settings.noLESScompile = 0 ; set it 1 to prevent that the LESS files are processed and dont forget to kill the cache [testing : development] [cronjob : production] resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.defaultControllerName = "cron" resources.frontController.defaultAction = "run" resources.modules[] = resources.frontController.params.displayExceptions = 1 phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 third_party.paypal.sandbox.active = 0 third_party.paypal.security.userid = "ppuid" third_party.paypal.security.password = "pppass" third_party.paypal.security.signature = "ppsig" third_party.paypal.facilitator_fee_receiver = "receiver@mail.com" third_party.paypal.facilitator_fee = 0 third_party.paypal.application.id = "APP-ID" third_party.paypal.api.endpoint = "https://svcs.paypal.com" third_party.paypal.form.endpoint = "https://ic.paypal.com" third_party.paypal.ipn.endpoint = "https://www.paypal.com" third_party.paypal.masspay.endpoint = "https://api-3t.paypal.com/nvp" third_party.paypal.service.version = "1.2.0" third_party.paypal.request.data.format = "NV" third_party.paypal.response.data.format = "NV" third_party.paypal.client.auth = "Nocert" third_party.paypal.client.application_id = "app" third_party.paypal.client.partner_name = "partner" third_party.paypal.test = Live settings.cache.enabled = true settings.cache.frontend.type = Core settings.cache.frontend.options.lifetime = 600 settings.cache.frontend.options.automatic_serialization = true settings.cache.frontend.options.cache_id_prefix = "[some string]" settings.cache.frontend.options.cache = true settings.cache.backend.type = File settings.cache.backend.options.cache_dir = APPLICATION_CACHE settings.cache.backend.options.file_locking = true settings.cache.backend.options.read_control = true settings.cache.backend.options.read_control_type = 'crc32' settings.cache.backend.options.hashed_directory_level = 1 settings.cache.backend.options.hashed_directory_perm = 0700 settings.cache.backend.options.file_name_prefix = '[some string]' settings.cache.backend.options.cache_file_perm = 0700 [searchbotenv : production] resources.frontController.params.displayExceptions = 0 phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 diff --git a/application/modules/default/controllers/SettingsController.php b/application/modules/default/controllers/SettingsController.php index 5c3ecd5a4..8af4dd009 100644 --- a/application/modules/default/controllers/SettingsController.php +++ b/application/modules/default/controllers/SettingsController.php @@ -1,1501 +1,1539 @@ . **/ class SettingsController extends Local_Controller_Action_DomainSwitch { protected $_auth; protected $_memberId; /** @var Zend_Db_Table */ protected $_memberTable; /** @var Zend_Db_Table_Row */ protected $_memberSettings; protected $_projectTable; /** @var Zend_Db_Table_Row */ protected $_mainproject; private $htmlVerifier = '<meta name="ocs-site-verification" content="?" />'; public function init() { parent::init(); $this->getResponse()->clearHeaders(array('Expires', 'Pragma', 'Cache-Control'))->setHeader('Pragma', 'no-cache', true) ->setHeader('Cache-Control', 'private, no-cache, must-revalidate', true) ; $this->_auth = Zend_Auth::getInstance(); $this->_memberId = $this->_auth->getStorage()->read()->member_id; $this->_memberTable = new Default_Model_DbTable_Member(); $showMember = $this->_memberTable->find($this->_memberId)->current(); $this->view->member = $showMember; $this->_memberSettings = $showMember; $this->_projectTable = new Default_Model_DbTable_Project(); // init default main project $main_project_id = $showMember->main_project_id; $mainproject_rowset = $this->_projectTable->find($main_project_id); $this->_mainproject = $this->view->mainproject = $mainproject_rowset->current(); } public function indexAction() { $this->view->member = $this->_memberSettings; $memberSettings = $this->_memberSettings->toArray(); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->_memberSettings->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; $this->view->profileform = $this->formProfile(); $this->view->profileform->populate($memberSettings); $this->view->profileform->aboutme->setValue($this->_mainproject->description); $this->view->accounts = $this->formConnectedAccounts(); $this->view->accounts->populate($memberSettings); $this->view->github = $this->formGithub(); $this->view->github->populate($memberSettings); $this->view->pictureform = $this->formProfilePicture(); $this->view->pictureform->populate($memberSettings); $this->view->pictureformbg = $this->formProfilePictureBackground(); $this->view->pictureformbg->populate($memberSettings); $this->view->passwordform = $this->formPassword(); $websiteOwner = new Local_Verification_WebsiteOwner(); $linkWebsite = stripslashes($this->_memberSettings->link_website); $this->view->homepageform = $this->formHomepage($linkWebsite, $websiteOwner->generateAuthCode($linkWebsite), $this->_memberSettings->validated); $this->view->newsletterform = $this->formNewsletter(stripslashes($this->_memberSettings->newsletter)); $this->view->paymentform = $this->formPayment(); $this->view->paymentform->populate($memberSettings); } - public function profilesAction() + public function profileAction() { $this->view->member = $this->_memberSettings; $memberSettings = $this->_memberSettings->toArray(); $this->view->profileform = $this->formProfile(); $this->view->profileform->populate($memberSettings); $this->view->profileform->aboutme->setValue($this->_mainproject->description); $this->view->accounts = $this->formConnectedAccounts(); $this->view->accounts->populate($memberSettings); $this->view->pictureform = $this->formProfilePicture(); $this->view->pictureform->populate($memberSettings); $this->view->pictureformbg = $this->formProfilePictureBackground(); $this->view->pictureformbg->populate($memberSettings); $websiteOwner = new Local_Verification_WebsiteOwner(); $linkWebsite = stripslashes($this->_memberSettings->link_website); $this->view->homepageform = $this->formHomepage($linkWebsite, $websiteOwner->generateAuthCode($linkWebsite), $this->_memberSettings->validated); } /** * Forms */ /** * @return Default_Form_Settings * @throws Zend_Form_Exception */ private function formProfile() { $form = new Default_Form_Settings(); - $form->setMethod("POST")->setAttrib("id", "settingsProfileForm")->setAction('/settings/profile'); + $form->setMethod("POST")->setAttrib("id", "settingsProfileForm")->setAction('/settings/saveprofile'); $userNameLength = new Zend_Validate_StringLength(array('min' => 4, 'max' => 35)); $username = $form->createElement('text', 'username')->setLabel("Username:")->setRequired(false)->setFilters(array('StringTrim')) ->addValidator($userNameLength)->setAttrib('readonly', 'true')->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $form->addElement($username); $firstname = $form->createElement('text', 'firstname')->setLabel("First Name:")->setRequired(false)->removeDecorator('HtmlTag') ->setFilters(array('StringTrim'))->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $form->addElement($firstname); $lastname = $form->createElement('text', 'lastname')->setLabel("Last Name:")->setRequired(false)->removeDecorator('HtmlTag') ->setFilters(array('StringTrim'))->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $form->addElement($lastname); $city = $form->createElement('text', 'city')->setLabel("City:")->setRequired(false)->setFilters(array('StringTrim')) ->removeDecorator('HtmlTag')->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $form->addElement($city); $country = $form->createElement('text', 'country')->setLabel("Country:")->setRequired(false)->setFilters(array('StringTrim')) ->removeDecorator('HtmlTag')->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $form->addElement($country); $about = $form->createElement('textarea', 'aboutme')->setLabel('About me:')->setRequired(false)->setAttrib('class', 'about') ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $form->addElement($about); return $form; } /** * @return Default_Form_Settings * @throws Zend_Form_Exception */ private function formConnectedAccounts() { $form = new Default_Form_Settings(); $form->setMethod("POST")->setAttrib("id", "settingsConnectedAccounts")->setAction('/settings/accounts'); $facebook = $form->createElement('text', 'link_facebook')->setLabel("Facebook Profile:")->setRequired(false) ->removeDecorator('HtmlTag')->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $facebook->addValidator(new Local_Validate_PartialUrl()); $form->addElement($facebook); $twitter = $form->createElement('text', 'link_twitter')->setLabel("Twitter Profile:")->setRequired(false)->removeDecorator('HtmlTag') ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $twitter->addValidator(new Local_Validate_PartialUrl); $form->addElement($twitter); $github = $form->createElement('text', 'link_github')->setLabel("GitHub Profile:")->setRequired(false)->removeDecorator('HtmlTag') ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $github->addValidator(new Local_Validate_PartialUrl); $form->addElement($github); return $form; } /** * @return Default_Form_Settings * @throws Zend_Form_Exception */ private function formGithub() { $form = new Default_Form_Settings(); $form->setMethod("POST")->setAttrib("id", "settingsGithub")->setAction('/settings/github'); $github = new Default_Form_Element_UsernameGithub('link_github'); $github->setLabel("GitHub Profile:")->setRequired(false)->removeDecorator('HtmlTag')->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $form->addElement($github); $token = new Default_Form_Element_TokenGithub('token_github'); $token->setLabel("GitHub Access Token:")->setRequired(false)->removeDecorator('HtmlTag')->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $form->addElement($token); return $form; } /** * @return Default_Form_Settings * @throws Zend_File_Transfer_Exception * @throws Zend_Form_Exception */ private function formProfilePicture() { $form = new Default_Form_Settings(); $form->setMethod("POST")->setAttrib("id", "settingsPictureForm")->setAction('/settings/picture') ->setAttrib('enctype', 'multipart/form-data') ; $hiddenProfilePicture = $form->createElement('hidden', 'profile_image_url')->setDecorators(array( 'ViewHelper', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_hidden_image.phtml', 'placement' => false ) ) ))->setAttrib('data-target', '#profile-picture-preview') ; $form->addElement($hiddenProfilePicture); $imageTable = new Default_Model_DbTable_Image(); $productPicture = $form->createElement('file', 'profile_picture_upload')->setDisableLoadDefaultDecorators(true)->setLabel('Profile Picture') ->setRequired(false)->setDecorators(array( 'File', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_profile_image.phtml', 'placement' => false ) ) ))->setAttrib('class', 'product-picture') ->setAttrib('onchange', 'ImagePreview.previewImage(this, \'profile-picture-preview\');') ->setTransferAdapter(new Local_File_Transfer_Adapter_Http())->setMaxFileSize(2097152)->addValidator('Count', false, 1) ->addValidator('Size', false, array('min' => '5kB', 'max' => '2MB')) ->addValidator('Extension', false, $imageTable->getAllowedFileExtension())->addValidator('ImageSize', false, array( 'minwidth' => 20, 'maxwidth' => 1024, 'minheight' => 20, 'maxheight' => 1024 ))->addValidator('MimeType', false, $imageTable->getAllowedMimeTypes()) ; $form->addElement($productPicture); $facebook_username = $form->createElement('text', 'facebook_username')->setLabel("From Facebook Profile:")->setRequired(false) ->removeDecorator('HtmlTag') ->setAttrib('data-href', 'https://graph.facebook.com/{username}/picture?type=large') ->setAttrib('data-target', '#profile-picture-preview')->setAttrib('data-src', 'facebook') ->setAttrib('class', 'avatar')->setDecorators(array( 'ViewHelper', 'Label', 'Errors' )) ; $form->addElement($facebook_username); $twitter_username = $form->createElement('text', 'twitter_username')->setLabel("From Twitter Profile:")->setRequired(false) ->removeDecorator('HtmlTag') ->setAttrib('data-href', 'http://twitter.com/api/users/profile_image/{username}') ->setAttrib('data-target', '#profile-picture-preview')->setAttrib('data-src', 'twitter') ->setAttrib('class', 'avatar')->setDecorators(array( 'ViewHelper', 'Label', 'Errors' )) ; $form->addElement($twitter_username); $gravatar_email = $form->createElement('text', 'gravatar_email')->setLabel("From Gravatar Profile:")->setRequired(false) ->setAttrib('data-href', 'http://www.gravatar.com/avatar/{username}.jpg') ->setAttrib('data-target', '#profile-picture-preview')->setAttrib('data-func', 'MD5') ->setAttrib('data-src', 'gravatar')->setAttrib('class', 'avatar')->setDecorators(array( 'ViewHelper', 'Label', 'Errors' )) ; $form->addElement($gravatar_email); $hiddenProfilePictureSrc = $form->createElement('hidden', 'profile_img_src')->setDecorators(array( 'ViewHelper' )) ; $form->addElement($hiddenProfilePictureSrc); return $form; } /** * @return Default_Form_Settings * @throws Zend_File_Transfer_Exception * @throws Zend_Form_Exception */ private function formProfilePictureBackground() { $form = new Default_Form_Settings(); $form->setMethod("POST")->setAttrib("id", "settingsPictureBackgroundForm")->setAction('/settings/picturebackground') ->setAttrib('enctype', 'multipart/form-data') ; $hiddenProfilePicture = $form->createElement('hidden', 'profile_image_url_bg')->setDecorators(array( 'ViewHelper', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_hidden_image.phtml', 'placement' => false ) ) ))->setAttrib('data-target', '#profile-picture-bg-preview') ; $form->addElement($hiddenProfilePicture); $imageTable = new Default_Model_DbTable_Image(); $productPicture = $form->createElement('file', 'profile_picture_background_upload')->setDisableLoadDefaultDecorators(true) ->setLabel('Background Picture')->setRequired(false)->setDecorators(array( 'File', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_profile_image_background.phtml', 'placement' => false ) ) ))->setAttrib('class', 'product-picture')->setAttrib('onchange', 'ImagePreview.previewImageMember(this, \'profile-picture-background-preview\');') ->setTransferAdapter(new Local_File_Transfer_Adapter_Http())//->setMaxFileSize(2097152) ->addValidator('Count', false, 1)//->addValidator('Size', false, array('min' => '5kB', 'max' => '2MB')) ->addValidator('Extension', false, $imageTable->getAllowedFileExtension()) ->addValidator('MimeType', false, $imageTable->getAllowedMimeTypes()) ; $form->addElement($productPicture); return $form; } /** * @return Default_Form_Settings * @throws Zend_Form_Exception */ private function formPassword() { $form = new Default_Form_Settings(); $form->setMethod("POST")->setAttrib("id", "settingsPasswordForm")->setAction('/settings/password'); $passOld = $form->createElement('password', 'passwordOld')->setLabel('Enter old Password:')->setRequired(true) ->removeDecorator('HtmlTag')->addValidator(new Local_Validate_OldPasswordConfirm())->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $pass1 = $form->createElement('password', 'password1')->setLabel('Enter new Password:')->setRequired(true) ->addValidator(new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING))->removeDecorator('HtmlTag') ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $pass2 = $form->createElement('password', 'password2')->setLabel('Re-enter new Password:')->setRequired(true) ->addValidator(new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING))->removeDecorator('HtmlTag') ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $passValid = new Local_Validate_PasswordConfirm($pass2->getValue()); $pass1->addValidator($passValid); $form->addElement($passOld)->addElement($pass1)->addElement($pass2); return $form; } /** * @param string $valHomepage * @param string $valVerifyKey * @param bool $isVerified * * @return Local_Form * @throws Zend_Form_Exception */ private function formHomepage($valHomepage = '', $valVerifyKey = '', $isVerified = false) { $form = new Local_Form(); $form->setMethod("POST")->setAttrib("id", "settingsHomepageForm")->setAction('/settings/homepage') ->addPrefixPath('Local_Form_Element_', 'Local/Form/Element/', 'element') ; $homepage = $form->createElement('text', 'link_website')->setLabel("Website:")->setRequired(false)->setValue($valHomepage) ->addValidator(new Local_Validate_PartialUrl)->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; if ($isVerified) { $homepage->setDescription('
'); } else { $homepage->setDescription(''); } $homepage->addDecorators(array( array('Description', array('tag' => '', 'escape' => false)) )); $form->addElement($homepage); $hash = $form->createElement('hash', 'csrf', array('salt' => 'RumbaSpiess')); $hash->setDecorators(array('ViewHelper', 'Errors')); $hash->getValidator('Identical')->setMessage('Your session is outdated. Please reload the page an try again.'); $form->addElement($hash); if ('' != $valVerifyKey) { $value = str_replace('?', $valVerifyKey, $this->htmlVerifier); $verifyCode = $form->createElement('note', 'html_verifier')->setValue($value)->removeDecorator('HtmlTag')->removeDecorator('Label'); $form->addElement($verifyCode); } return $form; } /** * @param string $valNewsletter * * @return Default_Form_Settings * @throws Zend_Form_Exception * @throws Zend_Validate_Exception */ private function formNewsletter($valNewsletter = '') { $form = new Default_Form_Settings(); $form->setMethod("POST")->setAttrib("id", "settingsNewsletterForm")->setAction('/settings/newsletter'); $questionValid = new Zend_Validate_InArray(array('1', '0')); $questionValid->setMessage('Yes is required!'); $question = $form->createElement('checkbox', 'newsletter')// ->addValidator($questionValid, true) ->setRequired(true)->removeDecorator('HtmlTag')->removeDecorator('Label') ; $question->setValue($valNewsletter); $form->addElement($question); return $form; } /** * @param string $valPaypalEmail * @param string $valWalletAddress * @param string $valDwollaId * * @return Default_Form_Settings * @throws Zend_Form_Exception * @throws Zend_Validate_Exception */ private function formPayment($valPaypalEmail = '', $valWalletAddress = '', $valDwollaId = '') { $form = new Default_Form_Settings(); $form->setMethod("POST")->setAttrib("id", "settingsPaymentForm")->setAction('/settings/payment'); $mailValidCheck = new Zend_Validate_EmailAddress(); $mailValidCheck->setMessage('RegisterFormEmailErrNotValid', Zend_Validate_EmailAddress::INVALID) ->setMessage('RegisterFormEmailErrNotValid', Zend_Validate_EmailAddress::INVALID_FORMAT) ->setMessage('RegisterFormEmailErrNotValid', Zend_Validate_EmailAddress::INVALID_LOCAL_PART) ->setMessage("RegisterFormEmailErrWrongHost", Zend_Validate_EmailAddress::INVALID_HOSTNAME) ->setMessage("RegisterFormEmailErrWrongHost2", Zend_Validate_Hostname::INVALID_HOSTNAME) ->setMessage("RegisterFormEmailErrHostLocal", Zend_Validate_Hostname::LOCAL_NAME_NOT_ALLOWED) ->setOptions(array('domain' => true)) ; $mailEmpty = new Zend_Validate_NotEmpty(); $mailEmpty->setMessage('RegisterFormEmailErrEmpty', Zend_Validate_NotEmpty::IS_EMPTY); $mailValidatorChain = new Zend_Validate(); $mailValidatorChain->addValidator($mailValidCheck, true); $mail = $form->createElement('text', 'paypal_mail')->setLabel('Paypal: Email Adress')->setRequired(false) ->addValidator($mailValidCheck, true)->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $mail->setValue($valPaypalEmail); $form->addElement($mail); $bitcoinAddress = $form->createElement('text', 'wallet_address')->setLabel('Bitcoin: Your Public Wallet Address')->setRequired(false) ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) ))->addValidators(array( array( 'regex', false, array( 'pattern' => '/^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$/', 'messages' => 'The Bitcoin Address is not valid.' ) ) )) ; $bitcoinAddress->setValue($valWalletAddress); $form->addElement($bitcoinAddress); $dwolla = $form->createElement('text', 'dwolla_id')->setLabel('Dwolla: User ID (xxx-xxx-xxxx)')->setRequired(false) ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $dwolla->setValue($valDwollaId); $form->addElement($dwolla); return $form; } - public function profileAction() + public function savetagsAction() + { + $this->_helper->layout->disableLayout(); + $error_text = ''; + + // Update a file information in ppload collection + $tag_id = $_POST['tag_id']; + $tag_group_id = $_POST['tag_group_id']; + $tag_type_id = $_POST['tag_type_id']; + + + // if (!empty($_POST['file_id'])) { + // $tagId = null; + // if (isset($_POST['tag_id'])) { + // $tagId = $_POST['tag_id']; + // } + // $tagGroupId = null; + // if (isset($_POST['tag_group_id'])) { + // $tagGroupId = $_POST['tag_group_id']; + // } + + // //set architecture + // $modelTags = new Default_Model_Tags(); + // $modelTags->saveFileTagForProjectAndTagGroup($this->_projectId, $_POST['file_id'], $tagId, $tagGroupId); + + // $this->_helper->json(array('status' => 'ok')); + + // return; + // } else { + // $error_text .= 'No FileId. , FileId: ' . $_POST['file_id']; + // } + + $this->_helper->json(array('status' => 'error', 'error_text' => $error_text)); + + + } + + + public function saveprofileAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/profile'); if ($this->_request->isPost()) { $form = $this->formProfile(); if ($form->isValid($_POST)) { $values = $form->getValues(); //remove email and username unset($values['username']); unset($values['mail']); $values['firstname'] = Default_Model_HtmlPurify::purify($values['firstname']); $values['lastname'] = Default_Model_HtmlPurify::purify($values['lastname']); $values['city'] = Default_Model_HtmlPurify::purify($values['city']); $values['country'] = Default_Model_HtmlPurify::purify($values['country']); $values['aboutme'] = Default_Model_HtmlPurify::purify($values['aboutme']); $this->_memberSettings->setFromArray($values); $this->_memberSettings->save(); $this->_mainproject->description = $values['aboutme']; $this->_mainproject->save(); $this->view->profileform = $form; $this->view->save = 1; // ppload // Update profile information $this->_updatePploadProfile(); } else { $this->view->profileform = $form; $this->view->error = 1; } } else { $form = $this->formProfile(); $form->populate($this->_memberSettings->toArray()); $this->view->profileform = $form; } } /** * ppload */ protected function _updatePploadProfile() { $pploadApi = new Ppload_Api(array( 'apiUri' => PPLOAD_API_URI, 'clientId' => PPLOAD_CLIENT_ID, 'secret' => PPLOAD_SECRET )); $profileName = ''; if ($this->_memberSettings->firstname || $this->_memberSettings->lastname) { $profileName = trim($this->_memberSettings->firstname . ' ' . $this->_memberSettings->lastname); } else { if ($this->_memberSettings->username) { $profileName = $this->_memberSettings->username; } } $profileRequest = array( 'owner_id' => $this->_memberId, 'name' => $profileName, 'email' => $this->_memberSettings->mail, 'homepage' => $this->_memberSettings->link_website, 'image' => $this->_memberSettings->profile_image_url, 'description' => $this->_mainproject->description ); $profileResponse = $pploadApi->postProfile($profileRequest); } public function accountsAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/accounts'); if ($this->_request->isPost()) { $form = $this->formConnectedAccounts(); if ($form->isValid($_POST)) { $this->_memberSettings->setFromArray($form->getValues()); $this->_memberSettings->save(); $this->view->accounts = $form; $this->view->save = 1; } else { $this->view->accounts = $form; $this->view->error = 1; } } else { $form = $this->formProfile(); $form->populate($this->_memberSettings->toArray()); $this->view->accounts = $form; } } public function githubAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/github'); if ($this->_request->isPost()) { $form = $this->formGithub(); if ($form->isValid($_POST)) { $this->_memberSettings->setFromArray($form->getValues()); $this->_memberSettings->save(); $memberToken = new Default_Model_DbTable_MemberToken(); $memberToken->save(array( 'token_member_id' => $this->_memberId, 'token_provider_name' => 'github_personal', 'token_value' => $form->getValue('token_github'), 'token_provider_username' => $form->getValue('link_github') )); $this->view->github = $form; $this->view->save = 1; } else { $this->view->github = $form; $this->view->error = 1; } } else { $form = $this->formProfile(); $form->populate($this->_memberSettings->toArray()); $this->view->github = $form; } } public function pictureAction() { ini_set('memory_limit', '128M'); $this->_helper->layout->disableLayout(); if ($this->_request->isPost()) { $form = $this->formProfilePicture(); $formFilename = $form->getElement('profile_picture_upload')->getFileName(); if (is_array($formFilename)) { Zend_Registry::get('logger')->info(__METHOD__ . ' :: form input:' . print_r($formFilename, true)); $filename = $formFilename['profile_picture_upload']; } else { Zend_Registry::get('logger')->info(__METHOD__ . ' :: form input:' . print_r($formFilename, true)); $filename = $formFilename; } $profilePictureTitleFilename = pathinfo($filename); if (!isset($profilePictureTitleFilename)) { $form->populate($this->_memberSettings->toArray()); $form->addErrorMessage('Please select a new picture'); $form->markAsError(); $this->view->pictureform = $form; $this->view->error = 1; $this->renderScript('settings/partials/picture.phtml'); return; } if ($form->isValid($_POST)) { $tmpProfilePictureTitle = IMAGES_UPLOAD_PATH . 'tmp/' . Local_Tools_UUID::generateUUID() . '_' . $profilePictureTitleFilename['basename']; $form->getElement('profile_picture_upload') ->addFilter('Rename', array('target' => $tmpProfilePictureTitle, 'overwrite' => true)) ; $values = $form->getValues(); if (array_key_exists('profile_picture_upload', $values) && $values['profile_picture_upload'] != "") { $imageService = new Default_Model_DbTable_Image(); $newImageName = $imageService->saveImageOnMediaServer($tmpProfilePictureTitle); } if ($form->getElement('facebook_username')->getValue() !== null) { $this->_memberSettings->facebook_username = $values['facebook_username']; } if ($form->getElement('twitter_username')->getValue() !== null) { $this->_memberSettings->twitter_username = $values['twitter_username']; } if ($form->getElement('gravatar_email')->getValue() !== null) { $this->_memberSettings->gravatar_email = $values['gravatar_email']; } if ($values['profile_img_src'] == 'local' && isset($newImageName)) { $this->_auth->getIdentity()->avatar = $newImageName; $this->_auth->getIdentity()->profile_image_url = IMAGES_MEDIA_SERVER . '/cache/200x200-2/img/' . $newImageName; $this->_memberSettings->avatar = $newImageName; $this->_memberSettings->profile_image_url = IMAGES_MEDIA_SERVER . '/cache/200x200-2/img/' . $newImageName; $this->_memberSettings->avatar_type_id = Default_Model_DbTable_Member::MEMBER_AVATAR_TYPE_USERUPDATED; } $this->_memberSettings->profile_img_src = $values['profile_img_src']; $this->_memberSettings->save(); $this->view->member = $this->_memberSettings; $form->populate($this->_memberSettings->toArray()); try { $id_server = new Default_Model_Ocs_OAuth(); $id_server->updateAvatarForUser($this->_memberSettings->member_id); } catch (Exception $e) { Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); } try { $ldap_server = new Default_Model_Ocs_Ldap(); $ldap_server->updateAvatar($this->_memberSettings->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()); } $this->view->save = 1; $this->view->pictureform = $form; // ppload // Update profile information $this->_updatePploadProfile(); $this->renderScript('settings/partials/picture.phtml'); } else { $this->view->pictureform = $form; $this->view->error = 1; $this->renderScript('settings/partials/picture.phtml'); } } else { $form = $this->formProfilePicture(); $form->populate($this->_memberSettings->toArray()); $this->view->pictureform = $form; $this->renderScript('settings/partials/picture.phtml'); } } public function deletepicturebackgroundAction() { $this->_helper->layout->disableLayout(); $this->_memberSettings->profile_image_url_bg = null; $this->_memberSettings->save(); $this->_helper->json(array( 'status' => 'ok' )); } public function picturebackgroundAction() { ini_set('memory_limit', '128M'); $this->_helper->layout->disableLayout(); if ($this->_request->isPost()) { $form = $this->formProfilePictureBackground(); $profilePictureElement = $form->getElement('profile_picture_background_upload'); if (!isset($profilePictureElement)) { $form->populate($this->_memberSettings->toArray()); $form->addErrorMessage('Please select a new picture'); $form->markAsError(); $this->view->pictureformbg = $form; $this->view->error = 1; $this->renderScript('settings/partials/picture-bg.phtml'); return; } $profilePictureTitleFilename = pathinfo($form->getElement('profile_picture_background_upload')->getFileName()); if ($form->isValid($_POST)) { $tmpProfilePictureTitle = IMAGES_UPLOAD_PATH . 'tmp/' . Local_Tools_UUID::generateUUID() . '_' . $profilePictureTitleFilename['basename']; $form->getElement('profile_picture_background_upload') ->addFilter('Rename', array('target' => $tmpProfilePictureTitle, 'overwrite' => true)) ; $values = $form->getValues(); if (array_key_exists('profile_picture_background_upload', $values) && $values['profile_picture_background_upload'] != "") { $imageService = new Default_Model_DbTable_Image(); $newImageName = $imageService->saveImageOnMediaServer($tmpProfilePictureTitle); } if (isset($newImageName)) { $this->_memberSettings->profile_image_url_bg = IMAGES_MEDIA_SERVER . '/cache/1920x450-2/img/' . $newImageName; } $this->_memberSettings->save(); $this->view->member = $this->_memberSettings; $form->populate($this->_memberSettings->toArray()); $this->view->save = 1; $this->view->pictureformbg = $form; $this->renderScript('settings/partials/picture-bg.phtml'); } else { $this->view->pictureformbg = $form; $this->view->error = 1; $this->renderScript('settings/partials/picture-bg.phtml'); } } else { $form = $this->formProfilePictureBackground(); $form->populate($this->_memberSettings->toArray()); $this->view->pictureformbg = $form; $this->renderScript('settings/partials/picture-bg.phtml'); } } public function passwordAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/password'); if ($this->_request->isPost()) { $form = $this->formPassword(); if ($form->isValid($_POST)) { $values = $form->getValues(); if ($this->_memberSettings->password != Local_Auth_Adapter_Ocs::getEncryptedPassword($values['passwordOld'], $this->_memberSettings->password_type)) { $form->addErrorMessage('Your old Password is wrong!'); $this->view->passwordform = $form; $this->view->error = 1; } else { //20180801 ronald: If a Hive User changes his password, we change the password type to our Default if($this->_memberSettings->password_type == Default_Model_Member::PASSWORD_TYPE_HIVE) { //Save old data $this->_memberSettings->password_old = $this->_memberSettings->password; $this->_memberSettings->password_type_old = Default_Model_Member::PASSWORD_TYPE_HIVE; //Change type and password $this->_memberSettings->password_type = Default_Model_Member::PASSWORD_TYPE_OCS; } $this->_memberSettings->password = Local_Auth_Adapter_Ocs::getEncryptedPassword($values['password1'], $this->_memberSettings->password_type); $this->_memberSettings->save(); $this->view->passwordform = $this->formPassword(); $this->view->save = 1; //Update Auth-Services try { $id_server = new Default_Model_Ocs_OAuth(); $id_server->updatePasswordForUser($this->_memberSettings->member_id); } catch (Exception $e) { Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); } try { $ldap_server = new Default_Model_Ocs_Ldap(); $ldap_server->updatePassword($this->_memberSettings->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()); } } } else { $this->view->passwordform = $form; $this->view->error = 1; } } else { $form = $this->formPassword(); $this->view->passwordform = $form; } } public function homepageAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/website'); if ($this->_request->isGet()) { $websiteVerifier = new Local_Verification_WebsiteOwner(); $authCode = $websiteVerifier->generateAuthCode($this->_memberSettings->link_website); $form = $this->formHomepage($this->_memberSettings->link_website, $authCode, $this->_memberSettings->validated); $this->view->homepageform = $form; return; } $form = $this->formHomepage($_POST['link_website']); if ($form->isNotValid($_POST)) { $this->view->homepageform = $form; $this->view->error = 1; return; } $values = $form->getValues(); if ($this->_memberSettings->link_website == $values['link_website']) { $websiteVerifier = new Local_Verification_WebsiteOwner(); $authCode = $websiteVerifier->generateAuthCode($this->_memberSettings->link_website); $form = $this->formHomepage($this->_memberSettings->link_website, $authCode); $this->view->homepageform = $form; $this->view->save = 0; return; } $websiteVerifier = new Local_Verification_WebsiteOwner(); $authCode = $websiteVerifier->generateAuthCode($values['link_website']); //$queue = Local_Queue_Factory::getQueue(); //$command = new Backend_Commands_CheckMemberWebsite($this->_memberId, $values['link_website'], $authCode); //$queue->send(serialize($command)); $this->_memberSettings->link_website = $values['link_website']; $this->_memberSettings->validated = 0; $this->_memberSettings->save(); $this->view->save = 1; $this->view->homepageform = $this->formHomepage($values['link_website'], $authCode); // ppload // Update profile information $this->_updatePploadProfile(); } public function newsletterAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/newsletter'); if ($this->_request->isPost()) { $form = $this->formNewsletter(); if ($form->isValid($_POST)) { $values = $form->getValues(); $this->_memberSettings->newsletter = $values['newsletter']; $this->_memberSettings->save(); $this->view->newsletterform = $this->formNewsletter($this->_memberSettings->newsletter); $this->view->save = 1; } else { $this->view->newsletterform = $form; $this->view->error = 1; } } else { $form = $this->formNewsletter($this->_memberSettings->newsletter); $this->view->newsletterform = $form; } } public function paymentAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/payment'); if ($this->_request->isPost()) { $form = $this->formPayment(); if ($form->isValid($_POST)) { $values = $form->getValues(); //If the user changes the paypal address, we set the valid staus back to null if ($this->_memberSettings->paypal_mail != $values['paypal_mail']) { //$showMember = $this->_memberTable->find($this->_memberId)->current(); //$showMember->paypal_valid_status = null; //$this->_memberTable->save($showMember); //$this->view->member = $showMember; $this->_memberTable->update(array('paypal_valid_status' => null), 'member_id = ' . $this->_memberId); //Log if paypal changes $desc = 'Paypal-Address changed from '; if (isset($this->_memberSettings->paypal_mail)) { $desc .= $this->_memberSettings->paypal_mail; } $desc .= ' to ' . $values['paypal_mail']; Default_Model_ActivityLog::logActivity($this->_memberSettings->member_id, null, $this->_memberId, Default_Model_ActivityLog::MEMBER_PAYPAL_CHANGED, array('title' => '', 'description' => $desc)); } $this->_memberSettings->paypal_mail = $values['paypal_mail']; $this->_memberSettings->wallet_address = $values['wallet_address']; $this->_memberSettings->dwolla_id = $values['dwolla_id']; $this->_memberSettings->save(); $this->view->paymentform = $this->formPayment(); $this->view->paymentform->populate($this->_memberSettings->toArray()); $this->view->save = 1; } else { $this->view->paymentform = $form; $this->view->error = 1; } } else { $form = $this->formPayment(); $form->populate($this->_memberSettings->toArray()); $this->view->paymentform = $form; } } public function deleteAction() { $this->_memberSettings->is_deleted = 1; $this->_memberSettings->is_active = 0; $this->_memberSettings->save(); $tableProject = new Default_Model_Project(); $tableProject->setAllProjectsForMemberDeleted($this->_memberId); $auth = Zend_Auth::getInstance(); $auth->clearIdentity(); $session = new Zend_Session_Namespace(); $session->unsetAll(); Zend_Session::forgetMe(); Zend_Session::destroy(); $config = Zend_Registry::get('config'); $cookieName = $config->settings->session->remember_me->name; $cookieData = $this->_request->getCookie($cookieName, null); if ($cookieData) { $cookieData = unserialize($cookieData); $remember_me_seconds = $config->settings->session->remember_me->cookie_lifetime; $domain = Local_Tools_ParseDomain::get_domain($this->getRequest()->getHttpHost()); $cookieExpire = time() - $remember_me_seconds; setcookie($cookieName, null, $cookieExpire, '/', $domain, null, true); //TODO: Remove Cookie from database $modelAuthorization = new Default_Model_Authorization(); $modelAuthorization->removeAllCookieInformation('member_id', $cookieData['mi']); } // ppload // Delete owner and related data $pploadApi = new Ppload_Api(array( 'apiUri' => PPLOAD_API_URI, 'clientId' => PPLOAD_CLIENT_ID, 'secret' => PPLOAD_SECRET )); $ownerResponse = $pploadApi->deleteOwner($this->_memberId); } public function githubtokenAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/github'); $modelGithubOauth = new Default_Model_Oauth_Github( Zend_Registry::get('db'), 'member', Zend_Registry::get('config')->third_party->github); $modelGithubOauth->authStart('/settings'); } public function addemailAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/email'); $filterInput = $this->createFilter(); if ($filterInput->hasInvalid()) { $this->view->messages = $filterInput->getMessages(); return; } $resultSet = $this->saveEmail($filterInput); $this->sendConfirmationMail($resultSet->toArray()); $this->view->messages = array('user_email' => array('success' => 'Your email was saved. Please check your email account for verification email.')); } /** * @return Zend_Filter_Input * @throws Zend_Validate_Exception */ protected function createFilter() { $mailValidCheck = new Zend_Validate_EmailAddress(); $mailValidCheck->setOptions(array('domain' => true)); $mailExistCheck = new Zend_Validate_Db_NoRecordExists(array( 'table' => 'member_email', 'field' => 'email_address', 'exclude' => array('field' => 'email_deleted', 'value' => 1) )); $mailExistCheck->setMessage('RegisterFormEmailErrAlreadyRegistered', Zend_Validate_Db_NoRecordExists::ERROR_RECORD_FOUND); // Filter-Parameter $filterInput = new Zend_Filter_Input(array('*' => 'StringTrim', 'user_email' => 'StripTags'), array( 'user_email' => array( $mailValidCheck, $mailExistCheck, 'presence' => 'required' ) ), $this->getAllParams()); return $filterInput; } /** * @param Zend_Filter_Input $filterInput * * @return Zend_Db_Table_Row_Abstract * @throws Exception */ protected function saveEmail($filterInput) { $data = array(); $data['email_member_id'] = $this->_authMember->member_id; $data['email_address'] = $filterInput->getEscaped('user_email'); $data['email_hash'] = md5($filterInput->getEscaped('user_email')); $data['email_verification_value'] = Default_Model_MemberEmail::getVerificationValue($this->_authMember->username, $filterInput->getEscaped('user_email')); $modelMemberEmail = new Default_Model_DbTable_MemberEmail(); return $modelMemberEmail->save($data); } /** * @param array $data */ protected function sendConfirmationMail($data) { $config = Zend_Registry::get('config'); $defaultFrom = $config->resources->mail->defaultFrom->email; $confirmMail = new Default_Plugin_SendMail('tpl_verify_email'); $confirmMail->setTemplateVar('servername', $this->getServerName()); $confirmMail->setTemplateVar('username', $this->_authMember->username); $confirmMail->setTemplateVar('email_address', $data['email_address']); $confirmMail->setTemplateVar('verificationlinktext', 'Click here to verify your email address'); $confirmMail->setTemplateVar('verificationlink', 'https://' . $this->getServerName() . '/settings/verification/v/' . $data['email_verification_value'] . ''); $confirmMail->setTemplateVar('verificationurl', 'https://' . $this->getServerName() . '/settings/verification/v/' . $data['email_verification_value']); $confirmMail->setReceiverMail($data['email_address']); $confirmMail->setFromMail($defaultFrom); $confirmMail->send(); } /** * @return mixed */ protected function getServerName() { /** @var Zend_Controller_Request_Http $request */ $request = $this->getRequest(); return $request->getHttpHost(); } public function removeemailAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/email'); $emailId = (int)$this->getParam('i'); $modelEmail = new Default_Model_DbTable_MemberEmail(); $result = $modelEmail->delete($emailId); $this->view->messages = array('user_email' => array('success' => 'Your email was removed.')); } public function setdefaultemailAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/email'); $emailId = (int)$this->getParam('i'); $modelEmail = new Default_Model_MemberEmail(); $result = $modelEmail->setDefaultEmail($emailId, $this->_authMember->member_id); if (true === $result) { try { $id_server = new Default_Model_Ocs_OAuth(); $id_server->updateMailForUser($this->_authMember->member_id); } catch (Exception $e) { Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); } try { $ldap_server = new Default_Model_Ocs_Ldap(); $ldap_server->updateMail($this->_authMember->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->updateMail($this->_authMember->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()); } } } public function resendverificationAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/email'); $emailId = (int)$this->getParam('i'); $modelEmail = new Default_Model_DbTable_MemberEmail(); $data = $modelEmail->find($emailId)->current(); $data->email_verification_value = md5($data->email_address . $this->_authMember->username . time()); $data->save(); $this->sendConfirmationMail($data); $this->view->messages = array('user_email' => array('success' => 'New verification mail was send. Please check your email account.')); } public function verificationAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); // Filter-Parameter $filterInput = new Zend_Filter_Input(array('*' => 'StringTrim', 'v' => 'StripTags'), array( 'v' => array( 'presence' => 'required' ) ), $this->getAllParams()); if ($filterInput->hasInvalid()) { $this->_helper->flashMessenger->addMessage('There was an error verifying your email.
'); $this->forward('index'); return; } $modelEmail = new Default_Model_MemberEmail(); $result = $modelEmail->verificationEmail($filterInput->getEscaped('v')); if ($result == 1) { $this->_helper->flashMessenger->addMessage('Your email was successfully verified.
'); } else { $this->_helper->flashMessenger->addMessage('There was an error verifying your email.
'); } $this->forward('index'); } } diff --git a/application/modules/default/controllers/UserController.php b/application/modules/default/controllers/UserController.php index e01fce51a..ce7984b5d 100644 --- a/application/modules/default/controllers/UserController.php +++ b/application/modules/default/controllers/UserController.php @@ -1,1033 +1,1033 @@ . **/ class UserController extends Local_Controller_Action_DomainSwitch { protected $_memberId; protected $_userName; /** @var Zend_Db_Table_Row */ protected $_memberSettings; public function init() { parent::init(); if ($this->hasParam('user_name')) { $this->_userName = $this->getParam('user_name'); $this->_userName = urldecode($this->_userName); $modelMember = new Default_Model_Member(); $this->_memberId = $modelMember->fetchActiveUserByUsername($this->_userName); } else { $this->_memberId = (int)$this->getParam('member_id'); } } public function indexAction() { $this->_helper->viewRenderer('aboutme'); $this->aboutmeAction(); } public function aboutmeAction() { $tableMember = new Default_Model_Member(); $tableProject = new Default_Model_Project(); $earnModel = new Default_Model_StatDownload(); $helperUserRole = new Backend_View_Helper_UserRole(); $pageLimit = 500; $projectpage = (int)$this->getParam('projectpage', 1); $this->view->authMember = $this->_authMember; $this->view->member = $tableMember->fetchMemberData($this->_memberId); if (null == $this->view->member) { $this->redirect("/"); } if ($this->view->member->is_deleted == 1 or $this->view->member->is_active == 0) { $this->redirect("/"); } $this->view->headTitle($this->view->member->username . ' - ' . $this->getHeadTitle(), 'SET'); $this->view->mainProject = $this->view->member->findDependentRowset($tableProject, 'MainProject')->current(); $this->view->userProjectCategories = $tableProject->getUserCreatingCategorys($this->_memberId); $this->view->aboutmeUserInfo = $this->getAboutmeUserInfo($this->_memberId,$this->view->member->username); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $datetime = new DateTime(); $datetime->sub(new DateInterval('P1M')); $month = $datetime->format('Ym'); $amount = $earnModel->getMonthEarn($this->_memberId,$month); if($amount && $amount['amount']) { $this->view->earnInfo = ' Last month I earned $'.number_format($amount['amount'], 2, '.', '').'.'; }else { $this->view->earnInfo=' Last month I earned 0.'; } }else{ $this->view->earnInfo=''; } // ajax load more products if ($this->getParam('projectpage', null)) { $total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null); $this->view->pageLimit = $pageLimit; $this->view->projectpage = $projectpage; $this->view->total_records = $total_records; // get last project category id $lastproject = $tableProject->getUserActiveProjects($this->_memberId, 1, (($projectpage - 1) * $pageLimit-1)); foreach ($lastproject as $value) { $this->view->lastcatid = $value['project_category_id']; } $this->view->userProducts = $tableProject->getUserActiveProjects($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit); $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/aboutmeProducts'); //$this->forward('showmoreproductsajax', 'user', null, $this->getAllParams()); return; } else { $total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null); $this->view->pageLimit = $pageLimit; $this->view->projectpage = $projectpage; $this->view->total_records = $total_records; //$this->view->userProducts = $tableProject->fetchAllProjectsForMember($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit,true); $this->view->userProducts = $tableProject->getUserActiveProjects($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit); $this->view->userFeaturedProducts = $tableProject->fetchAllFeaturedProjectsForMember($this->_memberId); $this->view->userCollections = $tableProject->fetchAllCollectionsForMember($this->_memberId); $paginationComments = $tableMember->fetchComments($this->_memberId); if ($paginationComments) { $offset = (int)$this->getParam('page'); $paginationComments->setItemCountPerPage(50); $paginationComments->setCurrentPageNumber($offset); $this->view->comments = $paginationComments; } // favs Currently no paging... $this->view->paramLikePageId = (int)$this->getParam('likepage'); $model = new Default_Model_DbTable_ProjectFollower(); $offset = $this->view->paramLikePageId; $list = $model->fetchLikesForMember($this->_memberId); $list->setItemCountPerPage(1000); $list->setCurrentPageNumber($offset); $this->view->likes = $list; // plings Currently no paging... $plingmodel = new Default_Model_ProjectPlings(); $offset = null; $plist = $plingmodel->fetchPlingsForMember($this->_memberId); $plist->setItemCountPerPage(1000); $plist->setCurrentPageNumber($offset); $this->view->plings = $plist; // plings Currently no paging... $plingmodel = new Default_Model_ProjectPlings(); $offset = null; $pslist = $plingmodel->fetchPlingsForSupporter($this->_memberId); $pslist->setItemCountPerPage(1000); $pslist->setCurrentPageNumber($offset); $this->view->supportersplings = $pslist; // rated $ratemodel = new Default_Model_DbTable_ProjectRating(); $this->view->rated = $ratemodel->getRatedForMember($this->_memberId); $stat = array(); $stat['cntProducts'] = $total_records; if ($this->view->userFeaturedProducts) { $cnt = 0; foreach ($this->view->userFeaturedProducts as $tmp) { $cnt++; } $stat['cntFProducts'] = $cnt; } else { $stat['cntFProducts'] = 0; } if ($this->view->userCollections) { $cnt = 0; foreach ($this->view->userCollections as $tmp) { $cnt++; } $stat['cntCollections'] = $cnt; } else { $stat['cntCollections'] = 0; } $stat['cntComments'] = $paginationComments->getTotalItemCount(); $tblFollower = new Default_Model_DbTable_ProjectFollower(); $stat['cntLikesHeGave'] = $tblFollower->countLikesHeGave($this->_memberId); $stat['cntLikesHeGot'] = $tblFollower->countLikesHeGot($this->_memberId); $tblPling = new Default_Model_DbTable_ProjectPlings(); $stat['cntPlingsHeGave'] = $tblPling->countPlingsHeGave($this->_memberId); $stat['cntPlingsHeGot'] = $tblPling->countPlingsHeGot($this->_memberId); $donationinfo = $tableMember->fetchSupporterDonationInfo($this->_memberId); if ($donationinfo) { $stat['donationIssupporter'] = $donationinfo['issupporter']; $stat['donationMax'] = $donationinfo['active_time_max']; $stat['donationMin'] = $donationinfo['active_time_min']; $stat['donationCnt'] = $donationinfo['cnt']; } $subscriptioninfo = $tableMember->fetchSupporterSubscriptionInfo($this->_memberId); if ($subscriptioninfo) { $stat['subscriptionIssupporter'] = true; $stat['subscriptionStart'] = $subscriptioninfo['create_time']; $stat['subscriptionAmount'] = $subscriptioninfo['amount']; $stat['subscriptionPeriod'] = $subscriptioninfo['period']; if($subscriptioninfo['period'] == 'M') { $stat['subscriptionPeriodText'] = 'monthly'; } else if($subscriptioninfo['period'] == 'Y') { $stat['subscriptionPeriodText'] = 'yearly'; } else { $stat['subscriptionPeriodText'] = ''; } $stat['subscriptionPeriodFreq'] = $subscriptioninfo['period_frequency']; } else { $stat['subscriptionIssupporter'] = false; } // $cntmb = $tableMember->fetchCntSupporters($this->_memberId); // $stat['cntSupporters'] = $cntmb; $stat['userLastActiveTime'] = $tableMember->fetchLastActiveTime($this->_memberId); $stat['cntDuplicateSourceurl'] = 0; $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $stat['cntDuplicateSourceurl'] = $tableProject->getCountProjectsDuplicateSourceurl($this->_memberId); } $this->view->stat = $stat; } } public function duplicatesAction() { $tableProject = new Default_Model_Project(); $pageLimit = 1000; $projectpage = 1; $total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null); $this->view->pageLimit = $pageLimit; $this->view->projectpage = $projectpage; $this->view->total_records = $total_records; $this->view->userProducts = $tableProject->getUserActiveProjectsDuplicatedSourceurl($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit); $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/aboutmeProducts'); } public function getAboutmeUserInfo($member_id,$username) { $tableProject = new Default_Model_Project(); $userProjectCategories = $tableProject->getUserCreatingCategorys($member_id); $cnt = sizeof($userProjectCategories ); $userinfo=''; $isAdmin = false; $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName){ $isAdmin= true; } if($cnt>0) { $userinfo = "Hi, I am ".$username." and I create "; if($cnt==1) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; $userinfo = $userinfo.'.'; /* if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].').'; }else{ $userinfo = $userinfo.'.'; }*/ }else if($cnt==2) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].')'; }*/ $userinfo = $userinfo.' and '.$userProjectCategories[1]['category1'].''; /*if($isAdmin) { $userinfo = $userinfo.'('.$userProjectCategories[1]['cnt'].').'; }else{ $userinfo = $userinfo.'.'; }*/ $userinfo = $userinfo.'.'; }else if($cnt==3) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].')'; }*/ $userinfo = $userinfo.', '.$userProjectCategories[1]['category1'].''; /* if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[1]['cnt'].')'; }*/ $userinfo = $userinfo.' and '.$userProjectCategories[2]['category1'].''; /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[2]['cnt'].').'; }*/ /*else{ $userinfo = $userinfo.'.'; }*/ $userinfo = $userinfo.'.'; }else if($cnt>3) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].')'; }*/ $userinfo = $userinfo.', '.$userProjectCategories[1]['category1'].''; /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[1]['cnt'].')'; }*/ $userinfo = $userinfo.', '.$userProjectCategories[2]['category1'].''; /*if($isAdmin) { $userinfo = $userinfo.' ('.$userProjectCategories[2]['cnt'].')'; }*/ $userinfo = $userinfo.' and more.'; } } return $userinfo; } public function avatarAction() { $this->_helper->layout->disableLayout(); $size = (int)$this->getParam("size", 200); $width = (int)$this->getParam("width", ($size / 2)); $this->view->size = (int)$size / 2; $emailHash = $this->getParam("emailhash", null); if ($emailHash) { $memberTable = new Default_Model_Member(); $member = $memberTable->findMemberForMailHash($emailHash); if ($member) { $helperImage = new Default_View_Helper_Image(); $imgUrl = $helperImage->Image($member['profile_image_url'], array('width' => $width, 'height' => $width)); $this->view->avatar = $imgUrl; $this->redirect($imgUrl); return; } } $this->view->avatar = ""; $helperImage = new Default_View_Helper_Image(); $imgUrl = $helperImage->Image("default-profile.png", array('width' => $width, 'height' => $width)); $this->redirect($imgUrl); } public function aboutAction() { $modelMember = new Default_Model_Member(); $this->view->member = $modelMember->fetchMember($this->_memberId)->toArray(); $this->view->currentPageOffset = (int)$this->getParam('page'); } public function showmoreproductsajaxAction() { $this->_helper->layout->disableLayout(); $tableProject = new Default_Model_Project(); $pageLimit = 21; $page = (int)$this->getParam('page', 1); $total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null); $this->view->pageLimit = $pageLimit; $this->view->page = $page; $this->view->total_records = $total_records; $this->view->userProducts = $tableProject->fetchAllProjectsForMember($this->_memberId, $pageLimit, ($page - 1) * $pageLimit, true); $this->_helper->viewRenderer('/partials/aboutmeProducts'); } public function userdataajaxAction() { $this->_helper->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); $resultArray = array(); header('Access-Control-Allow-Origin: *'); $this->getResponse()->setHeader('Access-Control-Allow-Origin', '*')->setHeader('Access-Control-Allow-Credentials', 'true') ->setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS') ->setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept') ; $userid = $this->getParam('id'); $modelMember = new Default_Model_Member(); $user = $modelMember->find($userid)->current(); if (Zend_Auth::getInstance()->hasIdentity()) { $auth = Zend_Auth::getInstance(); $user = $auth->getStorage()->read(); $resultArray['member_id'] = $user->member_id; $resultArray['username'] = $user->username; $resultArray['mail'] = $user->mail; $resultArray['avatar'] = $user->profile_image_url; } else if (null != $userid && null != $user) { $resultArray['member_id'] = $user['member_id']; $resultArray['username'] = $user['username']; $resultArray['mail'] = $user['mail']; $resultArray['avatar'] = $user['profile_image_url']; } else { $resultArray['member_id'] = null; $resultArray['username'] = null; $resultArray['mail'] = null; $resultArray['avatar'] = null; } $resultAll = array(); $resultAll['status'] = "success"; $resultAll['data'] = $resultArray; $this->_helper->json($resultAll); } public function followsAction() { $this->redirect($this->_helper->url('follows', 'member', null, $this->getAllParams())); } public function followAction() { $this->_helper->layout->disableLayout(); $this->view->authMember = $this->_authMember; $this->view->member_id = $this->_memberId; if ($this->_memberId == $this->_authMember->member_id) { return; } $memberFollowTable = new Default_Model_DbTable_MemberFollower(); $newVals = array('member_id' => $this->_memberId, 'follower_id' => (int)$this->_authMember->member_id); $where = $memberFollowTable->select()->where('member_id = ?', $this->_memberId) ->where('follower_id = ?', $this->_authMember->member_id, 'INTEGER') ; $result = $memberFollowTable->fetchRow($where); if (null === $result) { $memberFollowTable->createRow($newVals)->save(); } } public function unfollowAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('follow'); $memberFollowTable = new Default_Model_DbTable_MemberFollower(); $memberFollowTable->delete('member_id=' . $this->_memberId . ' AND follower_id=' . $this->_authMember->member_id); $this->view->authMember = $this->_authMember; $this->view->member_id = $this->_memberId; } public function newsAction() { $this->productsAction(); $this->render('products'); } public function productsAction() { $pageLimit = 25; $page = (int)$this->getParam('page', 1); //create ppload download hash: secret + collection_id + expire-timestamp $salt = PPLOAD_DOWNLOAD_SECRET; $timestamp = time() + 3600; // one hour valid $hash = md5($salt . $timestamp); // order isn't important at all... just do the same when verifying $this->view->download_hash = $hash; $this->view->download_timestamp = $timestamp; $this->view->member_id = null; if (null != $this->_authMember && null != $this->_authMember->member_id) { $this->view->member_id = $this->_authMember->member_id; } $modelProject = new Default_Model_Project(); $userProjects = $modelProject->fetchAllProjectsForMember($this->_authMember->member_id, $pageLimit, ($page - 1) * $pageLimit); $paginator = Local_Paginator::factory($userProjects); $paginator->setItemCountPerPage($pageLimit); $paginator->setCurrentPageNumber($page); $paginator->setTotalItemCount($modelProject->countAllProjectsForMember($this->_authMember->member_id)); $this->view->products = $paginator; $modelMember = new Default_Model_Member(); $this->view->member = $modelMember->fetchMemberData($this->_authMember->member_id); } public function collectionsAction() { $pageLimit = 25; $page = (int)$this->getParam('page', 1); $this->view->member_id = null; if (null != $this->_authMember && null != $this->_authMember->member_id) { $this->view->member_id = $this->_authMember->member_id; } $modelProject = new Default_Model_Collection(); $userProjects = $modelProject->fetchAllCollectionsForMember($this->_authMember->member_id, $pageLimit, ($page - 1) * $pageLimit); $paginator = Local_Paginator::factory($userProjects); $paginator->setItemCountPerPage($pageLimit); $paginator->setCurrentPageNumber($page); $paginator->setTotalItemCount($modelProject->countAllCollectionsForMember($this->_authMember->member_id)); $this->view->products = $paginator; $modelMember = new Default_Model_Member(); $this->view->member = $modelMember->fetchMemberData($this->_authMember->member_id); } public function activitiesAction() { $modelInfo = new Default_Model_Info(); $this->view->member = $this->_authMember; $this->view->comments = $modelInfo->getLastCommentsForUsersProjects($this->_authMember->member_id); $this->view->votes = $modelInfo->getLastVotesForUsersProjects($this->_authMember->member_id); $this->view->donations = $modelInfo->getLastDonationsForUsersProjects($this->_authMember->member_id); } public function settingsAction() { $this->_helper->layout()->setLayout('settings'); } public function reportAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('product/add'); $this->forward('report', 'product', null, $this->getAllParams()); } public function paymentsAction() { $this->view->headScript()->setFile(''); $this->view->headLink()->setStylesheet(''); $member_id = $this->_authMember->member_id; $this->view->member = $this->_authMember; $tableMember = new Default_Model_Member(); $this->view->hits = $tableMember->fetchPlingedProjects($member_id); } public function incomeAction() { $this->view->member = $this->_authMember; $tableMember = new Default_Model_Member(); $modelPlings = new Default_Model_Pling(); $this->view->donations = $modelPlings->fetchRecentDonationsForUser($this->_authMember->member_id); } public function tooltipAction() { $this->_helper->layout->disableLayout(); $info = new Default_Model_Info(); $data = $info->getTooptipForMember($this->_memberId); $this->_helper->json(array('status' => 'ok', 'data' => $data)); } public function shareAction() { $this->_helper->layout->disableLayout(); $modelProduct = new Default_Model_Member(); $memberInfo = $modelProduct->fetchMemberData($this->_memberId); $form = new Default_Form_ProjectShare(); $form->setAction('/member/' . $this->_memberId . '/share/'); // $helperBaseUrl = new Default_View_Helper_BaseUrl(); // $helperServerUrl = new Zend_View_Helper_ServerUrl(); $helpMemberUrl = new Default_View_Helper_BuildMemberUrl(); $this->view->permaLink = $helpMemberUrl->buildMemberUrl($memberInfo->username); // $this->view->permaLink = $helperServerUrl->serverUrl() . $helperBaseUrl->baseUrl() . '/member/' . $this->_memberId . '/'; if ($this->_request->isGet()) { $this->view->form = $form; $this->renderScript('product/share.phtml'); return; } if (false === $form->isValid($_POST)) { // form not valid $this->view->form = $form; $dummy = $this->view->render('product/share.phtml'); $this->_helper->json(array('status' => 'ok', 'message' => $dummy)); return; } $values = $form->getValues(); if (empty($memberInfo->firstname) and empty($memberInfo->lastname)) { $username = $memberInfo->username; } else { $username = $memberInfo->firstname . ' ' . $memberInfo->lastname; } $shareMail = new Default_Plugin_SendMail('tpl_social_mail_user'); $shareMail->setTemplateVar('sender', $values['sender_mail']); $shareMail->setTemplateVar('username', $username); $shareMail->setTemplateVar('permalink', $this->view->permaLink); $shareMail->setTemplateVar('permalinktext', 'View user\'s page'); $shareMail->setReceiverMail($values['mail']); $shareMail->send(); $this->_helper->json(array('status' => 'ok', 'redirect' => $this->view->permaLink)); } public function plingsAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } } public function plingsoldAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } } public function plingsajaxAction() { $this->_helper->layout->disableLayout(); $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } $year = null; if($this->hasParam('year')) { $year = $this->getParam('year'); } $this->view->year = $year; $this->_helper->viewRenderer('/plingsajax'); } public function plingsmonthajaxAction() { $this->_helper->layout->disableLayout(); $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } $yearmonth = null; if($this->hasParam('yearmonth')) { $yearmonth = $this->getParam('yearmonth'); } $this->view->yearmonth = $yearmonth; $this->_helper->viewRenderer('/plingsmonthajax'); } public function downloadhistoryAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); //backdore for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } if ($this->view->member) { $this->view->paramPageId = (int)$this->getParam('page'); //TODO do really sql paging instead of Zend_Paginator $dhistory = new Default_Model_DbTable_MemberDownloadHistory(); $offset = $this->view->paramPageId; $list = $dhistory->getDownloadhistory($this->view->member->member_id); $list->setItemCountPerPage(250); $list->setCurrentPageNumber($offset); $this->view->downloadhistory = $list; } else { $this->view->downloadhistory = array(); } } public function likesAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); //backdore for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } if ($this->view->member) { $this->view->paramPageId = (int)$this->getParam('page'); $model = new Default_Model_DbTable_ProjectFollower(); $offset = $this->view->paramPageId; $list = $model->fetchLikesForMember($this->view->member->member_id); $list->setItemCountPerPage(250); $list->setCurrentPageNumber($offset); $this->view->likes = $list; } else { $this->view->likes = array(); } } - public function supporterAction() + public function supportAction() { $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } $model = new Default_Model_DbTable_Support(); $this->view->supporterlist = $model->getSupporterDonationList($this->view->member->member_id); } public function payoutAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } } public function payouthistoryAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; if($this->_memberId!=$this->_authMember->member_id) { throw new Zend_Controller_Action_Exception('no authorization found'); } } $model = new Default_Model_StatDownload(); $resultSet = $model->getPayoutHistory($this->view->member->member_id); $this->view->payouthistory=$resultSet; } public function _payouthistoryAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; if($this->_memberId!=$this->_authMember->member_id) { throw new Zend_Controller_Action_Exception('no authorization found'); } } // these are already payed $sql="select yearmonth, amount from member_payout where member_id = :member_id order by yearmonth asc"; $resultSet = Zend_Db_Table::getDefaultAdapter()->fetchAll($sql,array('member_id' =>$this->view->member->member_id)); // there are probably payed last 2 months // current month $date = new DateTime(); $ym = $date->format('Ym'); $is_in = false; foreach ($resultSet as $value) { if($ym==$value['yearmonth']) { $is_in = true; break; } } if(!$is_in){ $model = new Default_Model_StatDownload(); $result = $model->getUserDownloadsForMonth($this->view->member->member_id, $ym); $amount = 0; foreach ($result as $value) { if($value['is_license_missing_now'] == 1 || $value['is_source_missing_now'] == 1 || $value['is_pling_excluded_now'] == 1 ) continue; $amount = $amount + $value['probably_payout_amount']; } $currentMonth = array('yearmonth' => $ym, 'amount' => $amount); // test last month too $interval = new DateInterval('P1M');//2 months $lastmonthdate = $date->sub($interval); $ym = $lastmonthdate->format('Ym'); $is_in = false; foreach ($resultSet as $value) { if($ym==$value['yearmonth']) { $is_in = true; break; } } if(!$is_in){ $model = new Default_Model_StatDownload(); $result = $model->getUserDownloadsForMonth($this->view->member->member_id, $ym); $amount = 0; foreach ($result as $value) { if($value['is_license_missing'] == 1 || $value['is_source_missing'] == 1 || $value['is_pling_excluded'] == 1 ) continue; $amount = $amount + $value['probably_payout_amount']; } $lastMonth = array('yearmonth' => $ym, 'amount' => $amount); array_push($resultSet,$lastMonth); } array_push($resultSet,$currentMonth); } $this->view->payouthistory=$resultSet; } /** * @return Default_Form_Settings * @throws Zend_Form_Exception */ private function formPassword() { $form = new Default_Form_Settings(); $form->setMethod("POST")->setAttrib("id", "settingsPasswordForm")->setAction('/member/' . $this->_memberId . '/changepass'); $passOld = $form->createElement('password', 'passwordOld')->setLabel('Enter old Password:')->setRequired(true) ->removeDecorator('HtmlTag')->addValidator(new Local_Validate_OldPasswordConfirm())->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $pass1 = $form->createElement('password', 'password1')->setLabel('Enter new Password:')->setRequired(true) ->addValidator(new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING))->removeDecorator('HtmlTag') ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $pass2 = $form->createElement('password', 'password2')->setLabel('Re-enter new Password:')->setRequired(true) ->addValidator(new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING))->removeDecorator('HtmlTag') ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $passValid = new Local_Validate_PasswordConfirm($pass2->getValue()); $pass1->addValidator($passValid); $form->addElement($passOld)->addElement($pass1)->addElement($pass2); return $form; } private function fetchMemberId() { if (false === Zend_Auth::getInstance()->hasIdentity()) { return null; } $auth = Zend_Auth::getInstance()->getIdentity(); if ($this->_userName == $auth->username) { return $auth->member_id; } if (Default_Model_DbTable_Member::ROLE_ID_ADMIN == $auth->roleId) { return $this->_memberId; } } } \ No newline at end of file diff --git a/application/modules/default/models/Tags.php b/application/modules/default/models/Tags.php index b5d6409b5..226dccb30 100644 --- a/application/modules/default/models/Tags.php +++ b/application/modules/default/models/Tags.php @@ -1,1093 +1,1131 @@ . * * Created: 11.09.2017 */ class Default_Model_Tags { const TAG_TYPE_PROJECT = 1; const TAG_TYPE_MEMBER = 2; const TAG_TYPE_FILE = 3; + const TAG_TYPE_OSUSER = 9; + const TAG_USER_GROUPID = 5; const TAG_CATEGORY_GROUPID = 6; const TAG_LICENSE_GROUPID = 7; const TAG_PACKAGETYPE_GROUPID = 8; const TAG_ARCHITECTURE_GROUPID = 9; const TAG_GHNS_EXCLUDED_GROUPID = 10; const TAG_PRODUCT_ORIGINAL_GROUPID = 11; const TAG_PRODUCT_ORIGINAL_ID = 2451; const TAG_PRODUCT_EBOOK_GROUPID = 14; const TAG_PRODUCT_EBOOK_AUTHOR_GROUPID = 15; const TAG_PRODUCT_EBOOK_EDITOR_GROUPID = 16; const TAG_PRODUCT_EBOOK_ILLUSTRATOR_GROUPID = 17; const TAG_PRODUCT_EBOOK_TRANSLATOR_GROUPID = 18; const TAG_PRODUCT_EBOOK_SUBJECT_GROUPID = 19; const TAG_PRODUCT_EBOOK_SHELF_GROUPID = 20; const TAG_PRODUCT_EBOOK_LANGUAGE_GROUPID = 21; const TAG_PRODUCT_EBOOK_TYPE_GROUPID = 22; const TAG_PRODUCT_EBOOK_ID = 2532; const TAG_PROJECT_GROUP_IDS = '6,7,10';//type product : category-tags, license-tags,ghns_excluded const TAG_FILE_GROUP_IDS = '8,9';//file-packagetype-tags,file-architecture-tags // $tag_project_group_ids ='6,7,10'; // $tag_file_group_ids ='8,9'; /** * Default_Model_Tags constructor. */ public function __construct() { } /** * @param int $object_id * @param string $tags * @param int $tag_type */ public function processTags($object_id, $tags, $tag_type) { $this->assignTags($object_id, $tags, $tag_type); $this->deassignTags($object_id, $tags, $tag_type); } /** * @param int $object_id * @param string $tags * @param int $tag_type */ public function assignTags($object_id, $tags, $tag_type) { $new_tags = array_diff(explode(',', $tags), explode(',', $this->getTags($object_id, $tag_type))); $tableTags = new Default_Model_DbTable_Tags(); $listIds = $tableTags->storeTags(implode(',', $new_tags)); $prepared_insert = array_map(function ($id) use ($object_id, $tag_type) { return "({$id}, {$tag_type}, {$object_id})"; }, $listIds); $sql = "INSERT IGNORE INTO tag_object (tag_id, tag_type_id, tag_object_id) VALUES " . implode(',', $prepared_insert); $this->getAdapter()->query($sql); } /** * @param int $object_id * @param int $tag_type * * @return string|null */ public function getTags($object_id, $tag_type) { $sql = " SELECT GROUP_CONCAT(tag.tag_name) AS tag_names FROM tag_object JOIN tag ON tag.tag_id = tag_object.tag_id join tag_group_item on tag_object.tag_id = tag_group_item.tag_id WHERE tag_type_id = :type AND tag_object_id = :object_id and tag_group_item.tag_group_id <> :tag_user_groupid and tag_object.is_deleted = 0 GROUP BY tag_object.tag_object_id "; $result = $this->getAdapter()->fetchRow($sql, array('type' => $tag_type, 'object_id' => $object_id, 'tag_user_groupid' =>Default_Model_Tags::TAG_USER_GROUPID )); if (isset($result['tag_names'])) { return $result['tag_names']; } return null; } /** * @param int $object_id * @param int $tag_type * @param String $tag_group_ids * * @return string|null */ public function getTagsArray($object_id, $tag_type,$tag_group_ids) { $sql = " SELECT tag.tag_id,tag.tag_name,tag_group_item.tag_group_id,tag.tag_fullname, tag.tag_description FROM tag_object JOIN tag ON tag.tag_id = tag_object.tag_id join tag_group_item on tag_object.tag_id = tag_group_item.tag_id and tag_object.tag_group_id = tag_group_item.tag_group_id WHERE tag_type_id = :type AND tag_object_id = :object_id and tag_object.tag_group_id in ({$tag_group_ids} ) and tag_object.is_deleted = 0 order by tag_group_item.tag_group_id desc , tag.tag_name asc "; $result = $this->getAdapter()->fetchAll($sql, array('type' => $tag_type, 'object_id' => $object_id)); return $result; } /** * @param int $object_id * @param int $tag_type * * @return string|null */ public function getTagsUser($object_id, $tag_type) { $tag_group_ids =$this::TAG_USER_GROUPID; $tags = $this->getTagsArray($object_id, $tag_type,$tag_group_ids); $tag_names = ''; foreach ($tags as $tag) { $tag_names=$tag_names.$tag['tag_name'].','; } $len = strlen($tag_names); if ($len>0) { return substr($tag_names,0,($len-1)); } return null; } /** * @param int $projectid * @param int $tag * * @return string|null */ public function isTagsUserExisting($project_id, $tagname) { $sql_object= "select count(1) as cnt from tag_object JOIN tag ON tag.tag_id = tag_object.tag_id WHERE tag.tag_name = :tagname and tag_object.tag_group_id=:tag_group_id and tag_object.is_deleted=0 and tag_object.tag_object_id=:project_id and tag_object.tag_type_id=:tag_type_id"; $r = $this->getAdapter()->fetchRow($sql_object, array( 'tagname' => $tagname ,'tag_group_id'=>Default_Model_Tags::TAG_USER_GROUPID , 'project_id'=>$project_id , 'tag_type_id'=>Default_Model_Tags::TAG_TYPE_PROJECT )); if($r['cnt'] ==0){ return false; }else{ return true; } } /** * @param int $object_id * @param int $tag_type * * @return string|null */ public function getTagsCategory($object_id, $tag_type) { $tag_group_ids = $this::TAG_CATEGORY_GROUPID; $tags = $this->getTagsArray($object_id, $tag_type,$tag_group_ids); $tag_names = ''; foreach ($tags as $tag) { $tag_names=$tag_names.$tag['tag_name'].','; } $len = strlen($tag_names); if ($len>0) { return substr($tag_names,0,($len-1)); } return null; } /** * @param int $object_id * @param int $tag_type * * @return string|null */ public function getTagsSystem($object_id, $tag_type) { $tag_group_ids ='6,7,10'; $tags = $this->getTagsArray($object_id, $tag_type,$tag_group_ids); $tag_names = ''; foreach ($tags as $tag) { $tag_names=$tag_names.$tag['tag_name'].','; } $len = strlen($tag_names); if ($len>0) { return substr($tag_names,0,($len-1)); } return null; } /** * @param int $object_id * @param int $tag_type * * @return string|null */ public function getTagsSystemList($project_id) { $tag_project_group_ids = SELF::TAG_PROJECT_GROUP_IDS; $tag_file_group_ids = SELF::TAG_FILE_GROUP_IDS; $sql =" SELECT tag.tag_id,tag.tag_name,tag_object.tag_group_id FROM tag_object JOIN tag ON tag.tag_id = tag_object.tag_id WHERE tag_type_id = :type_project AND tag_object_id = :project_id and tag_object.tag_group_id in ({$tag_project_group_ids} ) and tag_object.is_deleted = 0 union all SELECT distinct t.tag_id,t.tag_name,o.tag_group_id FROM tag_object o JOIN tag t ON t.tag_id = o.tag_id inner join project p on o.tag_parent_object_id = p.project_id inner join ppload.ppload_files f on p.ppload_collection_id = f.collection_id and o.tag_object_id=f.id and f.active = 1 WHERE o.tag_type_id = :type_file AND p.project_id = :project_id and o.tag_group_id in ({$tag_file_group_ids} ) and o.is_deleted = 0 order by tag_group_id , tag_name "; $result = $this->getAdapter()->fetchAll($sql, array('type_project' => Default_Model_Tags::TAG_TYPE_PROJECT , 'project_id' => $project_id , 'type_file' => Default_Model_Tags::TAG_TYPE_FILE )); return $result; } /** * @param int $object_id * @param int $tag_type * * @return string|null */ public function getTagsUserCount($object_id, $tag_type) { $sql = " SELECT count(*) as cnt FROM tag_object JOIN tag ON tag.tag_id = tag_object.tag_id join tag_group_item on tag_object.tag_id = tag_group_item.tag_id and tag_object.tag_group_id = tag_group_item.tag_group_id WHERE tag_type_id = :type AND tag_object_id = :object_id and tag_object.is_deleted = 0 and tag_group_item.tag_group_id = :tag_user_groupid "; $result = $this->getAdapter()->fetchRow($sql, array('type' => $tag_type, 'object_id' => $object_id, 'tag_user_groupid' =>Default_Model_Tags::TAG_USER_GROUPID )); if (isset($result['cnt'])) { return $result['cnt']; } return 0; } public function filterTagsUser($filter, $limit) { $sql = " select tag.tag_id ,tag.tag_name from tag join tag_group_item on tag.tag_id = tag_group_item.tag_id and tag_group_item.tag_group_id = :tag_user_groupid where tag.tag_name like '%".$filter."%' "; if (isset($limit)) { $sql.= ' limit ' . $limit; } $result = $this->getAdapter()->fetchAll($sql, array('tag_user_groupid' =>Default_Model_Tags::TAG_USER_GROUPID )); return $result; } /** * @return Zend_Db_Adapter_Abstract */ private function getAdapter() { return Zend_Db_Table::getDefaultAdapter(); } /** * @param int $object_id * @param string $tags * @param int $tag_type */ public function deassignTags($object_id, $tags, $tag_type) { $removable_tags = array_diff(explode(',', $this->getTags($object_id, $tag_type)), explode(',', $tags)); //$sql = "DELETE tag_object FROM tag_object JOIN tag ON tag.tag_id = tag_object.tag_id WHERE tag.tag_name = :name and tag_object.tag_object_id=:object_id"; $sql = "UPDATE tag_object inner join tag ON tag.tag_id = tag_object.tag_id SET tag_changed = NOW() , is_deleted = 1 WHERE tag.tag_name = :name and tag_object.tag_object_id=:object_id"; $this->getAdapter()->query($sql, array('tagObjectId' => $object_id, 'tagType' => $tag_type)); foreach ($removable_tags as $removable_tag) { $this->getAdapter()->query($sql, array('name' => $removable_tag,'object_id' => $object_id)); } $this->updateChanged($object_id, $tag_type); } /** * @param int $object_id * @param string $tags * @param int $tag_type */ public function processTagsUser($object_id, $tags, $tag_type) { if($tags) { $this->assignTagsUser($object_id, $tags, $tag_type); } $this->deassignTagsUser($object_id, $tags, $tag_type); } public function isProuductOriginal($project_id) { $sql_object= "select tag_item_id from tag_object WHERE tag_id = :tag_id and tag_object_id=:tag_object_id and tag_group_id=:tag_group_id and tag_type_id = :tag_type_id and is_deleted = 0"; $r = $this->getAdapter()->fetchRow($sql_object, array('tag_id' => self::TAG_PRODUCT_ORIGINAL_ID, 'tag_object_id' =>$project_id, 'tag_group_id' => self::TAG_PRODUCT_ORIGINAL_GROUPID, 'tag_type_id' => self::TAG_TYPE_PROJECT )); if($r){ return true; }else { return false; } } public function isProuductEbook($project_id) { $ebookTagGroupId = Zend_Registry::get('config')->settings->client->default->tag_group_ebook; $ebookTagId = Zend_Registry::get('config')->settings->client->default->tag_is_ebook; $sql_object= "select tag_item_id from tag_object WHERE tag_id = :tag_id and tag_object_id=:tag_object_id and tag_group_id=:tag_group_id and tag_type_id = :tag_type_id and is_deleted = 0"; $r = $this->getAdapter()->fetchRow($sql_object, array('tag_id' => $ebookTagId, 'tag_object_id' =>$project_id, 'tag_group_id' => $ebookTagGroupId, 'tag_type_id' => self::TAG_TYPE_PROJECT )); if($r){ return true; }else { return false; } } /** * @param int $object_id * @param string $value */ public function processTagProductOriginal($object_id, $is_original) { $sql_object= "select tag_item_id from tag_object WHERE tag_id = :tag_id and tag_object_id=:tag_object_id and tag_group_id=:tag_group_id and tag_type_id = :tag_type_id and is_deleted = 0"; $r = $this->getAdapter()->fetchRow($sql_object, array('tag_id' => self::TAG_PRODUCT_ORIGINAL_ID, 'tag_object_id' =>$object_id, 'tag_group_id' => self::TAG_PRODUCT_ORIGINAL_GROUPID, 'tag_type_id' => self::TAG_TYPE_PROJECT )); if($is_original=='1') { if(!$r){ $sql = "INSERT IGNORE INTO tag_object (tag_id, tag_type_id, tag_object_id, tag_group_id) VALUES (:tag_id, :tag_type_id, :tag_object_id, :tag_group_id)"; $this->getAdapter()->query($sql, array('tag_id' => self::TAG_PRODUCT_ORIGINAL_ID, 'tag_type_id' => self::TAG_TYPE_PROJECT , 'tag_object_id' => $object_id, 'tag_group_id' => self::TAG_PRODUCT_ORIGINAL_GROUPID)); } }else{ if($r){ $sql = "UPDATE tag_object set tag_changed = NOW() , is_deleted = 1 WHERE tag_item_id = :tagItemId"; $this->getAdapter()->query($sql, array('tagItemId' => $r['tag_item_id'])); } } } /** * @param int $object_id * @param string $value */ public function processTagCollection($object_id) { $sql = "INSERT IGNORE INTO tag_object (tag_id, tag_type_id, tag_object_id, tag_group_id) VALUES (:tag_id, :tag_type_id, :tag_object_id, :tag_group_id)"; $this->getAdapter()->query($sql, array('tag_id' => self::TAG_COLLECTION_ID_ID, 'tag_type_id' => self::TAG_TYPE_PROJECT , 'tag_object_id' => $object_id, 'tag_group_id' => self::TAG_COLLECTION_GROUPID)); } /** * @param int $object_id * @param string $tags * @param int $tag_type */ public function assignTagsUser($object_id, $tags, $tag_type) { $tags = strtolower($tags); $tag_group_id = 5; $new_tags = array_diff(explode(',', $tags), explode(',', $this->getTagsUser($object_id, $tag_type))); if(sizeof($new_tags)>0) { $tableTags = new Default_Model_DbTable_Tags(); $listIds = $tableTags->storeTagsUser(implode(',', $new_tags)); $prepared_insert = array_map(function ($id) use ($object_id, $tag_type,$tag_group_id) { return "({$id}, {$tag_type}, {$object_id},{$tag_group_id})"; }, $listIds); $sql = "INSERT IGNORE INTO tag_object (tag_id, tag_type_id, tag_object_id,tag_group_id) VALUES " . implode(',', $prepared_insert); $this->getAdapter()->query($sql); } } /** * @param int $object_id * @param string $tags * @param int $tag_type */ public function addTagUser($object_id, $tag, $tag_type) { $tableTags = new Default_Model_DbTable_Tags(); $listIds = $tableTags->storeTagsUser($tag); $tag_group_id = $this::TAG_USER_GROUPID; $prepared_insert = array_map(function ($id) use ($object_id, $tag_type,$tag_group_id) { return "({$id}, {$tag_type}, {$object_id},{$tag_group_id})"; }, $listIds); $sql = "INSERT IGNORE INTO tag_object (tag_id, tag_type_id, tag_object_id,tag_group_id) VALUES " . implode(',', $prepared_insert); $this->getAdapter()->query($sql); } public function deassignTagsUser($object_id, $tags, $tag_type) { if($tags) { $tags = strtolower($tags); $removable_tags = array_diff(explode(',', $this->getTagsUser($object_id, $tag_type)), explode(',', $tags)); } else { $removable_tags = explode(',', $this->getTagsUser($object_id, $tag_type)); } //$sql = "DELETE tag_object FROM tag_object JOIN tag ON tag.tag_id = tag_object.tag_id WHERE tag_group_id = ".Default_Model_Tags::TAG_USER_GROUPID." and tag.tag_name = :name and tag_object.tag_object_id=:object_id"; $sql = "UPDATE tag_object inner join tag ON tag.tag_id = tag_object.tag_id set tag_changed = NOW() , is_deleted = 1 WHERE tag_group_id = ".Default_Model_Tags::TAG_USER_GROUPID." and tag.tag_name = :name and tag_object.tag_object_id=:object_id"; foreach ($removable_tags as $removable_tag) { $this->getAdapter()->query($sql, array('name' => $removable_tag,'object_id' => $object_id)); // if Tag is the only one in Tag_object table then delete this tag for user_groupid = 5 $sql_object= "select count(1) as cnt from tag_object JOIN tag ON tag.tag_id = tag_object.tag_id WHERE tag.tag_name = :name"; $r = $this->getAdapter()->fetchRow($sql_object, array('name' => $removable_tag)); if($r['cnt'] ==0){ // then remove tag if not existing in Tag_object $sql_delete_tag = "delete from tag where tag_name=:name"; $this->getAdapter()->query($sql_delete_tag, array('name' => $removable_tag)); } } $this->updateChanged($object_id, $tag_type); } public function deleteTagUser($object_id, $tag, $tag_type) { $removable_tag =$tag; // $sql = "DELETE tag_object FROM tag_object JOIN tag ON tag.tag_id = tag_object.tag_id WHERE tag_group_id = ".Default_Model_Tags::TAG_USER_GROUPID." and tag.tag_name = :name and tag_object.tag_object_id=:object_id // and tag_group_id =".Default_Model_Tags::TAG_USER_GROUPID; $sql = "UPDATE tag_object inner join tag ON tag.tag_id = tag_object.tag_id set tag_changed = NOW() , is_deleted = 1 WHERE tag_group_id = ".Default_Model_Tags::TAG_USER_GROUPID." and tag.tag_name = :name and tag_object.tag_object_id=:object_id"; $this->getAdapter()->query($sql, array('name' => $removable_tag,'object_id' => $object_id)); // if Tag is the only one in Tag_object table then delete this tag for user_groupid = 5 $sql_object= "select count(1) as cnt from tag_object JOIN tag ON tag.tag_id = tag_object.tag_id WHERE tag.tag_name = :name "; $r = $this->getAdapter()->fetchRow($sql_object, array('name' => $removable_tag)); if($r['cnt'] ==0){ // then remove tag if not existing in Tag_object $sql_delete_tag = "delete from tag where tag_name=:name"; $this->getAdapter()->query($sql_delete_tag, array('name' => $removable_tag)); } $this->updateChanged($object_id, $tag_type); } private function updateChanged($object_id, $tag_type) { $sql = "UPDATE tag_object SET tag_changed = NOW() WHERE tag_object_id = :tagObjectId AND tag_type_id = :tagType"; $this->getAdapter()->query($sql, array('tagObjectId' => $object_id, 'tagType' => $tag_type)); } public function getTagsPerCategory($cat_id) { $sql = "select t.* from category_tag as c ,tag as t where c.tag_id = t.tag_id and c.category_id = :cat_id"; $r = $this->getAdapter()->fetchAll($sql, array('cat_id' => $cat_id)); return $r; } public function validateCategoryTags($cat_id,$tags) { if($tags == null) return true; //check if $cat_id children has tag already $sql = ' select * from category_tag where tag_id in ('.$tags.') and category_id in ( select c.project_category_id from project_category c join project_category d where d.project_category_id = '.$cat_id.' and c.lft> d.lft and c.rgt component higher in the tree to provide a loading indicator or placeholder to display."+lt(s))}Di=!0,c=po(c,s),u=l;do{switch(u.tag){case 3:s=c,u.effectTag|=2048,u.expirationTime=i,ao(u,i=Ci(u,s,i));break e;case 1:if(s=c,l=u.type,f=u.stateNode,0==(64&u.effectTag)&&("function"==typeof l.getDerivedStateFromError||null!==f&&"function"==typeof f.componentDidCatch&&(null===Hi||!Hi.has(f)))){u.effectTag|=2048,u.expirationTime=i,ao(u,i=Oi(u,s,i));break e}}u=u.return}while(null!==u)}Ui=Gi(o);continue}r=!0,Ua(t)}}break}if(Mi=!1,vo=go=mo=Ni.currentDispatcher=null,r)Ri=null,e.finishedWork=null;else if(null!==Ui)e.finishedWork=null;else{if(null===(r=e.current.alternate)&&a("281"),Ri=null,Di){if(o=e.latestPendingTime,i=e.latestSuspendedTime,u=e.latestPingedTime,0!==o&&os;)r(u,n=e[s++])&&(~i(c,n)||c.push(n));return c}},function(t,e,n){var r=n(9),o=n(2),i=n(35);t.exports=n(8)?Object.defineProperties:function(t,e){o(t);for(var n,a=i(e),u=a.length,s=0;u>s;)r.f(t,n=a[s++],e[n]);return t}},function(t,e,n){var r=n(16),o=n(38).f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return a&&"[object Window]"==i.call(t)?function(t){try{return o(t)}catch(t){return a.slice()}}(t):o(r(t))}},function(t,e,n){"use strict";var r=n(35),o=n(55),i=n(50),a=n(10),u=n(49),s=Object.assign;t.exports=!s||n(4)(function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach(function(t){e[t]=t}),7!=s({},t)[n]||Object.keys(s({},e)).join("")!=r})?function(t,e){for(var n=a(t),s=arguments.length,c=1,l=o.f,f=i.f;s>c;)for(var p,h=u(arguments[c++]),d=l?r(h).concat(l(h)):r(h),m=d.length,g=0;m>g;)f.call(h,p=d[g++])&&(n[p]=h[p]);return n}:s},function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},function(t,e,n){"use strict";var r=n(11),o=n(5),i=n(104),a=[].slice,u={};t.exports=Function.bind||function(t){var e=r(this),n=a.call(arguments,1),s=function(){var r=n.concat(a.call(arguments));return this instanceof s?function(t,e,n){if(!(e in u)){for(var r=[],o=0;ou||n!=n?c*(1/0):c*n}},function(t,e,n){var r=n(2);t.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(e){var i=t.return;throw void 0!==i&&r(i.call(t)),e}}},function(t,e,n){var r=n(11),o=n(10),i=n(49),a=n(7);t.exports=function(t,e,n,u,s){r(e);var c=o(t),l=i(c),f=a(c.length),p=s?f-1:0,h=s?-1:1;if(n<2)for(;;){if(p in l){u=l[p],p+=h;break}if(p+=h,s?p<0:f<=p)throw TypeError("Reduce of empty array with no initial value")}for(;s?p>=0:f>p;p+=h)p in l&&(u=e(u,l[p],p,c));return u}},function(t,e,n){"use strict";var r=n(10),o=n(36),i=n(7);t.exports=[].copyWithin||function(t,e){var n=r(this),a=i(n.length),u=o(t,a),s=o(e,a),c=arguments.length>2?arguments[2]:void 0,l=Math.min((void 0===c?a:o(c,a))-s,a-u),f=1;for(s0;)s in n?n[u]=n[s]:delete n[u],u+=f,s+=f;return n}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){"use strict";var r=n(89);n(1)({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},function(t,e,n){n(8)&&"g"!=/./g.flags&&n(9).f(RegExp.prototype,"flags",{configurable:!0,get:n(51)})},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,e,n){var r=n(2),o=n(5),i=n(93);t.exports=function(t,e){if(r(t),o(e)&&e.constructor===t)return e;var n=i.f(t);return(0,n.resolve)(e),n.promise}},function(t,e,n){"use strict";var r=n(120),o=n(43);t.exports=n(63)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=r.getEntry(o(this,"Map"),t);return e&&e.v},set:function(t,e){return r.def(o(this,"Map"),0===t?0:t,e)}},r,!0)},function(t,e,n){"use strict";var r=n(9).f,o=n(37),i=n(42),a=n(19),u=n(40),s=n(41),c=n(79),l=n(114),f=n(39),p=n(8),h=n(31).fastKey,d=n(43),m=p?"_s":"size",g=function(t,e){var n,r=h(e);if("F"!==r)return t._i[r];for(n=t._f;n;n=n.n)if(n.k==e)return n};t.exports={getConstructor:function(t,e,n,c){var l=t(function(t,r){u(t,l,e,"_i"),t._t=e,t._i=o(null),t._f=void 0,t._l=void 0,t[m]=0,null!=r&&s(r,n,t[c],t)});return i(l.prototype,{clear:function(){for(var t=d(this,e),n=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];t._f=t._l=void 0,t[m]=0},delete:function(t){var n=d(this,e),r=g(n,t);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(t){d(this,e);for(var n,r=a(t,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(t){return!!g(d(this,e),t)}}),p&&r(l.prototype,"size",{get:function(){return d(this,e)[m]}}),l},def:function(t,e,n){var r,o,i=g(t,e);return i?i.v=n:(t._l=i={i:o=h(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=i),r&&(r.n=i),t[m]++,"F"!==o&&(t._i[o]=i)),t},getEntry:g,setStrong:function(t,e,n){c(t,e,function(t,n){this._t=d(t,e),this._k=n,this._l=void 0},function(){for(var t=this._k,e=this._l;e&&e.r;)e=e.p;return this._t&&(this._l=e=e?e.n:this._t._f)?l(0,"keys"==t?e.k:"values"==t?e.v:[e.k,e.v]):(this._t=void 0,l(1))},n?"entries":"values",!n,!0),f(e)}}},function(t,e,n){"use strict";var r=n(120),o=n(43);t.exports=n(63)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return r.def(o(this,"Set"),t=0===t?0:t,t)}},r)},function(t,e,n){"use strict";var r,o=n(3),i=n(27)(0),a=n(13),u=n(31),s=n(101),c=n(123),l=n(5),f=n(43),p=n(43),h=!o.ActiveXObject&&"ActiveXObject"in o,d=u.getWeak,m=Object.isExtensible,g=c.ufstore,v=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},y={get:function(t){if(l(t)){var e=d(t);return!0===e?g(f(this,"WeakMap")).get(t):e?e[this._i]:void 0}},set:function(t,e){return c.def(f(this,"WeakMap"),t,e)}},b=t.exports=n(63)("WeakMap",v,y,c,!0,!0);p&&h&&(s((r=c.getConstructor(v,"WeakMap")).prototype,y),u.NEED=!0,i(["delete","has","get","set"],function(t){var e=b.prototype,n=e[t];a(e,t,function(e,o){if(l(e)&&!m(e)){this._f||(this._f=new r);var i=this._f[t](e,o);return"set"==t?this:i}return n.call(this,e,o)})}))},function(t,e,n){"use strict";var r=n(42),o=n(31).getWeak,i=n(2),a=n(5),u=n(40),s=n(41),c=n(27),l=n(15),f=n(43),p=c(5),h=c(6),d=0,m=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},v=function(t,e){return p(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=v(this,t);if(e)return e[1]},has:function(t){return!!v(this,t)},set:function(t,e){var n=v(this,t);n?n[1]=e:this.a.push([t,e])},delete:function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,n,i){var c=t(function(t,r){u(t,c,e,"_i"),t._t=e,t._i=d++,t._l=void 0,null!=r&&s(r,n,t[i],t)});return r(c.prototype,{delete:function(t){if(!a(t))return!1;var n=o(t);return!0===n?m(f(this,e)).delete(t):n&&l(n,this._i)&&delete n[this._i]},has:function(t){if(!a(t))return!1;var n=o(t);return!0===n?m(f(this,e)).has(t):n&&l(n,this._i)}}),c},def:function(t,e,n){var r=o(i(e),!0);return!0===r?m(t).set(e,n):r[t._i]=n,t},ufstore:m}},function(t,e,n){var r=n(21),o=n(7);t.exports=function(t){if(void 0===t)return 0;var e=r(t),n=o(e);if(e!==n)throw RangeError("Wrong length!");return n}},function(t,e,n){var r=n(38),o=n(55),i=n(2),a=n(3).Reflect;t.exports=a&&a.ownKeys||function(t){var e=r.f(i(t)),n=o.f;return n?e.concat(n(t)):e}},function(t,e,n){"use strict";var r=n(56),o=n(5),i=n(7),a=n(19),u=n(6)("isConcatSpreadable");t.exports=function t(e,n,s,c,l,f,p,h){for(var d,m,g=l,v=0,y=!!p&&a(p,h,3);vs;)r(u,n=e[s++])&&(~i(c,n)||c.push(n));return c}},function(t,e,n){var r=n(9),o=n(2),i=n(35);t.exports=n(8)?Object.defineProperties:function(t,e){o(t);for(var n,a=i(e),u=a.length,s=0;u>s;)r.f(t,n=a[s++],e[n]);return t}},function(t,e,n){var r=n(16),o=n(38).f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return a&&"[object Window]"==i.call(t)?function(t){try{return o(t)}catch(t){return a.slice()}}(t):o(r(t))}},function(t,e,n){"use strict";var r=n(35),o=n(55),i=n(50),a=n(10),u=n(49),s=Object.assign;t.exports=!s||n(4)(function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach(function(t){e[t]=t}),7!=s({},t)[n]||Object.keys(s({},e)).join("")!=r})?function(t,e){for(var n=a(t),s=arguments.length,c=1,l=o.f,f=i.f;s>c;)for(var p,h=u(arguments[c++]),d=l?r(h).concat(l(h)):r(h),m=d.length,g=0;m>g;)f.call(h,p=d[g++])&&(n[p]=h[p]);return n}:s},function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},function(t,e,n){"use strict";var r=n(11),o=n(5),i=n(104),a=[].slice,u={};t.exports=Function.bind||function(t){var e=r(this),n=a.call(arguments,1),s=function(){var r=n.concat(a.call(arguments));return this instanceof s?function(t,e,n){if(!(e in u)){for(var r=[],o=0;ou||n!=n?c*(1/0):c*n}},function(t,e,n){var r=n(2);t.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(e){var i=t.return;throw void 0!==i&&r(i.call(t)),e}}},function(t,e,n){var r=n(11),o=n(10),i=n(49),a=n(7);t.exports=function(t,e,n,u,s){r(e);var c=o(t),l=i(c),f=a(c.length),p=s?f-1:0,h=s?-1:1;if(n<2)for(;;){if(p in l){u=l[p],p+=h;break}if(p+=h,s?p<0:f<=p)throw TypeError("Reduce of empty array with no initial value")}for(;s?p>=0:f>p;p+=h)p in l&&(u=e(u,l[p],p,c));return u}},function(t,e,n){"use strict";var r=n(10),o=n(36),i=n(7);t.exports=[].copyWithin||function(t,e){var n=r(this),a=i(n.length),u=o(t,a),s=o(e,a),c=arguments.length>2?arguments[2]:void 0,l=Math.min((void 0===c?a:o(c,a))-s,a-u),f=1;for(s0;)s in n?n[u]=n[s]:delete n[u],u+=f,s+=f;return n}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){"use strict";var r=n(89);n(1)({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},function(t,e,n){n(8)&&"g"!=/./g.flags&&n(9).f(RegExp.prototype,"flags",{configurable:!0,get:n(51)})},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,e,n){var r=n(2),o=n(5),i=n(93);t.exports=function(t,e){if(r(t),o(e)&&e.constructor===t)return e;var n=i.f(t);return(0,n.resolve)(e),n.promise}},function(t,e,n){"use strict";var r=n(120),o=n(43);t.exports=n(63)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=r.getEntry(o(this,"Map"),t);return e&&e.v},set:function(t,e){return r.def(o(this,"Map"),0===t?0:t,e)}},r,!0)},function(t,e,n){"use strict";var r=n(9).f,o=n(37),i=n(42),a=n(19),u=n(40),s=n(41),c=n(79),l=n(114),f=n(39),p=n(8),h=n(31).fastKey,d=n(43),m=p?"_s":"size",g=function(t,e){var n,r=h(e);if("F"!==r)return t._i[r];for(n=t._f;n;n=n.n)if(n.k==e)return n};t.exports={getConstructor:function(t,e,n,c){var l=t(function(t,r){u(t,l,e,"_i"),t._t=e,t._i=o(null),t._f=void 0,t._l=void 0,t[m]=0,null!=r&&s(r,n,t[c],t)});return i(l.prototype,{clear:function(){for(var t=d(this,e),n=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];t._f=t._l=void 0,t[m]=0},delete:function(t){var n=d(this,e),r=g(n,t);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(t){d(this,e);for(var n,r=a(t,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(t){return!!g(d(this,e),t)}}),p&&r(l.prototype,"size",{get:function(){return d(this,e)[m]}}),l},def:function(t,e,n){var r,o,i=g(t,e);return i?i.v=n:(t._l=i={i:o=h(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=i),r&&(r.n=i),t[m]++,"F"!==o&&(t._i[o]=i)),t},getEntry:g,setStrong:function(t,e,n){c(t,e,function(t,n){this._t=d(t,e),this._k=n,this._l=void 0},function(){for(var t=this._k,e=this._l;e&&e.r;)e=e.p;return this._t&&(this._l=e=e?e.n:this._t._f)?l(0,"keys"==t?e.k:"values"==t?e.v:[e.k,e.v]):(this._t=void 0,l(1))},n?"entries":"values",!n,!0),f(e)}}},function(t,e,n){"use strict";var r=n(120),o=n(43);t.exports=n(63)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return r.def(o(this,"Set"),t=0===t?0:t,t)}},r)},function(t,e,n){"use strict";var r,o=n(3),i=n(27)(0),a=n(13),u=n(31),s=n(101),c=n(123),l=n(5),f=n(43),p=n(43),h=!o.ActiveXObject&&"ActiveXObject"in o,d=u.getWeak,m=Object.isExtensible,g=c.ufstore,v=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},y={get:function(t){if(l(t)){var e=d(t);return!0===e?g(f(this,"WeakMap")).get(t):e?e[this._i]:void 0}},set:function(t,e){return c.def(f(this,"WeakMap"),t,e)}},b=t.exports=n(63)("WeakMap",v,y,c,!0,!0);p&&h&&(s((r=c.getConstructor(v,"WeakMap")).prototype,y),u.NEED=!0,i(["delete","has","get","set"],function(t){var e=b.prototype,n=e[t];a(e,t,function(e,o){if(l(e)&&!m(e)){this._f||(this._f=new r);var i=this._f[t](e,o);return"set"==t?this:i}return n.call(this,e,o)})}))},function(t,e,n){"use strict";var r=n(42),o=n(31).getWeak,i=n(2),a=n(5),u=n(40),s=n(41),c=n(27),l=n(15),f=n(43),p=c(5),h=c(6),d=0,m=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},v=function(t,e){return p(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=v(this,t);if(e)return e[1]},has:function(t){return!!v(this,t)},set:function(t,e){var n=v(this,t);n?n[1]=e:this.a.push([t,e])},delete:function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,n,i){var c=t(function(t,r){u(t,c,e,"_i"),t._t=e,t._i=d++,t._l=void 0,null!=r&&s(r,n,t[i],t)});return r(c.prototype,{delete:function(t){if(!a(t))return!1;var n=o(t);return!0===n?m(f(this,e)).delete(t):n&&l(n,this._i)&&delete n[this._i]},has:function(t){if(!a(t))return!1;var n=o(t);return!0===n?m(f(this,e)).has(t):n&&l(n,this._i)}}),c},def:function(t,e,n){var r=o(i(e),!0);return!0===r?m(t).set(e,n):r[t._i]=n,t},ufstore:m}},function(t,e,n){var r=n(21),o=n(7);t.exports=function(t){if(void 0===t)return 0;var e=r(t),n=o(e);if(e!==n)throw RangeError("Wrong length!");return n}},function(t,e,n){var r=n(38),o=n(55),i=n(2),a=n(3).Reflect;t.exports=a&&a.ownKeys||function(t){var e=r.f(i(t)),n=o.f;return n?e.concat(n(t)):e}},function(t,e,n){"use strict";var r=n(56),o=n(5),i=n(7),a=n(19),u=n(6)("isConcatSpreadable");t.exports=function t(e,n,s,c,l,f,p,h){for(var d,m,g=l,v=0,y=!!p&&a(p,h,3);v