diff --git a/README b/README
index 62937bae7..d6a7e9ebb 100644
--- a/README
+++ b/README
@@ -1,35 +1,36 @@
# ocs-fileserver
LICENSE: GNU AGPLv3+
Copyright 2016 by pling GmbH.
## Dependencies
The following directories need full access rights in the file system:
"project_root"/cache/
"project_root"/cache/data
"project_root"/cache/sessions
"project_root"/application/log
"project_root"/httpdocs/img/cache
"project_root"/httpdocs/img/cache/rendered
"project_root"/httpdocs/img/cache/request
"project_root"/httpdocs/img/data
"project_root"/httpdocs/img/data/tmp
## Dependencies
sudo apt-get install apache2 php5 php5-mysql
sudo apt-get install git
sudo apt-get install php5-memcached
sudo apt-get install php5-curl
sudo apt-get install php5-apcu
sudo apt-get install php5-mcrypt
sudo php5enmod mcrypt
sudo service apache2 restart
+
diff --git a/application/configs/application.ini b/application/configs/application.ini
index 9c1c8ec39..483deab3f 100644
--- a/application/configs/application.ini
+++ b/application/configs/application.ini
@@ -1,412 +1,411 @@
[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/AuthorizationController.php b/application/modules/default/controllers/AuthorizationController.php
index b6837380e..d07dd7f17 100644
--- a/application/modules/default/controllers/AuthorizationController.php
+++ b/application/modules/default/controllers/AuthorizationController.php
@@ -1,913 +1,923 @@
.
**/
class AuthorizationController extends Local_Controller_Action_DomainSwitch
{
const DEFAULT_ROLE_ID = 300;
const PROFILE_IMG_SRC_LOCAL = 'local';
public function githubAction()
{
require_once APPLICATION_LIB . '/Local/CrawlerDetect.php';
if (crawlerDetect($_SERVER['HTTP_USER_AGENT'])) {
$this->getResponse()->setHttpResponseCode(404);
$this->forward('index', 'explore');
return;
}
- $this->forward('login', 'oauth', 'default', array('provider' => 'github', 'redirect' => $this->getParam('redirect')));
+ $this->forward('login', 'oauth', 'default',
+ array('provider' => 'github', 'redirect' => $this->getParam('redirect')));
}
public function ocsAction()
{
require_once APPLICATION_LIB . '/Local/CrawlerDetect.php';
if (crawlerDetect($_SERVER['HTTP_USER_AGENT'])) {
$this->getResponse()->setHttpResponseCode(404);
$this->forward('index', 'explore');
return;
}
- $this->forward('login', 'oauth', 'default', array('provider' => 'ocs', 'redirect' => $this->getParam('redirect')));
+ $this->forward('login', 'oauth', 'default',
+ array('provider' => 'ocs', 'redirect' => $this->getParam('redirect')));
}
public function redirectAction()
{
$param = null;
if (preg_match("/redirect\/(.*?)$/i", $this->getRequest()->getRequestUri(), $result)) {
$param = array('redirect' => $result[1]);
}
$this->forward('login', null, null, $param);
}
/**
* login from cookie
*
* @throws Zend_Auth_Storage_Exception
* @throws Zend_Form_Exception
* @throws Zend_Session_Exception
* @throws exception
*/
public function lfcAction()
{
$this->view->success = 0;
$this->view->noPopup = true;
//TODO: check redirect for a local valid url.
$this->view->redirect = $this->getParam('redirect');
$formLogin = new Default_Form_Login();
$formLogin->setAction('/login/lfc/');
$formLogin->getElement('remember_me')->setValue(true);
if ($this->_request->isGet()) { // not a POST request
$this->view->form = $formLogin->populate(array('redirect' => $this->view->redirect));
$this->view->error = 0;
return;
}
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - authentication attempt on host: ' . Zend_Registry::get('store_host')
- . PHP_EOL . ' - param redirect: ' . $this->getParam('redirect')
- . PHP_EOL . ' - from ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . ' - authentication attempt on host: ' . Zend_Registry::get('store_host')
+ . PHP_EOL . ' - param redirect: ' . $this->getParam('redirect')
+ . PHP_EOL . ' - from ip: ' . $this->_request->getClientIp()
);
if (false === $formLogin->isValid($_POST)) { // form not valid
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
- . PHP_EOL . ' - form not valid:'
- . PHP_EOL . print_r($formLogin->getMessages(), true))
- ;
+ . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . ' - form not valid:'
+ . PHP_EOL . print_r($formLogin->getMessages(), true));
$this->view->form = $formLogin;
$this->view->errorText = 'index.login.error.auth';
$this->view->error = 1;
return;
}
$values = $formLogin->getValues();
$authModel = new Default_Model_Authorization();
$authResult = $authModel->authenticateUser($values['mail'], $values['password'], $values['remember_me']);
if (false == $authResult->isValid()) { // authentication fail
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
- . PHP_EOL . ' - authentication fail: '
- . PHP_EOL . print_r($authResult->getMessages(), true)
+ . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . ' - authentication fail: '
+ . PHP_EOL . print_r($authResult->getMessages(), true)
);
$this->view->errorText = 'index.login.error.auth';
$this->view->form = $formLogin;
$this->view->error = 1;
$this->_helper->viewRenderer('login');
return;
}
$auth = Zend_Auth::getInstance();
$userId = $auth->getStorage()->read()->member_id;
// handle redirect
if (false === empty($this->view->redirect)) {
$redirect = $this->decodeString($this->view->redirect);
if (false !== strpos('/register', $redirect)) {
$redirect = '/member/' . $userId . '/activities/';
}
$this->redirect($redirect);
} else {
$this->redirect('/member/' . $userId . '/activities/');
}
}
/**
* @param string $string
*
* @return string
*/
protected function decodeString($string)
{
$decodeFilter = new Local_Filter_Url_Decrypt();
return $decodeFilter->filter($string);
}
/**
* @throws Zend_Auth_Storage_Exception
* @throws Zend_Exception
* @throws Zend_Session_Exception
* @throws exception
*/
public function propagateAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
if (Zend_Auth::getInstance()->hasIdentity()) {
$this->_helper->json(array('status' => 'ok', 'message' => 'Already logged in.'));
}
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - token: ' . $this->getParam('token')
- . PHP_EOL . ' - host: ' . Zend_Registry::get('store_host')
- . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . ' - token: ' . $this->getParam('token')
+ . PHP_EOL . ' - host: ' . Zend_Registry::get('store_host')
+ . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
);
$modelAuthToken = new Default_Model_SingleSignOnToken();
$token_data = $modelAuthToken->getData($this->getParam('token'));
if (false === $token_data) {
Zend_Registry::get('logger')->warn(__METHOD__
- . PHP_EOL . ' - Login failed: no token exists'
- . PHP_EOL . ' - host: ' . Zend_Registry::get('store_host')
- . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . ' - Login failed: no token exists'
+ . PHP_EOL . ' - host: ' . Zend_Registry::get('store_host')
+ . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
);
$this->_helper->json(array('status' => 'fail', 'message' => 'Login failed.'));
}
$remember_me = isset($token_data['remember_me']) ? (boolean)$token_data['remember_me'] : false;
$member_id = isset($token_data['member_id']) ? (int)$token_data['member_id'] : null;
$modelAuth = new Default_Model_Authorization();
- $authResult = $modelAuth->authenticateUser($member_id, null, $remember_me, Local_Auth_AdapterFactory::LOGIN_SSO);
+ $authResult = $modelAuth->authenticateUser($member_id, null, $remember_me,
+ Local_Auth_AdapterFactory::LOGIN_SSO);
if ($authResult->isValid()) {
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - authentication successful: '
- . PHP_EOL . ' - host: ' . Zend_Registry::get('store_host')
- . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . ' - authentication successful: '
+ . PHP_EOL . ' - host: ' . Zend_Registry::get('store_host')
+ . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
);
$this->getResponse()->setHeader('Access-Control-Allow-Origin', $this->getParam('origin'))
->setHeader('Access-Control-Allow-Credentials', 'true')
->setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
- ->setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept')
- ;
+ ->setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept');
$this->_helper->json(array('status' => 'ok', 'message' => 'Login successful.'));
} else {
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - authentication fail: '
- . PHP_EOL . ' - host: ' . Zend_Registry::get('store_host')
- . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
- . PHP_EOL . print_r($authResult->getMessages(), true)
+ . PHP_EOL . ' - authentication fail: '
+ . PHP_EOL . ' - host: ' . Zend_Registry::get('store_host')
+ . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . print_r($authResult->getMessages(), true)
);
$this->_helper->json(array('status' => 'fail', 'message' => 'Login failed.'));
}
}
public function checkuserAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
$this->getResponse()->setHeader('Access-Control-Allow-Origin', 'https://gitlab.pling.cc')
- ->setHeader('Access-Control-Allow-Credentials', 'true')->setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
- ->setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept')
- ;
+ ->setHeader('Access-Control-Allow-Credentials', 'true')->setHeader('Access-Control-Allow-Methods',
+ 'POST, GET, OPTIONS')
+ ->setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept');
$formLogin = new Default_Form_Login();
if (false === $formLogin->isValid($_GET)) { // form not valid
$this->_helper->json(array('status' => 'error', 'message' => 'not valid'));
return;
}
$values = $formLogin->getValues();
$authModel = new Default_Model_Authorization();
$authResult = $authModel->authenticateUser($values['mail'], $values['password'], $values['remember_me']);
if (false == $authResult->isValid()) { // authentication fail
$this->_helper->json(array('status' => 'error', 'message' => 'not valid'));
return;
}
$auth = Zend_Auth::getInstance();
$userId = $auth->getStorage()->read()->member_id;
-
-
+
+
//Send user to LDAP
try {
$ldap_server = new Default_Model_Ocs_Ldap();
$ldap_server->createUser($userId);
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - ldap : ' . implode(PHP_EOL." - ", $ldap_server->getMessages()));
+ 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());
}
//If the user is a hive user, we have to update his password
$this->changePasswordIfNeeded($userId, $values['password']);
$this->_helper->json(array('status' => 'ok', 'message' => 'User is OK.'));
}
private function changePasswordIfNeeded($member_id, $password)
{
$userTabel = new Default_Model_Member();
$showMember = $userTabel->fetchMember($member_id);
$memberSettings = $showMember;
//User with OCS Password
if ($showMember->password_type == Default_Model_Member::PASSWORD_TYPE_OCS) {
return;
}
//Hive User
if ($memberSettings->password_type == Default_Model_Member::PASSWORD_TYPE_HIVE) {
//Save old data
$memberSettings->password_old = $memberSettings->password;
$memberSettings->password_type_old = Default_Model_Member::PASSWORD_TYPE_HIVE;
//Change type and password
$memberSettings->password_type = Default_Model_Member::PASSWORD_TYPE_OCS;
- $memberSettings->password = Local_Auth_Adapter_Ocs::getEncryptedPassword($password, $memberSettings->password_type);
+ $memberSettings->password = Local_Auth_Adapter_Ocs::getEncryptedPassword($password,
+ $memberSettings->password_type);
$memberSettings->save();
//Update Auth-Services
try {
$id_server = new Default_Model_Ocs_OAuth();
$id_server->updatePasswordForUser($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($memberSettings->member_id);
} catch (Exception $e) {
Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
}
}
return;
}
/**
* @throws Zend_Auth_Storage_Exception
* @throws Zend_Exception
* @throws Zend_Form_Exception
* @throws Zend_Session_Exception
* @throws exception
*/
public function loginAction()
{
//TODO: check redirect for a local valid url.
$this->view->redirect = $this->getParam('redirect');
// if the user is still logged in, we do not show the login page. They should log out first.
if (Zend_Auth::getInstance()->hasIdentity()) {
$this->_helper->flashMessenger->addMessage('
You are still logged in. Please click here to log out first.
');
$this->handleRedirect(Zend_Auth::getInstance()->getIdentity()->member_id);
}
$formLogin = new Default_Form_Login();
if ($this->_request->isGet()) { // not a POST request
$this->view->formLogin = $formLogin->populate(array('redirect' => $this->view->redirect));
$this->view->error = 0;
return;
}
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - authentication attempt on host: ' . Zend_Registry::get('store_host')
- . PHP_EOL . ' - param redirect: ' . $this->getParam('redirect')
- . PHP_EOL . ' - from ip: ' . $this->_request->getClientIp()
- . PHP_EOL . ' - http method: ' . $this->_request->getMethod()
- . PHP_EOL . ' - csrf string: ' . (isset($_POST['login_csrf']) ? $_POST['login_csrf'] : '')
+ . PHP_EOL . ' - authentication attempt on host: ' . Zend_Registry::get('store_host')
+ . PHP_EOL . ' - param redirect: ' . $this->getParam('redirect')
+ . PHP_EOL . ' - from ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . ' - http method: ' . $this->_request->getMethod()
+ . PHP_EOL . ' - csrf string: ' . (isset($_POST['login_csrf']) ? $_POST['login_csrf'] : '')
);
if (false === Default_Model_CsrfProtection::validateCsrfToken($_POST['login_csrf'])) {
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
- . PHP_EOL . ' - validate CSRF token failed:'
- . PHP_EOL . ' - received token: ' . $_POST['login_csrf']
- . PHP_EOL . ' - stored token: ' . Default_Model_CsrfProtection::getCsrfToken()
+ . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . ' - validate CSRF token failed:'
+ . PHP_EOL . ' - received token: ' . $_POST['login_csrf']
+ . PHP_EOL . ' - stored token: ' . Default_Model_CsrfProtection::getCsrfToken()
);
$this->view->error = 0;
$this->view->formLogin = $formLogin;
if ($this->_request->isXmlHttpRequest()) {
$viewLoginForm = $this->view->render('authorization/partials/loginForm.phtml');
$this->_helper->json(array('status' => 'ok', 'message' => $viewLoginForm));
}
return;
}
if (false === $formLogin->isValid($_POST)) { // form not valid
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
- . PHP_EOL . ' - form not valid:'
- . PHP_EOL . print_r($formLogin->getMessages(), true)
+ . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . ' - form not valid:'
+ . PHP_EOL . print_r($formLogin->getMessages(), true)
);
$this->view->formLogin = $formLogin;
$this->view->errorText = 'index.login.error.auth';
$this->view->error = 1;
if ($this->_request->isXmlHttpRequest()) {
$viewLoginForm = $this->view->render('authorization/partials/loginForm.phtml');
$this->_helper->json(array('status' => 'ok', 'message' => $viewLoginForm));
}
return;
}
$values = $formLogin->getValues();
$authModel = new Default_Model_Authorization();
$authResult = $authModel->authenticateUser($values['mail'], $values['password'], $values['remember_me']);
if (false == $authResult->isValid()) { // authentication fail
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - authentication fail.'
- . PHP_EOL . ' - user: ' . $values['mail']
- . PHP_EOL . ' - remember_me: ' . $values['remember_me']
- . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
- . PHP_EOL . print_r($authResult->getMessages(), true)
+ . PHP_EOL . ' - authentication fail.'
+ . PHP_EOL . ' - user: ' . $values['mail']
+ . PHP_EOL . ' - remember_me: ' . $values['remember_me']
+ . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . print_r($authResult->getMessages(), true)
);
if ($authResult->getCode() == Local_Auth_Result::MAIL_ADDRESS_NOT_VALIDATED) {
$session = new Zend_Session_Namespace();
$session->mail_verify_member_id = $authResult->getIdentity();
if ($this->_request->isXmlHttpRequest()) {
$viewMessage = $this->view->render('verify/resend.phtml');
$this->_helper->json(array('status' => 'ok', 'message' => $viewMessage));
}
}
$this->view->errorText = 'index.login.error.auth';
$this->view->formLogin = $formLogin;
$this->view->error = 1;
if ($this->_request->isXmlHttpRequest()) {
$viewLoginForm = $this->view->render('authorization/partials/loginForm.phtml');
$this->_helper->json(array('status' => 'ok', 'message' => $viewLoginForm));
}
return;
}
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - authentication successful.'
- . PHP_EOL . ' - user: ' . $values['mail']
- . PHP_EOL . ' - user_id: ' . isset(Zend_Auth::getInstance()->getStorage()->read()->member_id) ? Zend_Auth::getInstance()->getStorage()->read()->member_id : ''
- . PHP_EOL . ' - remember_me: ' . $values['remember_me']
- . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
+ . PHP_EOL . ' - authentication successful.'
+ . PHP_EOL . ' - user: ' . $values['mail']
+ . PHP_EOL . ' - user_id: ' . isset(Zend_Auth::getInstance()->getStorage()->read()->member_id) ? Zend_Auth::getInstance()->getStorage()->read()->member_id : ''
+ . PHP_EOL . ' - remember_me: ' . $values['remember_me']
+ . PHP_EOL . ' - ip: ' . $this->_request->getClientIp()
);
-
-
+
+
$filter = new Local_Filter_Url_Encrypt();
$p = $filter->filter($values['password']);
$sess = new Zend_Session_Namespace('ocs_meta');
$sess->phash = $p;
$auth = Zend_Auth::getInstance();
$userId = $auth->getStorage()->read()->member_id;
$jwt = Default_Model_Jwt::encode($userId);
$sess->openid = $jwt;
//If the user is a hive user, we have to update his password
$this->changePasswordIfNeeded($userId, $values['password']);
//$modelToken = new Default_Model_SingleSignOnToken();
//$data = array(
// 'remember_me' => $values['remember_me'],
// //'redirect' => $this->getParam('redirect'),
// 'redirect' => $this->view->redirect,
// 'action' => Default_Model_SingleSignOnToken::ACTION_LOGIN,
// 'member_id' => $userId
//);
//$token_id = $modelToken->createToken($data);
//setcookie(Default_Model_SingleSignOnToken::ACTION_LOGIN, $token_id, time() + 120, '/',
// Local_Tools_ParseDomain::get_domain($this->getRequest()->getHttpHost()), null, true);
-
+
//user has to correct his data?
$modelReviewProfile = new Default_Model_ReviewProfileData();
if (false === $modelReviewProfile->hasValidProfile($auth->getStorage()->read())) {
Zend_Registry::get('logger')->info(__METHOD__
- . PHP_EOL . ' - User has to change user data!'
- . PHP_EOL . ' - error code: ' . print_r($modelReviewProfile->getErrorCode(), true)
+ . PHP_EOL . ' - User has to change user data!'
+ . PHP_EOL . ' - error code: ' . print_r($modelReviewProfile->getErrorCode(),
+ true)
);
-
+
if ($this->_request->isXmlHttpRequest()) {
$redirect = $this->getParam('redirect') ? '/redirect/' . $this->getParam('redirect') : '';
- $this->_helper->json(array('status' => 'ok',
- 'redirect' => '/r/change/e/' . $modelReviewProfile->getErrorCode() . $redirect
+ $this->_helper->json(array(
+ 'status' => 'ok',
+ 'redirect' => '/r/change/e/' . $modelReviewProfile->getErrorCode() . $redirect
));
} else {
$this->getRequest()->setParam('member_id', $userId);
$this->redirect("/r/change/e/" . $modelReviewProfile->getErrorCode(), $this->getAllParams());
}
-
+
return;
}
// handle redirect
$this->view->loginok = true;
$this->handleRedirect($userId);
}
/**
* @param int $userId
*
- * @throws Zend_Controller_Action_Exception
+ * @throws Zend_Exception
* @throws Zend_Filter_Exception
*/
protected function handleRedirect($userId)
{
if (empty($this->view->redirect)) {
Zend_Registry::get('logger')->info(__METHOD__ . PHP_EOL . ' - user_id: ' . $userId . PHP_EOL . ' - redirect: empty');
if ($this->_request->isXmlHttpRequest()) {
$redirect_url = $this->encodeString('/member/' . $userId . '/activities/');
$redirect = '/home/redirectme?redirect=' . $redirect_url;
$this->_helper->json(array('status' => 'ok', 'redirect' => $redirect));
return;
}
$this->getRequest()->setParam('member_id', $userId);
$redirect_url = $this->encodeString('/member/' . $userId . '/activities/');
$redirect = '/home/redirectme?redirect=' . $redirect_url;
$this->redirect($redirect, $this->getAllParams());
return;
}
$redirect = $this->decodeString($this->view->redirect);
Zend_Registry::get('logger')->info(__METHOD__ . PHP_EOL . ' - user_id: ' . $userId . PHP_EOL . ' - redirect: ' . $redirect);
if (false !== strpos('/register', $redirect)) {
$redirect = '/member/' . $userId . '/activities/';
}
$redirect = '/home/redirectme?redirect=' . $this->encodeString($redirect);
if ($this->_request->isXmlHttpRequest()) {
$this->_helper->json(array('status' => 'ok', 'redirect' => $redirect));
return;
}
$this->redirect($redirect);
return;
}
+ /**
+ * @param string $string
+ *
+ * @return string
+ * @throws Zend_Filter_Exception
+ */
+ protected function encodeString($string)
+ {
+ $encodeFilter = new Local_Filter_Url_Encrypt();
+
+ return $encodeFilter->filter($string);
+ }
+
/**
* @throws Exception
* @throws Zend_Exception
* @throws Zend_Form_Exception
*/
public function registerAction()
{
$this->view->redirect = $this->getParam('redirect');
$this->view->headScript()->appendFile('//www.google.com/recaptcha/api.js');
$this->view->addHelperPath(APPLICATION_LIB . '/Cgsmith/View/Helper', 'Cgsmith\\View\\Helper\\');
$formRegister = new Default_Form_Register();
if ($this->_request->isGet()) {
$this->view->formRegister = $formRegister->populate(array('redirect' => urlencode($this->view->redirect)));
$this->view->error = 0;
return;
}
if (false === $formRegister->isValid($_POST)) {
$this->view->formRegister = $formRegister;
$this->view->error = 1;
if ($this->_request->isXmlHttpRequest()) {
$viewRegisterForm = $this->view->render('authorization/partials/registerForm.phtml');
$this->_helper->json(array('status' => 'ok', 'message' => $viewRegisterForm));
return;
}
return;
}
$formRegisterValues = $formRegister->getValues();
unset($formRegisterValues['g-recaptcha-response']);
$formRegisterValues['password'] = $formRegisterValues['password1'];
$formRegisterValues['username'] = Default_Model_HtmlPurify::purify($formRegisterValues['username']);
$formRegisterValues['mail'] = strtolower($formRegisterValues['mail']);
$newUserData = $this->createNewUser($formRegisterValues);
Default_Model_ActivityLog::logActivity($newUserData['main_project_id'], null, $newUserData['member_id'],
Default_Model_ActivityLog::MEMBER_JOINED, array());
$this->sendConfirmationMail($formRegisterValues, $newUserData['verificationVal']);
Zend_Registry::get('logger')->debug(__METHOD__ . ' - member_id: ' . $newUserData['member_id'] . ' - Link for verification: '
- . 'http://' . $this->getServerName() . '/verification/' . $newUserData['verificationVal'])
- ;
+ . 'http://' . $this->getServerName() . '/verification/' . $newUserData['verificationVal']);
if ($this->_request->isXmlHttpRequest()) {
$viewRegisterForm = $this->view->render('authorization/partials/registerSuccess.phtml');
$this->_helper->json(array('status' => 'ok', 'message' => $viewRegisterForm));
} else {
$this->view->overlay = $this->view->render('authorization/registerSuccess.phtml');
$this->forward('index', 'explore', 'default');
}
}
/**
* @param array $userData
*
* @return array
* @throws Exception
*/
protected function createNewUser($userData)
{
$userTable = new Default_Model_Member();
$userData = $userTable->createNewUser($userData);
return $userData;
}
/**
* @param array $val
* @param string $verificationVal
*/
protected function sendConfirmationMail($val, $verificationVal)
{
$confirmMail = new Default_Plugin_SendMail('tpl_verify_user');
$confirmMail->setTemplateVar('servername', $this->getServerName());
$confirmMail->setTemplateVar('username', $val['username']);
$confirmMail->setTemplateVar('verificationlinktext',
'Click here to verify your email address ');
$confirmMail->setTemplateVar('verificationlink',
'https://' . $this->getServerName()
. '/verification/' . $verificationVal . ' ');
- $confirmMail->setTemplateVar('verificationurl', 'https://' . $this->getServerName() . '/verification/' . $verificationVal);
+ $confirmMail->setTemplateVar('verificationurl',
+ 'https://' . $this->getServerName() . '/verification/' . $verificationVal);
$confirmMail->setReceiverMail($val['mail']);
$confirmMail->setFromMail('registration@opendesktop.org');
$confirmMail->send();
}
/**
* @return mixed
*/
protected function getServerName()
{
/** @var Zend_Controller_Request_Http $request */
$request = $this->getRequest();
return $request->getHttpHost();
}
/**
* @throws Zend_Controller_Action_Exception
* @throws Zend_Exception
* @throws Zend_Session_Exception
*/
public function propagatelogoutAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
if (false == Zend_Auth::getInstance()->hasIdentity()) {
$this->_helper->json(array('status' => 'ok', 'message' => 'Already logged out.'));
}
$modelAuth = new Default_Model_Authorization();
$modelAuth->logout();
$this->_helper->json(array('status' => 'ok', 'message' => 'Logout successful.'));
}
/**
* @throws Zend_Cache_Exception
* @throws Zend_Controller_Action_Exception
* @throws Zend_Exception
* @throws Zend_Session_Exception
*/
public function logoutAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
if (Zend_Auth::getInstance()->hasIdentity()) {
$modelAuth = new Default_Model_Authorization();
$modelAuth->logout();
$modelToken = new Default_Model_SingleSignOnToken();
$data = array(
'remember_me' => false,
'redirect' => $this->getParam('redirect'),
'action' => Default_Model_SingleSignOnToken::ACTION_LOGOUT
);
$token_id = $modelToken->createToken($data);
setcookie(Default_Model_SingleSignOnToken::ACTION_LOGOUT, $token_id, time() + 120, '/',
Local_Tools_ParseDomain::get_domain($this->getRequest()->getHttpHost()), null, true);
}
if ($this->_request->isXmlHttpRequest()) {
$this->_helper->json(array('status' => 'ok', 'message' => 'Logout successful.'));
} else {
$this->redirect('/');
}
}
public function init()
{
parent::init(); // TODO: Change the autogenerated stub
- $this->getResponse()->clearHeaders(array('Expires', 'Pragma', 'Cache-Control'))->setHeader('Pragma', 'no-cache', true)
- ->setHeader('Cache-Control', 'private, no-cache, must-revalidate', true)
- ;
+ $this->getResponse()->clearHeaders(array('Expires', 'Pragma', 'Cache-Control'))->setHeader('Pragma', 'no-cache',
+ true)
+ ->setHeader('Cache-Control', 'private, no-cache, must-revalidate', true);
}
/**
* @throws Zend_Auth_Storage_Exception
* @throws Zend_Controller_Action_Exception
* @throws Zend_Exception
* @throws exception
*/
public function verificationAction()
{
$filterInput = new Zend_Filter_Input(array('*' => 'StringTrim', 'vid' => 'Alnum'),
array('vid' => array('Alnum', 'presence' => 'required')), $this->getAllParams());
$_vId = $filterInput->getEscaped('vid');
if (!$_vId) {
$this->redirect('/');
}
$translate = Zend_Registry::get('Zend_Translate');
$this->view->title = $translate->_('member.email.verification.title');
$authModel = new Default_Model_Authorization();
$authUser = $authModel->getAuthUserDataFromUnverified($_vId);
if (empty($authUser)) {
throw new Zend_Controller_Action_Exception('This member account could not activated. verification id:'
- . print_r($this->getParam('vid'), true));
+ . print_r($this->getParam('vid'), true));
}
if ($authUser AND (false == empty($authUser->email_checked))) {
$this->view->headScript()->appendFile('//www.google.com/recaptcha/api.js');
$this->view->addHelperPath(APPLICATION_LIB . '/Cgsmith/View/Helper', 'Cgsmith\\View\\Helper\\');
$this->view->formRegister = new Default_Form_Register();
$this->view->registerErrMsg =
"Your account has already been activated.
Log in or try to generate a new password for your account.
";
$this->view->overlay = $this->view->render('authorization/registerError.phtml');
$this->_helper->viewRenderer('register');
return;
}
Zend_Registry::get('logger')->info(__METHOD__ . ' - activate user from email link. (member_id, username): ('
- . print_r($authUser->member_id, true) . ', ' . print_r($authUser->username, true) . ')')
- ;
+ . print_r($authUser->member_id, true) . ', ' . print_r($authUser->username,
+ true) . ')');
$modelMember = new Default_Model_Member();
$result = $modelMember->activateMemberFromVerification($authUser->member_id, $_vId);
if (false == $result) {
throw new Zend_Controller_Action_Exception('Your member account could not activated.');
}
- Zend_Registry::get('logger')->info(__METHOD__ . ' - user activated. member_id: ' . print_r($authUser->member_id, true));
+ Zend_Registry::get('logger')->info(__METHOD__ . ' - user activated. member_id: ' . print_r($authUser->member_id,
+ true));
$modelMember = new Default_Model_Member();
$record = $modelMember->fetchMemberData($authUser->member_id, false);
try {
$oauth = new Default_Model_Ocs_OAuth();
$oauth->createUserFromArray($record->toArray());
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - oauth : ' . implode(PHP_EOL." - ", $oauth->getMessages()));
+ Zend_Registry::get('logger')->debug(__METHOD__ . ' - oauth : ' . implode(PHP_EOL . " - ",
+ $oauth->getMessages()));
} catch (Exception $e) {
Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
}
try {
$ldap = new Default_Model_Ocs_Ldap();
$ldap->createUserFromArray($record->toArray());
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - ldap : ' . implode(PHP_EOL." - ", $ldap->getMessages()));
+ Zend_Registry::get('logger')->debug(__METHOD__ . ' - ldap : ' . implode(PHP_EOL . " - ",
+ $ldap->getMessages()));
} catch (Exception $e) {
Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
}
try {
$openCode = new Default_Model_Ocs_Gitlab();
$openCode->createUserFromArray($record->toArray());
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - opencode : ' . implode(PHP_EOL." - ", $openCode->getMessages()));
+ Zend_Registry::get('logger')->debug(__METHOD__ . ' - opencode : ' . implode(PHP_EOL . " - ",
+ $openCode->getMessages()));
} catch (Exception $e) {
Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
}
try {
$forum = new Default_Model_Ocs_Forum();
$forum->createUserFromArray($record->toArray());
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - forum : ' . implode(PHP_EOL." - ", $forum->getMessages()));
+ Zend_Registry::get('logger')->debug(__METHOD__ . ' - forum : ' . implode(PHP_EOL . " - ",
+ $forum->getMessages()));
} catch (Exception $e) {
Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
}
Default_Model_ActivityLog::logActivity($authUser->member_id, null, $authUser->member_id,
Default_Model_ActivityLog::MEMBER_EMAIL_CONFIRMED, array());
$this->view->member = $authUser;
$this->view->username = $authUser->username;
$this->view->headScript()->appendFile('//www.google.com/recaptcha/api.js');
$this->view->addHelperPath(APPLICATION_LIB . '/Cgsmith/View/Helper', 'Cgsmith\\View\\Helper\\');
$this->view->form = new Default_Form_Register();
$this->view->overlay = $this->view->render('authorization/registerWelcome.phtml');
$this->storeAuthSessionData($authUser->member_id);
$tableProduct = new Default_Model_Project();
$this->view->products = $tableProduct->fetchAllProjectsForMember($authUser->member_id);
$this->forward('index', 'settings', 'default', array('member_id' => $authUser->member_id));
}
/**
* @param string|int $identity
*
* @throws Zend_Auth_Storage_Exception
* @throws exception
*/
protected function storeAuthSessionData($identity)
{
$authDataModel = new Default_Model_Authorization();
$authDataModel->storeAuthSessionDataByIdentity($identity);
}
/**
* ppload
*/
public function pploadloginAction()
{
$this->_helper->layout()->disableLayout();
// Init identity and credential
$identity = null;
$credential = null;
if (!empty($_REQUEST['identity'])) {
$identity = $_REQUEST['identity'];
} else {
if (!empty($_SERVER['PHP_AUTH_USER'])) {
$identity = $_SERVER['PHP_AUTH_USER'];
}
}
if (!empty($_REQUEST['credential'])) {
$credential = $_REQUEST['credential'];
} else {
if (!empty($_SERVER['PHP_AUTH_PW'])) {
$credential = $_SERVER['PHP_AUTH_PW'];
}
}
// Authenticate and get user data
$response = array('status' => 'error');
if ($identity && $credential) {
$authModel = new Default_Model_Authorization();
$authData = $authModel->getAuthDataFromApi($identity, $credential);
if (!empty($authData->member_id)) {
$response = array(
'status' => 'ok',
'member_id' => $authData->member_id
);
}
}
$this->_helper->json($response);
}
public function htmlloginAction()
{
$this->_helper->layout()->disableLayout();
//$this->_helper->viewRenderer->setNoRender(true);
}
public function validateAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
$this->view->headScript()->appendFile('//www.google.com/recaptcha/api.js');
$this->view->addHelperPath(APPLICATION_LIB . '/Cgsmith/View/Helper', 'Cgsmith\\View\\Helper\\');
$formRegister = new Default_Form_Register();
$name = $this->getParam('name');
$value = $this->getParam('value');
$result = $formRegister->getElement($name)->isValid($value);
$this->_helper->json(array('status' => $result, $name => $formRegister->getElement($name)->getMessages()));
}
- /**
- * @param string $string
- *
- * @return string
- * @throws Zend_Filter_Exception
- */
- protected function encodeString($string)
- {
- $encodeFilter = new Local_Filter_Url_Encrypt();
-
- return $encodeFilter->filter($string);
- }
-
/**
* @param array $val
*
* @throws Zend_Exception
*/
protected function sendAdminNotificationMail($val)
{
$config = Zend_Registry::get('config');
$receiver = $config->admin->email;
$oNotificationMail = new Default_Plugin_SendMail('tpl_newuser_notification');
$oNotificationMail->setReceiverMail($receiver);
$oNotificationMail->setTemplateVar('username', $val['username']);
$oNotificationMail->send();
}
/**
* @param array $userData
*
* @return int
*/
protected function storeNewUser($userData)
{
$userTable = new Default_Model_Member();
$userData = $userTable->storeNewUser($userData);
return $userData->member_id;
}
/**
* @param int $identity
*/
protected function updateUsersLastOnline($identity)
{
$authModel = new Default_Model_Authorization();
$authModel->updateUserLastOnline('member_id', $identity);
}
}
\ No newline at end of file
diff --git a/application/modules/default/controllers/ProductController.php b/application/modules/default/controllers/ProductController.php
index cab9b8cf3..8727a0b0d 100644
--- a/application/modules/default/controllers/ProductController.php
+++ b/application/modules/default/controllers/ProductController.php
@@ -1,3042 +1,3042 @@
.
**/
class ProductController extends Local_Controller_Action_DomainSwitch
{
const IMAGE_SMALL_UPLOAD = 'image_small_upload';
const IMAGE_BIG_UPLOAD = 'image_big_upload';
/**
* Zend_Controller_Request_Abstract object wrapping the request environment
*
* @var Zend_Controller_Request_Http
*/
protected $_request = null;
/** @var int */
protected $_projectId;
/** @var int */
protected $_collectionId;
/** @var Zend_Auth */
protected $_auth;
/** @var string */
protected $_browserTitlePrepend;
public function init()
{
parent::init();
$this->_projectId = (int)$this->getParam('project_id');
$this->_collectionId = (int)$this->getParam('collection_id');
$this->_auth = Zend_Auth::getInstance();
$this->_browserTitlePrepend = $this->templateConfigData['head']['browser_title_prepend'];
$action = $this->getRequest()->getActionName();
$title = $action;
if($action =='add')
{
$title = 'add product';
}else
{
$title = $action;
}
$this->view->headTitle($title . ' - ' . $this->getHeadTitle(), 'SET');
}
public function ratingAction()
{
$this->_helper->layout()->disableLayout();
if (array_key_exists($this->_projectId, $this->_authMember->projects)) {
return;
}
$userRating = (int)$this->getParam('rate', 0);
$modelRating = new Default_Model_DbTable_ProjectRating();
$modelRating->rateForProject($this->_projectId, $this->_authMember->member_id, $userRating);
}
public function pploadAction()
{
$this->_helper->layout->disableLayout();
$modelProduct = new Default_Model_Project();
$productInfo = $modelProduct->fetchProductInfo($this->_projectId);
//create ppload download hash: secret + collection_id + expire-timestamp
$salt = PPLOAD_DOWNLOAD_SECRET;
$collectionID = $productInfo->ppload_collection_id;
$timestamp = time() + 3600; // one hour valid
//20181009 ronald: change hash from MD5 to SHA512
//$hash = md5($salt . $collectionID . $timestamp); // order isn't important at all... just do the same when verifying
$hash = hash('sha512',$salt . $collectionID . $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->product = $productInfo;
$this->_helper->viewRenderer('/partials/pploadajax');
}
public function gettaggroupsforcatajaxAction() {
$this->_helper->layout()->disableLayout();
$catId = null;
$fileId = null;
if($this->hasParam('file_id')) {
$fileId = $this->getParam('file_id');
}
if($this->hasParam('project_cat_id')) {
$catId = $this->getParam('project_cat_id');
$catTagModel = new Default_Model_Tags();
$catTagGropuModel = new Default_Model_TagGroup();
$tagGroups = $catTagGropuModel->fetchTagGroupsForCategory($catId);
$tableTags = new Default_Model_DbTable_Tags();
$result = array();
$resultGroup = array();
foreach ($tagGroups as $group) {
$tags = $tableTags->fetchForGroupForSelect($group['tag_group_id']);
$selectedTags = null;
if(!empty($fileId)) {
$selectedTags = $catTagModel->getTagsArray($fileId, Default_Model_DbTable_Tags::TAG_TYPE_FILE,$group['tag_group_id']);
}
$group['tag_list'] = $tags;
$group['selected_tags'] = $selectedTags;
$result[] = $group;
}
$this->_helper->json(array('status' => 'ok', 'ResultSize' => count($tagGroups), 'tag_groups' => $result));
return;
}
$this->_helper->json(array('status' => 'error'));
}
private function getTagGroupsForCat($fileId) {
$modelProduct = new Default_Model_Project();
$productInfo = $modelProduct->fetchProductInfo($this->_projectId);
$catId = $productInfo->project_category_id;
if(!empty($catId)) {
$catTagModel = new Default_Model_Tags();
$catTagGropuModel = new Default_Model_TagGroup();
$tagGroups = $catTagGropuModel->fetchTagGroupsForCategory($catId);
$tableTags = new Default_Model_DbTable_Tags();
$result = array();
foreach ($tagGroups as $group) {
$tags = $tableTags->fetchForGroupForSelect($group['tag_group_id']);
$selectedTags = null;
if(!empty($fileId)) {
$selectedTags = $catTagModel->getTagsArray($fileId, Default_Model_DbTable_Tags::TAG_TYPE_FILE,$group['tag_group_id']);
}
$group['tag_list'] = $tags;
$group['selected_tags'] = $selectedTags;
$result[] = $group;
}
return $result;
}
return null;
}
private function getFileDownloadCount($collection_id, $fileId) {
$modelFiles = new Default_Model_DbTable_PploadFiles();
$countAll = $modelFiles->fetchCountDownloadsForFileAllTime($collection_id, $fileId);
$countToday = $modelFiles->fetchCountDownloadsForFileToday($collection_id, $fileId);
$count = (int)$countAll+ (int)$countToday;
return $count;
}
public function listsamesourceurlAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
$modelProduct = new Default_Model_Project();
$productInfo = $modelProduct->fetchProductInfo($this->_projectId);
$result = $modelProduct->getSourceUrlProjects($productInfo->source_url);
$r = '';
foreach ($result as $value) {
$r=$r.'
'
.'
'.$value['title'].'
'
.'
'
.'
'.$value['created_at'].'
'
.'
'.$value['changed_at'].'
'
.'
';
}
$r = $r.'
';
/*$response='';*/
echo $r;
}
public function getfilesajaxAction() {
$this->_helper->layout()->disableLayout();
$collection_id = null;
$file_status = null;
$ignore_status_code = null;
if($this->hasParam('status')) {
$file_status = $this->getParam('status');
}
if($this->hasParam('ignore_status_code')) {
$ignore_status_code = $this->getParam('ignore_status_code');
}
$filesTable = new Default_Model_DbTable_PploadFiles();
if($this->hasParam('collection_id')) {
$collection_id = $this->getParam('collection_id');
$result = array();
//Load files from DB
if($ignore_status_code == 0 && $file_status == 'active') {
$files = $filesTable->fetchAllActiveFilesForProject($collection_id);
} else {
$files = $filesTable->fetchAllFilesForProject($collection_id);
}
//Check, if the project category has tag-grous
$modelProduct = new Default_Model_Project();
$productInfo = $modelProduct->fetchProductInfo($this->_projectId);
$catTagGropuModel = new Default_Model_TagGroup();
$tagGroups = $catTagGropuModel->fetchTagGroupsForCategory($productInfo->project_category_id);
foreach ($files as $file) {
//add tag grous, if needed
if(!empty($tagGroups)) {
$groups = $this->getTagGroupsForCat($file['id']);
$file['tag_groups'] = $groups;
}
//Download Counter
$helperUserRole = new Backend_View_Helper_UserRole();
$userRoleName = $helperUserRole->userRole();
//new counter IP based
$counterUkAll = $file['count_dl_all_uk'];
$counterNoUkAll = $file['count_dl_all_nouk'];
$counterNew = 0;
if(!empty($counterUkAll)) {
$counterNew = $counterNew + $counterUkAll;
}
if(!empty($counterNoUkAll)) {
$counterNew = $counterNew + $counterNoUkAll;
}
$file['downloaded_count_uk'] = $counterNew;
if ($userRoleName == Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN) {
//$file['downloaded_count_live'] = $this->getFileDownloadCount($collection_id, $file['id']);
$counterToday = $file['count_dl_today'];
$counterAll = $file['count_dl_all'];
$counter = 0;
if(!empty($counterToday)) {
$counter = $counterToday;
}
if(!empty($counterAll)) {
$counter = $counter + $counterAll;
}
$file['downloaded_count_live'] = $counter;
} else {
unset($file['count_dl_all']);
unset($file['count_dl_all_nouk']);
unset($file['count_dl_all_uk']);
unset($file['count_dl_today']);
unset($file['downloaded_count']);
}
$result[] = $file;
}
$this->_helper->json(array('status' => 'success', 'ResultSize' => count($result), 'files' => $result));
return;
}
$this->_helper->json(array('status' => 'error'));
}
public function getfiletagsajaxAction() {
$this->_helper->layout()->disableLayout();
$fileId = null;
if($this->hasParam('file_id')) {
$fileId = $this->getParam('file_id');
$tagModel = new Default_Model_Tags();
$fileTags = $tagModel->getFileTags($fileId);
$this->_helper->json(array('status' => 'ok', 'ResultSize' => count($fileTags), 'file_tags' => $fileTags));
return;
}
$this->_helper->json(array('status' => 'error'));
}
public function initJsonForReact(){
$modelProduct = new Default_Model_Project();
$productInfo = $modelProduct->fetchProductInfo($this->_projectId);
$this->view->product = $productInfo;
if (empty($this->view->product)) {
throw new Zend_Controller_Action_Exception('This page does not exist', 404);
}
if(null != $this->_authMember) {
$this->view->authMemberJson = Zend_Json::encode( $this->_authMember );
}
$helpAddDefaultScheme = new Default_View_Helper_AddDefaultScheme();
$this->view->product->title = Default_Model_HtmlPurify::purify($this->view->product->title);
$this->view->product->description = Default_Model_BBCode::renderHtml(Default_Model_HtmlPurify::purify($this->view->product->description));
$this->view->product->version = Default_Model_HtmlPurify::purify($this->view->product->version);
$this->view->product->link_1 = Default_Model_HtmlPurify::purify($helpAddDefaultScheme->addDefaultScheme($this->view->product->link_1),Default_Model_HtmlPurify::ALLOW_URL);
$this->view->product->source_url = Default_Model_HtmlPurify::purify($this->view->product->source_url,Default_Model_HtmlPurify::ALLOW_URL);
$this->view->product->facebook_code = Default_Model_HtmlPurify::purify($this->view->product->facebook_code,Default_Model_HtmlPurify::ALLOW_URL);
$this->view->product->twitter_code = Default_Model_HtmlPurify::purify($this->view->product->twitter_code,Default_Model_HtmlPurify::ALLOW_URL);
$this->view->product->google_code = Default_Model_HtmlPurify::purify($this->view->product->google_code,Default_Model_HtmlPurify::ALLOW_URL);
$this->view->productJson = Zend_Json::encode($this->view->product );
$fmodel =new Default_Model_DbTable_PploadFiles();
$files = $fmodel->fetchFilesForProject($this->view->product->ppload_collection_id);
$salt = PPLOAD_DOWNLOAD_SECRET;
$filesList = array();
foreach ($files as $file) {
$timestamp = time() + 3600; // one hour valid
$hash = hash('sha512',$salt . $file['collection_id'] . $timestamp); // order isn't important at all... just do the same when verifying
$url = PPLOAD_API_URI . 'files/download/id/' . $file['id'] . '/s/' . $hash . '/t/' . $timestamp;
if(null != $this->_authMember) {
$url .= '/u/' . $this->_authMember->member_id;
}
$url .= '/lt/filepreview/' . $file['name'];
$file['url'] = urlencode($url);
$filesList[] = $file;
}
$this->view->filesJson = Zend_Json::encode($filesList);
$this->view->filesCntJson = Zend_Json::encode($fmodel->fetchFilesCntForProject($this->view->product->ppload_collection_id));
$tableProjectUpdates = new Default_Model_ProjectUpdates();
$this->view->updatesJson = Zend_Json::encode($tableProjectUpdates->fetchProjectUpdates($this->_projectId));
$tableProjectRatings = new Default_Model_DbTable_ProjectRating();
$ratings = $tableProjectRatings->fetchRating($this->_projectId);
$cntRatingsActive = 0;
foreach ($ratings as $p) {
if($p['rating_active']==1) $cntRatingsActive =$cntRatingsActive+1;
}
$this->view->ratingsJson = Zend_Json::encode($ratings);
$this->view->cntRatingsActiveJson = Zend_Json::encode($cntRatingsActive);
$identity = Zend_Auth::getInstance()->getStorage()->read();
if (Zend_Auth::getInstance()->hasIdentity()){
$ratingOfUserJson = $tableProjectRatings->getProjectRateForUser($this->_projectId,$identity->member_id);
$this->view->ratingOfUserJson = Zend_Json::encode($ratingOfUserJson);
}else{
$this->view->ratingOfUserJson = Zend_Json::encode(null);
}
$tableProjectFollower = new Default_Model_DbTable_ProjectFollower();
$likes = $tableProjectFollower->fetchLikesForProject($this->_projectId);
$this->view->likeJson = Zend_Json::encode($likes);
$projectplings = new Default_Model_ProjectPlings();
$plings = $projectplings->fetchPlingsForProject($this->_projectId);
$this->view->projectplingsJson = Zend_Json::encode($plings);
$tableProject = new Default_Model_Project();
$galleryPictures = $tableProject->getGalleryPictureSources($this->_projectId);
$this->view->galleryPicturesJson = Zend_Json::encode($galleryPictures);
$tagmodel = new Default_Model_Tags();
$tagsuser = $tagmodel->getTagsUser($this->_projectId, Default_Model_Tags::TAG_TYPE_PROJECT);
$tagssystem = $tagmodel->getTagsSystemList($this->_projectId);
$this->view->tagsuserJson = Zend_Json::encode($tagsuser);
$this->view->tagssystemJson = Zend_Json::encode($tagssystem);
$modelComments = new Default_Model_ProjectComments();
$offset = 0;
$testComments = $modelComments->getCommentTreeForProjectList($this->_projectId);
$this->view->commentsJson = Zend_Json::encode($testComments);
$modelClone = new Default_Model_ProjectClone();
$origins = $modelClone->fetchOrigins($this->_projectId);
$this->view->originsJson = Zend_Json::encode($origins);
$related = $modelClone->fetchRelatedProducts($this->_projectId);
$this->view->relatedJson = Zend_Json::encode($related);
$moreProducts = $tableProject->fetchMoreProjects($this->view->product, 8);
$this->view->moreProductsJson = Zend_Json::encode($moreProducts);
$moreProducts = $tableProject->fetchMoreProjectsOfOtherUsr($this->view->product, 8);
$this->view->moreProductsOfOtherUsrJson = Zend_Json::encode($moreProducts);
}
public function indexAction()
{
if (!empty($this->_collectionId)) {
$modelProduct = new Default_Model_Project();
$productInfo = $modelProduct->fetchProductForCollectionId($this->_collectionId);
$this->_projectId = $productInfo->project_id;
}
if (empty($this->_projectId)) {
$this->redirect('/explore');
}
$this->view->paramPageId = (int)$this->getParam('page');
$this->view->member_id = null;
if(null != $this->_authMember && null != $this->_authMember->member_id) {
$this->view->member_id = $this->_authMember->member_id;
}
// $this->fetchDataForIndexView();
$modelProduct = new Default_Model_Project();
$productInfo = $modelProduct->fetchProductInfo($this->_projectId);
if (empty($productInfo)) {
throw new Zend_Controller_Action_Exception('This page does not exist', 404);
}
//Check if this is a collection
if($productInfo->type_id == $modelProduct::PROJECT_TYPE_COLLECTION) {
$this->redirect('/c/'.$this->_projectId);
}
$this->view->product = $productInfo;
$this->view->headTitle($productInfo->title . ' - ' . $this->getHeadTitle(), 'SET');
$this->view->cat_id = $this->view->product->project_category_id;
//create ppload download hash: secret + collection_id + expire-timestamp
$salt = PPLOAD_DOWNLOAD_SECRET;
$collectionID = $this->view->product->ppload_collection_id;
$timestamp = time() + 3600; // one hour valid
//20181009 ronald: change hash from MD5 to SHA512
//$hash = md5($salt . $collectionID . $timestamp); // order isn't important at all... just do the same when verifying
$hash = hash('sha512',$salt . $collectionID . $timestamp); // order isn't important at all... just do the same when verifying
$this->view->download_hash = $hash;
$this->view->download_timestamp = $timestamp;
$helperUserIsOwner = new Default_View_Helper_UserIsOwner();
$helperIsProjectActive = new Default_View_Helper_IsProjectActive();
if ((false === $helperIsProjectActive->isProjectActive($this->view->product->project_status))
AND (false === $helperUserIsOwner->UserIsOwner($this->view->product->member_id))
) {
throw new Zend_Controller_Action_Exception('This page does not exist', 404);
}
if (APPLICATION_ENV != 'searchbotenv') {
$tablePageViews = new Default_Model_DbTable_StatPageViews();
$tablePageViews->savePageView($this->_projectId, $this->getRequest()->getClientIp(),
$this->_authMember->member_id);
}
$fmodel =new Default_Model_DbTable_PploadFiles();
$filesList = array();
if(isset($this->view->product->ppload_collection_id)) {
$files = $fmodel->fetchFilesForProject($this->view->product->ppload_collection_id);
if(!empty($files)) {
foreach ($files as $file) {
$timestamp = time() + 3600; // one hour valid
$hash = hash('sha512',$salt . $file['collection_id'] . $timestamp); // order isn't important at all... just do the same when verifying
$url = PPLOAD_API_URI . 'files/download/id/' . $file['id'] . '/s/' . $hash . '/t/' . $timestamp;
if(null != $this->_authMember) {
$url .= '/u/' . $this->_authMember->member_id;
}
$url .= '/lt/filepreview/' . $file['name'];
$file['url'] = urlencode($url);
//If this file is a video, we have to convert it for preview
if(!empty($file['type']) && in_array($file['type'], Backend_Commands_ConvertVideo::$VIDEO_FILE_TYPES) && empty($file['ppload_file_preview_id'])) {
$queue = Local_Queue_Factory::getQueue();
$command = new Backend_Commands_ConvertVideo($file['collection_id'], $file['id'], $file['type']);
$queue->send(serialize($command));
}
if(!empty($file['url_preview'])) {
$file['url_preview'] = urlencode($file['url_preview']);
}
if(!empty($file['url_thumb'])) {
$file['url_thumb'] = urlencode($file['url_thumb']);
}
$filesList[] = $file;
}
}
}
$this->view->filesJson = Zend_Json::encode($filesList);
//gitlab
if($this->view->product->is_gitlab_project) {
$gitProject = $this->fetchGitlabProject($this->view->product->gitlab_project_id);
if(null == $gitProject) {
$this->view->product->is_gitlab_project = 0;
$this->view->product->show_gitlab_project_issues = 0;
$this->view->product->use_gitlab_project_readme = 0;
$this->view->product->gitlab_project_id = null;
} else {
$this->view->gitlab_project = $gitProject;
//show issues?
if($this->view->product->show_gitlab_project_issues) {
$issues = $this->fetchGitlabProjectIssues($this->view->product->gitlab_project_id);
$this->view->gitlab_project_issues = $issues;
$this->view->gitlab_project_issues_url = $this->view->gitlab_project['web_url'] . '/issues/';
}
//show readme.md?
if($this->view->product->use_gitlab_project_readme && null != $this->view->gitlab_project['readme_url']) {
$config = Zend_Registry::get('config')->settings->server->opencode;
$readme = $this->view->gitlab_project['web_url'].'/raw/master/README.md?inline=false';
$httpClient = new Zend_Http_Client($readme, array('keepalive' => true, 'strictredirects' => true));
$httpClient->resetParameters();
$httpClient->setUri($readme);
$httpClient->setHeaders('Private-Token', $config->private_token);
$httpClient->setHeaders('Sudo', $config->user_sudo);
$httpClient->setHeaders('User-Agent', $config->user_agent);
$httpClient->setMethod(Zend_Http_Client::GET);
$response = $httpClient->request();
$body = $response->getRawBody();
if (count($body) == 0) {
return array();
}
include_once('Parsedown.php');
$Parsedown = new Parsedown();
$this->view->readme = $Parsedown->text($body);
} else {
$this->view->readme = null;
}
}
}
$storeConfig = Zend_Registry::isRegistered('store_config') ? Zend_Registry::get('store_config') : null;
if($storeConfig->layout_pagedetail && $storeConfig->isRenderReact()){
$this->initJsonForReact();
$this->_helper->viewRenderer('index-react');
}
}
public function showAction()
{
$this->view->authMember = $this->_authMember;
$this->_helper->viewRenderer('index');
$this->indexAction();
}
public function addAction()
{
$this->view->member = $this->_authMember;
$this->view->mode = 'add';
$form = new Default_Form_Product(array('member_id' => $this->view->member->member_id));
$this->view->form = $form;
if ($this->_request->isGet()) {
return;
}
if (isset($_POST['cancel'])) { // user cancel function
$this->redirect('/member/' . $this->_authMember->member_id . '/news/');
}
if (false === $form->isValid($_POST)) { // form not valid
$this->view->form = $form;
$this->view->error = 1;
return;
}
$values = $form->getValues();
$imageModel = new Default_Model_DbTable_Image();
try {
$values['image_small'] = $imageModel->saveImage($form->getElement(self::IMAGE_SMALL_UPLOAD));
} catch (Exception $e) {
Zend_Registry::get('logger')->err(__METHOD__ . ' - ERROR upload productPicture - ' . print_r($e, true));
}
// form was valid, so we can set status to active
$values['status'] = Default_Model_DbTable_Project::PROJECT_ACTIVE;
// save new project
$modelProject = new Default_Model_Project();
Zend_Registry::get('logger')->info(__METHOD__ . ' - $post: ' . print_r($_POST, true));
Zend_Registry::get('logger')->info(__METHOD__ . ' - $files: ' . print_r($_FILES, true));
- Zend_Registry::get('logger')->info(__METHOD__ . ' _ input values: ' . print_r($values, true));
+ Zend_Registry::get('logger')->info(__METHOD__ . ' - input values: ' . print_r($values, true));
$newProject = null;
try {
if (isset($values['project_id'])) {
$newProject = $modelProject->updateProject($values['project_id'], $values);
} else {
$newProject = $modelProject->createProject($this->_authMember->member_id, $values, $this->_authMember->username);
//$this->createSystemPlingForNewProject($newProject->project_id);
}
} catch (Exception $exc) {
Zend_Registry::get('logger')->warn(__METHOD__ . ' - traceString: ' . $exc->getTraceAsString());
}
if (!$newProject) {
$this->_helper->flashMessenger->addMessage('You did not choose a Category in the last level.
');
$this->forward('add');
return;
}
//update the gallery pics
$mediaServerUrls = $this->saveGalleryPics($form->gallery->upload->upload_picture);
$modelProject->updateGalleryPictures($newProject->project_id, $mediaServerUrls);
//If there is no Logo, we take the 1. gallery pic
if (!isset($values['image_small']) || $values['image_small'] == '') {
$values['image_small'] = $mediaServerUrls[0];
$newProject = $modelProject->updateProject($newProject->project_id, $values);
}
//New Project in Session, for AuthValidation (owner)
$this->_auth->getIdentity()->projects[$newProject->project_id] = array('project_id' => $newProject->project_id);
$modelTags = new Default_Model_Tags();
if ($values['tagsuser']) {
$modelTags->processTagsUser($newProject->project_id, implode(',', $values['tagsuser']),Default_Model_Tags::TAG_TYPE_PROJECT);
} else {
$modelTags->processTagsUser($newProject->project_id, null, Default_Model_Tags::TAG_TYPE_PROJECT);
}
if ($values['is_original']) {
$modelTags->processTagProductOriginal($newProject->project_id, $values['is_original']);
}
//set license, if needed
$licenseTag = $form->getElement('license_tag_id')->getValue();
//only set/update license tags if something was changed
if ($licenseTag && count($licenseTag) > 0) {
$modelTags->saveLicenseTagForProject($newProject->project_id, $licenseTag);
$activityLog = new Default_Model_ActivityLog();
$activityLog->logActivity($newProject->project_id, $newProject->project_id, $this->_authMember->member_id,Default_Model_ActivityLog::PROJECT_LICENSE_CHANGED, array('title' => 'Set new License Tag', 'description' => 'New TagId: ' . $licenseTag));
}
$isGitlabProject = $form->getElement('is_gitlab_project')->getValue();
$gitlabProjectId = $form->getElement('gitlab_project_id')->getValue();
if ($isGitlabProject && $gitlabProjectId == 0) {
$values['gitlab_project_id'] = null;
}
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($newProject->project_id, $newProject->member_id, Default_Model_ActivityLog::PROJECT_CREATED, $newProject->toArray());
// ppload
$this->processPploadId($newProject);
try {
if (100 < $this->_authMember->roleId) {
if (Default_Model_Spam::hasSpamMarkers($newProject->toArray())) {
$tableReportComments = new Default_Model_DbTable_ReportProducts();
$tableReportComments->save(array('project_id' => $newProject->project_id, 'reported_by' => 24, 'text' => "System: automatic spam detection"));
}
Default_Model_DbTable_SuspicionLog::logProject($newProject, $this->_authMember, $this->getRequest());
}
} catch (Zend_Exception $e) {
Zend_Registry::get('logger')->err($e->getMessage());
}
$this->redirect('/member/' . $newProject->member_id . '/products/');
}
private function saveGalleryPics($form_element)
{
$imageModel = new Default_Model_DbTable_Image();
return $imageModel->saveImages($form_element);
}
/**
* @param $projectData
*
* @throws Zend_Exception
* @throws Zend_Queue_Exception
*/
protected function createTaskWebsiteOwnerVerification($projectData)
{
if (empty($projectData->link_1)) {
return;
}
$checkAuthCode = new Local_Verification_WebsiteProject();
$authCode = $checkAuthCode->generateAuthCode(stripslashes($projectData->link_1));
$queue = Local_Queue_Factory::getQueue();
$command = new Backend_Commands_CheckProjectWebsite($projectData->project_id, $projectData->link_1, $authCode);
$queue->send(serialize($command));
}
/**
* @param $projectData
*/
protected function processPploadId($projectData)
{
if ($projectData->ppload_collection_id) {
$pploadApi = new Ppload_Api(array(
'apiUri' => PPLOAD_API_URI,
'clientId' => PPLOAD_CLIENT_ID,
'secret' => PPLOAD_SECRET
));
// Update collection information
$collectionCategory = $projectData->project_category_id;
if (Default_Model_Project::PROJECT_ACTIVE == $projectData->status) {
$collectionCategory .= '-published';
}
$collectionRequest = array(
'title' => $projectData->title,
'description' => $projectData->description,
'category' => $collectionCategory,
'content_id' => $projectData->project_id
);
$collectionResponse = $pploadApi->putCollection($projectData->ppload_collection_id, $collectionRequest);
// Store product image as collection thumbnail
$this->_updatePploadMediaCollectionthumbnail($projectData);
}
}
/**
* ppload
*/
protected function _updatePploadMediaCollectionthumbnail($projectData)
{
if (empty($projectData->ppload_collection_id)
|| empty($projectData->image_small)
) {
return false;
}
$pploadApi = new Ppload_Api(array(
'apiUri' => PPLOAD_API_URI,
'clientId' => PPLOAD_CLIENT_ID,
'secret' => PPLOAD_SECRET
));
$filename = sys_get_temp_dir() . '/' . $projectData->image_small;
if (false === file_exists(dirname($filename))) {
mkdir(dirname($filename), 0777, true);
}
$viewHelperImage = new Default_View_Helper_Image();
$uri = $viewHelperImage->Image($projectData->image_small, array(
'width' => 600,
'height' => 600
));
file_put_contents($filename, file_get_contents($uri));
$mediaCollectionthumbnailResponse =
$pploadApi->postMediaCollectionthumbnail($projectData->ppload_collection_id, array('file' => $filename));
unlink($filename);
if (isset($mediaCollectionthumbnailResponse->status)
&& $mediaCollectionthumbnailResponse->status == 'success'
) {
return true;
}
return false;
}
public function editAction()
{
if (empty($this->_projectId)) {
$this->redirect($this->_helper->url('add'));
return;
}
$this->_helper->viewRenderer('add'); // we use the same view as you can see at add a product
$this->view->mode = 'edit';
$projectTable = new Default_Model_DbTable_Project();
$projectModel = new Default_Model_Project();
$modelTags = new Default_Model_Tags();
$tagTable = new Default_Model_DbTable_Tags();
//check if product with given id exists
$projectData = $projectTable->find($this->_projectId)->current();
if (empty($projectData)) {
$this->redirect($this->_helper->url('add'));
return;
}
$member = null;
if (isset($this->_authMember) AND (false === empty($this->_authMember->member_id))) {
$member = $this->_authMember;
} else {
throw new Zend_Controller_Action_Exception('no authorization found');
}
if (("admin" == $this->_authMember->roleName)) {
$modelMember = new Default_Model_Member();
$member = $modelMember->fetchMember($projectData->member_id, false);
}
//set ppload-collection-id in view
$this->view->ppload_collection_id = $projectData->ppload_collection_id;
$this->view->project_id = $projectData->project_id;
$this->view->product = $projectData;
//create ppload download hash: secret + collection_id + expire-timestamp
$salt = PPLOAD_DOWNLOAD_SECRET;
$collectionID = $projectData->ppload_collection_id;
$timestamp = time() + 3600; // one hour valid
//20181009 ronald: change hash from MD5 to SHA512
//$hash = md5($salt . $collectionID . $timestamp); // order isn't important at all... just do the same when verifying
$hash = hash('sha512',$salt . $collectionID . $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 = $member->member_id;
$this->view->member = $member;
//read the already existing gallery pics and add them to the form
$sources = $projectModel->getGalleryPictureSources($this->_projectId);
//get the gitlab projects for this user
//setup form
$form = new Default_Form_Product(array('pictures' => $sources, 'member_id' => $this->view->member_id));
if (false === empty($projectData->image_small)) {
$form->getElement('image_small_upload')->setRequired(false);
}
$form->getElement('preview')->setLabel('Save');
$form->removeElement('project_id'); // we don't need this field in edit mode
if ($this->_request->isGet()) {
$form->populate($projectData->toArray());
// $form->populate(array('tags' => $modelTags->getTags($projectData->project_id, Default_Model_Tags::TAG_TYPE_PROJECT)));
$form->populate(array('tagsuser' => $modelTags->getTagsUser($projectData->project_id, Default_Model_Tags::TAG_TYPE_PROJECT)));
$form->getElement('image_small')->setValue($projectData->image_small);
//Bilder voreinstellen
$form->getElement(self::IMAGE_SMALL_UPLOAD)->setValue($projectData->image_small);
$licenseTags = $tagTable->fetchLicenseTagsForProject($this->_projectId);
$licenseTag = null;
if($licenseTags) {
$licenseTag = $licenseTags[0]['tag_id'];
}
$form->getElement('license_tag_id')->setValue($licenseTag);
$is_original = $modelTags->isProuductOriginal($projectData->project_id);
if($is_original){
$form->getElement('is_original')->checked= true;
}
$this->view->form = $form;
return;
}
if (isset($_POST['cancel'])) { // user cancel function
$this->redirect('/member/' . $member->member_id . '/news/');
}
if (false === $form->isValid($_POST, $this->_projectId)) { // form not valid
$this->view->form = $form;
$this->view->error = 1;
return;
}
$values = $form->getValues();
//set license, if needed
$tagList = $modelTags->getTagsArray($this->_projectId, $modelTags::TAG_TYPE_PROJECT, $modelTags::TAG_LICENSE_GROUPID);
$oldLicenseTagId = null;
if($tagList && count($tagList) == 1) {
$oldLicenseTagId = $tagList[0]['tag_id'];
}
$licenseTag = $form->getElement('license_tag_id')->getValue();
//only set/update license tags if something was changed
if($licenseTag <> $oldLicenseTagId) {
$modelTags->saveLicenseTagForProject($this->_projectId, $licenseTag);
$activityLog = new Default_Model_ActivityLog();
$activityLog->logActivity($this->_projectId, $this->_projectId, $this->_authMember->member_id, Default_Model_ActivityLog::PROJECT_LICENSE_CHANGED, array('title' => 'License Tag', 'description' => 'Old TagId: '.$oldLicenseTagId.' - New TagId: '.$licenseTag));
}
//gitlab project
$isGitlabProject = $form->getElement('is_gitlab_project')->getValue();
$gitlabProjectId = $form->getElement('gitlab_project_id')->getValue();
if($isGitlabProject && $gitlabProjectId == 0) {
$values['gitlab_project_id'] = null;
}
$imageModel = new Default_Model_DbTable_Image();
try {
$uploadedSmallImage = $imageModel->saveImage($form->getElement(self::IMAGE_SMALL_UPLOAD));
$values['image_small'] = $uploadedSmallImage ? $uploadedSmallImage : $values['image_small'];
} catch (Exception $e) {
Zend_Registry::get('logger')->err(__METHOD__ . ' - ERROR upload productPicture - ' . print_r($e, true));
}
// save changes
- $projectData->setFromArray($values);
+ $projectModel->updateProject($this->_projectId, $values);
//update the gallery pics
$pictureSources = array_merge($values['gallery']['online_picture'],
$this->saveGalleryPics($form->gallery->upload->upload_picture));
$projectModel->updateGalleryPictures($this->_projectId, $pictureSources);
//If there is no Logo, we take the 1. gallery pic
if (!isset($projectData->image_small) || $projectData->image_small == '') {
$projectData->image_small = $pictureSources[0];
}
//20180219 ronald: we set the changed_at only by new files or new updates
//$projectData->changed_at = new Zend_Db_Expr('NOW()');
$projectData->save();
$modelTags->processTagProductOriginal($this->_projectId,$values['is_original']);
if($values['tagsuser']) {
$modelTags->processTagsUser($this->_projectId,implode(',',$values['tagsuser']), Default_Model_Tags::TAG_TYPE_PROJECT);
}else
{
$modelTags->processTagsUser($this->_projectId,null, Default_Model_Tags::TAG_TYPE_PROJECT);
}
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $this->_authMember->member_id, Default_Model_ActivityLog::PROJECT_EDITED, $projectData->toArray());
// ppload
$this->processPploadId($projectData);
try {
if (100 < $this->_authMember->roleId) {
if (Default_Model_Spam::hasSpamMarkers($projectData->toArray())) {
$tableReportComments = new Default_Model_DbTable_ReportProducts();
$tableReportComments->save(array('project_id' => $projectData->project_id, 'reported_by' => 24, 'text' => "System: automatic spam detection on product edit"));
}
Default_Model_DbTable_SuspicionLog::logProject($projectData, $this->_authMember, $this->getRequest());
}
} catch (Zend_Exception $e) {
Zend_Registry::get('logger')->err($e->getMessage());
}
$helperBuildMemberUrl = new Default_View_Helper_BuildMemberUrl();
$this->redirect($helperBuildMemberUrl->buildMemberUrl($member->username, 'products'));
}
public function getupdatesajaxAction()
{
$this->view->authMember = $this->_authMember;
$tableProject = new Default_Model_ProjectUpdates();
$updates = $tableProject->fetchProjectUpdates($this->_projectId);
foreach ($updates as $key => $update) {
$updates[$key]['title'] = Default_Model_HtmlPurify::purify($update['title']);
$updates[$key]['text'] = Default_Model_BBCode::renderHtml(Default_Model_HtmlPurify::purify(htmlentities($update['text'], ENT_QUOTES | ENT_IGNORE)));
$updates[$key]['raw_title'] = $update['title'];
$updates[$key]['raw_text'] = $update['text'];
}
$result['status'] = 'success';
$result['ResultSize'] = count($updates);
$result['updates'] = $updates;
$this->_helper->json($result);
}
public function saveupdateajaxAction()
{
$filter =
new Zend_Filter_Input(
array(
'*' => 'StringTrim'
),
array(
'*' => array(),
'title' => array(
new Zend_Validate_StringLength(array('min' => 3, 'max' => 200)),
'presence' => 'required',
'allowEmpty' => false
),
'text' => array(
new Zend_Validate_StringLength(array('min' => 3, 'max' => 16383)),
'presence' => 'required',
'allowEmpty' => false
),
'update_id' => array('digits', 'allowEmpty' => true)
), $this->getAllParams(), array('allowEmpty' => true));
if ($filter->hasInvalid() OR $filter->hasMissing() OR $filter->hasUnknown()) {
$result['status'] = 'error';
$result['messages'] = $filter->getMessages();
$result['update_id'] = null;
$this->_helper->json($result);
}
$update_id = $filter->getEscaped('update_id');
$tableProjectUpdates = new Default_Model_ProjectUpdates();
//Save update
if (!empty($update_id)) {
//Update old update
$updateArray = array();
$updateArray['title'] = $filter->getUnescaped('title');
$updateArray['text'] = $filter->getUnescaped('text');
$updateArray['changed_at'] = new Zend_Db_Expr('Now()');
$countUpdated = $tableProjectUpdates->update($updateArray, 'project_update_id = ' . $update_id);
} else {
//Add new update
$updateArray = array();
$updateArray['title'] = $filter->getUnescaped('title');
$updateArray['text'] = $filter->getUnescaped('text');
$updateArray['public'] = 1;
$updateArray['project_id'] = $this->_projectId;
$updateArray['member_id'] = $this->_authMember->member_id;
$updateArray['created_at'] = new Zend_Db_Expr('Now()');
$updateArray['changed_at'] = new Zend_Db_Expr('Now()');
$rowset = $tableProjectUpdates->save($updateArray);
$update_id = $rowset->project_update_id;
//20180219 ronald: we set the changed_at only by new files or new updates
$projectTable = new Default_Model_Project();
$projectUpdateRow = $projectTable->find($this->_projectId)->current();
if (count($projectUpdateRow) == 1) {
$projectUpdateRow->changed_at = new Zend_Db_Expr('NOW()');
$projectUpdateRow->save();
}
}
$result['status'] = 'success';
$result['update_id'] = $update_id;
$this->_helper->json($result);
}
public function deleteupdateajaxAction()
{
$this->view->authMember = $this->_authMember;
$tableProject = new Default_Model_ProjectUpdates();
$params = $this->getAllParams();
$project_update_id = $params['update_id'];
$updateArray = array();
$updateArray['public'] = 0;
$updateArray['changed_at'] = new Zend_Db_Expr('Now()');
$tableProject->update($updateArray, 'project_update_id = ' . $project_update_id);
$result['status'] = 'success';
$result['update_id'] = $project_update_id;
$this->_helper->json($result);
}
public function updatesAction()
{
$this->view->authMember = $this->_authMember;
$tableProject = new Default_Model_Project();
$this->view->product = $tableProject->fetchProductInfo($this->_projectId);
if (false === isset($this->view->product)) {
throw new Zend_Controller_Action_Exception('This page does not exist', 404);
}
$this->view->relatedProducts = $tableProject->fetchSimilarProjects($this->view->product, 6);
$this->view->supporter = $tableProject->fetchProjectSupporter($this->_projectId);
$this->view->product_views = $tableProject->fetchProjectViews($this->_projectId);
$modelPlings = new Default_Model_DbTable_Plings();
$this->view->comments = $modelPlings->getCommentsForProject($this->_projectId, 10);
$tableMember = new Default_Model_Member();
$this->view->member = $tableMember->fetchMemberData($this->view->product->member_id);
$this->view->updates = $tableProject->fetchProjectUpdates($this->_projectId);
$tablePageViews = new Default_Model_DbTable_StatPageViews();
$tablePageViews->savePageView($this->_projectId, $this->getRequest()->getClientIp(),
$this->_authMember->member_id);
}
public function updateAction()
{
$this->_helper->layout()->setLayout('flat_ui');
$this->view->headScript()->setFile('');
$this->view->headLink()->setStylesheet('');
$this->_helper->viewRenderer('add');
$form = new Default_Form_ProjectUpdate();
$projectTable = new Default_Model_Project();
$projectData = null;
$projectUpdateId = (int)$this->getParam('upid');
$this->view->member = $this->_authMember;
$this->view->title = 'Add an update for your product';
$activityLogType = Default_Model_ActivityLog::PROJECT_ITEM_CREATED;
if (false === empty($projectUpdateId)) {
$this->view->title = 'Edit an product update';
$projectData = $projectTable->find($projectUpdateId)->current();
$form->populate($projectData->toArray());
$form->getElement('upid')->setValue($projectUpdateId);
$activityLogType = Default_Model_ActivityLog::PROJECT_ITEM_EDITED;
}
$this->view->form = $form;
if ($this->_request->isGet()) {
return;
}
if (isset($_POST['cancel'])) { // user cancel function
$this->_redirect('/member/' . $this->_authMember->member_id . '/news/');
}
if (false === $form->isValid($_POST)) { // form not valid
$this->view->form = $form;
$this->view->error = 1;
return;
}
$values = $form->getValues();
$projectUpdateRow = $projectTable->find($values['upid'])->current();
if (count($projectUpdateRow) == 0) {
$projectUpdateRow = $projectTable->createRow($values);
$projectUpdateRow->project_id = $values['upid'];
$projectUpdateRow->created_at = new Zend_Db_Expr('NOW()');
$projectUpdateRow->start_date = new Zend_Db_Expr('NOW()');
$projectUpdateRow->member_id = $this->_authMember->member_id;
$projectUpdateRow->creator_id = $this->_authMember->member_id;
$projectUpdateRow->status = Default_Model_Project::PROJECT_ACTIVE;
$projectUpdateRow->type_id = 2;
$projectUpdateRow->pid = $this->_projectId;
} else {
$projectUpdateRow->setFromArray($values);
//20180219 ronald: we set the changed_at only by new files or new updates
//$projectUpdateRow->changed_at = new Zend_Db_Expr('NOW()');
}
$lastId = $projectUpdateRow->save();
//New Project in Session, for AuthValidation (owner)
$this->_auth->getIdentity()->projects[$lastId] = array('project_id' => $lastId);
$tableProduct = new Default_Model_Project();
$product = $tableProduct->find($this->_projectId)->current();
$activityLogValues = $projectUpdateRow->toArray();
$activityLogValues['image_small'] = $product->image_small;
$activityLog = new Default_Model_ActivityLog();
//$activityLog->writeActivityLog($lastId, $projectUpdateRow->member_id, $activityLogType, $activityLogValues);
$activityLog->writeActivityLog($lastId, $this->_authMember->member_id, $activityLogType, $activityLogValues);
$helperBuildProductUrl = new Default_View_Helper_BuildProductUrl();
$urlProjectShow = $helperBuildProductUrl->buildProductUrl($this->_projectId);
$this->redirect($urlProjectShow);
}
public function previewAction()
{
$this->view->authMember = $this->_authMember;
$form = new Default_Form_ProjectConfirm();
if ($this->_request->isGet()) {
$form->populate(get_object_vars($this->_authMember));
$this->view->form = $form;
$this->fetchDataForIndexView();
$this->view->preview = $this->view->render('product/index.phtml');
return;
}
if (isset($_POST['save'])) {
$projectTable = new Default_Model_Project();
$projectTable->setStatus(Default_Model_Project::PROJECT_INACTIVE, $this->_projectId);
//todo: maybe we have to delete the project data from database otherwise we produce many zombies
$this->redirect('/member/' . $this->_authMember->member_id . '/products/');
}
if (isset($_POST['back'])) {
$helperBuildProductUrl = new Default_View_Helper_BuildProductUrl();
$this->redirect($helperBuildProductUrl->buildProductUrl($this->_projectId, 'edit'));
}
if (false === $form->isValid($_POST)) { // form not valid
$this->view->form = $form;
$this->fetchDataForIndexView();
$this->view->preview = $this->view->render('product/index.phtml');
$this->view->error = 1;
return;
}
$projectTable = new Default_Model_Project();
$projectTable->setStatus(Default_Model_Project::PROJECT_ACTIVE, $this->_projectId);
// add to search index
$modelProject = new Default_Model_Project();
$productInfo = $modelProject->fetchProductInfo($this->_projectId);
$modelSearch = new Default_Model_Search_Lucene();
$modelSearch->addDocument($productInfo->toArray());
$this->redirect('/member/' . $this->_authMember->member_id . '/products/');
}
protected function fetchDataForIndexView()
{
$tableProject = new Default_Model_Project();
$this->view->product = $tableProject->fetchProductInfo($this->_projectId);
if (false === isset($this->view->product)) {
throw new Zend_Controller_Action_Exception('This page does not exist', 404);
}
$desc = $this->view->product->description;
$newDesc = $this->bbcode2html($desc);
$this->view->product->description = $newDesc;
// switch off temporally 02.05.2017
//$this->view->supporting = $tableProject->fetchProjectSupporterWithPlings($this->_projectId);
//$orgUpdates = $tableProjectUpdates->fetchLastProjectUpdate($this->_projectId);
$tableProjectUpdates = new Default_Model_ProjectUpdates();
$orgUpdates = $tableProjectUpdates->fetchProjectUpdates($this->_projectId);
$newUpdates = array();
foreach ($orgUpdates as $update) {
$desc = $update['text'];
$newDesc = $this->bbcode2html($desc);
$update['text'] = $newDesc;
$newUpdates[] = $update;
}
$this->view->updates = $newUpdates;
// switch off temporally 02.05.2017
//$this->view->supporter = $tableProject->fetchProjectSupporter($this->_projectId);
$this->view->galleryPictures = $tableProject->getGalleryPictureSources($this->_projectId);
$this->view->product_views = $tableProject->fetchProjectViews($this->_projectId);
$helperFetchCategory = new Default_View_Helper_CatTitle();
$helperFetchCatParent = new Default_View_Helper_CatParent();
$this->view->catId = $this->view->product->project_category_id;
$this->view->catTitle = $helperFetchCategory->catTitle($this->view->product->project_category_id);
$this->view->catParentId =
$helperFetchCatParent->getCatParentId(array('project_category_id' => $this->view->product->project_category_id));
if ($this->view->catParentId) {
$this->view->catParentTitle = $helperFetchCategory->catTitle($this->view->catParentId);
}
$AuthCodeExist = new Local_Verification_WebsiteProject();
$this->view->websiteAuthCode = $AuthCodeExist->generateAuthCode(stripslashes($this->view->product->link_1));
// switch off temporally 02.05.2017
//$modelPlings = new Default_Model_DbTable_Plings();
//$this->view->plings = $modelPlings->getDonationsForProject($this->_projectId, 10);
$tableMember = new Default_Model_Member();
$this->view->member = $tableMember->fetchMemberData($this->view->product->member_id);
$this->view->more_products = $tableProject->fetchMoreProjects($this->view->product, 8);
$this->view->more_products_otheruser = $tableProject->fetchMoreProjectsOfOtherUsr($this->view->product, 8);
$widgetDefaultModel = new Default_Model_DbTable_ProjectWidgetDefault();
$widgetDefault = $widgetDefaultModel->fetchConfig($this->_projectId);
$widgetDefault->text->headline = $this->view->product->title;
//$widgetDefault->amounts->current = $this->view->product->amount_received;
$widgetDefault->amounts->goal = $this->view->product->amount;
$widgetDefault->project = $this->_projectId;
$this->view->widgetConfig = $widgetDefault;
$helperBuildProductUrl = new Default_View_Helper_BuildProductUrl();
$this->view->permaLink = $helperBuildProductUrl->buildProductUrl($this->_projectId, null, null, true);
$this->view->urlPay = $helperBuildProductUrl->buildProductUrl($this->_projectId, 'pay');
$referrerUrl = $this->readExploreUrlFromReferrer();
if (false === empty($referrerUrl)) {
$this->view->referrerUrl = $referrerUrl;
}
}
/**
* transforms a string with bbcode markup into html
*
* @param string $txt
* @param bool $nl2br
*
* @return string
*/
private function bbcode2html($txt, $nl2br = true, $forcecolor = '')
{
if (!empty($forcecolor)) {
$fc = ' style="color:' . $forcecolor . ';"';
} else {
$fc = '';
}
$newtxt = htmlspecialchars($txt);
if ($nl2br) {
$newtxt = nl2br($newtxt);
}
$patterns = array(
'`\[b\](.+?)\[/b\]`is',
'`\[i\](.+?)\[/i\]`is',
'`\[u\](.+?)\[/u\]`is',
'`\[li\](.+?)\[/li\]`is',
'`\[strike\](.+?)\[/strike\]`is',
'`\[url\]([a-z0-9]+?://){1}([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)\[/url\]`si',
'`\[quote\](.+?)\[/quote\]`is',
'`\[indent](.+?)\[/indent\]`is'
);
$replaces = array(
'\\1 ',
'\\1 ',
'\\1 ',
'\\1 ',
'\\1 ',
'\1\2 ',
'Quote: \1
',
'\\1 '
);
$newtxt = preg_replace($patterns, $replaces, $newtxt);
return ($newtxt);
}
protected function readExploreUrlFromReferrer()
{
$helperBuildExploreUrl = new Default_View_Helper_BuildExploreUrl();
$referrerExplore = $helperBuildExploreUrl->buildExploreUrl(null, null, null, null, true);
/** @var Zend_Controller_Request_Http $request */
$request = $this->getRequest();
if (strpos($request->getHeader('referer'), $referrerExplore) !== false) {
return $request->getHeader('referer');
}
}
public function plingAction()
{
if (empty($this->_projectId)) {
$this->redirect('/explore');
}
$this->view->authMember = $this->_authMember;
$this->fetchDataForIndexView();
$helperBuildProductUrl = new Default_View_Helper_BuildProductUrl();
$this->view->urlPay = $helperBuildProductUrl->buildProductUrl($this->_projectId, 'pay');
$this->view->amount = (float)$this->getParam('amount', 1);
$this->view->comment = html_entity_decode(strip_tags($this->getParam('comment'), null), ENT_QUOTES, 'utf-8');
$this->view->provider =
mb_strtolower(html_entity_decode(strip_tags($this->getParam('provider'), null), ENT_QUOTES, 'utf-8'),
'utf-8');
$this->view->headTitle($this->_browserTitlePrepend . $this->view->product->title, 'SET');
$helperUserIsOwner = new Default_View_Helper_UserIsOwner();
$helperIsProjectActive = new Default_View_Helper_IsProjectActive();
if ((false === $helperIsProjectActive->isProjectActive($this->view->product->project_status)) AND (false
=== $helperUserIsOwner->UserIsOwner($this->view->product->member_id))
) {
throw new Zend_Controller_Action_Exception('This page does not exist', 404);
}
$tableProject = new Default_Model_Project();
$this->view->supporting = $tableProject->fetchProjectSupporterWithPlings($this->_projectId);
}
public function payAction()
{
$this->_helper->layout()->disableLayout();
$tableProject = new Default_Model_Project();
$project = $tableProject->fetchProductInfo($this->_projectId);
//get parameter
$amount = (float)$this->getParam('amount', 1);
$comment = Default_Model_HtmlPurify::purify($this->getParam('comment'));
$paymentProvider =
mb_strtolower(html_entity_decode(strip_tags($this->getParam('provider'), null), ENT_QUOTES, 'utf-8'),
'utf-8');
$hideIdentity = (int)$this->getParam('hideId', 0);
$paymentGateway = $this->createPaymentGateway($paymentProvider);
$paymentGateway->getUserDataStore()->generateFromArray($project->toArray());
$requestMessage = 'Thank you for supporting: ' . $paymentGateway->getUserDataStore()->getProductTitle();
$response = null;
try {
$response = $paymentGateway->requestPayment($amount, $requestMessage);
$this->view->checkoutEndpoint = $paymentGateway->getCheckoutEndpoint();
$this->view->paymentKey = $response->getPaymentId();
$this->_helper->viewRenderer->setRender('pay_' . $paymentProvider);
} catch (Exception $e) {
throw new Zend_Controller_Action_Exception('payment error', 500, $e);
}
if (false === $response->isSuccessful()) {
throw new Zend_Controller_Action_Exception('payment failure', 500);
}
if (empty($this->_authMember->member_id) or ($hideIdentity == 1)) {
$memberId = 1;
} else {
$memberId = $this->_authMember->member_id;
}
//Add pling
$modelPlings = new Default_Model_DbTable_Plings();
$plingId = $modelPlings->createNewPlingFromResponse($response, $memberId, $project->project_id, $amount);
if (false == empty($comment)) {
$modelComments = new Default_Model_ProjectComments();
$dataComment = array(
'comment_type' => Default_Model_DbTable_Comments::COMMENT_TYPE_PLING,
'comment_target_id' => $project->project_id,
'comment_member_id' => $memberId,
'comment_pling_id' => $plingId,
'comment_text' => $comment
);
$modelComments->save($dataComment);
}
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $memberId, Default_Model_ActivityLog::PROJECT_PLINGED,
$project->toArray());
}
/**
* @param string $paymentProvider
*
* @return Local_Payment_GatewayInterface
* @throws Exception
* @throws Local_Payment_Exception
* @throws Zend_Controller_Exception
* @throws Zend_Exception
*/
protected function createPaymentGateway($paymentProvider)
{
$httpHost = $this->getRequest()->getHttpHost();
/** @var Zend_Config $config */
$config = Zend_Registry::get('config');
$helperBuildProductUrl = new Default_View_Helper_BuildProductUrl();
switch ($paymentProvider) {
case 'paypal':
$paymentGateway = new Default_Model_PayPal_Gateway($config->third_party->paypal);
$paymentGateway->setIpnNotificationUrl('http://' . $httpHost . '/gateway/paypal');
// $paymentGateway->setIpnNotificationUrl('http://' . $httpHost . '/gateway/paypal?XDEBUG_SESSION_START=1');
$paymentGateway->setCancelUrl($helperBuildProductUrl->buildProductUrl($this->_projectId,
'paymentcancel', null, true));
$paymentGateway->setReturnUrl($helperBuildProductUrl->buildProductUrl($this->_projectId, 'paymentok',
null, true));
break;
case 'dwolla':
$paymentGateway = new Default_Model_Dwolla_Gateway($config->third_party->dwolla);
$paymentGateway->setIpnNotificationUrl('http://' . $httpHost . '/gateway/dwolla');
// $paymentGateway->setIpnNotificationUrl('http://' . $_SERVER ['HTTP_HOST'] . '/gateway/dwolla?XDEBUG_SESSION_START=1');
$paymentGateway->setReturnUrl($helperBuildProductUrl->buildProductUrl($this->_projectId, 'dwolla', null,
true));
break;
case 'amazon':
$paymentGateway = new Default_Model_Amazon_Gateway($config->third_party->amazon);
$paymentGateway->setIpnNotificationUrl('http://' . $httpHost . '/gateway/amazon');
// $paymentGateway->setIpnNotificationUrl('http://' . $httpHost . '/gateway/amazon?XDEBUG_SESSION_START=1');
$paymentGateway->setCancelUrl($helperBuildProductUrl->buildProductUrl($this->_projectId,
'paymentcancel', null, true));
$paymentGateway->setReturnUrl($helperBuildProductUrl->buildProductUrl($this->_projectId, 'paymentok',
null, true));
break;
default:
throw new Zend_Controller_Exception('No known payment provider found in parameters.');
break;
}
return $paymentGateway;
}
public function dwollaAction()
{
$modelPling = new Default_Model_DbTable_Plings();
$plingData = $modelPling->fetchRow(array('payment_reference_key = ?' => $this->getParam('checkoutId')));
$plingData->payment_transaction_id = (int)$this->getParam('transaction');
$plingData->save();
if ($this->_getParam('status') == 'Completed') {
$this->_helper->viewRenderer('paymentok');
$this->paymentokAction();
} else {
$this->_helper->viewRenderer('paymentcancel');
$this->paymentcancelAction();
}
}
public function paymentokAction()
{
$this->_helper->layout()->disableLayout();
$this->view->paymentStatus = 'success';
$this->view->paymentMessage = 'Payment successful.';
$this->fetchDataForIndexView();
}
public function paymentcancelAction()
{
$this->_helper->layout()->disableLayout();
$this->view->paymentStatus = 'danger';
$this->view->paymentMessage = 'Payment cancelled.';
$this->fetchDataForIndexView();
}
public function deleteAction()
{
$this->_helper->layout()->setLayout('flat_ui');
$memberId = (int)$this->getParam('m');
if ((empty($this->_authMember->member_id)) OR (empty($memberId)) OR ($this->_authMember->member_id
!= $memberId)
) {
$this->forward('products', 'user', 'default');
return;
}
$tableProduct = new Default_Model_Project();
$tableProduct->setDeleted($this->_authMember->member_id,$this->_projectId);
$product = $tableProduct->find($this->_projectId)->current();
// delete product from search index
$modelSearch = new Default_Model_Search_Lucene();
$modelSearch->deleteDocument($product->toArray());
// $command = new Backend_Commands_DeleteProductExtended($product);
// $command->doCommand();
// $queue = Local_Queue_Factory::getQueue('search');
// $command = new Backend_Commands_DeleteProductFromIndex($product->project_id, $product->project_category_id);
// $msg = $queue->send(serialize($command));
// ppload
// Delete collection
if ($product->ppload_collection_id) {
$pploadApi = new Ppload_Api(array(
'apiUri' => PPLOAD_API_URI,
'clientId' => PPLOAD_CLIENT_ID,
'secret' => PPLOAD_SECRET
));
$collectionResponse = $pploadApi->deleteCollection($product->ppload_collection_id);
}
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $this->_authMember->member_id, Default_Model_ActivityLog::PROJECT_DELETED,
$product->toArray());
$this->forward('products', 'user', 'default');
}
public function unpublishAction()
{
$this->_helper->layout()->setLayout('flat_ui');
$memberId = (int)$this->getParam('m');
if (
(empty($this->_authMember->member_id))
OR
(empty($memberId))
OR ($this->_authMember->member_id != $memberId)
) {
return;
}
$tableProduct = new Default_Model_Project();
$tableProduct->setInActive($this->_projectId, $memberId);
$product = $tableProduct->find($this->_projectId)->current();
if (isset($product->type_id) && $product->type_id == Default_Model_Project::PROJECT_TYPE_UPDATE) {
$parentProduct = $tableProduct->find($product->pid)->current();
$product->image_small = $parentProduct->image_small;
}
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $this->_authMember->member_id, Default_Model_ActivityLog::PROJECT_UNPUBLISHED,
$product->toArray());
// remove unpublished project from search index
$modelSearch = new Default_Model_Search_Lucene();
$modelSearch->deleteDocument($product);
// ppload
if ($product->ppload_collection_id) {
$pploadApi = new Ppload_Api(array(
'apiUri' => PPLOAD_API_URI,
'clientId' => PPLOAD_CLIENT_ID,
'secret' => PPLOAD_SECRET
));
// Update collection information
$collectionRequest = array(
'category' => $product->project_category_id
);
$collectionResponse = $pploadApi->putCollection($product->ppload_collection_id, $collectionRequest);
}
$this->forward('products', 'user', 'default', array('member_id' => $memberId));
//$this->redirect('/member/'.$memberId.'/products');
}
public function publishAction()
{
$memberId = (int)$this->getParam('m');
if ((empty($this->_authMember->member_id)) OR (empty($memberId)) OR ($this->_authMember->member_id
!= $memberId)
) {
return;
}
$tableProduct = new Default_Model_Project();
$tableProduct->setActive($this->_authMember->member_id,$this->_projectId);
$product = $tableProduct->find($this->_projectId)->current();
if (isset($product->type_id) && $product->type_id == Default_Model_Project::PROJECT_TYPE_UPDATE) {
$parentProduct = $tableProduct->find($product->pid)->current();
$product->image_small = $parentProduct->image_small;
}
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $this->_authMember->member_id, Default_Model_ActivityLog::PROJECT_PUBLISHED,
$product->toArray());
// add published project to search index
$productInfo = $tableProduct->fetchProductInfo($this->_projectId);
$modelSearch = new Default_Model_Search_Lucene();
$modelSearch->addDocument($productInfo);
// ppload
if ($product->ppload_collection_id) {
$pploadApi = new Ppload_Api(array(
'apiUri' => PPLOAD_API_URI,
'clientId' => PPLOAD_CLIENT_ID,
'secret' => PPLOAD_SECRET
));
// Update collection information
$collectionRequest = array(
'category' => $product->project_category_id . '-published'
);
$collectionResponse = $pploadApi->putCollection($product->ppload_collection_id, $collectionRequest);
}
$this->forward('products', 'user', 'default', array('member_id' => $memberId));
//$this->redirect('/member/'.$memberId.'/products');
}
public function loadratingsAction()
{
$this->_helper->layout->disableLayout();
$tableProjectRatings = new Default_Model_DbTable_ProjectRating();
$ratings = $tableProjectRatings->fetchRating($this->_projectId);
$this->_helper->json($ratings);
}
public function loadinstallinstructionAction()
{
$this->_helper->layout->disableLayout();
$infomodel = new Default_Model_Info();
$text = $infomodel->getOCSInstallInstruction();
$this->_helper->json(array(
'status' => 'ok',
'data' => $text
));
}
public function followAction()
{
$this->_helper->layout()->disableLayout();
// $this->_helper->viewRenderer->setNoRender(true);
$this->view->project_id = $this->_projectId;
$this->view->authMember = $this->_authMember;
if (array_key_exists($this->_projectId, $this->_authMember->projects)) {
return;
}
$projectFollowTable = new Default_Model_DbTable_ProjectFollower();
$newVals = array('project_id' => $this->_projectId, 'member_id' => $this->_authMember->member_id);
$where = $projectFollowTable->select()->where('member_id = ?', $this->_authMember->member_id)
->where('project_id = ?', $this->_projectId, 'INTEGER')
;
$result = $projectFollowTable->fetchRow($where);
if (null === $result) {
$projectFollowTable->createRow($newVals)->save();
$tableProduct = new Default_Model_Project();
$product = $tableProduct->find($this->_projectId)->current();
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $this->_authMember->member_id,
Default_Model_ActivityLog::PROJECT_FOLLOWED, $product->toArray());
}
// ppload
//Add collection to favorite
// $projectTable = new Default_Model_DbTable_Project();
// $projectData = $projectTable->find($this->_projectId)->current();
// if ($projectData->ppload_collection_id) {
// $pploadApi = new Ppload_Api(array(
// 'apiUri' => PPLOAD_API_URI,
// 'clientId' => PPLOAD_CLIENT_ID,
// 'secret' => PPLOAD_SECRET
// ));
//
// $favoriteRequest = array(
// 'user_id' => $this->_authMember->member_id,
// 'collection_id' => $projectData->ppload_collection_id
// );
//
// $favoriteResponse = $pploadApi->postFavorite($favoriteRequest);
// }
}
public function unfollowAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer('follow');
$this->view->project_id = $this->_projectId;
$this->view->authMember = $this->_authMember;
$projectFollowTable = new Default_Model_DbTable_ProjectFollower();
$projectFollowTable->delete('member_id=' . $this->_authMember->member_id . ' AND project_id='
. $this->_projectId);
$tableProduct = new Default_Model_Project();
$product = $tableProduct->find($this->_projectId)->current();
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $this->_authMember->member_id,
Default_Model_ActivityLog::PROJECT_UNFOLLOWED, $product->toArray());
// ppload
// Delete collection from favorite
// $projectTable = new Default_Model_DbTable_Project();
// $projectData = $projectTable->find($this->_projectId)->current();
// if ($projectData->ppload_collection_id) {
// $pploadApi = new Ppload_Api(array(
// 'apiUri' => PPLOAD_API_URI,
// 'clientId' => PPLOAD_CLIENT_ID,
// 'secret' => PPLOAD_SECRET
// ));
//
// $favoriteRequest = array(
// 'user_id' => $this->_authMember->member_id,
// 'collection_id' => $projectData->ppload_collection_id
// );
//
// $favoriteResponse =
// $pploadApi->postFavorite($favoriteRequest); // This post call will retrieve existing favorite info
// if (!empty($favoriteResponse->favorite->id)) {
// $favoriteResponse = $pploadApi->deleteFavorite($favoriteResponse->favorite->id);
// }
// }
}
public function followpAction()
{
$this->_helper->layout()->disableLayout();
// $this->_helper->viewRenderer->setNoRender(true);
$this->view->project_id = $this->_projectId;
$this->view->authMember = $this->_authMember;
if (array_key_exists($this->_projectId, $this->_authMember->projects)) {
return;
}
$projectFollowTable = new Default_Model_DbTable_ProjectFollower();
$newVals = array('project_id' => $this->_projectId, 'member_id' => $this->_authMember->member_id);
$where = $projectFollowTable->select()->where('member_id = ?', $this->_authMember->member_id)
->where('project_id = ?', $this->_projectId, 'INTEGER')
;
$result = $projectFollowTable->fetchRow($where);
if (null === $result) {
$projectFollowTable->createRow($newVals)->save();
$tableProduct = new Default_Model_Project();
$product = $tableProduct->find($this->_projectId)->current();
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $this->_authMember->member_id,
Default_Model_ActivityLog::PROJECT_FOLLOWED, $product->toArray());
}
}
public function unfollowpAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer('followp');
$this->view->project_id = $this->_projectId;
$this->view->authMember = $this->_authMember;
$projectFollowTable = new Default_Model_DbTable_ProjectFollower();
$projectFollowTable->delete('member_id=' . $this->_authMember->member_id . ' AND project_id='
. $this->_projectId);
$tableProduct = new Default_Model_Project();
$product = $tableProduct->find($this->_projectId)->current();
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $this->_authMember->member_id,
Default_Model_ActivityLog::PROJECT_UNFOLLOWED, $product->toArray());
}
protected function logActivity($logId)
{
$tableProduct = new Default_Model_Project();
$product = $tableProduct->find($this->_projectId)->current();
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $this->_authMember->member_id,
$logId, $product->toArray());
}
public function followprojectAction()
{
$this->_helper->layout()->disableLayout();
$this->view->project_id = $this->_projectId;
$this->view->authMember = $this->_authMember;
// not allow to pling himself
if (array_key_exists($this->_projectId, $this->_authMember->projects))
{
$this->_helper->json(array(
'status' => 'error',
'msg' => 'not allowed'
));
return;
}
$projectFollowTable = new Default_Model_DbTable_ProjectFollower();
$newVals = array('project_id' => $this->_projectId, 'member_id' => $this->_authMember->member_id);
$where = $projectFollowTable->select()->where('member_id = ?', $this->_authMember->member_id)
->where('project_id = ?', $this->_projectId, 'INTEGER') ;
$result = $projectFollowTable->fetchRow($where);
if (null === $result) {
$projectFollowTable->createRow($newVals)->save();
$this->logActivity(Default_Model_ActivityLog::PROJECT_FOLLOWED);
$cnt = $projectFollowTable->countForProject($this->_projectId);
$this->_helper->json(array(
'status' => 'ok',
'msg' => 'Success.',
'cnt' => $cnt,
'action' =>'insert'
));
}else{
$projectFollowTable->delete('member_id=' . $this->_authMember->member_id . ' AND project_id='
. $this->_projectId);
$this->logActivity(Default_Model_ActivityLog::PROJECT_UNFOLLOWED);
$cnt = $projectFollowTable->countForProject($this->_projectId);
$this->_helper->json(array(
'status' => 'ok',
'msg' => 'Success.',
'cnt' => $cnt,
'action' => 'delete'
));
}
}
public function plingprojectAction()
{
$this->_helper->layout()->disableLayout();
$this->view->project_id = $this->_projectId;
$this->view->authMember = $this->_authMember;
// not allow to pling himself
if (array_key_exists($this->_projectId, $this->_authMember->projects))
{
$this->_helper->json(array(
'status' => 'error',
'msg' => 'not allowed'
));
return;
}
// not allow to pling if not supporter
$helperIsSupporter = new Default_View_Helper_IsSupporter();
if(!$helperIsSupporter->isSupporter($this->_authMember->member_id))
{
$this->_helper->json(array(
'status' => 'error',
'msg' => 'become a supporter first please. '
));
return;
}
$projectplings = new Default_Model_ProjectPlings();
$newVals = array('project_id' => $this->_projectId, 'member_id' => $this->_authMember->member_id);
$sql = $projectplings->select()
->where('member_id = ?', $this->_authMember->member_id)
->where('is_deleted = ?',0)
->where('project_id = ?', $this->_projectId, 'INTEGER')
;
$result = $projectplings->fetchRow($sql);
if (null === $result) {
$projectplings->createRow($newVals)->save();
//$this->logActivity(Default_Model_ActivityLog::PROJECT_PLINGED_2);
$cnt = $projectplings->getPlingsAmount($this->_projectId);
$this->_helper->json(array(
'status' => 'ok',
'msg' => 'Success.',
'cnt' => $cnt,
'action' =>'insert'
));
}else{
// delete pling
$projectplings->setDelete($result->project_plings_id);
//$this->logActivity(Default_Model_ActivityLog::PROJECT_DISPLINGED_2);
$cnt = $projectplings->getPlingsAmount($this->_projectId);
$this->_helper->json(array(
'status' => 'ok',
'msg' => 'Success.',
'cnt' => $cnt,
'action' => 'delete'
));
}
}
/**
public function unplingprojectAction()
{
$this->_helper->layout()->disableLayout();
$projectplings = new Default_Model_ProjectPlings();
$pling = $projectplings->getPling($this->_projectId,$this->_authMember->member_id);
if($pling)
{
$projectplings->setDelete($pling->project_plings_id);
$cnt = count($projectplings->getPlings($this->_projectId));
$this->_helper->json(array(
'status' => 'ok',
'deleted' => $pling->project_plings_id,
'msg' => 'Success. ',
'cnt' => $cnt
));
$tableProduct = new Default_Model_Project();
$product = $tableProduct->find($this->_projectId)->current();
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $this->_authMember->member_id,
Default_Model_ActivityLog::PROJECT_DISPLINGED_2, $product->toArray());
}else{
$this->_helper->json(array(
'status' => 'error',
'msg' => 'not existing.'
));
}
}
**/
public function followsAction()
{
$projectFollowTable = new Default_Model_Member();
$memberId = $this->_authMember->member_id;
$this->view->productList = $projectFollowTable->fetchFollowedProjects($memberId);
$projectArray = $this->generateFollowedProjectsViewData($this->view->productList);
$this->view->productArray['followedProjects'] = $projectArray;
}
/**
* @param $list
*
* @return array
*/
protected function generateFollowedProjectsViewData($list)
{
$viewArray = array();
if (count($list) == 0) {
return $viewArray;
}
$helperBuildProductUrl = new Default_View_Helper_BuildProductUrl();
foreach ($list as $element) {
$arr = array();
$arr['id'] = $element->project_id;
$arr['name'] = $element->title;
$arr['image'] = $element->image_small;
$arr['url'] = $helperBuildProductUrl->buildProductUrl($element->project_id);
$arr['urlUnFollow'] = $helperBuildProductUrl->buildProductUrl($element->project_id, 'unfollow');
#$arr['showUrlUnFollow'] = $this->view->isMember;
$viewArray[] = $arr;
}
return $viewArray;
}
public function verifycodeAction()
{
$this->_helper->layout()->disableLayout();
if ($this->_request->isXmlHttpRequest()) {
$tabProject = new Default_Model_DbTable_Project();
$dataProject = $tabProject->find($this->_projectId)->current();
$this->createTaskWebsiteOwnerVerification($dataProject);
$this->view->message = 'Your product page is stored for validation.';
return;
}
$this->view->message = 'This service is not available at the moment. Please try again later.';
}
/**
* @throws Zend_Controller_Action_Exception
* @deprecated
*/
public function fetchAction()
{
$this->_helper->layout()->disableLayout();
if ($this->_request->isXmlHttpRequest()) {
$this->view->authMember = $this->_authMember;
$this->fetchDataForIndexView();
$tableProject = new Default_Model_Project();
$this->view->supporting = $tableProject->fetchProjectSupporterWithPlings($this->_projectId);
if (false === isset($this->view->product)) {
throw new Zend_Controller_Action_Exception('This page does not exist', 404);
}
$helperUserIsOwner = new Default_View_Helper_UserIsOwner();
$helperIsProjectActive = new Default_View_Helper_IsProjectActive();
if ((false === $helperIsProjectActive->isProjectActive($this->view->product->project_status)) AND (false
=== $helperUserIsOwner->UserIsOwner($this->view->product->member_id))
) {
throw new Zend_Controller_Action_Exception('This page does not exist', 404);
}
$tablePageViews = new Default_Model_DbTable_StatPageViews();
$tablePageViews->savePageView($this->_projectId, $this->getRequest()->getClientIp(),
$this->_authMember->member_id);
}
$this->_helper->json(get_object_vars($this->view));
}
public function claimAction()
{
$modelProduct = new Default_Model_Project();
$productInfo = $modelProduct->fetchProductInfo($this->_projectId);
if ($productInfo->claimable != Default_Model_Project::PROJECT_CLAIMABLE) {
throw new Zend_Controller_Action_Exception('Method not available', 404);
}
$helperBuildProductUrl = new Default_View_Helper_BuildProductUrl();
if (empty($productInfo->claimed_by_member)) {
$modelProduct->setClaimedByMember($this->_authMember->member_id, $this->_projectId);
$claimMail = new Default_Plugin_SendMail('tpl_mail_claim_product');
$claimMail->setTemplateVar('sender', $this->_authMember->mail);
$claimMail->setTemplateVar('productid', $productInfo->project_id);
$claimMail->setTemplateVar('producttitle', $productInfo->title);
$claimMail->setTemplateVar('userid', $this->_authMember->member_id);
$claimMail->setTemplateVar('username', $this->_authMember->username);
$claimMail->setTemplateVar('usermail', $this->_authMember->mail);
$claimMail->setReceiverMail(array('contact@opendesktop.org'));
$claimMail->send();
$claimMailConfirm = new Default_Plugin_SendMail('tpl_mail_claim_confirm');
$claimMailConfirm->setTemplateVar('sender', 'contact@opendesktop.org');
$claimMailConfirm->setTemplateVar('producttitle', $productInfo->title);
$claimMailConfirm->setTemplateVar('productlink', 'http://' . $this->getRequest()->getHttpHost()
. $helperBuildProductUrl->buildProductUrl($productInfo->project_id));
$claimMailConfirm->setTemplateVar('username', $this->_authMember->username);
$claimMailConfirm->setReceiverMail($this->_authMember->mail);
$claimMailConfirm->send();
}
$this->_helper->viewRenderer('index');
$this->indexAction();
}
public function makerconfigAction()
{
$this->_helper->layout()->disableLayout();
$widgetProjectId = (int)$this->getParam('project_id');
if (false == isset($widgetProjectId)) {
throw new Zend_Controller_Action_Exception('This page does not exist', 404);
}
$widgetDefaultModel = new Default_Model_DbTable_ProjectWidgetDefault();
$widgetDefault = $widgetDefaultModel->fetchConfig($widgetProjectId);
if (!isset($widgetDefault)) {
throw new Zend_Controller_Action_Exception('This page does not exist', 404);
} else {
$this->view->widgetConfig = $widgetDefault;
$productModel = new Default_Model_Project();
$this->view->product = $productModel->fetchProductDataFromMV($widgetProjectId);
$this->view->supporting = $productModel->fetchProjectSupporterWithPlings($widgetProjectId);
$plingModel = new Default_Model_DbTable_Plings();
$this->view->comments = $plingModel->getCommentsForProject($widgetProjectId, 10);
$websiteOwner = new Local_Verification_WebsiteProject();
$this->view->authCode = ' ';
}
}
/**
* ppload
*/
public function addpploadfileAction()
{
$this->_helper->layout()->disableLayout();
$log = Zend_Registry::get('logger');
$log->debug('**********' . __CLASS__ . '::' . __FUNCTION__ . '**********' . "\n");
$projectTable = new Default_Model_DbTable_Project();
$projectData = $projectTable->find($this->_projectId)->current();
$error_text = '';
// Add file to ppload collection
if (!empty($_FILES['file_upload']['tmp_name'])
&& $_FILES['file_upload']['error'] == UPLOAD_ERR_OK
) {
$tmpFilename = dirname($_FILES['file_upload']['tmp_name']) . '/' . basename($_FILES['file_upload']['name']);
$log->debug(__CLASS__ . '::' . __FUNCTION__ . '::' . print_r($tmpFilename, true) . "\n");
move_uploaded_file($_FILES['file_upload']['tmp_name'], $tmpFilename);
$pploadApi = new Ppload_Api(array(
'apiUri' => PPLOAD_API_URI,
'clientId' => PPLOAD_CLIENT_ID,
'secret' => PPLOAD_SECRET
));
$fileRequest = array(
'file' => $tmpFilename,
'owner_id' => $this->_authMember->member_id
);
//Admins can upload files for users
$helperUserRole = new Backend_View_Helper_UserRole();
$userRoleName = $helperUserRole->userRole();
if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) {
$member_id = $projectData->member_id;
$fileRequest = array(
'file' => $tmpFilename,
'owner_id' => $member_id
);
}
if ($projectData->ppload_collection_id) {
// Append to existing collection
$fileRequest['collection_id'] = $projectData->ppload_collection_id;
}
//if (isset($_POST['file_description'])) {
// $fileRequest['description'] = mb_substr($_POST['file_description'], 0, 140);
//}
$fileResponse = $pploadApi->postFile($fileRequest);
$log->debug(__CLASS__ . '::' . __FUNCTION__ . '::' . print_r($fileResponse, true) . "\n");
unlink($tmpFilename);
if (!empty($fileResponse->file->collection_id)) {
if (!$projectData->ppload_collection_id) {
// Save collection ID
$projectData->ppload_collection_id = $fileResponse->file->collection_id;
//20180219 ronald: we set the changed_at only by new files or new updates
if((int)$this->_authMember->member_id==(int)$projectData->member_id)
{
$projectData->changed_at = new Zend_Db_Expr('NOW()');
} else {
$log->info('********** ' . __CLASS__ . '::' . __FUNCTION__ . ' Project ChangedAt is not set: Auth-Member ('.$this->_authMember->member_id.') != Project-Owner ('.$projectData->member_id.'): **********' . "\n");
}
$projectData->ghns_excluded = 0;
$projectData->save();
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog($this->_projectId, $projectData->member_id,
Default_Model_ActivityLog::PROJECT_EDITED, $projectData->toArray());
// Update profile information
$memberTable = new Default_Model_DbTable_Member();
$memberSettings = $memberTable->find($this->_authMember->member_id)->current();
$mainproject = $projectTable->find($memberSettings->main_project_id)->current();
$profileName = '';
if ($memberSettings->firstname
|| $memberSettings->lastname
) {
$profileName = trim($memberSettings->firstname . ' ' . $memberSettings->lastname);
} else {
if ($memberSettings->username) {
$profileName = $memberSettings->username;
}
}
$profileRequest = array(
'owner_id' => $this->_authMember->member_id,
'name' => $profileName,
'email' => $memberSettings->mail,
'homepage' => $memberSettings->link_website,
'description' => $mainproject->description
);
$profileResponse = $pploadApi->postProfile($profileRequest);
// Update collection information
$collectionCategory = $projectData->project_category_id;
if (Default_Model_Project::PROJECT_ACTIVE == $projectData->status) {
$collectionCategory .= '-published';
}
$collectionRequest = array(
'title' => $projectData->title,
'description' => $projectData->description,
'category' => $collectionCategory,
'content_id' => $projectData->project_id
);
$collectionResponse =
$pploadApi->putCollection($projectData->ppload_collection_id, $collectionRequest);
// Store product image as collection thumbnail
$this->_updatePploadMediaCollectionthumbnail($projectData);
} else {
//20180219 ronald: we set the changed_at only by new files or new updates
if((int)$this->_authMember->member_id==(int)$projectData->member_id)
{
$projectData->changed_at = new Zend_Db_Expr('NOW()');
} else {
$log->info('********** ' . __CLASS__ . '::' . __FUNCTION__ . ' Project ChangedAt is not set: Auth-Member ('.$this->_authMember->member_id.') != Project-Owner ('.$projectData->member_id.'): **********' . "\n");
}
$projectData->ghns_excluded = 0;
$projectData->save();
}
//If this file is a video, we have to convert it for preview
if(!empty($fileResponse->file->type) && in_array($fileResponse->file->type, Backend_Commands_ConvertVideo::$VIDEO_FILE_TYPES)) {
$queue = Local_Queue_Factory::getQueue();
$command = new Backend_Commands_ConvertVideo($projectData->ppload_collection_id, $fileResponse->file->id, $fileResponse->file->type);
$queue->send(serialize($command));
}
$this->_helper->json(array(
'status' => 'ok',
'file' => $fileResponse->file
));
return;
}
}
$log->debug('********** END ' . __CLASS__ . '::' . __FUNCTION__ . '**********' . "\n");
$this->_helper->json(array('status' => 'error', 'error_text' => $error_text));
}
/**
* ppload
*/
public function updatepploadfileAction()
{
$this->_helper->layout()->disableLayout();
$log = Zend_Registry::get('logger');
$log->debug('**********' . __CLASS__ . '::' . __FUNCTION__ . '**********' . "\n");
$projectTable = new Default_Model_DbTable_Project();
$projectData = $projectTable->find($this->_projectId)->current();
$error_text = '';
// Update a file in ppload collection
if (!empty($_POST['file_id'])) {
$pploadApi = new Ppload_Api(array(
'apiUri' => PPLOAD_API_URI,
'clientId' => PPLOAD_CLIENT_ID,
'secret' => PPLOAD_SECRET
));
$fileResponse = $pploadApi->getFile($_POST['file_id']);
if (isset($fileResponse->file->collection_id)
&& $fileResponse->file->collection_id == $projectData->ppload_collection_id
) {
$fileRequest = array();
$tmpFilename = '';
if (!empty($_FILES['file_upload']['tmp_name'])
&& $_FILES['file_upload']['error'] == UPLOAD_ERR_OK
) {
$tmpFilename = dirname($_FILES['file_upload']['tmp_name']) . '/' . basename($_FILES['file_upload']['name']);
$log->debug(__CLASS__ . '::' . __FUNCTION__ . '::' . print_r($tmpFilename, true) . "\n");
move_uploaded_file($_FILES['file_upload']['tmp_name'], $tmpFilename);
$fileRequest['file'] = $tmpFilename;
//20180219 ronald: we set the changed_at only by new files or new updates
if((int)$this->_authMember->member_id==(int)$projectData->member_id)
{
$projectData->changed_at = new Zend_Db_Expr('NOW()');
} else {
$log->info('********** ' . __CLASS__ . '::' . __FUNCTION__ . ' Project ChangedAt is not set: Auth-Member ('.$this->_authMember->member_id.') != Project-Owner ('.$projectData->member_id.'): **********' . "\n");
}
$projectData->ghns_excluded = 0;
$projectData->save();
}
if (isset($_POST['file_description'])) {
$fileRequest['description'] = mb_substr($_POST['file_description'], 0, 140);
}
if (isset($_POST['file_category'])) {
$fileRequest['category'] = $_POST['file_category'];
}
if (isset($_POST['file_tags'])) {
$fileRequest['tags'] = $_POST['file_tags'];
}
if (isset($_POST['ocs_compatible'])) {
$fileRequest['ocs_compatible'] = $_POST['ocs_compatible'];
}
if (isset($_POST['file_version'])) {
$fileRequest['version'] = $_POST['file_version'];
}
$fileResponse = $pploadApi->putFile($_POST['file_id'], $fileRequest);
$log->debug(__CLASS__ . '::' . __FUNCTION__ . '::' . print_r($fileResponse, true) . "\n");
if ($tmpFilename) {
unlink($tmpFilename);
}
if (isset($fileResponse->status)
&& $fileResponse->status == 'success'
) {
$this->_helper->json(array(
'status' => 'ok',
'file' => $fileResponse->file
));
return;
} else {
$error_text .= 'Response: $pploadApi->putFile(): ' . json_encode($fileResponse)
. '; $fileResponse->status: ' . $fileResponse->status;
}
} else {
$error_text .= 'PPload Response: ' . json_encode($fileResponse)
. '; fileResponse->file->collection_id: ' . $fileResponse->file->collection_id
. ' != $projectData->ppload_collection_id: ' . $projectData->ppload_collection_id;
}
} else {
$error_text .= 'No CollectionId or no FileId. CollectionId: ' . $projectData->ppload_collection_id
. ', FileId: ' . $_POST['file_id'];
}
$log->debug('********** END ' . __CLASS__ . '::' . __FUNCTION__ . '**********' . "\n");
$this->_helper->json(array('status' => 'error', 'error_text' => $error_text));
}
public function updatefiletagAction()
{
$this->_helper->layout()->disableLayout();
$error_text = '';
// Update a file information in ppload collection
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 deletefiletagAction()
{
$this->_helper->layout()->disableLayout();
$error_text = '';
// Update a file information in ppload collection
if (!empty($_POST['file_id'])) {
$tagId = null;
if (isset($_POST['tag_id'])) {
$tagId = $_POST['tag_id'];
}
//set architecture
$modelTags = new Default_Model_Tags();
$modelTags->deleteFileTagForProject($this->_projectId, $_POST['file_id'], $tagId);
$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 updatecompatibleAction()
{
$this->_helper->layout()->disableLayout();
$error_text = '';
// Update a file information in ppload collection
if (!empty($_POST['file_id'])) {
$typeId = null;
if (isset($_POST['is_compatible'])) {
$is_compatible = $_POST['is_compatible'];
}
return;
} else {
$error_text .= 'No FileId. , FileId: ' . $_POST['file_id'];
}
$this->_helper->json(array('status' => 'error', 'error_text' => $error_text));
}
public function startdownloadAction() {
$this->_helper->layout()->disableLayout();
/**
* Save Download-Data in Member_Download_History
*/
$file_id = $this->getParam('file_id');
$file_type = $this->getParam('file_type');
$file_name = $this->getParam('file_name');
$file_size = $this->getParam('file_size');
$projectId = $this->_projectId;
$this->redirect('/dl?file_id='.$file_id.'&file_type='.$file_type.'&file_name='.$file_name.'&file_size='.$file_size.'&project_id='.$projectId);
// if ($_SERVER['REQUEST_METHOD'] == 'POST') {
/* if(isset($file_id) && isset($projectId) && isset($memberId)) {
$memberDlHistory = new Default_Model_DbTable_MemberDownloadHistory();
$data = array('project_id' => $projectId, 'member_id' => $memberId, 'file_id' => $file_id, 'file_type' => $file_type, 'file_name' => $file_name, 'file_size' => $file_size);
$memberDlHistory->createRow($data)->save();
}
$url = urldecode($urltring);
$this->redirect($url);
*
*/
// } else {
// $this->redirect('/ads?file_id='.$file_id);
// }
}
/**
* ppload
*/
public function deletepploadfileAction()
{
$this->_helper->layout()->disableLayout();
$projectTable = new Default_Model_DbTable_Project();
$projectData = $projectTable->find($this->_projectId)->current();
$error_text = '';
// Delete file from ppload collection
if (!empty($_POST['file_id'])) {
$pploadApi = new Ppload_Api(array(
'apiUri' => PPLOAD_API_URI,
'clientId' => PPLOAD_CLIENT_ID,
'secret' => PPLOAD_SECRET
));
$fileResponse = $pploadApi->getFile($_POST['file_id']);
if (isset($fileResponse->file->collection_id)
&& $fileResponse->file->collection_id == $projectData->ppload_collection_id
) {
$fileResponse = $pploadApi->deleteFile($_POST['file_id']);
if (isset($fileResponse->status)
&& $fileResponse->status == 'success'
) {
$this->_helper->json(array('status' => 'ok'));
return;
} else {
$error_text .= 'Response: $pploadApi->putFile(): ' . json_encode($fileResponse);
}
}
}
$this->_helper->json(array('status' => 'error', 'error_text' => $error_text));
}
/**
* ppload
*/
public function deletepploadfilesAction()
{
$this->_helper->layout()->disableLayout();
$projectTable = new Default_Model_DbTable_Project();
$projectData = $projectTable->find($this->_projectId)->current();
// Delete all files in ppload collection
if ($projectData->ppload_collection_id) {
$pploadApi = new Ppload_Api(array(
'apiUri' => PPLOAD_API_URI,
'clientId' => PPLOAD_CLIENT_ID,
'secret' => PPLOAD_SECRET
));
$filesRequest = array(
'collection_id' => $projectData->ppload_collection_id,
'perpage' => 1000
);
$filesResponse = $pploadApi->getFiles($filesRequest);
if (isset($filesResponse->status)
&& $filesResponse->status == 'success'
) {
foreach ($filesResponse->files as $file) {
$fileResponse = $pploadApi->deleteFile($file->id);
if (!isset($fileResponse->status)
|| $fileResponse->status != 'success'
) {
$this->_helper->json(array('status' => 'error'));
return;
}
}
}
$this->_helper->json(array('status' => 'ok'));
return;
}
$this->_helper->json(array('status' => 'error'));
}
/**
* ppload
*/
/*public function deletepploadcollectionAction()
{
$this->_helper->layout()->disableLayout();
$projectTable = new Default_Model_DbTable_Project();
$projectData = $projectTable->find($this->_projectId)->current();
// Delete ppload collection
if ($projectData->ppload_collection_id) {
$pploadApi = new Ppload_Api(array(
'apiUri' => PPLOAD_API_URI,
'clientId' => PPLOAD_CLIENT_ID,
'secret' => PPLOAD_SECRET
));
$collectionResponse = $pploadApi->deleteCollection($projectData->ppload_collection_id);
if (isset($collectionResponse->status)
&& $collectionResponse->status == 'success'
) {
$projectData->ppload_collection_id = null;
$projectData->changed_at = new Zend_Db_Expr('NOW()');
$projectData->save();
$activityLog = new Default_Model_ActivityLog();
$activityLog->writeActivityLog(
$this->_projectId,
$projectData->member_id,
Default_Model_ActivityLog::PROJECT_EDITED,
$projectData->toArray()
);
$this->_helper->json(array('status' => 'ok'));
return;
}
}
$this->_helper->json(array('status' => 'error'));
}*/
public function saveproductAction()
{
$form = new Default_Form_Product();
// we don't need to test a file which doesn't exist in this case. The Framework stumbles if $_FILES is empty.
if ($this->_request->isXmlHttpRequest() AND (count($_FILES) == 0)) {
$form->removeElement('image_small_upload');
// $form->removeElement('image_big_upload');
$form->removeSubForm('gallery');
$form->removeElement('project_id'); //(workaround: Some Browsers send "0" in some cases.)
}
if (false === $form->isValid($_POST)) {
$errors = $form->getMessages();
$messages = $this->getErrorMessages($errors);
$this->_helper->json(array('status' => 'error', 'messages' => $messages));
}
$formValues = $form->getValues();
$formValues['status'] = Default_Model_Project::PROJECT_INCOMPLETE;
$modelProject = new Default_Model_Project();
$newProject =
$modelProject->createProject($this->_authMember->member_id, $formValues, $this->_authMember->username);
//$this->createSystemPlingForNewProject($newProject->project_id);
//New Project in Session, for AuthValidation (owner)
$this->_auth->getIdentity()->projects[$newProject->project_id] = array('project_id' => $newProject->project_id);
$this->_helper->json(array('status' => 'ok', 'project_id' => $newProject->project_id));
}
protected function createPling($member_id,$project_id)
{
$projectplings = new Default_Model_ProjectPlings();
$newVals = array('project_id' =>$project_id, 'member_id' => $member_id);
$sql = $projectplings->select()
->where('member_id = ?', $this->_authMember->member_id)
->where('is_deleted = ?',0)
->where('project_id = ?', $this->_projectId, 'INTEGER');
$result = $projectplings->fetchRow($sql);
if (null === $result) {
$projectplings->createRow($newVals)->save();
}
}
/**
* @param $errors
*
* @return array
*/
protected function getErrorMessages($errors)
{
$messages = array();
foreach ($errors as $element => $row) {
if (!empty($row) && $element != 'submit') {
foreach ($row as $validator => $message) {
$messages[$element][] = $message;
}
}
}
return $messages;
}
public function searchAction()
{
// Filter-Parameter
$filterInput =
new Zend_Filter_Input(
array(
'*' => 'StringTrim',
'projectSearchText' => array(new Zend_Filter_Callback('stripslashes'),'StripTags'),
'page' => 'digits',
'pci' => 'digits',
'ls' => 'digits',
't' => array(new Zend_Filter_Callback('stripslashes'),'StripTags'),
'pkg'=> array(new Zend_Filter_Callback('stripslashes'),'StripTags'),
'lic'=> array(new Zend_Filter_Callback('stripslashes'),'StripTags'),
'arch'=> array(new Zend_Filter_Callback('stripslashes'),'StripTags')
),
array(
'projectSearchText' => array(
new Zend_Validate_StringLength(array('min' => 3, 'max' => 100)),
'presence' => 'required'
),
'page' => array('digits', 'default' => '1'),
'f' => array(
new Zend_Validate_StringLength(array('min' => 3, 'max' => 100)),
//new Zend_Validate_InArray(array('f'=>'tags')),
'allowEmpty' => true
),
'pci' => array('digits',
'allowEmpty' => true
),
'ls' => array('digits',
'allowEmpty' => true
),
't' => array(new Zend_Validate_StringLength(array('min' => 3, 'max' => 100)),
'allowEmpty' => true
),
'pkg' => array(new Zend_Validate_StringLength(array('min' => 3, 'max' => 100)),
'allowEmpty' => true
),
'lic' => array(new Zend_Validate_StringLength(array('min' => 3, 'max' => 100)),
'allowEmpty' => true
),
'arch' => array(new Zend_Validate_StringLength(array('min' => 3, 'max' => 100)),
'allowEmpty' => true)
), $this->getAllParams());
if ($filterInput->hasInvalid()) {
$this->_helper->flashMessenger->addMessage('There was an error. Please check your input and try again.
');
return;
}
$this->view->searchText = $filterInput->getEscaped('projectSearchText');
$this->view->page = $filterInput->getEscaped('page');
$this->view->searchField = $filterInput->getEscaped('f');
$this->view->pci = $filterInput->getEscaped('pci');
$this->view->ls = $filterInput->getEscaped('ls');
$this->view->t = $filterInput->getEscaped('t');
$this->view->pkg = $filterInput->getEscaped('pkg');
$this->view->arch = $filterInput->getEscaped('arch');
$this->view->lic = $filterInput->getEscaped('lic');
$this->view->store = $this->getParam('domain_store_id');
}
/**
* @param $memberId
*
* @throws Zend_Db_Table_Exception
*/
protected function setViewDataForMyProducts($memberId)
{
$tableMember = new Default_Model_Member();
$this->view->member = $tableMember->find($memberId)->current();
$tableProduct = new Default_Model_Project();
$this->view->products = $tableProduct->fetchAllProjectsForMember($memberId);
}
protected function _initResponseHeader()
{
$duration = 1800; // in seconds
$expires = gmdate("D, d M Y H:i:s", time() + $duration) . " GMT";
$this->getResponse()->setHeader('X-FRAME-OPTIONS', 'ALLOWALL',
true)// ->setHeader('Last-Modified', $modifiedTime, true)
->setHeader('Expires', $expires, true)->setHeader('Pragma', 'no-cache', true)
->setHeader('Cache-Control', 'private, no-cache, must-revalidate', true)
;
}
/**
* @param $hits
*
* @return array
*/
protected function generateProjectsArrayForView($hits)
{
$viewArray = array();
$helperBuildProductUrl = new Default_View_Helper_BuildProductUrl();
/** @var $hit Zend_Search_Lucene_Search_QueryHit */
foreach ($hits as $hit) {
$project = $hit->getDocument();
if (null != $project->username) {
$isUpdate = ($project->type_id == 2);
if ($isUpdate) {
$showUrl =
$helperBuildProductUrl->buildProductUrl($project->pid) . '#anker_' . $project->project_id;
$plingUrl = $helperBuildProductUrl->buildProductUrl($project->pid, 'pling');
} else {
$showUrl = $helperBuildProductUrl->buildProductUrl($project->project_id);
$plingUrl = $helperBuildProductUrl->buildProductUrl($project->project_id, 'pling');
}
$projectArr = array(
'score' => $hit->score,
'id' => $project->project_id,
'type_id' => $project->type_id,
'title' => $project->title,
'description' => $project->description,
'image' => $project->image_small,
'plings' => 0,
'urlGoal' => $showUrl,
'urlPling' => $plingUrl,
'showUrlPling' => ($project->paypal_mail != null),
'member' => array(
'name' => $project->username,
'url' => 'member/' . $project->member_id,
'image' => $project->profile_image_url,
'id' => $project->member_id
)
);
$viewArray[] = $projectArr;
}
}
return $viewArray;
}
protected function setLayout()
{
$layoutName = 'flat_ui_template';
$storeConfig = Zend_Registry::isRegistered('store_config') ? Zend_Registry::get('store_config') : null;
if($storeConfig && $storeConfig->layout_pagedetail)
{
$this->_helper->layout()->setLayout($storeConfig->layout_pagedetail);
}else{
$this->_helper->layout()->setLayout($layoutName);
}
}
private function fetchGitlabProject($gitProjectId)
{
$gitlab = new Default_Model_Ocs_Gitlab();
try {
$gitProject = $gitlab->getProject($gitProjectId);
} catch (Exception $exc) {
//Project is gone
$modelProject = new Default_Model_Project();
$modelProject->updateProject($this->_projectId, array('is_gitlab_project' => 0, 'gitlab_project_id' => null, 'show_gitlab_project_issues' => 0, 'use_gitlab_project_readme' => 0));
$gitProject = null;
}
return $gitProject;
}
private function fetchGitlabProjectIssues($gitProjectId)
{
$gitlab = new Default_Model_Ocs_Gitlab();
try {
$gitProjectIssues = $gitlab->getProjectIssues($gitProjectId);
} catch (Exception $exc) {
//Project is gone
$modelProject = new Default_Model_Project();
$modelProject->updateProject($this->_projectId, array('is_gitlab_project' => 0, 'gitlab_project_id' => null, 'show_gitlab_project_issues' => 0, 'use_gitlab_project_readme' => 0));
$gitProjectIssues = null;
}
return $gitProjectIssues;
}
public function startvideoajaxAction() {
$this->_helper->layout()->disableLayout();
$collection_id = null;
$file_id = null;
$memberId = $this->_authMember->member_id;
if($this->hasParam('collection_id') && $this->hasParam('file_id')) {
$collection_id = $this->getParam('collection_id');
$file_id = $this->getParam('file_id');
$id = null;
//Log media view
try {
$mediaviewsTable = new Default_Model_DbTable_MediaViews();
$id = $mediaviewsTable->getNewId();
$data = array('media_view_id' => $id, 'media_view_type_id' => $mediaviewsTable::MEDIA_TYPE_VIDEO, 'project_id' => $this->_projectId, 'collection_id' => $collection_id, 'file_id' => $file_id, 'start_timestamp' => new Zend_Db_Expr ('Now()'), 'ip' => $this->getRealIpAddr(), 'referer' => $this->getReferer());
if(!empty($memberId)) {
$data['member_id'] = $memberId;
}
$data['source'] = 'OCS-Webserver';
$mediaviewsTable->createRow($data)->save();
} catch (Exception $exc) {
//echo $exc->getTraceAsString();
$errorLog = Zend_Registry::get('logger');
$errorLog->err(__METHOD__ . ' - ' . $exc->getMessage() . ' ---------- ' . PHP_EOL);
}
$this->_helper->json(array('status' => 'success', 'MediaViewId' => $id));
return;
}
$this->_helper->json(array('status' => 'error'));
}
public function stopvideoajaxAction() {
$this->_helper->layout()->disableLayout();
$view_id = null;
if($this->hasParam('media_view_id')) {
$view_id = $this->getParam('media_view_id');
//Log media view stop
try {
$mediaviewsTable = new Default_Model_DbTable_MediaViews();
$data = array('stop_timestamp' => new Zend_Db_Expr ('Now()'));
$mediaviewsTable->update($data, 'media_view_id = '. $view_id);
} catch (Exception $exc) {
//echo $exc->getTraceAsString();
$errorLog = Zend_Registry::get('logger');
$errorLog->err(__METHOD__ . ' - ' . $exc->getMessage() . ' ---------- ' . PHP_EOL);
}
$this->_helper->json(array('status' => 'success', 'MediaViewId' => $view_id));
return;
}
$this->_helper->json(array('status' => 'error'));
}
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
function getReferer()
{
$referer = null;
if (!empty($_SERVER['HTTP_REFERER'])) {
$referer = $_SERVER['HTTP_REFERER'];
}
return $referer;
}
}
diff --git a/application/modules/default/forms/Product.php b/application/modules/default/forms/Product.php
index 5447cc8af..7d7d0425b 100644
--- a/application/modules/default/forms/Product.php
+++ b/application/modules/default/forms/Product.php
@@ -1,728 +1,718 @@
.
**/
class Default_Form_Product extends Zend_Form
{
protected $onlineGalleryImageSources = array();
private $member_id = null;
public function __construct($options = null)
{
if (isset($options['pictures'])) {
$this->onlineGalleryImageSources = $options['pictures'];
}
if (isset($options['member_id'])) {
$this->member_id = $options['member_id'];
}
parent::__construct($options);
}
/**
* @param $sources array
*/
public function setOnlineGalleryImageSources($sources)
{
$this->onlineGalleryImageSources = $sources;
$this->init();
}
public function init()
{
$this->setAction('');
$this->setAttrib('enctype', 'multipart/form-data');
$this->addPrefixPath('Default_Form_Element', APPLICATION_PATH . '/modules/default/forms/elements/', Zend_Form::ELEMENT);
$this->addElement($this->getTitleElement())
->addElement($this->getCategoryIdElement())
->addElement($this->getDescriptionElement())
->addElement($this->getVersionElement())
->addElement($this->getSmallImageElement())
->addElement($this->getImageUploadElement())
- // ->addElement($this->getBigImageElement())
- // ->addElement($this->getBigImageUploadElement())
->addSubForm($this->getGalleryElement(), 'gallery')
- // ->addElement($this->getAmountElement())
- // ->addElement($this->getAmountPeriodElement())
->addElement($this->getEmbedCodeElement())
->addElement($this->getProjectHomepageElement())
->addElement($this->getSourceElement())
->addElement($this->getFacebookElement())
->addElement($this->getTwitterElement())
->addElement($this->getGoogleElement())
->addElement($this->getTagElement())
->addElement($this->getTagUserElement())
->addElement($this->getHiddenProjectId())
->addElement($this->getSubmitElement())
->addElement($this->getCancelElement())
->addElement($this->getLicenseIdElement())
->addElement($this->getIsOriginal())
->addElement($this->getIsGitlab())
->addElement($this->getGitlabProjectId())
->addElement($this->getShowGitlabProjectIssues())
->addElement($this->getUseGitlabProjectReadme())
-
- //->addElement($this->getCCAttribution())
- //->addElement($this->getCCComercial())
- //->addElement($this->getCCDerivateWorks())
- //->addElement($this->getCCShareAlike())
- //->addElement($this->getCCLicense())
;
}
private function getTitleElement()
{
// $validatorRegEx = new Zend_Validate_Regex(array('pattern' => "/^[ \/\[\]\.\-_A-Za-z0-9'\pL]{1,}$/iu")); // with unicode character class
$validatorRegEx = new Zend_Validate_Regex(array('pattern' => "/^[ \/\[\]\.\-_A-Za-z0-9']{1,}$/iu"));
$validatorRegEx->setMessages(array(Zend_Validate_Regex::NOT_MATCH => "'%value%' is not valid. Please use only alphanumeric characters or /, [, ], -, _, ' "));
return $this->createElement('text', 'title')
->setRequired(true)
->addValidators(array(
array('StringLength', true, array(4, 60)),
$validatorRegEx
))
->setFilters(array('StringTrim'))
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_title.phtml',
'placement' => false
)
)
))
;
}
private function getCategoryIdElement()
{
$validatorCategory = new Default_Form_Validator_Category();
return $this->createElement('number', 'project_category_id', array())
->setRequired(true)
->addValidator('Digits')
->addValidator($validatorCategory)
->addFilter('Digits')
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_cat_id.phtml',
'placement' => false
)
)
))
;
}
private function getDescriptionElement()
{
return $this->createElement('textarea', 'description', array('cols' => 30, 'rows' => 9))
->setRequired(true)
->setFilters(array('StringTrim'))
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_description.phtml',
'placement' => false
)
)
))
;
}
private function getVersionElement()
{
return $this->createElement('text', 'version')
->setRequired(false)
->addValidators(array(
array('StringLength', false, array(0, 50)),
))
->setFilters(array('StringTrim'))
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_version.phtml',
'placement' => false
)
)
))
;
}
private function getSmallImageElement()
{
return $this->createElement('hidden', 'image_small')
->setFilters(array('StringTrim'))
->addValidators(array(
array(
'Regex',
false,
array('/^[A-Za-z0-9.\/_-]{1,}$/i')
)
))
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_image_small.phtml',
'placement' => false
)
)
))
;
}
private function getImageUploadElement()
{
$modelImage = new Default_Model_DbTable_Image();
return $this->createElement('file', 'image_small_upload')
->setDisableLoadDefaultDecorators(true)
->setValueDisabled(true)
->setTransferAdapter(new Local_File_Transfer_Adapter_Http())
->setRequired(false)
->setMaxFileSize(2097152)
->addValidator('Count', false, 1)
->addValidator('Size', false, array('min' => '500B', 'max' => '2MB'))
->addValidator('Extension', false, $modelImage->getAllowedFileExtension())
->addValidator('ImageSize', false, array(
'minwidth' => 20,
'maxwidth' => 2000,
'minheight' => 20,
'maxheight' => 2000
))
->addValidator('MimeType', false, $modelImage->getAllowedMimeTypes())
->setDecorators(array(
array('File' => new Local_Form_Decorator_File()),
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_image_small_upload.phtml',
'placement' => false
)
)
))
;
}
private function getGalleryElement()
{
$gallerySubform = new Default_Form_GallerySubForm(array('pictures' => $this->onlineGalleryImageSources));
$gallerySubform->setMaxGalleryPics(5);
return $gallerySubform;
}
private function getEmbedCodeElement()
{
return $this->createElement('textarea', 'embed_code', array('cols' => 30, 'rows' => 3))
->setRequired(false)
->setFilters(array('StringTrim'))
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_embedcode.phtml',
'placement' => false
)
)
))
;
}
private function getProjectHomepageElement()
{
return $this->createElement('text', 'link_1', array())
->setRequired(false)
->setFilters(array('StringTrim'))
->addPrefixPath('Local_Validate', 'Local/Validate', Zend_Form_Element::VALIDATE)
->addValidator('PartialUrl')
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_link.phtml',
'placement' => false
)
)
))
;
}
private function getSourceElement()
{
return $this->createElement('text', 'source_url', array())
->setRequired(false)
->setFilters(array('StringTrim'))
->addPrefixPath('Local_Validate', 'Local/Validate', Zend_Form_Element::VALIDATE)
->addValidator('PartialUrl')
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_source_url.phtml',
'placement' => false
)
)
))
;
}
private function getFacebookElement()
{
return $this->createElement('text', 'facebook_code', array())
->setRequired(false)
->setFilters(array('StringTrim'))
->addPrefixPath('Local_Validate', 'Local/Validate', Zend_Form_Element::VALIDATE)
->addValidator('PartialUrl')
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_facebook.phtml',
'placement' => false
)
)
))
;
}
private function getTwitterElement()
{
return $this->createElement('text', 'twitter_code', array())
->setRequired(false)
->setFilters(array('StringTrim'))
->addPrefixPath('Local_Validate', 'Local/Validate', Zend_Form_Element::VALIDATE)
->addValidator('PartialUrl')
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_twitter.phtml',
'placement' => false
)
)
))
;
}
private function getGoogleElement()
{
return $this->createElement('text', 'google_code', array())
->setRequired(false)
->setFilters(array('StringTrim'))
->addPrefixPath('Local_Validate', 'Local/Validate', Zend_Form_Element::VALIDATE)
->addValidator('PartialUrl')
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_google.phtml',
'placement' => false
)
)
))
;
}
private function getTagElement()
{
$element = new Zend_Form_Element_Multiselect('tags', array('registerInArrayValidator' => false));
return $element->setFilters(array('StringTrim'))->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_tags_multiselect.phtml',
'placement' => false
)
)
))
;
}
private function getTagUserElement()
{
$element = new Zend_Form_Element_Multiselect('tagsuser', array('registerInArrayValidator' => false));
return $element->setFilters(array('StringTrim'))->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_tags_user.phtml',
'placement' => false
)
)
))
;
}
private function getHiddenProjectId()
{
return $this->createElement('hidden', 'project_id')->setFilters(array('StringTrim'))->addValidators(array('Digits'))
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_hidden.phtml',
'placement' => false
)
)
))
;
}
private function getSubmitElement()
{
$submit = $this->createElement('button', 'preview')->setDecorators(array(
'ViewHelper'
))
;
$submit->setLabel('Preview');
$submit->setAttrib('type', 'submit');
return $submit;
}
private function getCancelElement()
{
$cancel = $this->createElement('button', 'cancel')->setDecorators(array(
'ViewHelper'
))
;
$cancel->setLabel('Cancel');
$cancel->setAttrib('type', 'submit');
return $cancel;
}
private function getLicenseIdElement()
{
//$element = new Zend_Form_Element_Multiselect('project_license_id', array('registerInArrayValidator' => false));
$element = new Zend_Form_Element_Select('license_tag_id', array('multiple' => false));
$element->setIsArray(true);
$tagTable = new Default_Model_DbTable_Tags();
$options = $tagTable->fetchLicenseTagsForSelect();
return $element->setFilters(array('StringTrim'))->setMultiOptions($options)->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_select_license.phtml',
'placement' => false
)
)
))
;
}
private function getIsOriginal()
{
$element = new Zend_Form_Element_Checkbox('is_original');
return $element->setOptions(array(
'label' => ' Product original ',
'use_hidden_element' => false,
'checked_value' => 1,
'unchecked_value' => 0
));
}
private function getIsGitlab()
{
$element = new Zend_Form_Element_Checkbox('is_gitlab_project');
return $element->setOptions(array(
'label' => ' Git-Project ',
'use_hidden_element' => false,
'checked_value' => 1,
'unchecked_value' => 0
));
}
private function getGitlabProjectId()
{
$element = new Zend_Form_Element_Select('gitlab_project_id', array('multiple' => false));
$element->setIsArray(true);
$gitlab = new Default_Model_Ocs_Gitlab();
$optionArray = array();
if ($this->member_id) {
$memberTable = new Default_Model_Member();
$member = $memberTable->fetchMemberData($this->member_id);
$gitlab_user_id = null;
if(!empty($member->gitlab_user_id)) {
//get gitlab user id from db
$gitlab_user_id = $member->gitlab_user_id;
} else {
//get gitlab user id from gitlab API and save in DB
$gitUser = $gitlab->getUserWithName($member->username);
if ($gitUser && null != $gitUser) {
$gitlab_user_id = $gitUser['id'];
$memberTableExternal = new Default_Model_DbTable_MemberExternalId();
$memberTableExternal->updateGitlabUserId($this->member_id, $gitlab_user_id);
}
}
if ($gitlab_user_id && null != $gitlab_user_id) {
try {
//now get his projects
$gitProjects = $gitlab->getUserProjects($gitlab_user_id);
foreach ($gitProjects as $proj) {
$optionArray[$proj['id']] = $proj['name'];
}
} catch (Exception $exc) {
//Error getting USerProjects,
}
}
}
return $element->setFilters(array('StringTrim'))->setMultiOptions($optionArray)->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_gitlab_project_id.phtml',
'placement' => false
)
)
))
;
}
private function getShowGitlabProjectIssues()
{
$element = new Zend_Form_Element_Checkbox('show_gitlab_project_issues');
return $element->setOptions(array(
'label' => ' Git-Issues ',
'use_hidden_element' => false,
'checked_value' => 1,
'unchecked_value' => 0
));
}
private function getUseGitlabProjectReadme()
{
$element = new Zend_Form_Element_Checkbox('use_gitlab_project_readme');
return $element->setOptions(array(
'label' => 'README.md',
'use_hidden_element' => false,
'checked_value' => 1,
'unchecked_value' => 0
));
}
public function initSubCatElement($projectCatId)
{
if (false === isset($projectCatId)) {
return;
}
$tableSubCategory = new Default_Model_SubCategory();
$subcategories = $tableSubCategory->fetchAllSubCategories($projectCatId);
$this->getElement('project_subcategory_id')->setMultiOptions($subcategories);
}
public function initSubSubCatElement($projectSubCatId)
{
if (false === isset($projectCatId)) {
return;
}
$modelSubSubCategories = new Default_Model_SubSubCategory();
$subSubCategories = $modelSubSubCategories->fetchAllSubCategories($projectSubCatId);
$this->getElement('project_subcategory_id')->setMultiOptions($subSubCategories);
}
/**
* Validate the form
*
* @param array $data
* @param null $project_id
*
* @return bool
* @throws Zend_Exception
* @throws Zend_Form_Exception
*/
public function isValid($data, $project_id = null)
{
$sqlExclude = 'status > ' . Default_Model_DbTable_Project::PROJECT_DELETED;
if (isset($project_id)) {
$db = Zend_Registry::get('db');
$sqlExclude .= $db->quoteInto(' AND project_id <> ?', $project_id, 'INTEGER');
}
/*
$checkTitleExist = new Zend_Validate_Db_NoRecordExists(array(
'table' => 'project',
'field' => 'title',
'exclude' => $sqlExclude
));
$checkTitleExist->setMessage('This title already exists.', Zend_Validate_Db_NoRecordExists::ERROR_RECORD_FOUND);
$this->getElement('title')
->addValidator($checkTitleExist);
*/
return parent::isValid($data);
}
/**
* Validate a partial form
*
* Does not check for required flags.
*
* @param array $data
*
* @return boolean
*/
public function isValidPartial(array $data)
{
return parent::isValidPartial($data); // TODO: Change the autogenerated stub
}
private function getAmountElement()
{
return $this->createElement('number', 'amount', array())
->setRequired(false)
->addValidator('Digits')
->addFilter('Digits')
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_amount.phtml',
'placement' => false
)
)
))
;
}
private function getAmountPeriodElement()
{
return $this->createElement('radio', 'amount_period', array())
->setRequired(false)
->addMultiOptions(array('yearly' => 'yearly (will run continuously each year)', 'one-time' => 'one-time'))
->setValue('yearly')
->setSeparator(' ')
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_amount_period.phtml',
'placement' => false
)
)
))
;
}
private function getBigImageElement()
{
return $this->createElement('hidden', 'image_big')
->setFilters(array('StringTrim'))
->addValidators(array(
array(
'Regex',
false,
array('/^[A-Za-z0-9.\/_-]{1,}$/i')
)
))
->setDecorators(array(
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_image_big.phtml',
'placement' => false
)
)
))
;
}
private function getBigImageUploadElement()
{
$modelImage = new Default_Model_DbTable_Image();
return $this->createElement('file', 'image_big_upload')->setDisableLoadDefaultDecorators(true)
->setTransferAdapter(new Local_File_Transfer_Adapter_Http())->setRequired(false)->setMaxFileSize(2097152)
->addValidator('Count', false, 1)->addValidator('Size', false, 2097152)->addValidator('FilesSize', false, 2000000)
->addValidator('Extension', false, $modelImage->getAllowedFileExtension())->addValidator('ImageSize', false, array(
'minwidth' => 100,
'maxwidth' => 2000,
'minheight' => 100,
'maxheight' => 1200
))->addValidator('MimeType', false, $modelImage->getAllowedMimeTypes())->setDecorators(array(
array('File' => new Local_Form_Decorator_File()),
array(
'ViewScript',
array(
'viewScript' => 'product/viewscripts/input_image_big_upload.phtml',
'placement' => false
)
)
))
;
}
private function getCCAttribution()
{
return $this->createElement('checkbox', 'by');
}
private function getCCComercial()
{
return $this->createElement('checkbox', 'nc');
}
private function getCCDerivateWorks()
{
return $this->createElement('checkbox', 'nd');
}
private function getCCShareAlike()
{
return $this->createElement('checkbox', 'sa');
}
private function getCCLicense()
{
return $this->createElement('checkbox', 'cc_license');
}
}
\ No newline at end of file
diff --git a/application/modules/default/forms/Register.php b/application/modules/default/forms/Register.php
index e4e5a48a1..d6a85bd4a 100644
--- a/application/modules/default/forms/Register.php
+++ b/application/modules/default/forms/Register.php
@@ -1,146 +1,140 @@
.
**/
class Default_Form_Register extends Zend_Form
{
/**
* @throws Zend_Exception
* @throws Zend_Form_Exception
* @throws Zend_Validate_Exception
*/
public function init()
{
$this->setMethod('POST');
$this->setAction('/register/');
$this->addElementPrefixPath('Local', 'Local/');
$this->setAttrib('id', 'registerForm');
$this->setAttrib('class', 'standard-form row-fluid center');
$redir = $this->createElement('hidden', 'redirect')->setDecorators(array('ViewHelper'));
$this->addElement($redir);
$usernameValidChars = new Zend_Validate_Regex('/^(?=.{4,20}$)(?![-])(?!.*[-]{2})[a-z0-9-]+(?setMessage('This username already exists.', Local_Validate_UsernameExists::EXISTS);
$userExistCheck->setMessage('This username already exists.');
$userEmptyCheck = new Zend_Validate_NotEmpty();
$userEmptyCheck->setMessage('RegisterFormUsernameErr', Zend_Validate_NotEmpty::IS_EMPTY);
$userNameLength = new Zend_Validate_StringLength(array('min' => 4, 'max' => 20));
$groupNameExists = new Local_Validate_GroupnameExistsInOpenCode();
$fname = $this->createElement('text', 'username')
->setDecorators(array('ViewHelper', 'Errors'))
->setRequired(true)
->addFilter(new Zend_Filter_StringTrim())
->addFilter(new Zend_Filter_StripNewlines())
->addValidator($userEmptyCheck, true)
->addValidator($userNameLength, true)
->addValidator($usernameValidChars, true)
->addValidator($userExistCheck, true)
->addValidator($groupNameExists, true)
->setAttrib('placeholder', 'Username (4 chars minimum)')
- ->setAttrib('class', 'form-control')
- ;
+ ->setAttrib('class', 'form-control');
$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))
- ;
+ ->setOptions(array('domain' => true));
$mailExistCheck = new Local_Validate_EmailExists();
$mailExistCheck->setMessage('RegisterFormEmailErrAlreadyRegistered', Local_Validate_EmailExists::EXISTS);
$mailEmpty = new Zend_Validate_NotEmpty();
$mailEmpty->setMessage('RegisterFormEmailErrEmpty', Zend_Validate_NotEmpty::IS_EMPTY);
$mailValidatorChain = new Zend_Validate();
$mailValidatorChain->addValidator($mailEmpty, true)
->addValidator($mailValidCheck, true)
- ->addValidator($mailExistCheck, true)
- ;
+ ->addValidator($mailExistCheck, true);
$mail = $this->createElement('text', 'mail')
->setLabel('RegisterFormEmailLabel')
->addValidator($mailEmpty, true)
->addValidator($mailValidCheck, true)
->addValidator($mailExistCheck, true)
->setDecorators(array('ViewHelper', 'Errors'))
->setRequired(true)
->setAttrib('placeholder', 'Email')
- ->setAttrib('class', 'form-control')
- ;
+ ->setAttrib('class', 'form-control');
$pass1 = $this->createElement('password', 'password1')
->setLabel('RegisterFormPasswordLabel')
->setRequired(true)//->addErrorMessage('RegisterFormPasswordErr')
->setDecorators(array('ViewHelper', 'Errors'))
->setAttrib('placeholder', 'Password')
->addValidator('stringLength', true, array(6, 200))
->setAttrib('placeholder', 'Password (6 chars minimum)')
- ->setAttrib('class', 'form-control')
- ;
+ ->setAttrib('class', 'form-control');
$pass2 = $this->createElement('password', 'password2')
->setLabel('RegisterFormPassword2Label')
->setRequired(true)
->addErrorMessage('RegisterFormPassword2Err')
->setDecorators(array('ViewHelper', 'Errors'))
->setAttrib('placeholder', 'Confirm Password')
- ->setAttrib('class', 'form-control')
- ;
+ ->setAttrib('class', 'form-control');
$passValid = new Local_Validate_PasswordConfirm($pass2->getValue());
$pass1->addValidator($passValid, true);
$submit = $this->createElement('button', 'login');
$submit->setLabel('Register');
$submit->setDecorators(array('ViewHelper'));
$submit->setAttrib('class', 'btn btn-native btn-min-width');
$submit->setAttrib('type', 'submit');
$this->addElement($fname)
->addElement($mail)
->addElement($pass1)
->addElement($pass2)
- ->addElement($submit)
- ;
+ ->addElement($submit);
if (APPLICATION_ENV == 'development') {
return;
}
$this->addPrefixPath('Cgsmith\\Form\\Element', APPLICATION_LIB . '/Cgsmith/Form/Element', Zend_Form::ELEMENT);
- $this->addElementPrefixPath('Cgsmith\\Validate\\', APPLICATION_LIB . '/Cgsmith/Validate/', Zend_Form_Element::VALIDATE);
+ $this->addElementPrefixPath('Cgsmith\\Validate\\', APPLICATION_LIB . '/Cgsmith/Validate/',
+ Zend_Form_Element::VALIDATE);
$captcha = $this->createElement('recaptcha', 'g-recaptcha-response', array(
'siteKey' => Zend_Registry::get('config')->recaptcha->sitekey,
'secretKey' => Zend_Registry::get('config')->recaptcha->secretkey,
));
$this->addElement($captcha);
}
}
\ No newline at end of file
diff --git a/application/modules/default/models/DbTable/Image.php b/application/modules/default/models/DbTable/Image.php
index 196092b80..51df047f4 100644
--- a/application/modules/default/models/DbTable/Image.php
+++ b/application/modules/default/models/DbTable/Image.php
@@ -1,455 +1,456 @@
.
**/
class Default_Model_DbTable_Image extends Zend_Db_Table_Abstract
{
protected $_name = "image";
protected $_fields = array(
'id' => null,
'filename' => null,
'code' => null,
'name' => null,
'member_id' => null,
'model' => null,
'foreign_key' => null,
'foreign_id' => null,
'created' => null
);
protected $_allowed = array(
'image/jpeg' => '.jpg',
'image/jpg' => '.jpg',
'image/png' => '.png',
'image/gif' => '.gif',
'application/x-empty' => '.png'
);
protected $_allowedFileExtension = array(
'jpg',
'jpeg',
'png',
'gif'
);
// protected $_maxsize = array(
// 'width' => 1024,
// 'height' => 768
// );
protected $_maxsize = array(
'width' => 2000,
'height' => 2000
);
protected $_errorMsg = null;
public function getMemberImages($member_id)
{
$images = $this->select()->where('member_id = ?', $member_id)->query()->fetchAll();
return $images;
}
public function storeExternalImage($url, $fileExtension = null)
{
Zend_Registry::get('logger')->debug(__METHOD__ . ' - ' . print_r(func_get_args(), true));
$tmpFileName = $this->storeRemoteImage($url, $fileExtension);
if (file_exists(IMAGES_UPLOAD_PATH . 'tmp/' . $tmpFileName)) {
$content_type = mime_content_type(IMAGES_UPLOAD_PATH . 'tmp/' . $tmpFileName);
$filePath = $this->saveImageOnMediaServer($tmpFileName);
$filename = $filePath;
$file_info['size'] = filesize(IMAGES_UPLOAD_PATH . '/' . $filename);
$this->save(array('code' => $content_type, 'filename' => $filename));
}
return $filename;
}
public function storeRemoteImage($url, $fileExtention = null, &$file_info = null)
{
//$host = parse_url( $url, PHP_URL_HOST );
//$path = parse_url($url, PHP_URL_PATH);
//$query = parse_url($url, PHP_URL_QUERY);
//$url = 'http://'.$host.$path.'?'.urlencode($query);
$limit = 4194304; #4Mb
$filename = md5($url);
if ($fileExtention) {
$filename .= '.' . $fileExtention;
}
$file_info = array();
if (file_exists(IMAGES_UPLOAD_PATH . 'tmp/' . $filename)) {
// Delete old file. Maybe an updated version is available.
if (false == unlink(IMAGES_UPLOAD_PATH . 'tmp/' . $filename)) {
throw new Exception('Cannot delete file: ' . IMAGES_UPLOAD_PATH . 'tmp/' . $filename);
}
}
try {
#$file = file_get_contents($url, NULL, NULL, -1, $limit);
$file = $this->file_get_contents_curl($url);
} catch (Exception $e) {
$file = null;
}
if (file_put_contents(IMAGES_UPLOAD_PATH . 'tmp/' . $filename, $file)) {
$content_type = $this->_get_mime_content_type(IMAGES_UPLOAD_PATH . 'tmp/' . $filename);
if (!in_array($content_type, array_keys($this->_allowed))) {
throw new Exception('Format not allowed ' . $content_type . ' for url ' . $url);
}
touch(IMAGES_UPLOAD_PATH . 'tmp/' . $filename);
} else {
throw new Exception('Error storing remote image');
}
$file_info['size'] = filesize(IMAGES_UPLOAD_PATH . 'tmp/' . $filename);
return $filename;
}
public function file_get_contents_curl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
public function _get_mime_content_type($filename)
{
if (!function_exists('mime_content_type')) {
$mime_types = array(
'txt' => 'text/plain',
'htm' => 'text/html',
'html' => 'text/html',
'php' => 'text/html',
'css' => 'text/css',
'js' => 'application/javascript',
'json' => 'application/json',
'xml' => 'application/xml',
'swf' => 'application/x-shockwave-flash',
'flv' => 'video/x-flv',
// images
'png' => 'image/png',
'jpe' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'gif' => 'image/gif',
'bmp' => 'image/bmp',
'ico' => 'image/vnd.microsoft.icon',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'svg' => 'image/svg+xml',
'svgz' => 'image/svg+xml',
// archives
'zip' => 'application/zip',
'rar' => 'application/x-rar-compressed',
'exe' => 'application/x-msdownload',
'msi' => 'application/x-msdownload',
'cab' => 'application/vnd.ms-cab-compressed',
// audio/video
'mp3' => 'audio/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
// adobe
'pdf' => 'application/pdf',
'psd' => 'image/vnd.adobe.photoshop',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
// ms office
'doc' => 'application/msword',
'rtf' => 'application/rtf',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
// open office
'odt' => 'application/vnd.oasis.opendocument.text',
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
);
$ext = strtolower(array_pop(explode('.', $filename)));
if (array_key_exists($ext, $mime_types)) {
return $mime_types[$ext];
} else if (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME);
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);
return $mimetype;
} else {
return 'application/octet-stream';
}
} else {
return mime_content_type($filename);
}
}
public function saveImageOnMediaServer($filePathName)
{
if (empty($filePathName)) {
return null;
}
$content_type = mime_content_type($filePathName);
if (!in_array($content_type, array_keys($this->_allowed))) {
throw new Exception('Format not allowed: ' . $content_type . ' for img: ' . $filePathName);
}
// Generate filename
$generatedFilename = $this->_generateFilename($filePathName);
$destinationFile = IMAGES_UPLOAD_PATH . $generatedFilename . $this->_allowed[$content_type];
if (copy($filePathName, $destinationFile)) {
if (file_exists($filePathName)) {
if (false === unlink($filePathName)) {
Zend_Registry::get('logger')->warn(__METHOD__ . ' - can not delete temp file: ' . $filePathName);
}
}
Zend_Registry::get('logger')->debug(__METHOD__ . ' - Start upload picture - ' . print_r($destinationFile,
true))
;
$srcPathOnMediaServer = $this->sendImageToMediaServer($destinationFile, $content_type);
if (file_exists($destinationFile)) {
if (false === unlink($destinationFile)) {
Zend_Registry::get('logger')->warn(__METHOD__ . ' - can not delete file: ' . $destinationFile);
}
}
if (!$srcPathOnMediaServer) {
throw new Exception("Error in upload to CDN-Server. \n Server message:\n" . $this->_errorMsg);
}
Zend_Registry::get('logger')->debug(__METHOD__ . ' - End upload picture - ' . print_r(IMAGES_UPLOAD_PATH
. $srcPathOnMediaServer, true))
;
return $srcPathOnMediaServer;
}
}
private function _generateFilename($filePathName)
{
return sha1_file($filePathName);
}
/**
* @param $fullFilePath
* @param $mimeType
*
* @return string
+ * @throws Zend_Exception
+ * @throws Zend_Http_Client_Exception
+ * @throws Zend_Uri_Exception
*/
protected function sendImageToMediaServer($fullFilePath, $mimeType)
{
$config = Zend_Registry::get('config');
$url = $config->images->media->upload;
$client = new Zend_Http_Client($url);
$client->setFileUpload($fullFilePath, basename($fullFilePath), null, $mimeType);
$response = $client->request('POST');
if ($response->getStatus() > 200) {
- $this->_errorMsg = $response->getBody();
-
- return null;
+ throw new Default_Model_Exception_Image('Could not upload file to ' . $url . ' - server response: ' . $response->getBody());
}
return $response->getBody();
}
public function save($image)
{
foreach ($image as $key => $value) {
if (!in_array($key, array_keys($this->_fields))) {
unset($image[$key]);
}
}
if (isset($image['filename']) && !isset($image['code'])) {
$image['code'] = $this->_trimExtension($image['filename']);
}
if (isset($image['id'])) {
return $this->_update($image);
} else {
return $this->_add($image);
}
}
private function _update($image)
{
if (!isset($image['id'])) {
throw new Exception('Invalid update without an id');
} else {
$id = (int)$image['id'];
}
return $this->update($image, array('id = ?' => $id));
}
private function _add($image)
{
return $this->insert($image);
}
/**
* @param Zend_Form_Element_File $formFileElement
*
* @return string
* @throws Zend_Exception
* @todo wrong place for this method
*/
public function saveImage($formFileElement)
{
if (empty($formFileElement)) {
Zend_Registry::get('logger')->err(__METHOD__ . ' - form file element empty');
return null;
}
$filesInfo = $formFileElement->getFileInfo();
if (1 < count($filesInfo)) {
throw new Zend_Exception('Element contains more than one file elements');
}
foreach ($filesInfo as $file => $fileInfo) {
if (null == $fileInfo['size']) {
return null;
}
$contentType = mime_content_type($fileInfo['tmp_name']);
if (false === in_array($contentType, array_keys($this->_allowed))) {
throw new Zend_Exception('Format not allowed: ' . $contentType . ' for img: ' . $fileInfo['name']);
}
$generatedFilename = $this->_generateFilename($fileInfo['tmp_name']);
$destinationFile = IMAGES_UPLOAD_PATH . $generatedFilename . $this->_allowed[$contentType];
Zend_Registry::get('logger')->info(__METHOD__ . ' - destination file path: ' . $destinationFile);
if (copy($fileInfo['tmp_name'], $destinationFile)) {
if (file_exists($fileInfo['tmp_name'])) {
if (false === unlink($fileInfo['tmp_name'])) {
Zend_Registry::get('logger')->warn(__METHOD__ . ' - can not delete temp file: '
. $fileInfo['tmp_name'])
;
}
}
Zend_Registry::get('logger')->debug(__METHOD__ . ' - Start upload picture - '
. print_r($destinationFile, true))
;
$srcPathOnMediaServer = $this->sendImageToMediaServer($destinationFile, $contentType);
if (file_exists($destinationFile)) {
if (false === unlink($destinationFile)) {
Zend_Registry::get('logger')->warn(__METHOD__ . ' - can not delete file: ' . $destinationFile);
}
}
if (!$srcPathOnMediaServer) {
throw new Zend_Exception("Error in upload to CDN-Server. \n Server message:\n" . $this->_errorMsg);
}
Zend_Registry::get('logger')->debug(__METHOD__ . ' - End upload a picture - '
. print_r(IMAGES_UPLOAD_PATH . $srcPathOnMediaServer, true))
;
return $srcPathOnMediaServer;
}
}
}
/**
* @param Zend_Form_Element_File $formFileElement
*
* @return array
* @throws Zend_Exception
*/
public function saveImages($formFileElement)
{
if (empty($formFileElement)) {
return array();
}
$resultPath = array();
$filesInfo = $formFileElement->getFileInfo();
foreach ($filesInfo as $file => $fileInfo) {
if (null == $fileInfo['size']) {
continue;
}
$contentType = mime_content_type($fileInfo['tmp_name']);
if (!in_array($contentType, array_keys($this->_allowed))) {
throw new Zend_Exception('Format not allowed: ' . $contentType . ' for img: ' . $fileInfo['name']);
}
$generatedFilename = $this->_generateFilename($fileInfo['tmp_name']);
$destinationFile = IMAGES_UPLOAD_PATH . $generatedFilename . $this->_allowed[$contentType];
if (copy($fileInfo['tmp_name'], $destinationFile)) {
Zend_Registry::get('logger')->debug(__METHOD__ . ' - Start upload picture - '
. print_r($destinationFile, true))
;
$srcPathOnMediaServer = $this->sendImageToMediaServer($destinationFile, $contentType);
if (!$srcPathOnMediaServer) {
throw new Zend_Exception("Error in upload to CDN-Server. \n Server message:\n" . $this->_errorMsg);
}
Zend_Registry::get('logger')->debug(__METHOD__ . ' - End upload a picture - '
. print_r(IMAGES_UPLOAD_PATH . $srcPathOnMediaServer, true))
;
$resultPath[] = $srcPathOnMediaServer;
}
}
return $resultPath;
}
public function getAllowedFileExtension()
{
return $this->_allowedFileExtension;
}
public function getAllowedMimeTypes()
{
return array_keys($this->getAllowed());
}
public function getAllowed()
{
return $this->_allowed;
}
public function setAllowed($allowed)
{
$this->_allowed = $allowed;
}
public function getMaxsize()
{
return $this->_maxsize;
}
public function setMaxsize($maxsize)
{
$this->_maxsize = $maxsize;
}
}
\ No newline at end of file
diff --git a/application/modules/default/models/Exception/Image.php b/application/modules/default/models/Exception/Image.php
new file mode 100644
index 000000000..3e9d691b0
--- /dev/null
+++ b/application/modules/default/models/Exception/Image.php
@@ -0,0 +1,27 @@
+.
+ **/
+
+class Default_Model_Exception_Image extends Zend_Exception
+{
+
+}
\ No newline at end of file
diff --git a/application/modules/default/models/Member.php b/application/modules/default/models/Member.php
index a6e8e4433..2b020622b 100644
--- a/application/modules/default/models/Member.php
+++ b/application/modules/default/models/Member.php
@@ -1,1331 +1,1341 @@
.
-
-
**/
-use YoHang88\LetterAvatar\LetterAvatar;
+
+use YoHang88\LetterAvatar\LetterAvatar;
+
class Default_Model_Member extends Default_Model_DbTable_Member
{
const CASE_INSENSITIVE = 1;
/**
* @param int $count
* @param string $orderBy
* @param string $dir
*
* @return Zend_Db_Table_Rowset
* @throws Zend_Exception
*/
public function fetchNewActiveMembers($count = 100, $orderBy = 'created_at', $dir = 'DESC')
{
if (empty($count)) {
return $this->generateRowSet($this->createRow());
}
$allowedDirection = array('desc' => true, 'asc' => true);
if (false == isset($allowedDirection[strtolower($dir)])) {
$dir = null;
}
/** @var Zend_Cache_Core $cache */
$cache = Zend_Registry::get('cache');
$cacheName = __FUNCTION__ . md5($count . $orderBy . $dir);
$members = $cache->load($cacheName);
if ($members) {
return $members;
} else {
$sql = '
SELECT count(*) AS `total_count`
FROM `member`
WHERE `is_active` = :activeVal
AND `type` = :typeVal
AND `profile_image_url` <> :defaultImgUrl
AND `profile_image_url` LIKE :likeImgUrl
';
$resultCnt = $this->_db->fetchRow($sql, array(
'activeVal' => Default_Model_Member::MEMBER_ACTIVE,
'typeVal' => Default_Model_Member::MEMBER_TYPE_PERSON,
'defaultImgUrl' => 'hive/user-pics/nopic.png',
'likeImgUrl' => 'hive/user-bigpics/0/%'
));
$totalcnt = $resultCnt['total_count'];
if ($totalcnt > $count) {
$offset = ' offset ' . rand(0, $totalcnt - $count);
} else {
$offset = '';
}
$sql = '
SELECT *
FROM `member`
WHERE `is_active` = :activeVal
AND `type` = :typeVal
AND `profile_image_url` <> :defaultImgUrl
AND `profile_image_url` LIKE :likeImgUrl
';
//$sql .= ' ORDER BY ' . $this->_db->quoteIdentifier($orderBy) . ' ' . $dir;
$sql .= ' LIMIT ' . $this->_db->quote($count, Zend_Db::INT_TYPE);
$sql .= $offset;
$resultMembers = $this->getAdapter()->query($sql, array(
'activeVal' => Default_Model_Member::MEMBER_ACTIVE,
'typeVal' => Default_Model_Member::MEMBER_TYPE_PERSON,
'defaultImgUrl' => 'hive/user-pics/nopic.png',
'likeImgUrl' => 'hive/user-bigpics/0/%'
- ))->fetchAll()
- ;
+ ))->fetchAll();
$resultSet = $this->generateRowSet($resultMembers);
$cache->save($resultSet, $cacheName, array(), 14400);
return $resultSet;
}
}
/**
* @param $data
*
* @return Zend_Db_Table_Rowset
*/
protected function generateRowSet($data)
{
$classRowSet = $this->getRowsetClass();
$returnRowSet = new $classRowSet(array(
'table' => $this,
'rowClass' => $this->getRowClass(),
'stored' => true,
'data' => $data
));
return $returnRowSet;
}
/**
* @return array
* @deprecated
*/
public function getMembersForSelectList()
{
$selectArr =
$this->_db->fetchAll("SELECT `member_id`,`username`,`firstname`, `lastname` FROM {$this->_name} WHERE is_active=1 AND is_deleted=0 ORDER BY username");
$arrayModified = array();
$arrayModified[0] = "Benutzer wählen";
foreach ($selectArr as $item) {
$tmpStr = ($item['firstname']) ? $item['firstname'] : "";
$tmpStr .= ($item['lastname']) ? ", " . $item['lastname'] : "";
$tmpStr = ($tmpStr != "") ? " (" . $tmpStr . ")" : "";
$arrayModified[$item['member_id']] = stripslashes($item['username'] . $tmpStr);
}
return $arrayModified;
}
/**
* @param int $member_id
*
* @param $verification_value
*
* @return boolean returns true if successful
* @throws Zend_Db_Statement_Exception
*/
public function activateMemberFromVerification($member_id, $verification_value)
{
$sql = "
UPDATE `member`
STRAIGHT_JOIN `member_email` ON `member`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_checked` IS NULL AND `member`.`is_deleted` = 0 AND `member_email`.`email_deleted` = 0
SET `member`.`mail_checked` = 1, `member`.`is_active` = 1, `member`.`changed_at` = NOW(), `member_email`.`email_checked` = NOW()
WHERE `member`.`member_id` = :memberId AND `member_email`.`email_verification_value` = :verificationValue;
";
$stmnt = $this->_db->query($sql, array('memberId' => $member_id, 'verificationValue' => $verification_value));
return $stmnt->rowCount() > 0 ? true : false;
}
/**
* @param int $member_id
*
* @throws Zend_Exception
*/
public function setDeleted($member_id)
{
$updateValues = array(
'is_active' => 0,
'is_deleted' => 1,
'deleted_at' => new Zend_Db_Expr('Now()'),
);
$this->update($updateValues, $this->_db->quoteInto('member_id=?', $member_id, 'INTEGER'));
-
+
$memberLog = new Default_Model_MemberDeactivationLog();
$memberLog->logMemberAsDeleted($member_id);
-
+
$this->setMemberProjectsDeleted($member_id);
$this->setMemberCommentsDeleted($member_id);
$this->setMemberRatingsDeleted($member_id);
$this->setMemberReportingsDeleted($member_id);
$this->setMemberEmailsDeleted($member_id);
//$this->setMemberPlingsDeleted($member_id);
//$this->removeMemberProjectsFromSearch($member_id);
$this->setDeletedInMaterializedView($member_id);
$this->setDeletedInSubSystems($member_id);
}
//User ist mind. 1 jahr alt, user ist supporter, user hat minimum 20 kommentare
- public function validDeleteMemberFromSpam($member_id)
- {
- $sql ='select
- m.created_at
- , (m.created_at+ INTERVAL 12 MONTH < NOW()) is_old
- ,(select count(1) from comments c where c.comment_member_id = m.member_id and comment_active = 1) comments
- ,(select (DATE_ADD(max(active_time), INTERVAL 1 YEAR) > now()) from support s where s.status_id = 2 AND s.member_id =m.member_id) is_supporter
- from member m where member_id = :member_id';
- $result = $this->_db->fetchRow($sql, array(
- 'member_id' => $member_id,
- ));
- if($result['is_supporter'] && $result['is_supporter'] ==1)
- {
- return false;
- }
- if($result['is_old'] ==1 || $result['comments']>20)
- {
- return false;
- }
- return true;
- }
private function setMemberProjectsDeleted($member_id)
{
$modelProject = new Default_Model_Project();
$modelProject->setAllProjectsForMemberDeleted($member_id);
}
private function setMemberCommentsDeleted($member_id)
{
$modelComments = new Default_Model_ProjectComments();
$modelComments->setAllCommentsForUserDeleted($member_id);
}
private function setMemberRatingsDeleted($member_id)
{
$modelRatings = new Default_Model_DbTable_ProjectRating();
$affectedRows = $modelRatings->setDeletedByMemberId($member_id);
if (false === empty($affectedRows)) {
$modelProject = new Default_Model_DbTable_Project();
$modelProject->deleteLikes($affectedRows);
}
}
private function setMemberReportingsDeleted($member_id)
{
$modelReportsProject = new Default_Model_DbTable_ReportProducts();
$modelReportsProject->setDeleteByMember($member_id);
$modelReportsComments = new Default_Model_DbTable_ReportComments();
$modelReportsComments->setDeleteByMember($member_id);
}
private function setMemberEmailsDeleted($member_id)
{
$modelEmail = new Default_Model_DbTable_MemberEmail();
$modelEmail->setDeletedByMember($member_id);
}
-
- private function setMemberEmailsActivated($member_id)
- {
- $modelEmail = new Default_Model_DbTable_MemberEmail();
- $modelEmail->setActivatedByMember($member_id);
- }
private function setDeletedInMaterializedView($member_id)
{
$sql = "UPDATE `stat_projects` SET `status` = :new_status WHERE `member_id` = :member_id";
- $this->_db->query($sql, array('new_status' => Default_Model_DbTable_Project::PROJECT_DELETED, 'member_id' => $member_id))
- ->execute()
- ;
+ $this->_db->query($sql,
+ array('new_status' => Default_Model_DbTable_Project::PROJECT_DELETED, 'member_id' => $member_id))
+ ->execute();
+ }
+
+ private function setDeletedInSubSystems($member_id)
+ {
+ try {
+ $id_server = new Default_Model_Ocs_OAuth();
+ $id_server->deleteUser($member_id);
+ Zend_Registry::get('logger')->debug(__METHOD__ . ' - oauth : ' . implode(PHP_EOL . " - ",
+ $id_server->getMessages()));
+ } catch (Exception $e) {
+ Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
+ }
+ try {
+ $ldap_server = new Default_Model_Ocs_Ldap();
+ $ldap_server->deleteUser($member_id);
+ Zend_Registry::get('logger')->debug(__METHOD__ . ' - ldap : ' . implode(PHP_EOL . " - ",
+ $ldap_server->getMessages()));
+ } catch (Exception $e) {
+ Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
+ }
+ try {
+ $openCode = new Default_Model_Ocs_Gitlab();
+ $openCode->blockUser($member_id);
+ $openCode->blockUserProjects($member_id);
+ Zend_Registry::get('logger')->debug(__METHOD__ . ' - opencode : ' . implode(PHP_EOL . " - ",
+ $openCode->getMessages()));
+ } catch (Exception $e) {
+ Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
+ }
+ try {
+ $forum = new Default_Model_Ocs_Forum();
+ $forum->blockUser($member_id);
+ $forum->blockUserPosts($member_id);
+ Zend_Registry::get('logger')->debug(__METHOD__ . ' - forum : ' . implode(PHP_EOL . " - ",
+ $forum->getMessages()));
+ } catch (Exception $e) {
+ Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
+ }
+ }
+
+ public function validDeleteMemberFromSpam($member_id)
+ {
+ $sql = 'SELECT
+ `m`.`created_at`
+ , (`m`.`created_at`+ INTERVAL 12 MONTH < NOW()) `is_old`
+ ,(SELECT count(1) FROM `comments` `c` WHERE `c`.`comment_member_id` = `m`.`member_id` AND `comment_active` = 1) `comments`
+ ,(SELECT (DATE_ADD(max(`active_time`), INTERVAL 1 YEAR) > now()) FROM `support` `s` WHERE `s`.`status_id` = 2 AND `s`.`member_id` =`m`.`member_id`) `is_supporter`
+ FROM `member` `m` WHERE `member_id` = :member_id';
+ $result = $this->_db->fetchRow($sql, array(
+ 'member_id' => $member_id,
+ ));
+ if ($result['is_supporter'] && $result['is_supporter'] == 1) {
+ return false;
+ }
+ if ($result['is_old'] == 1 || $result['comments'] > 20) {
+ return false;
+ }
+
+ return true;
}
/**
* @param int $member_id
*
* @throws Zend_Db_Exception
*/
public function setActivated($member_id)
{
$updateValues = array(
'is_active' => 1,
'is_deleted' => 0,
'changed_at' => new Zend_Db_Expr('Now()'),
'deleted_at' => null
);
$this->update($updateValues, $this->_db->quoteInto('member_id=?', $member_id, 'INTEGER'));
-
+
$memberLog = new Default_Model_MemberDeactivationLog();
$memberLog->removeLogMemberAsDeleted($member_id);
-
+
$this->setMemberProjectsActivated($member_id);
$this->setMemberCommentsActivated($member_id);
$this->setMemberEmailsActivated($member_id);
$this->setActivatedInSubsystems($member_id);
-
+
//$this->setMemberPlingsActivated($member_id);
}
private function setMemberProjectsActivated($member_id)
{
$modelProject = new Default_Model_Project();
$modelProject->setAllProjectsForMemberActivated($member_id);
}
private function setMemberCommentsActivated($member_id)
{
$modelComment = new Default_Model_ProjectComments();
$modelComment->setAllCommentsForUserActivated($member_id);
}
+ private function setMemberEmailsActivated($member_id)
+ {
+ $modelEmail = new Default_Model_DbTable_MemberEmail();
+ $modelEmail->setActivatedByMember($member_id);
+ }
+
+ private function setActivatedInSubsystems($member_id)
+ {
+ try {
+ $id_server = new Default_Model_Ocs_OAuth();
+ $id_server->updateUser($member_id);
+ Zend_Registry::get('logger')->debug(__METHOD__ . ' - oauth : ' . print_r($id_server->getMessages(), true));
+ } catch (Exception $e) {
+ Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
+ }
+ try {
+ $ldap_server = new Default_Model_Ocs_Ldap();
+ $ldap_server->createUser($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->unblockUser($member_id);
+ $openCode->unblockUserProjects($member_id);
+ Zend_Registry::get('logger')->debug(__METHOD__ . ' - opencode : ' . implode(PHP_EOL . " - ",
+ $openCode->getMessages()));
+ } catch (Exception $e) {
+ Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
+ }
+ try {
+ $forum = new Default_Model_Ocs_Forum();
+ $forum->unblockUser($member_id);
+ $forum->unblockUserPosts($member_id);
+ Zend_Registry::get('logger')->debug(__METHOD__ . ' - forum : ' . implode(PHP_EOL." - ", $forum->getMessages()));
+ } catch (Exception $e) {
+ Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
+ }
+ }
+
/**
* @param int $member_id
*
* @param bool $onlyNotDeleted
*
* @return Zend_Db_Table_Row
* @throws Zend_Db_Statement_Exception
*/
public function fetchMemberData($member_id, $onlyNotDeleted = true)
{
if (null === $member_id) {
return null;
}
$sql = '
- SELECT m.*, `member_email`.`email_address` AS `mail`, IF(ISNULL(`member_email`.`email_checked`),0,1) AS `mail_checked`, `member_email`.`email_address`, `mei`.`external_id`, `mei`.`gitlab_user_id`
+ SELECT `m`.*, `member_email`.`email_address` AS `mail`, IF(ISNULL(`member_email`.`email_checked`),0,1) AS `mail_checked`, `member_email`.`email_address`, `mei`.`external_id`, `mei`.`gitlab_user_id`
FROM `member` AS `m`
JOIN `member_email` ON `m`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_primary` = 1
LEFT JOIN `member_external_id` AS `mei` ON `mei`.`member_id` = `m`.`member_id`
WHERE
- (m.member_id = :memberId)
+ (`m`.`member_id` = :memberId)
';
if ($onlyNotDeleted) {
$sql .= " AND (m.is_deleted = " . self::MEMBER_NOT_DELETED . ")";
}
$result = $this->getAdapter()->query($sql, array('memberId' => $member_id))->fetch();
$classRow = $this->getRowClass();
return new $classRow(array('table' => $this, 'stored' => true, 'data' => $result));
}
/**
* @param $member_id
* @param bool $onlyActive
*
* @return null|Zend_Db_Table_Row_Abstract
* @throws Zend_Db_Statement_Exception
*/
public function fetchMember($member_id, $onlyActive = true)
{
if (empty($member_id)) {
return null;
}
$sql = "
SELECT `m`.*, `member_email`.`email_address` AS `mail`, IF(ISNULL(`member_email`.`email_checked`),0,1) AS `mail_checked`, `member_email`.`email_address`, `mei`.`external_id`
FROM `member` AS `m`
JOIN `member_email` ON `m`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_primary` = 1
LEFT JOIN `member_external_id` AS `mei` ON `mei`.`member_id` = `m`.`member_id`
WHERE `m`.`member_id` = :memberId";
if ($onlyActive) {
$sql .= " AND `m`.`is_deleted` = " . self::MEMBER_NOT_DELETED . " AND `m`.`is_active` = " . self::MEMBER_ACTIVE;
}
$stmnt = $this->_db->query($sql, array('memberId' => $member_id));
if ($stmnt->rowCount() == 0) {
return null;
}
return $this->generateRowClass($stmnt->fetch());
}
/**
* @param string $user_name
*
* @return Zend_Db_Table_Row
*/
public function fetchMemberFromHiveUserName($user_name)
{
$sql = "
SELECT *
FROM `member`
WHERE `source_id` = :sourceId
AND `username` = :userName
";
- return $this->_db->fetchRow($sql, array('sourceId' => Default_Model_Member::SOURCE_HIVE, 'userName' => $user_name));
+ return $this->_db->fetchRow($sql,
+ array('sourceId' => Default_Model_Member::SOURCE_HIVE, 'userName' => $user_name));
}
-
+
/**
* @param string $user_name
*
* @return Zend_Db_Table_Row
*/
public function fetchMemberFromHiveUserId($user_id)
{
$sql = "
SELECT *
FROM `member`
WHERE `source_id` = :sourceId
AND `source_pk` = :userId
";
return $this->_db->fetchRow($sql, array('sourceId' => Default_Model_Member::SOURCE_HIVE, 'userId' => $user_id));
}
/**
* @param int $member_id
* @param int $limit
*
* @return Zend_Db_Table_Rowset
*/
public function fetchFollowedMembers($member_id, $limit = null)
{
$sql = "
SELECT member_follower.member_id,
member_follower.follower_id,
member.*
FROM member_follower
LEFT JOIN member ON member_follower.member_id = member.member_id
WHERE member_follower.follower_id = :followerId
AND member.is_active = :activeVal
GROUP BY member_follower.member_id
ORDER BY max(member_follower.member_follower_id) DESC
";
if (null != $limit) {
$sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER');
}
$result = $this->_db->fetchAll($sql, array('followerId' => $member_id, 'activeVal' => self::MEMBER_ACTIVE));
return $this->generateRowSet($result);
}
-
/**
* @param int $member_id
* @param null $limit
*
* @return Zend_Db_Table_Rowset_Abstract
*/
public function fetchFollowedProjects($member_id, $limit = null)
{
$sql = "
SELECT `project_follower`.`project_id`,
`project`.`title`,
`project`.`image_small`
FROM `project_follower`
JOIN `project` ON `project_follower`.`project_id` = `project`.`project_id`
WHERE `project_follower`.`member_id` = :member_id
AND `project`.`status` = :project_status
AND `project`.`type_id` = 1
ORDER BY `project_follower`.`project_follower_id` DESC
";
if (null != $limit) {
$sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER');
}
$result =
- $this->_db->fetchAll($sql, array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE));
+ $this->_db->fetchAll($sql,
+ array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE));
return $this->generateRowSet($result);
}
public function fetchPlingedProjects($member_id, $limit = null)
{
$sql = "
SELECT project_category.title AS catTitle,
project.*,
member.*,
plings.*
FROM plings
LEFT JOIN project ON plings.project_id = project.project_id
LEFT JOIN project_category ON project.project_category_id = project_category.project_category_id
LEFT JOIN member ON project.member_id = member.member_id
WHERE plings.member_id = :member_id
AND plings.status_id = 2
AND project.status = :project_status
AND project.type_id = 1
ORDER BY plings.create_time DESC
";
if (null != $limit) {
$sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER');
}
$result =
- $this->_db->fetchAll($sql, array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE));
+ $this->_db->fetchAll($sql,
+ array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE));
return $this->generateRowSet($result);
}
public function fetchProjectsSupported($member_id, $limit = null)
{
$sql = "
SELECT `project_category`.`title` AS `catTitle`,
`project`.`project_id`,
`project`.`title`,
`project`.`image_small`,
`plings`.`member_id`,
`plings`.`amount`,
`plings`.`create_time`,
`member`.`profile_image_url`,
`member`.`username`
FROM `plings`
JOIN `project` ON `plings`.`project_id` = `project`.`project_id`
JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
JOIN `member` ON `plings`.`member_id` = `member`.`member_id`
WHERE `project`.`member_id` = :member_id
AND `plings`.`status_id` = 2
AND `project`.`status` = :project_status
AND `project`.`type_id` = 1
ORDER BY `plings`.`create_time` DESC
";
if (null != $limit) {
$sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER');
}
$result =
- $this->_db->fetchAll($sql, array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE));
+ $this->_db->fetchAll($sql,
+ array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE));
return $this->generateRowSet($result);
}
/**
* @param $userData
*
* @return array
* @throws Exception
*/
public function createNewUser($userData)
{
$uuidMember = Local_Tools_UUID::generateUUID();
if (false == isset($userData['password'])) {
throw new Exception(__METHOD__ . ' - user password is not set.');
}
$userData['password'] =
- Local_Auth_Adapter_Ocs::getEncryptedPassword($userData['password'], Default_Model_DbTable_Member::SOURCE_LOCAL);
+ Local_Auth_Adapter_Ocs::getEncryptedPassword($userData['password'],
+ Default_Model_DbTable_Member::SOURCE_LOCAL);
if (false == isset($userData['roleId'])) {
$userData['roleId'] = self::ROLE_ID_DEFAULT;
}
if ((false == isset($userData['avatar'])) OR (false == isset($userData['profile_image_url']))) {
$imageFilename = $this->generateIdentIcon($userData, $uuidMember);
$userData['avatar'] = $imageFilename;
$userData['profile_image_url'] = IMAGES_MEDIA_SERVER . '/cache/200x200-2/img/' . $imageFilename;
}
if (false == isset($userData['uuid'])) {
$userData['uuid'] = $uuidMember;
}
if (false == isset($userData['mail_checked'])) {
$userData['mail_checked'] = 0;
}
-
+
//email is allways lower case
- $userData['mail'] = strtolower( trim( $userData['mail'] ) );
+ $userData['mail'] = strtolower(trim($userData['mail']));
$newUser = $this->storeNewUser($userData)->toArray();
$memberMail = $this->createPrimaryMailAddress($newUser);
$externalId = $this->createExternalId($newUser['member_id']);
$newUser['verificationVal'] = $memberMail->email_verification_value;
$newUser['externalId'] = $externalId;
return $newUser;
}
- /**
- * @param $userData
- * @param $uuidMember
- *
- * @return string
- * @throws Exception
- */
- protected function generateIdentIcon_old($userData, $uuidMember)
- {
- $identIcon = new Local_Tools_Identicon();
- $tmpImagePath = IMAGES_UPLOAD_PATH . 'tmp/' . $uuidMember . '.png';
- imagepng($identIcon->renderIdentIcon(sha1($userData['mail']), 1100), $tmpImagePath);
-
- $imageService = new Default_Model_DbTable_Image();
- $imageFilename = $imageService->saveImageOnMediaServer($tmpImagePath);
-
- return $imageFilename;
- }
-
/**
* @param $userData
* @param $uuidMember
*
* @return string
* @throws Exception
*/
protected function generateIdentIcon($userData, $uuidMember)
{
require_once 'vendor/autoload.php';
- // $name = substr($userData['username'],0,1).' '.substr($userData['username'],1);
- $name = $userData['username'].' ';
- $avatar = new LetterAvatar($name,'square', 400);
+ // $name = substr($userData['username'],0,1).' '.substr($userData['username'],1);
+ $name = $userData['username'] . ' ';
+ $avatar = new LetterAvatar($name, 'square', 400);
$tmpImagePath = IMAGES_UPLOAD_PATH . 'tmp/' . $uuidMember . '.png';
- $avatar->saveAs($tmpImagePath, LetterAvatar::MIME_TYPE_PNG);
+ $avatar->saveAs($tmpImagePath, LetterAvatar::MIME_TYPE_PNG);
$imageService = new Default_Model_DbTable_Image();
$imageFilename = $imageService->saveImageOnMediaServer($tmpImagePath);
+
return $imageFilename;
}
/**
* @param array $userData
*
* @return Zend_Db_Table_Row_Abstract
*/
public function storeNewUser($userData)
{
$newUserData = $this->createRow($userData);
$newUserData->save();
//create a user specified main project in project table
$projectId = $this->createPersonalProject($newUserData->toArray());
//and save the id in member table
$newUserData->main_project_id = $projectId;
$newUserData->save();
return $newUserData;
}
/**
* @param array $userData
*
* @return mixed $projectId
*/
protected function createPersonalProject($userData)
{
$tableProject = new Default_Model_Project();
/** @var Default_Model_DbRow_Project $newPersonalProject */
$newPersonalProject = $tableProject->createRow($userData);
$newPersonalProject->uuid = Local_Tools_UUID::generateUUID();
$newPersonalProject->project_category_id = $newPersonalProject::CATEGORY_DEFAULT_PROJECT;
$newPersonalProject->status = $newPersonalProject::STATUS_PROJECT_ACTIVE;
$newPersonalProject->image_big = $newPersonalProject::DEFAULT_AVATAR_IMAGE;
$newPersonalProject->image_small = $newPersonalProject::DEFAULT_AVATAR_IMAGE;
$newPersonalProject->creator_id = $userData['member_id'];
$newPersonalProject->title = $newPersonalProject::PERSONAL_PROJECT_TITLE;
$projectId = $newPersonalProject->save();
return $projectId;
}
/**
* @param array $newUser
* @param bool $isVerified
*
* @return Zend_Db_Table_Row_Abstract
* @throws Exception
*/
private function createPrimaryMailAddress($newUser)
{
$modelEmail = new Default_Model_MemberEmail();
$userMail = $modelEmail->saveEmailAsPrimary($newUser['member_id'], $newUser['mail'], $newUser['mail_checked']);
return $userMail;
}
/**
* @param int $member_id
*
* @return string
*/
private function createExternalId($member_id)
{
$modelExternalId = new Default_Model_DbTable_MemberExternalId();
$externalId = $modelExternalId->createExternalId($member_id);
return $externalId;
}
public function fetchTotalMembersCount()
{
$sql = "
SELECT
count(1) AS `total_member_count`
FROM
`member`
";
$result = $this->_db->fetchRow($sql);
return $result['total_member_count'];
}
public function fetchTotalMembersInStoreCount()
{
$sql = "
SELECT
count(1) AS `total_member_count`
FROM
`member`
";
$result = $this->_db->fetchRow($sql);
return $result['total_member_count'];
}
/**
* @param string $email
*
* @return null|Zend_Db_Table_Row_Abstract
* @deprecated
*/
public function fetchCheckedActiveLocalMemberByEmail($email)
{
- $sel = $this->select()->where('mail=?', $email)->where('is_deleted = ?', Default_Model_DbTable_Member::MEMBER_NOT_DELETED)
+ $sel = $this->select()->where('mail=?', $email)->where('is_deleted = ?',
+ Default_Model_DbTable_Member::MEMBER_NOT_DELETED)
->where('is_active = ?', Default_Model_DbTable_Member::MEMBER_ACTIVE)
->where('mail_checked = ?', Default_Model_DbTable_Member::MEMBER_MAIL_CHECKED)
- ->where('login_method = ?', Default_Model_DbTable_Member::MEMBER_LOGIN_LOCAL)
- ;
+ ->where('login_method = ?', Default_Model_DbTable_Member::MEMBER_LOGIN_LOCAL);
return $this->fetchRow($sel);
}
public function fetchEarnings($member_id, $limit = null)
{
$sql = "
SELECT `project_category`.`title` AS `catTitle`,
`project`.*,
`member`.*,
`plings`.*
FROM `plings`
JOIN `project` ON `plings`.`project_id` = `project`.`project_id`
JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
JOIN `member` ON `project`.`member_id` = `member`.`member_id`
WHERE `plings`.`status_id` = 2
AND `project`.`status` = :status
AND `project`.`type_id` = 1
AND `project`.`member_id` = :memberId
ORDER BY `plings`.`create_time` DESC
";
if (null != $limit) {
$sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER');
}
- $result = $this->_db->fetchAll($sql, array('memberId' => $member_id, 'status' => Default_Model_Project::PROJECT_ACTIVE));
+ $result = $this->_db->fetchAll($sql,
+ array('memberId' => $member_id, 'status' => Default_Model_Project::PROJECT_ACTIVE));
return $this->generateRowSet($result);
}
/**
* Finds an active user by given username or email ($identity)
* Returns an empty rowset when no user found.
*
* @param string $identity could be the username or users mail address
* @param bool $withLoginLocal
*
* @return Zend_Db_Table_Row_Abstract
*/
public function findActiveMemberByIdentity($identity, $withLoginLocal = false)
{
$sqlName = "SELECT * FROM `member` WHERE `is_active` = :active AND `is_deleted` = :deleted AND `username` = :identity";
$sqlMail = "SELECT * FROM `member` WHERE `is_active` = :active AND `is_deleted` = :deleted AND `mail` = :identity";
if ($withLoginLocal) {
$sqlName .= " AND login_method = '" . self::MEMBER_LOGIN_LOCAL . "'";
$sqlMail .= " AND login_method = '" . self::MEMBER_LOGIN_LOCAL . "'";
}
// test identity as username
$resultName = $this->getAdapter()->fetchRow($sqlName,
- array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity))
- ;
+ array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity));
if ((false !== $resultName) AND (count($resultName) > 0)) {
return $this->generateRowClass($resultName);
}
// test identity as mail
$resultMail = $this->getAdapter()->fetchRow($sqlMail,
- array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity))
- ;
+ array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity));
if ((false !== $resultMail) AND (count($resultMail) > 0)) {
return $this->generateRowClass($resultMail);
}
return $this->createRow();
}
-
+
/**
* @param string $value
*
* @return mixed
*/
- public function findActiveMemberByName($username){
- $sql = '
+ public function findActiveMemberByName($username)
+ {
+ $sql = '
select m.member_id,m.username,profile_image_url from member m where m.is_active=1 and m.is_deleted = 0
- and m.username like "'.$username.'%"
+ and m.username like "' . $username . '%"
limit 20
';
- $result = $this->getAdapter()->fetchAll($sql);
- return $result;
- }
+ $result = $this->getAdapter()->fetchAll($sql);
+ return $result;
+ }
/**
* @param string $value
*
* @return mixed
*/
public function findMemberForMailHash($value)
{
$sql = "
SELECT `m`.* FROM `member_email` `me`
JOIN `member` `m` ON `m`.`member_id` = `me`.`email_member_id`
WHERE `m`.`is_active` = 1
AND `m`.`is_deleted` = 0
AND `me`.`email_hash` = :email_hash
";
$result = $this->getAdapter()->fetchAll($sql, array('email_hash' => $value));
if ($result && count($result) > 0) {
$member = $result[0];
return $member;
}
}
-
/**
* @param Zend_Db_Table_Row_Abstract $memberData
*
* @return bool
*/
public function isHiveUser($memberData)
{
if (empty($memberData)) {
return false;
}
- //20180801 ronald: If a hive user change his password, he gets the ocs password type and we do
+ //20180801 ronald: If a hive user change his password, he gets the ocs password type and we do
//have to check against the old hive password style
//if ($memberData->source_id == self::SOURCE_HIVE) {
// return true;
//}
if ($memberData->password_type == self::PASSWORD_TYPE_HIVE) {
return true;
}
return false;
}
public function fetchActiveHiveUserByUsername($username)
{
$sql = 'SELECT * FROM member WHERE username = :username AND is_active = 1 AND member.source_id = 1 AND member.is_deleted = 0';
$result = $this->getAdapter()->query($sql, array('username' => $username))->fetch();
return $result;
}
-
+
public function fetchActiveUserByUsername($username)
{
- $sql = 'SELECT DISTINCT member.member_id
- FROM member
- WHERE LOWER(username) = :username
- AND is_active = 1
- AND member.is_deleted = 0';
+ $sql = 'SELECT DISTINCT `member`.`member_id`
+ FROM `member`
+ WHERE LOWER(`username`) = :username
+ AND `is_active` = 1
+ AND `member`.`is_deleted` = 0';
$result = $this->getAdapter()->query($sql, array('username' => strtolower($username)))->fetchAll();
-
- if($result && count($result)>0) {
+
+ if ($result && count($result) > 0) {
$member_id = $result[0]['member_id'];
+
return $member_id;
}
return null;
}
public function fetchCommentsCount($member_id)
{
$sql = "
SELECT
count(1) AS count
FROM
comments
where comment_target_id <> 0 and comment_member_id = :member_id and comment_active = :comment_status
";
$result = $this->_db->fetchRow($sql, array(
'member_id' => $member_id,
'comment_status' => Default_Model_DbTable_Comments::COMMENT_ACTIVE
));
return $result['count'];
}
/**
* @param $member_id
* @param null $limit
*
* @return Zend_Paginator
* @throws Zend_Paginator_Exception
*/
public function fetchComments($member_id, $limit = null)
{
$result = $this->fetchCommentsList($member_id, $limit);
if (count($result) > 0) {
return new Zend_Paginator(new Zend_Paginator_Adapter_Array($result));
} else {
return new Zend_Paginator(new Zend_Paginator_Adapter_Array(array()));
}
}
/**
* @param $member_id
* @param null $limit
*
* @return Zend_Paginator
* @throws Zend_Paginator_Exception
*/
public function fetchCommentsList($member_id, $limit = null)
{
$sql = '
SELECT
- comment_id
- ,comment_text
- ,member.member_id
- ,member.profile_image_url
- ,comment_created_at
- ,stat_projects.username
- ,stat_projects.project_member_id
- ,comment_target_id
- ,stat_projects.title
- ,stat_projects.project_id
- ,stat_projects.laplace_score
- ,stat_projects.count_likes
- ,stat_projects.count_dislikes
- ,stat_projects.image_small
- ,stat_projects.version
- ,stat_projects.cat_title
- ,stat_projects.count_comments
- ,stat_projects.changed_at
- ,stat_projects.created_at
- FROM comments
- inner join member ON comments.comment_member_id = member.member_id
- inner JOIN stat_projects ON comments.comment_target_id = stat_projects.project_id AND comments.comment_type = 0
- WHERE comments.comment_active = :comment_status
- AND stat_projects.status = :project_status
- AND comments.comment_member_id = :member_id
- ORDER BY comments.comment_created_at DESC
+ `comment_id`
+ ,`comment_text`
+ ,`member`.`member_id`
+ ,`member`.`profile_image_url`
+ ,`comment_created_at`
+ ,`stat_projects`.`username`
+ ,`stat_projects`.`project_member_id`
+ ,`comment_target_id`
+ ,`stat_projects`.`title`
+ ,`stat_projects`.`project_id`
+ ,`stat_projects`.`laplace_score`
+ ,`stat_projects`.`count_likes`
+ ,`stat_projects`.`count_dislikes`
+ ,`stat_projects`.`image_small`
+ ,`stat_projects`.`version`
+ ,`stat_projects`.`cat_title`
+ ,`stat_projects`.`count_comments`
+ ,`stat_projects`.`changed_at`
+ ,`stat_projects`.`created_at`
+ FROM `comments`
+ INNER JOIN `member` ON `comments`.`comment_member_id` = `member`.`member_id`
+ INNER JOIN `stat_projects` ON `comments`.`comment_target_id` = `stat_projects`.`project_id` AND `comments`.`comment_type` = 0
+ WHERE `comments`.`comment_active` = :comment_status
+ AND `stat_projects`.`status` = :project_status
+ AND `comments`.`comment_member_id` = :member_id
+ ORDER BY `comments`.`comment_created_at` DESC
';
if (isset($limit)) {
$sql .= ' limit ' . (int)$limit;
}
$result = $this->_db->fetchAll($sql, array(
'member_id' => $member_id,
'project_status' => Default_Model_DbTable_Project::PROJECT_ACTIVE,
'comment_status' => Default_Model_DbTable_Comments::COMMENT_ACTIVE
));
return $result;
}
public function fetchCntSupporters($member_id)
{
$sql = '
SELECT DISTINCT `plings`.`member_id` FROM `plings`
JOIN `project` ON `plings`.`project_id` = `project`.`project_id`
JOIN `member` ON `project`.`member_id` = `member`.`member_id`
WHERE `plings`.`status_id` = 2
AND `project`.`status` = :project_status
AND `project`.`type_id` = 1
AND `project`.`member_id` = :member_id
';
$result =
- $this->_db->fetchAll($sql, array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE));
+ $this->_db->fetchAll($sql,
+ array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE));
return count($result);
}
public function fetchSupporterDonationInfo($member_id)
{
- /*$sql = 'SELECT max(active_time) AS active_time_max
- ,min(active_time) AS active_time_min
+ /*$sql = 'SELECT max(active_time) AS active_time_max
+ ,min(active_time) AS active_time_min
,(DATE_ADD(max(active_time), INTERVAL 1 YEAR) > now()) AS issupporter
,count(1) AS cnt from support where status_id = 2 AND type_id = 0 AND member_id = :member_id ';*/
$sql = "
select
member_id,
max(active_time_max) as active_time_max,
min(active_time_min) as active_time_min,
max(is_valid) as issupporter,
count(1) AS cnt
from v_support
where member_id = :member_id
";
$result = $this->getAdapter()->fetchRow($sql, array('member_id' => $member_id));
return $result;
}
-
-
public function fetchSupporterSubscriptionInfo($member_id)
{
$sql = 'SELECT create_time,amount,period,period_frequency from support where status_id = 2 AND type_id = 1
AND member_id = :member_id
ORDER BY create_time desc
LIMIT 1';
$result = $this->getAdapter()->fetchRow($sql, array('member_id' => $member_id));
return $result;
}
public function fetchLastActiveTime($member_id)
{
$sql_page_views =
"SELECT `created_at` AS `lastactive` FROM `stat_page_views` WHERE `member_id` = :member_id ORDER BY `created_at` DESC LIMIT 1";
$sql_activities = "SELECT `time` AS lastactive FROM activity_log WHERE member_id = :member_id ORDER BY `time` DESC LIMIT 1";
$result_page_views = $this->getAdapter()->fetchRow($sql_page_views, array('member_id' => $member_id));
$result_activities = $this->getAdapter()->fetchRow($sql_activities, array('member_id' => $member_id));
if (count($result_page_views) > 0 AND count($result_activities) > 0) {
return $result_page_views['lastactive'] > $result_activities['lastactive'] ? $result_page_views['lastactive']
: $result_activities['lastactive'];
}
if (count($result_page_views) > count($result_activities)) {
return $result_page_views['lastactive'];
}
if (count($result_activities) > count($result_page_views)) {
return $result_activities['lastactive'];
}
return null;
}
/**
* @param int $member_id
*
* @return array
*/
public function fetchContributedProjectsByCat($member_id)
{
$projects = $this->fetchSupportedProjects($member_id);
$catArray = array();
if (count($projects) == 0) {
return $catArray;
}
foreach ($projects as $pro) {
$catArray[$pro->catTitle] = array();
}
$helperProductUrl = new Default_View_Helper_BuildProductUrl();
foreach ($projects as $pro) {
$projArr = array();
$projArr['id'] = $pro->project_id;
$projArr['name'] = $pro->title;
$projArr['image'] = $pro->image_small;
$projArr['url'] = $helperProductUrl->buildProductUrl($pro->project_id, '', null, true);
$projArr['sumAmount'] = $pro->sumAmount;
array_push($catArray[$pro->catTitle], $projArr);
}
return $catArray;
}
/**
* @param int $member_id
* @param null $limit
*
* @return Zend_Db_Table_Rowset_Abstract
*/
public function fetchSupportedProjects($member_id, $limit = null)
{
$sql = "
SELECT plings.project_id,
project.title,
project.image_small,
project_category.title AS catTitle,
(SELECT SUM(amount) FROM plings WHERE plings.project_id=project.project_id AND plings.status_id=2) AS sumAmount
FROM plings
JOIN project ON plings.project_id = project.project_id
JOIN project_category ON project.project_category_id = project_category.project_category_id
WHERE plings.status_id IN (2,3,4)
AND plings.member_id = :member_id
AND project.status = :project_status
AND project.type_id = 1
GROUP BY plings.project_id
ORDER BY sumAmount DESC
";
if (null != $limit) {
$sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER');
}
$result =
- $this->_db->fetchAll($sql, array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE));
+ $this->_db->fetchAll($sql,
+ array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE));
return $this->generateRowSet($result);
}
/**
* @param string $value
* @param int $test_case_sensitive
*
* @param array $omitMember
*
* @return array
*/
public function findUsername($value, $test_case_sensitive = self::CASE_INSENSITIVE, $omitMember = array())
{
$sql = "
SELECT *
FROM `member`
";
if ($test_case_sensitive == self::CASE_INSENSITIVE) {
$sql .= "WHERE LCASE(member.username) = LCASE(:username)";
} else {
$sql .= "WHERE member.username = :username";
}
if (count($omitMember) > 0) {
$sql .= " AND member.member_id NOT IN (" . implode(',', $omitMember) . ")";
}
return $this->_db->fetchAll($sql, array('username' => $value));
}
/**
* @param string $login
*
* @return int
*/
public function generateUniqueUsername($login)
{
$sql = "SELECT COUNT(*) AS `counter` FROM `member` WHERE `username` REGEXP CONCAT(:user_name,'[_0-9]*$')";
$result = $this->_db->fetchRow($sql, array('user_name' => $login));
return $login . '_' . $result['counter'];
}
/**
- * @param int $member_id
+ * @param int $member_id
* @param string $email
*
* @return bool
* @throws Zend_Db_Statement_Exception
*/
public function setActive($member_id, $email)
{
$sql = "
UPDATE `member`
STRAIGHT_JOIN `member_email` ON `member`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_checked` IS NULL AND `member`.`is_deleted` = 0 AND `member_email`.`email_deleted` = 0
SET `member`.`mail_checked` = 1, `member`.`is_active` = 1, `member`.`changed_at` = NOW(), `member_email`.`email_checked` = NOW()
WHERE `member`.`member_id` = :memberId AND `member_email`.`email_address` = :mailAddress;
";
$stmnt = $this->_db->query($sql, array('memberId' => $member_id, 'mailAddress' => $email));
return $stmnt->rowCount() > 0 ? true : false;
}
- /**
- * @param int $member_id
- *
- * @throws Exception
- * @deprecated since we're using solr server for searching
- */
- private function removeMemberProjectsFromSearch($member_id)
- {
- $modelProject = new Default_Model_Project();
- $memberProjects = $modelProject->fetchAllProjectsForMember($member_id);
- $modelSearch = new Default_Model_Search_Lucene();
- foreach ($memberProjects as $memberProject) {
- $product = array();
- $product['project_id'] = $memberProject->project_id;
- $product['project_category_id'] = $memberProject->project_category_id;
- $modelSearch->deleteDocument($product);
- }
- }
-
/**
* @param string $identity
*
* @return Zend_Db_Table_Row_Abstract
*/
public function findActiveMemberByMail($identity)
{
$sqlMail = "
SELECT `m`.*, `me`.`email_address` AS `mail`, IF(ISNULL(`me`.`email_checked`),0,1) AS `mail_checked`
FROM `member` AS `m`
JOIN `member_email` AS `me` ON `me`.`email_member_id` = `m`.`member_id` AND `me`.`email_primary` = 1
WHERE `is_active` = :active AND `is_deleted` = :deleted AND `me`.`email_address` = :identity
";
// test identity as mail
$resultMail = $this->getAdapter()->fetchRow($sqlMail,
- array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity))
- ;
+ array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity));
if ((false !== $resultMail) AND (count($resultMail) > 0)) {
return $this->generateRowClass($resultMail);
}
return $this->createRow();
}
- private function setDeletedInSubSystems($member_id)
+ public function getMembersAvatarOldAutogenerated($orderby = 'member_id desc', $limit = null, $offset = null)
{
- try {
- $id_server = new Default_Model_Ocs_OAuth();
- $id_server->deleteUser($member_id);
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - oauth : ' . implode(PHP_EOL." - ", $id_server->getMessages()));
- } catch (Exception $e) {
- Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
- }
- try {
- $ldap_server = new Default_Model_Ocs_Ldap();
- $ldap_server->deleteUser($member_id);
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - ldap : ' . implode(PHP_EOL." - ", $ldap_server->getMessages()));
- } catch (Exception $e) {
- Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
- }
- try {
- $openCode = new Default_Model_Ocs_Gitlab();
- $openCode->blockUser($member_id);
- $openCode->blockUserProjects($member_id);
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - opencode : ' . implode(PHP_EOL." - ", $openCode->getMessages()));
- } catch (Exception $e) {
- Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
- }
- try {
- $forum = new Default_Model_Ocs_Forum();
- $forum->blockUser($member_id);
- $forum->blockUserPosts($member_id);
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - forum : ' . implode(PHP_EOL." - ", $forum->getMessages()));
- } catch (Exception $e) {
- Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
- }
- }
+ $sql = "
+ SELECT * FROM `tmp_member_avatar_unknow`
+ ";
- public function getMembersAvatarOldAutogenerated($orderby='member_id desc',$limit = null, $offset = null)
- {
- $sql = "
- select * from tmp_member_avatar_unknow
- ";
-
+ if (isset($orderby)) {
+ $sql = $sql . ' order by ' . $orderby;
+ }
- if(isset($orderby)){
- $sql = $sql.' order by '.$orderby;
- }
+ if (isset($limit)) {
+ $sql .= ' limit ' . (int)$limit;
+ }
- if (isset($limit)) {
- $sql .= ' limit ' . (int)$limit;
- }
+ if (isset($offset)) {
+ $sql .= ' offset ' . (int)$offset;
+ }
- if (isset($offset)) {
- $sql .= ' offset ' . (int)$offset;
- }
+ $resultSet = $this->_db->fetchAll($sql);
- $resultSet = $this->_db->fetchAll($sql);
- return $resultSet;
- }
+ return $resultSet;
+ }
- public function getMembersAvatarOldAutogeneratedTotalCount()
+ public function getMembersAvatarOldAutogeneratedTotalCount()
{
$sql = "
select count(1) as cnt
from tmp_member_avatar_unknow
";
- $result = $this->getAdapter()->query($sql, array())->fetchAll();
- return $result[0]['cnt'];
+ $result = $this->getAdapter()->query($sql, array())->fetchAll();
+
+ return $result[0]['cnt'];
}
public function updateAvatarTypeId($member_id, $type_id)
{
$sql = "
update member set avatar_type_id = :type_id where member_id = :member_id
";
- $this->getAdapter()->query($sql, array('type_id'=>$type_id,'member_id'=>$member_id));
+ $this->getAdapter()->query($sql, array('type_id' => $type_id, 'member_id' => $member_id));
}
- private function setActivatedInSubsystems($member_id)
+ /**
+ * @param $userData
+ * @param $uuidMember
+ *
+ * @return string
+ * @throws Exception
+ */
+ protected function generateIdentIcon_old($userData, $uuidMember)
{
- try {
- $id_server = new Default_Model_Ocs_OAuth();
- $id_server->updateUser($member_id);
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - oauth : ' . print_r($id_server->getMessages(), true));
- } catch (Exception $e) {
- Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
- }
- try {
- $ldap_server = new Default_Model_Ocs_Ldap();
- $ldap_server->createUser($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->unblockUser($member_id);
- $openCode->unblockUserProjects($member_id);
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - opencode : ' . implode(PHP_EOL." - ", $openCode->getMessages()));
- } catch (Exception $e) {
- Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
- }
- try {
- $forum = new Default_Model_Ocs_Forum();
- $forum->unblockUser($member_id);
- $forum->unblockUserPosts($member_id);
- Zend_Registry::get('logger')->debug(__METHOD__ . ' - forum : ' . implode(PHP_EOL." - ", $forum->getMessages()));
- } catch (Exception $e) {
- Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
+ $identIcon = new Local_Tools_Identicon();
+ $tmpImagePath = IMAGES_UPLOAD_PATH . 'tmp/' . $uuidMember . '.png';
+ imagepng($identIcon->renderIdentIcon(sha1($userData['mail']), 1100), $tmpImagePath);
+
+ $imageService = new Default_Model_DbTable_Image();
+ $imageFilename = $imageService->saveImageOnMediaServer($tmpImagePath);
+
+ return $imageFilename;
+ }
+
+ /**
+ * @param int $member_id
+ *
+ * @throws Exception
+ * @deprecated since we're using solr server for searching
+ */
+ private function removeMemberProjectsFromSearch($member_id)
+ {
+ $modelProject = new Default_Model_Project();
+ $memberProjects = $modelProject->fetchAllProjectsForMember($member_id);
+ $modelSearch = new Default_Model_Search_Lucene();
+ foreach ($memberProjects as $memberProject) {
+ $product = array();
+ $product['project_id'] = $memberProject->project_id;
+ $product['project_category_id'] = $memberProject->project_category_id;
+ $modelSearch->deleteDocument($product);
}
}
}
\ No newline at end of file
diff --git a/application/modules/default/models/Ocs/Gitlab.php b/application/modules/default/models/Ocs/Gitlab.php
index a59cc2c43..dca8ab07a 100644
--- a/application/modules/default/models/Ocs/Gitlab.php
+++ b/application/modules/default/models/Ocs/Gitlab.php
@@ -1,1348 +1,1381 @@
.
*
* Created: 19.06.2018
*/
class Default_Model_Ocs_Gitlab
{
/** @var Zend_Cache_Core */
protected $cache;
protected $config;
protected $messages;
+ /** @var Zend_Http_Client */
protected $httpClient;
/**
* @inheritDoc
*/
public function __construct($config = null)
{
if (isset($config)) {
$this->config = $config;
} else {
$this->config = Zend_Registry::get('config')->settings->server->opencode;
}
$uri = $this->config->host;
- $this->httpClient = new Zend_Http_Client($uri, array('keepalive' => true, 'strictredirects' => true));
+ $this->httpClient = $this->getHttpClient($uri);
$this->cache = Zend_Registry::get('cache');
$this->messages = array();
}
+ /**
+ * @param $uri
+ * @return Zend_Http_Client
+ * @throws Default_Model_Ocs_Gitlab_Exception
+ */
+ protected function getHttpClient($uri)
+ {
+ try {
+ return new Zend_Http_Client($uri, array('keepalive' => true, 'strictredirects' => true));
+ } catch (Zend_Exception $e) {
+ throw new Default_Model_Ocs_Gitlab_Exception('Can not create http client for uri: ' . $uri, 0, $e);
+ }
+ }
+
/**
* @param int|array $member_data
*
* @return bool
* @throws Default_Model_Ocs_Exception
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function unblockUserProjects($member_data)
{
if (is_int($member_data)) {
$member_data = $this->getMemberData($member_data, false);
}
if (empty($member_data)) {
return false;
}
$user = $this->getUser($member_data['external_id'], $member_data['username']);
if (false === $user) {
return false;
}
$uri = $this->config->host . "/api/v4/users/{$user['id']}/projects";
$method = Zend_Http_Client::GET;
$uid = $member_data['member_id'];
try {
$response = $this->httpRequest($uri, $uid, $method);
if (false === $response) {
$this->messages[] = "Fail ";
return false;
}
} catch (Zend_Exception $e) {
$this->messages[] = "Fail " . $e->getMessage();
return false;
}
$memberLog = new Default_Model_MemberDeactivationLog();
foreach ($response as $project) {
$log_data =
- $memberLog->getLogEntries($member_data['member_id'], Default_Model_MemberDeactivationLog::OBJ_TYPE_GITLAB_PROJECT,
+ $memberLog->getLogEntries($member_data['member_id'],
+ Default_Model_MemberDeactivationLog::OBJ_TYPE_GITLAB_PROJECT,
$project['id']);
if (false === $log_data) {
continue;
}
$object_data = json_decode($log_data['object_data'], true);
$visibility = $object_data['visibility'];
$uri = $this->config->host . "/api/v4/projects/{$project['id']}";
$method = Zend_Http_Client::PUT;
$uid = $member_data['member_id'];
$data = array('visibility' => $visibility);
try {
$response = $this->httpRequest($uri, $uid, $method, $data);
if (false === $response) {
$this->messages[] = "Fail " . $uri;
continue;
}
} catch (Zend_Exception $e) {
$this->messages[] = "Fail " . $e->getMessage();
return false;
}
$this->messages[] = "Successful unblock user project: {$project['id']}";
- $memberLog->deleteLog($member_data['member_id'], Default_Model_MemberDeactivationLog::OBJ_TYPE_GITLAB_PROJECT,
+ $memberLog->deleteLog($member_data['member_id'],
+ Default_Model_MemberDeactivationLog::OBJ_TYPE_GITLAB_PROJECT,
$project['id']);
}
return true;
}
/**
* @param int $member_id
*
* @param bool $onlyActive
*
* @return array
* @throws Default_Model_Ocs_Exception
*/
private function getMemberData($member_id, $onlyActive = true)
{
$onlyActiveFilter = '';
if ($onlyActive) {
$onlyActiveFilter =
" AND `m`.`is_active` = 1 AND `m`.`is_deleted` = 0 AND `me`.`email_checked` IS NOT NULL AND `me`.`email_deleted` = 0";
}
$sql = "
SELECT `mei`.`external_id`,`m`.`member_id`, `m`.`username`, `me`.`email_address`, `m`.`password`, `m`.`roleId`, `m`.`firstname`, `m`.`lastname`, `m`.`profile_image_url`, `m`.`biography`, `m`.`created_at`, `m`.`changed_at`, `m`.`source_id`
FROM `member` AS `m`
LEFT JOIN `member_email` AS `me` ON `me`.`email_member_id` = `m`.`member_id` AND `me`.`email_primary` = 1
LEFT JOIN `member_external_id` AS `mei` ON `mei`.`member_id` = `m`.`member_id`
WHERE `m`.`member_id` = :memberId {$onlyActiveFilter}
ORDER BY `m`.`member_id` DESC
";
$result = Zend_Db_Table::getDefaultAdapter()->fetchRow($sql, array('memberId' => $member_id));
if (count($result) == 0) {
throw new Default_Model_Ocs_Exception('member with id ' . $member_id . ' could not found.');
}
return $result;
}
/**
* @param $extern_uid
* @param $username
*
* @return array|false
* @throws Default_Model_Ocs_Exception
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function getUser($extern_uid, $username)
{
$user_by_uid = $this->getUserByExternUid($extern_uid);
if (false === empty($user_by_uid)) {
return $user_by_uid;
}
$this->messages[] = "external id not found. external_id: " . $extern_uid;
$user_by_dn = $this->getUserByDN(urlencode($username));
if (false === empty($user_by_dn)) {
return $user_by_dn;
}
$this->messages[] = "ldap dn not found. username: " . $username;
$user_by_name = $this->getUserWithName(urlencode($username));
if (false === empty($user_by_name)) {
return $user_by_name;
}
$this->messages[] = "username not found. username: " . $username;
return false;
}
/**
* @param string $extern_uid
*
* @return array
* @throws Default_Model_Ocs_Exception
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function getUserByExternUid($extern_uid)
{
- $this->httpClient->resetParameters();
$uri = $this->config->host . "/api/v4/users?extern_uid={$extern_uid}&provider=" . $this->config->provider_name;
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
$response = $this->httpClient->request();
$body = Zend_Json::decode($response->getRawBody());
if (count($body) == 0) {
return array();
}
if (array_key_exists("message", $body)) {
$result_code = substr(trim($body["message"]), 0, 3);
if ((int)$result_code >= 300) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
}
Zend_Registry::get('logger')->debug(__METHOD__ . " - body: " . $response->getRawBody());
return $body[0];
}
/**
* @param $username
*
* @return array
* @throws Default_Model_Ocs_Exception
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function getUserByDN($username)
{
$user_id = $this->buildUserDn($username);
$this->httpClient->resetParameters();
$uri = $this->config->host . "/api/v4/users?extern_uid={$user_id}&provider=ldapmain";
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
$response = $this->httpClient->request();
$body = Zend_Json::decode($response->getRawBody());
if (count($body) == 0) {
return array();
}
if (array_key_exists("message", $body)) {
$result_code = substr(trim($body["message"]), 0, 3);
if ((int)$result_code >= 300) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
}
Zend_Registry::get('logger')->debug(__METHOD__ . " - body: " . $response->getRawBody());
return $body[0];
}
/**
* @param string $extern_uid
*
* @return string
* @throws Zend_Exception
*/
private function buildUserDn($extern_uid)
{
$username = mb_strtolower($extern_uid);
$baseDn = Default_Model_Ocs_Ldap::getBaseDn();
$dn = "cn={$username},{$baseDn}";
return $dn;
}
/**
* @param string $username
*
* @return array
* @throws Default_Model_Ocs_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function getUserWithName($username)
{
$this->httpClient->resetParameters();
$uri = $this->config->host . "/api/v4/users?username=" . $username;
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
$response = $this->httpClient->request();
$body = Zend_Json::decode($response->getRawBody());
if (count($body) == 0) {
return array();
}
if (array_key_exists("message", $body)) {
$result_code = substr(trim($body["message"]), 0, 3);
if ((int)$result_code >= 300) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
}
return $body[0];
}
/**
* @param string $uri
* @param string $uid
* @param string $method
* @param array|null $post_param
*
* @return bool|array
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
+ * @throws Zend_Uri_Exception
*/
protected function httpRequest($uri, $uid, $method = Zend_Http_Client::GET, $post_param = null)
{
$this->httpClient->resetParameters();
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod($method);
if (isset($post_param)) {
$this->httpClient->setParameterPost($post_param);
}
$response = $this->httpClient->request();
if ($response->getStatus() < 200 OR $response->getStatus() >= 500) {
$this->messages[] = 'Request failed.(' . $uri . ') OCS Forum server send message: ' . $response->getBody();
return false;
}
$body = Zend_Json::decode($response->getBody());
if ($body && is_array($body) && array_key_exists("message", $body)) {
$this->messages[] = "id: {$uid} ($uri) - " . Zend_Json::encode($body["message"]);
}
return $body;
}
public function blockUserProjects($member_data)
{
if (is_int($member_data)) {
$member_data = $this->getMemberData($member_data, false);
}
if (empty($member_data)) {
return false;
}
$user = $this->getUser($member_data['external_id'], $member_data['username']);
if (false === $user) {
return false;
}
$uri = $this->config->host . "/api/v4/users/{$user['id']}/projects";
$method = Zend_Http_Client::GET;
$uid = $member_data['member_id'];
try {
$response = $this->httpRequest($uri, $uid, $method);
if (false === $response) {
$this->messages[] = "Fail ";
return false;
}
} catch (Zend_Exception $e) {
$this->messages[] = "Fail " . $e->getMessage();
return false;
}
foreach ($response as $project) {
$memberLog = new Default_Model_MemberDeactivationLog();
- $memberLog->addLogData($member_data['member_id'], Default_Model_MemberDeactivationLog::OBJ_TYPE_GITLAB_PROJECT,
+ $memberLog->addLogData($member_data['member_id'],
+ Default_Model_MemberDeactivationLog::OBJ_TYPE_GITLAB_PROJECT,
$project['id'], json_encode($project));
$uri = $this->config->host . "/api/v4/projects/{$project['id']}";
$method = Zend_Http_Client::PUT;
$uid = $member_data['member_id'];
$data = array('visibility' => 'private');
try {
$response = $this->httpRequest($uri, $uid, $method, $data);
if (false === $response) {
$this->messages[] = "Fail " . $uri;
continue;
}
} catch (Zend_Exception $e) {
$this->messages[] = "Fail " . $e->getMessage();
return false;
}
$this->messages[] = "Successful block user project: {$project['id']}";
}
return true;
}
/**
* @param int|array $member_data
*
* @return bool
* @throws Default_Model_Ocs_Exception
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function blockUser($member_data)
{
if (is_int($member_data)) {
$member_data = $this->getMemberData($member_data, false);
}
if (empty($member_data)) {
return false;
}
$user = $this->getUser($member_data['external_id'], $member_data['username']);
if (false === $user) {
return false;
}
$uri = $this->config->host . "/api/v4/users/{$user['id']}/block";
$method = Zend_Http_Client::POST;
$uid = $member_data['member_id'];
try {
$response = $this->httpRequest($uri, $uid, $method);
if (false === $response) {
$this->messages[] = "Fail ";
return false;
}
} catch (Zend_Exception $e) {
$this->messages[] = "Fail " . $e->getMessage();
return false;
}
$this->messages[] = "Successful block user: {$member_data['username']}";
$memberLog = new Default_Model_MemberDeactivationLog();
- $memberLog->addLog($member_data['member_id'], Default_Model_MemberDeactivationLog::OBJ_TYPE_GITLAB_USER, $user['id']);
+ $memberLog->addLog($member_data['member_id'], Default_Model_MemberDeactivationLog::OBJ_TYPE_GITLAB_USER,
+ $user['id']);
return true;
}
/**
* @param int|array $member_data
*
* @return bool
* @throws Default_Model_Ocs_Exception
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function unblockUser($member_data)
{
if (is_int($member_data)) {
$member_data = $this->getMemberData($member_data, false);
}
if (empty($member_data)) {
return false;
}
$user = $this->getUser($member_data['external_id'], $member_data['username']);
if (false === $user) {
return false;
}
$uri = $this->config->host . "/api/v4/users/{$user['id']}/unblock";
$method = Zend_Http_Client::POST;
$uid = $member_data['member_id'];
try {
$response = $this->httpRequest($uri, $uid, $method);
if (false === $response) {
$this->messages[] = "Fail ";
return false;
}
} catch (Zend_Exception $e) {
$this->messages[] = "Fail " . $e->getMessage();
return false;
}
$this->messages[] = "Successful unblock user: {$member_data['username']}";
$memberLog = new Default_Model_MemberDeactivationLog();
- $memberLog->deleteLog($member_data['member_id'], Default_Model_MemberDeactivationLog::OBJ_TYPE_GITLAB_USER, $user['id']);
+ $memberLog->deleteLog($member_data['member_id'], Default_Model_MemberDeactivationLog::OBJ_TYPE_GITLAB_USER,
+ $user['id']);
return true;
}
/**
* @param $member_data
* @param $oldUsername
*
* @return array|bool|null
* @throws Default_Model_Ocs_Exception
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function updateUserFromArray($member_data, $oldUsername)
{
if (empty($member_data)) {
return false;
}
$this->messages = array();
$data = $this->mapUserData($member_data);
$user = $this->getUser($data['extern_uid'], $oldUsername);
if (false === $user) {
$this->messages[] = "Fail";
return false;
}
// $data['skip_reconfirmation'] = 'true';
// unset($data['password']);
try {
foreach ($data as $datum) {
$datum['skip_reconfirmation'] = 'true';
unset($datum['password']);
$this->httpUserUpdate($data, $user['id']);
}
} catch (Zend_Exception $e) {
$this->messages[] = "Fail " . $e->getMessage();
return false;
}
$this->messages[] = "overwritten : " . json_encode($user);
return $user;
}
/**
* @param array $user
*
* @return array
* @throws Zend_Exception
*/
protected function mapUserData($user)
{
$paramEmail = '';
if (isset($user['email_address'])) {
$paramEmail = $user['email_address'];
- } else if (isset($user['mail'])) {
- $paramEmail = $user['mail'];
+ } else {
+ if (isset($user['mail'])) {
+ $paramEmail = $user['mail'];
+ }
}
if (strlen($user['biography']) > 254) {
$helperTruncate = new Default_View_Helper_Truncate();
$bio = $helperTruncate->truncate($user['biography'], 250);
} else {
$bio = empty($user['biography']) ? '' : $user['biography'];
}
$data = array(
array(
'email' => $paramEmail,
'username' => mb_strtolower($user['username']),
// 'name' => (false == empty($user['lastname'])) ? trim($user['firstname'] . ' ' . $user['lastname']) : $user['username'],
'name' => $user['username'],
'password' => $user['password'],
'provider' => $this->config->provider_name,
'extern_uid' => $user['external_id'],
'bio' => $bio,
'admin' => $user['roleId'] == 100 ? 'true' : 'false',
'can_create_group' => 'true'
),
array(
'email' => $paramEmail,
'username' => mb_strtolower($user['username']),
// 'name' => (false == empty($user['lastname'])) ? trim($user['firstname'] . ' ' . $user['lastname']) : $user['username'],
'name' => $user['username'],
'password' => $user['password'],
'provider' => "ldapmain",
'extern_uid' => $this->buildUserDn($user['username']),
'bio' => $bio,
'admin' => $user['roleId'] == 100 ? 'true' : 'false',
'can_create_group' => 'true'
)
);
return $data;
}
/**
* @param $data
*
* @param $id
*
* @return bool
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Http_Exception
*/
private function httpUserUpdate($data, $id)
{
$this->httpClient->resetParameters();
- $uri = $this->config->host . $this->config->url->user_create . '/' . $id;
+ $uri = $this->config->host . '/api/v4/users/' . $id;
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::PUT);
$this->httpClient->setParameterPost($data);
$response = $this->httpClient->request();
if ($response->getStatus() < 200 OR $response->getStatus() >= 300) {
throw new Default_Model_Ocs_Exception('update user data failed. OCS OpenCode server send message: '
- . $response->getRawBody());
+ . $response->getRawBody());
}
$body = Zend_Json::decode($response->getRawBody());
if (array_key_exists("message", $body)) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
Zend_Registry::get('logger')->debug(__METHOD__ . ' - request: ' . $uri);
Zend_Registry::get('logger')->debug(__METHOD__ . ' - response: ' . $response->getRawBody());
return $body;
}
/**
* @param string $email
*
* @return array
* @throws Default_Model_Ocs_Exception
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function getUserByEmail($email)
{
$this->httpClient->resetParameters();
$uri = $this->config->host . "/api/v4/users?search={$email}";
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
$response = $this->httpClient->request();
$body = Zend_Json::decode($response->getRawBody());
if (count($body) == 0) {
return array();
}
if (array_key_exists("message", $body)) {
$result_code = substr(trim($body["message"]), 0, 3);
if ((int)$result_code >= 300) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
}
Zend_Registry::get('logger')->debug(__METHOD__ . " - body: " . $response->getRawBody());
return $body;
}
/**
* @param array $member
* @param array $userSubsystem
*
* @return array
* @throws Zend_Exception
*/
public function validateUserData($member, $userSubsystem)
{
$userDn = $this->buildUserDn(strtolower($member['username']));
$result = array();
if (mb_strtolower($member['email_address']) != $userSubsystem['email']) {
$result[] = 'email_address<=>email';
$result[] = $member['email_address'] . '<=>' . $userSubsystem['email'];
}
if (mb_strtolower($member['username']) != $userSubsystem['username']) {
$result[] = 'username<=>username';
$result[] = mb_strtolower($member['username']) . '<=>' . $userSubsystem['username'];
}
if ($member['username'] != $userSubsystem['name']) {
$result[] = 'username<=>name';
$result[] = $member['username'] . '<=>' . $userSubsystem['name'];
}
if (($member['roleId'] == 100 ? true : false) != $userSubsystem['is_admin']) {
$result[] = 'roleId<=>admin';
$result[] = $member['roleId'] . '<=>' . $userSubsystem['admin'];
}
if ("active" != $userSubsystem['state']) {
$result[] = 'is_active<=>state';
$result[] = ($member['is_active'] ? 'active' : 'inactive') . '<=>' . $userSubsystem['state'];
}
if (false === array_search('oauth_opendesktop', array_column($userSubsystem['identities'], 'provider'))) {
$result[] = 'oauth_opendesktop missing';
}
$provider = array_column($userSubsystem['identities'], 'extern_uid', 'provider');
$providerOauth = isset($provider['oauth_opendesktop']) ? $provider['oauth_opendesktop'] : '';
if ($member['external_id'] != $providerOauth) {
$result[] = 'external_id<=>oauth_opendesktop->extern_uid';
$result[] = $member['external_id'] . '<=>' . $providerOauth;
}
if (false === array_search('ldapmain', array_column($userSubsystem['identities'], 'provider'))) {
$result[] = 'ldapmain missing';
}
$providerLdap = isset($provider['ldapmain']) ? $provider['ldapmain'] : '';
if ($userDn != $providerLdap) {
$result[] = 'userDn<=>ldapmain->extern_uid';
$result[] = $userDn . '<=>' . $providerLdap;
}
return $result;
}
public function resetMessages()
{
$this->messages = array();
}
/**
* @param $member_data
*
* @param bool $force
*
* @return array|bool
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function createUserFromArray($member_data, $force = false)
{
if (empty($member_data)) {
return false;
}
$this->messages = array();
$data = $this->mapUserData($member_data);
$user = $this->getUser($member_data['external_id'], $member_data['username']);
$updatedUser = null;
if (false === $user) {
try {
$data[0]['skip_confirmation'] = 'true';
$user = $this->httpUserCreate($data[0]);
$this->messages[] = "created : " . json_encode($user);
$data[1]['skip_reconfirmation'] = 'true';
$updatedUser = $this->httpUserUpdate($data[1], $user['id']);
$this->messages[] = "updated : " . json_encode($updatedUser);
} catch (Zend_Exception $e) {
$this->messages[] = "Fail " . $e->getMessage();
return false;
}
return $updatedUser;
}
if ($force === true) {
try {
foreach ($data as $datum) {
$datum['skip_reconfirmation'] = 'true';
unset($datum['password']);
$updatedUser = $this->httpUserUpdate($datum, $user['id']);
}
} catch (Zend_Exception $e) {
$this->messages[] = "Fail " . $e->getMessage();
return false;
}
$this->messages[] = "overwritten : " . json_encode($updatedUser);
return $updatedUser;
}
$this->messages[0] = 'user already exists.';
return false;
}
/**
* @param $data
*
* @return bool
* @throws Default_Model_Ocs_Exception
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
private function httpUserCreate($data)
{
$this->httpClient->resetParameters();
- $uri = $this->config->host . $this->config->url->user_create;
+ $uri = $this->config->host . '/api/v4/users';
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::POST);
$this->httpClient->setParameterPost($data);
$response = $this->httpClient->request();
if ($response->getStatus() < 200 OR $response->getStatus() >= 300) {
throw new Default_Model_Ocs_Exception('push user data failed. OCS OpenCode server send message: '
- . $response->getRawBody());
+ . $response->getRawBody());
}
$body = Zend_Json::decode($response->getRawBody());
if (array_key_exists("message", $body)) {
throw new Default_Model_Ocs_Exception(Zend_Json::encode($body["message"]));
}
Zend_Registry::get('logger')->debug(__METHOD__ . ' - request: ' . $uri);
Zend_Registry::get('logger')->debug(__METHOD__ . ' - response: ' . $response->getRawBody());
return $body;
}
/**
- * @param int $member_id
+ * @param int $member_id
*
* @return bool
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Http_Exception
* @throws Zend_Json_Exception
*/
public function deleteUser($member_id)
{
if (empty($member_id)) {
return false;
}
$member_data = $this->getMemberData($member_id, false);
$user = $this->getUser($member_data['external_id'], mb_strtolower($member_data['username']));
if (false === $user) {
$this->messages[0] = 'Not deleted. User not exists. ';
return false;
}
return $this->httpUserDelete($user['id']);
}
/**
* @param $id
*
* @return bool
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Http_Exception
*/
private function httpUserDelete($id)
{
$this->httpClient->resetParameters();
$uri = $this->config->host . '/api/v4/users/' . $id;
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::DELETE);
$response = $this->httpClient->request();
if (204 == $response->getStatus()) {
$this->messages[0] = ' - response : ' . $response->getRawBody() . " - user id: {$id}";
return true;
}
if ($response->getStatus() < 200 AND $response->getStatus() >= 300) {
throw new Default_Model_Ocs_Exception('delete user failed. OCS OpenCode server send message: ' . $response->getRawBody()
- . PHP_EOL . " - OpenCode user id: {$id}");
+ . PHP_EOL . " - OpenCode user id: {$id}");
}
$body = Zend_Json::decode($response->getRawBody());
if (array_key_exists("message", $body)) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
Zend_Registry::get('logger')->debug(__METHOD__ . ' - request: ' . $uri);
Zend_Registry::get('logger')->debug(__METHOD__ . ' - response: ' . $response->getRawBody());
$this->messages[0] = ' - response : ' . $response->getRawBody() . " - user id: {$id}";
return true;
}
/**
* @param string $username
*
* @return bool
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function userExists($username)
{
$this->httpClient->resetParameters();
$uri = $this->config->host . '/api/v4/users?username=' . $username;
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
$response = $this->httpClient->request();
$body = Zend_Json::decode($response->getRawBody());
if (array_key_exists("message", $body)) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
if (count($body) == 0) {
return false;
}
Zend_Registry::get('logger')->debug(__METHOD__ . ' - request: ' . $uri);
Zend_Registry::get('logger')->debug(__METHOD__ . ' - response: ' . $response->getBody());
if ($response->getStatus() < 200 AND $response->getStatus() >= 300) {
throw new Zend_Exception('exists user failed. OCS OpenCode server send message: ' . $response->getBody() . PHP_EOL
- . " - OpenCode user id: {$username}");
+ . " - OpenCode user id: {$username}");
}
$this->messages[0] =
' - response for user exists request: ' . $response->getBody() . PHP_EOL . " - OpenCode user id: {$username}" . PHP_EOL;
return $body[0]['id'];
}
/**
* @return array|null
*/
public function getMessages()
{
return $this->messages;
}
/**
* @param int $member_id
*
* @return array|bool
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function createUser($member_id)
{
if (empty($member_id)) {
return false;
}
$member_data = $this->getMemberData($member_id);
$data = $this->mapUserData($member_data);
$userId = $this->getUser($data['extern_uid'], $data['username']);
if (false === $userId) {
try {
$data[0]['skip_confirmation'] = 'true';
$user = $this->httpUserCreate($data[0]);
$this->messages[] = "created : " . json_encode($user);
$data[1]['skip_reconfirmation'] = 'true';
$updatedUser = $this->httpUserUpdate($data[1], $user['id']);
$this->messages[] = "updated : " . json_encode($updatedUser);
} catch (Zend_Exception $e) {
$this->messages[] = "Fail " . $e->getMessage();
return false;
}
$this->messages[] = "Success";
return $data;
}
$this->messages[0] = 'user already exists.';
return false;
}
/**
* @param string $name
*
* @return bool
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function groupExists($name)
{
$this->httpClient->resetParameters();
$uri = $this->config->host . '/api/v4/groups?search=' . $name;
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
$response = $this->httpClient->request();
- $body = Zend_Json::decode($response->getRawBody());
+ try {
+ $body = Zend_Json::decode($response->getRawBody());
+ } catch (Zend_Json_Exception $e) {
+ throw new Default_Model_Ocs_Exception($e,0, $e);
+ } catch (Zend_Http_Client_Exception $e) {
+ // Gitlab send empty response when group not found, this cause an Exception in http client
+ // we cannot distinguish between a real error and a successful empty response
+ // so we catch this exception and log only
+ // TODO: maybe use plain curl request
+ error_log($e->getMessage());
+ }
if (count($body) > 0) {
return true;
}
if (array_key_exists("message", $body)) {
$result_code = substr(trim($body["message"]), 0, 3);
if ((int)$result_code >= 300) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
}
if (array_key_exists("error_description", $body)) {
throw new Default_Model_Ocs_Exception($body["error_description"]);
}
return false;
}
/**
* @param $member_id
*
* @return bool
* @throws Default_Model_Ocs_Exception
* @throws Zend_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Http_Exception
* @throws Zend_Json_Exception
*/
public function updateMail($member_id)
{
if (empty($member_id)) {
throw new Default_Model_Ocs_Exception('given member_id is empty');
}
$member_data = $this->getMemberData($member_id, false);
$entry = $this->getUser($member_data['external_id'], $member_data['username']);
if (false === $entry) {
$this->messages[] = "Failed. User not found;";
return false;
}
$entry['skip_reconfirmation'] = 'true';
$entry['email'] = $member_data['email_address'];
unset($entry['password']);
$this->httpUserUpdate($entry, $entry['id']);
$this->messages[] = "Success";
return true;
}
/**
* @return array|mixed
* @throws Default_Model_Ocs_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function getUsers()
{
$this->httpClient->resetParameters();
$uri = $this->config->host . "/api/v4/users";
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
$response = $this->httpClient->request();
$body = Zend_Json::decode($response->getRawBody());
if (count($body) == 0) {
return array();
}
if (array_key_exists("message", $body)) {
$result_code = substr(trim($body["message"]), 0, 3);
if ((int)$result_code >= 300) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
}
return $body;
}
/**
* @param int $id
*
* @return array|mixed
* @throws Default_Model_Ocs_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function getUserWithId($id)
{
$this->httpClient->resetParameters();
$uri = $this->config->host . "/api/v4/users/" . $id;
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
$response = $this->httpClient->request();
$body = Zend_Json::decode($response->getRawBody());
if (count($body) == 0) {
return array();
}
if (array_key_exists("message", $body)) {
$result_code = substr(trim($body["message"]), 0, 3);
if ((int)$result_code >= 300) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
}
return $body;
}
/**
* @param int $page
* @param int $limit
* @param string $order_by
* @param string $sort
*
* @return array|false|mixed
* @throws Zend_Http_Client_Exception
*/
public function getProjects($page = 1, $limit = 5, $order_by = 'created_at', $sort = 'desc')
{
$cache = $this->cache;
$cacheName = __FUNCTION__;
if (!($body = $cache->load($cacheName))) {
$this->httpClient->resetParameters();
$uri =
$this->config->host . '/api/v4/projects?order_by=' . $order_by . '&sort=' . $sort . '&visibility=public&page=' . $page
. '&per_page=' . $limit;
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
try {
$response = $this->httpClient->request();
$body = Zend_Json::decode($response->getRawBody());
if (count($body) == 0) {
return array();
}
if (array_key_exists("message", $body)) {
$result_code = substr(trim($body["message"]), 0, 3);
if ((int)$result_code >= 300) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
}
//fetch also user data
$returnArray = array();
foreach ($body as $git_project) {
$gituser = $this->getUserWithName($git_project['namespace']['name']);
$git_project['namespace']['avatar_url'] = $gituser['avatar_url'];
$returnArray[] = $git_project;
}
$body = $returnArray;
} catch (Exception $exc) {
return array();
}
}
return $body;
}
/**
* @param int $id
*
* @return mixed|null
* @throws Default_Model_Ocs_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function getProject($id)
{
$this->httpClient->resetParameters();
$uri = $this->config->host . "/api/v4/projects/" . $id . "/";
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
$response = $this->httpClient->request();
$body = Zend_Json::decode($response->getRawBody());
if ($body['visibility'] <> 'public') {
throw new Default_Model_Ocs_Exception('Project not found in gitlab');
}
if (count($body) == 0) {
return null;
}
if (array_key_exists("message", $body)) {
$result_code = substr(trim($body["message"]), 0, 3);
if ((int)$result_code >= 300) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
}
return $body;
}
/**
* @param int $id
* @param string $state
* @param int $page
* @param int $limit
*
* @return array|mixed
* @throws Default_Model_Ocs_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function getProjectIssues($id, $state = 'opened', $page = 1, $limit = 5)
{
$this->httpClient->resetParameters();
$uri = $this->config->host . '/api/v4/projects/' . $id . '/issues?state=' . $state . '&page=' . $page . '&per_page=' . $limit;
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
$response = $this->httpClient->request();
$body = Zend_Json::decode($response->getRawBody());
if (count($body) == 0) {
return array();
}
if (array_key_exists("message", $body)) {
$result_code = substr(trim($body["message"]), 0, 3);
if ((int)$result_code >= 300) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
}
return $body;
}
/**
* @param int $user_id
* @param int $page
* @param int $limit
*
* @return array|mixed
* @throws Default_Model_Ocs_Exception
* @throws Zend_Http_Client_Exception
* @throws Zend_Json_Exception
*/
public function getUserProjects($user_id, $page = 1, $limit = 50)
{
$this->httpClient->resetParameters();
$uri = $this->config->host . '/api/v4/users/' . $user_id . '/projects?visibility=public&page=' . $page . '&per_page=' . $limit;
$this->httpClient->setUri($uri);
$this->httpClient->setHeaders('Private-Token', $this->config->private_token);
$this->httpClient->setHeaders('Sudo', $this->config->user_sudo);
$this->httpClient->setHeaders('User-Agent', $this->config->user_agent);
$this->httpClient->setMethod(Zend_Http_Client::GET);
$response = null;
try {
$response = $this->httpClient->request();
-
+
} catch (Exception $ex) {
$response = null;
}
-
- if($response && !empty($response)) {
+
+ if ($response && !empty($response)) {
$body = Zend_Json::decode($response->getRawBody());
if (count($body) == 0) {
return array();
}
if (array_key_exists("message", $body)) {
$result_code = substr(trim($body["message"]), 0, 3);
if ((int)$result_code >= 300) {
throw new Default_Model_Ocs_Exception($body["message"]);
}
}
+
return $body;
}
return null;
}
}
\ No newline at end of file
diff --git a/application/modules/default/models/Ocs/Gitlab/Exception.php b/application/modules/default/models/Ocs/Gitlab/Exception.php
new file mode 100644
index 000000000..9b109c5ab
--- /dev/null
+++ b/application/modules/default/models/Ocs/Gitlab/Exception.php
@@ -0,0 +1,28 @@
+.
+ *
+ * Created: 19.06.2018
+ */
+class Default_Model_Ocs_Gitlab_Exception extends Zend_Exception
+{
+
+}
\ No newline at end of file
diff --git a/application/modules/default/models/Project.php b/application/modules/default/models/Project.php
index e07879d4e..d5f79185a 100644
--- a/application/modules/default/models/Project.php
+++ b/application/modules/default/models/Project.php
@@ -1,1882 +1,1884 @@
.
**/
class Default_Model_Project extends Default_Model_DbTable_Project
{
const FILTER_NAME_PROJECT_ID_NOT_IN = 'project_id_not_in';
const FILTER_NAME_RANKING = 'ranking';
const FILTER_NAME_CATEGORY = 'category';
const FILTER_NAME_TAG = 'tag';
const FILTER_NAME_ORIGINAL = 'original';
const FILTER_NAME_MEMBER = 'member';
const FILTER_NAME_ORDER = 'order';
const FILTER_NAME_LOCATION = 'location';
const ITEM_TYPE_DUMMY = 0;
const ITEM_TYPE_PRODUCT = 1;
const ITEM_TYPE_UPDATE = 2;
const TAG_LICENCE_GID = 7;
const TAG_TYPE_ID = 1;
/**
* @param int $status
* @param int $id
*
* @throws Exception
*/
public function setStatus($status, $id)
{
if (false === in_array($status, $this->_allowedStatusTypes)) {
throw new Exception('Wrong value for project status.');
}
$updateValues = array(
'status' => $status,
'changed_at' => new Zend_Db_Expr('Now()')
);
if (self::PROJECT_DELETED == $status) {
$updateValues['deleted_at'] = new Zend_Db_Expr('NOW()');
}
$this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER'));
}
/**
* @param int $member_id
* @param int $id
*/
public function setClaimedByMember($member_id, $id)
{
$updateValues = array(
'claimed_by_member' => $member_id,
'changed_at' => new Zend_Db_Expr('Now()')
);
$this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER'));
}
/**
* @param int $id
*/
public function resetClaimedByMember($id)
{
$updateValues = array(
'claimed_by_member' => new Zend_Db_Expr('NULL'),
'changed_at' => new Zend_Db_Expr('Now()')
);
$this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER'));
}
/**
* @param int $id
*/
public function transferClaimToMember($id)
{
$project = $this->fetchProductInfo($id);
//Update ppload
$pploadFiles = new Default_Model_DbTable_PploadFiles();
$updateValues = array(
'owner_id' => $project->claimed_by_member
);
$pploadFiles->update($updateValues, "collection_id = ".$project->ppload_collection_id);
$pploadCollection = new Default_Model_DbTable_PploadCollections();
$updateValues = array(
'owner_id' => $project->claimed_by_member
);
$pploadCollection->update($updateValues, "id = ".$project->ppload_collection_id);
//And prohect
$updateValues = array(
'member_id' => new Zend_Db_Expr('claimed_by_member'),
'claimable' => new Zend_Db_Expr('NULL'),
'claimed_by_member' => new Zend_Db_Expr('NULL')
);
$this->update($updateValues, $this->_db->quoteInto('project_id=? and claimable = 1', $id, 'INTEGER'));
}
/**
* @param int $project_id
* @param $member_id
*
* @throws Zend_Db_Statement_Exception
* @throws Zend_Exception
*/
public function setInActive($project_id, $member_id)
{
$project_id = (int)$project_id;
$updateValues = array(
'status' => self::PROJECT_INACTIVE,
'deleted_at' => new Zend_Db_Expr('Now()')
);
$this->update($updateValues, 'status > 40 AND project_id=' . $project_id);
$this->setInActiveForUpdates($project_id);
$this->setDeletedForComments($member_id,$project_id);
}
/**
* @param int $id
*/
protected function setInActiveForUpdates($id)
{
$id = (int)$id;
$updateValues = array(
'status' => self::PROJECT_INACTIVE,
'changed_at' => new Zend_Db_Expr('Now()')
);
$this->update($updateValues, 'status > 40 AND pid=' . $id);
}
/**
* @param int $member_id
* @param int $id
*
* @throws Zend_Db_Statement_Exception
* @throws Zend_Exception
*/
private function setDeletedForComments($member_id, $id)
{
$modelComments = new Default_Model_ProjectComments();
$modelComments->setAllCommentsForProjectDeleted($member_id, $id);
}
/**
* @param int $id
*
* @return mixed
* @throws Zend_Db_Statement_Exception
*/
public function fetchActiveBySourcePk($id)
{
$q = $this->select()->where('status = ?', self::PROJECT_ACTIVE)->where('source_pk = ?', (int)$id)
->where('source_type = "project"')
;
return $q->query()->fetch();
}
/**
* @param int $member_id
* @param bool $onlyActiveProjects
*
* @return mixed
*/
public function countAllProjectsForMember($member_id, $onlyActiveProjects = false)
{
$q = $this->select()->from($this, array('countAll' => new Zend_Db_Expr('count(*)')))->setIntegrityCheck(false)
->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE))
->where('project.member_id = ?', $member_id, 'INTEGER')->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD)
;
$resultSet = $q->query()->fetchAll();
return $resultSet[0]['countAll'];
}
/**
* @param int $member_id
* @param bool $onlyActiveProjects
* @param $catids
*
* @return mixed
* @throws Zend_Cache_Exception
* @throws Zend_Db_Statement_Exception
*/
public function countAllProjectsForMemberCatFilter($member_id, $onlyActiveProjects = false, $catids = null)
{
$q = $this->select()->from($this, array('countAll' => new Zend_Db_Expr('count(*)')))->setIntegrityCheck(false)
->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE))
->where('project.member_id = ?', $member_id, 'INTEGER')->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD)
;
if (isset($catids)) {
$q->where('project_category_id in (' . $this->_getCatIds($catids) . ')');
}
$resultSet = $q->query()->fetchAll();
return $resultSet[0]['countAll'];
}
/**
* @param $catids
*
* @return string
* @throws Zend_Cache_Exception
* @throws Zend_Db_Statement_Exception
*/
protected function _getCatIds($catids)
{
$sqlwhereCat = "";
$sqlwhereSubCat = "";
$idCategory = explode(',', $catids);
if (false === is_array($idCategory)) {
$idCategory = array($idCategory);
}
$sqlwhereCat .= implode(',', $idCategory);
$modelCategory = new Default_Model_DbTable_ProjectCategory();
$subCategories = $modelCategory->fetchChildElements($idCategory);
if (count($subCategories) > 0) {
foreach ($subCategories as $element) {
$sqlwhereSubCat .= "{$element['project_category_id']},";
}
}
return $sqlwhereSubCat . $sqlwhereCat;
}
/**
* By default it will show all projects for a member included the unpublished elements.
*
* @param int $member_id
* @param int|null $limit
* @param int|null $offset
* @param bool $onlyActiveProjects
*
* @return Zend_Db_Table_Rowset_Abstract
*/
public function fetchAllProjectsForMember($member_id, $limit = null, $offset = null, $onlyActiveProjects = false)
{
$q = $this->select()->from($this, array(
'*',
'project_validated' => 'project.validated',
'project_uuid' => 'project.uuid',
'project_status' => 'project.status',
'project_created_at' => 'project.created_at',
'project_changed_at' => 'project.changed_at',
'member_type' => 'member.type',
'project_member_id' => 'member_id',
'laplace_score' => new Zend_Db_Expr('laplace_score(count_likes,count_dislikes)'),
'catTitle' => new Zend_Db_Expr('(SELECT title FROM project_category WHERE project_category_id = project.project_category_id)')
))->setIntegrityCheck(false)->join('member', 'project.member_id = member.member_id', array('username'))
->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE))
->where('project.member_id = ?', $member_id, 'INTEGER')->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD)
->order('project_changed_at DESC')
;
if (isset($limit)) {
$q->limit($limit, $offset);
}
return $this->generateRowSet($q->query()->fetchAll());
}
/**
* @param array $data
*
* @return Zend_Db_Table_Rowset_Abstract
*/
protected function generateRowSet($data)
{
$classRowSet = $this->getRowsetClass();
return new $classRowSet(array(
'table' => $this,
'rowClass' => $this->getRowClass(),
'stored' => true,
'data' => $data
));
}
/**
* By default it will show all projects for a member included the unpublished elements.
*
* @param int $member_id
* @param int|null $limit
* @param int|null $offset
* @param bool $onlyActiveProjects
*
* @param null $catids
*
* @return Zend_Db_Table_Rowset_Abstract
* @throws Zend_Cache_Exception
* @throws Zend_Db_Statement_Exception
*/
public function fetchAllProjectsForMemberCatFilter(
$member_id,
$limit = null,
$offset = null,
$onlyActiveProjects = false,
$catids = null
) {
$q = $this->select()->from($this, array(
'*',
'project_validated' => 'project.validated',
'project_uuid' => 'project.uuid',
'project_status' => 'project.status',
'project_created_at' => 'project.created_at',
'project_changed_at' => 'project.changed_at',
'member_type' => 'member.type',
'project_member_id' => 'member_id',
'laplace_score' => new Zend_Db_Expr('laplace_score(count_likes,count_dislikes)'),
'catTitle' => new Zend_Db_Expr('(SELECT title FROM project_category WHERE project_category_id = project.project_category_id)')
))->setIntegrityCheck(false)->join('member', 'project.member_id = member.member_id', array('username'))
->where('project.status >= ?', ($onlyActiveProjects ? self::PROJECT_ACTIVE : self::PROJECT_INACTIVE))
->where('project.member_id = ?', $member_id, 'INTEGER')->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD)
->order('project_changed_at DESC')
;
if (isset($catids)) {
$q->where('project_category_id in (' . $this->_getCatIds($catids) . ')');
}
if (isset($limit)) {
$q->limit($limit, $offset);
}
return $this->generateRowSet($q->query()->fetchAll());
}
/**
* @param $collection_id
*
* @return null|Zend_Db_Table_Row_Abstract
*/
public function fetchProductForCollectionId($collection_id)
{
$sql = '
SELECT
`p`.*
FROM `project` AS `p`
WHERE
`p`.`ppload_collection_id` = :collectionId
AND `p`.`status` >= :projectStatus AND `p`.`type_id` = :typeId
';
$result = $this->_db->fetchRow($sql, array(
'collectionId' => $collection_id,
'projectStatus' => self::PROJECT_INACTIVE,
'typeId' => self::PROJECT_TYPE_STANDARD
));
if ($result) {
return $this->generateRowClass($result);
} else {
return null;
}
}
/**
* @param int $project_id
*
* @return null|Zend_Db_Table_Row_Abstract
*/
public function fetchProductInfo($project_id)
{
$sql = '
SELECT
`p`.*,
`p`.`validated` AS `project_validated`,
`p`.`uuid` AS `project_uuid`,
`p`.`status` AS `project_status`,
`p`.`created_at` AS `project_created_at`,
`p`.`major_updated_at` AS `project_major_updated_at`,
`p`.`changed_at` AS `project_changed_at`,
`p`.`member_id` AS `project_member_id`,
`p`.`source_pk` AS `project_source_pk`,
`p`.`version` AS `project_version`,
`pc`.`title` AS `cat_title`,
`m`.`username`,
`m`.`avatar`,
`m`.`profile_image_url`,
`m`.`roleId`,
`m`.`mail`,
`m`.`paypal_mail`,
`m`.`dwolla_id`,
IFNULL(pr.score_with_pling, 500) AS laplace_score,
`view_reported_projects`.`amount_reports` AS `amount_reports`,
(SELECT `tag`.`tag_fullname` FROM `tag_object`, `tag` WHERE `tag_object`.`tag_id`=`tag`.`tag_id` AND `tag_object_id` = `p`.`project_id` AND `tag_object`.`is_deleted`=0 AND `tag_group_id` = :tag_licence_gid AND `tag_type_id` = :tag_type_id ORDER BY `tag_object`.`tag_created` DESC LIMIT 1)
AS `project_license_title`
FROM `project` AS `p`
JOIN `member` AS `m` ON `p`.`member_id` = `m`.`member_id` AND `m`.`is_active` = 1 AND `m`.`is_deleted` = 0
JOIN `project_category` AS `pc` ON `p`.`project_category_id` = `pc`.`project_category_id`
LEFT join stat_rating_project AS pr ON p.project_id = pr.project_id
LEFT JOIN `view_reported_projects` ON ((`view_reported_projects`.`project_id` = `p`.`project_id`))
WHERE
`p`.`project_id` = :projectId
AND `p`.`status` >= :projectStatus AND (`p`.`type_id` = :typeIdStd OR `p`.`type_id` = :typeIdColl)
';
$result = $this->_db->fetchRow($sql, array(
'projectId' => $project_id,
'projectStatus' => self::PROJECT_INACTIVE,
'typeIdStd' => self::PROJECT_TYPE_STANDARD,
'typeIdColl' => self::PROJECT_TYPE_COLLECTION,
'tag_licence_gid' => self::TAG_LICENCE_GID,
'tag_type_id' => self::TAG_TYPE_ID
));
if ($result) {
return $this->generateRowClass($result);
} else {
return null;
}
}
/**
* @param int $project_id
*
* @return null|Zend_Db_Table_Row_Abstract
*/
public function fetchProductInfo_($project_id)
{
$sql = '
SELECT
`p`.*,
`p`.`validated` AS `project_validated`,
`p`.`uuid` AS `project_uuid`,
`p`.`status` AS `project_status`,
`p`.`created_at` AS `project_created_at`,
`p`.`changed_at` AS `project_changed_at`,
`p`.`member_id` AS `project_member_id`,
`p`.`source_pk` AS `project_source_pk`,
`p`.`version` AS `project_version`,
`pc`.`title` AS `cat_title`,
`m`.`username`,
`m`.`avatar`,
`m`.`profile_image_url`,
`m`.`roleId`,
`m`.`mail`,
`m`.`paypal_mail`,
`m`.`dwolla_id`,
IFNULL(pr.score_with_pling, 500) AS laplace_score,
`view_reported_projects`.`amount_reports` AS `amount_reports`,
`project_license`.`title` AS `project_license_title`
FROM `project` AS `p`
JOIN `member` AS `m` ON `p`.`member_id` = `m`.`member_id` AND `m`.`is_active` = 1 AND `m`.`is_deleted` = 0
JOIN `project_category` AS `pc` ON `p`.`project_category_id` = `pc`.`project_category_id`
LEFT join stat_rating_project AS pr ON p.project_id = pr.project_id
LEFT JOIN `view_reported_projects` ON ((`view_reported_projects`.`project_id` = `p`.`project_id`))
LEFT JOIN `project_license` ON ((`project_license`.`project_license_id` = `p`.`project_license_id`))
WHERE
`p`.`project_id` = :projectId
AND `p`.`status` >= :projectStatus AND `p`.`type_id` = :typeId
';
$result = $this->_db->fetchRow($sql, array(
'projectId' => $project_id,
'projectStatus' => self::PROJECT_INACTIVE,
'typeId' => self::PROJECT_TYPE_STANDARD
));
if ($result) {
return $this->generateRowClass($result);
} else {
return null;
}
}
/**
* @param $project_id
*
* @return Zend_Db_Table_Rowset_Abstract
*/
public function fetchProjectUpdates($project_id)
{
$projectSel = $this->select()->setIntegrityCheck(false)->from($this->_name)
->join('member', 'project.member_id = member.member_id', array('*'))
->where('project.pid=?', $project_id, 'INTEGER')->where('project.status>?', self::PROJECT_INACTIVE)
->where('project.type_id=?', self::PROJECT_TYPE_UPDATE)->order('RAND()')
;
return $this->fetchAll($projectSel);
}
/**
* @param $project_id
*
* @return Zend_Db_Table_Rowset_Abstract
*/
public function fetchAllProjectUpdates($project_id)
{
$projectSel = $this->select()->setIntegrityCheck(false)->from($this->_name)->where('project.pid=?', $project_id, 'INTEGER')
->where('project.status>?', self::PROJECT_INACTIVE)->where('project.type_id=?', self::PROJECT_TYPE_UPDATE)
;
return $this->fetchAll($projectSel);
}
/**
* @param $project
* @param int $count
*
* @return Zend_Db_Table_Rowset_Abstract
*/
public function fetchSimilarProjects($project, $count = 10)
{
$count = (int)$count;
$sql = "
SELECT *
FROM `stat_projects` AS `p`
WHERE `p`.`project_category_id` = :cat_id AND `project_id` <> :project_id
ORDER BY `p`.`changed_at` DESC
LIMIT {$count}
";
$result = $this->_db->fetchAll($sql, array(
'cat_id' => $project->project_category_id,
'project_id' => $project->project_id
));
return $this->generateRowSet($result);
}
/**
* @param Zend_Db_Table_Row $project
* @param int $count
*
* @return Zend_Db_Table_Rowset_Abstract
* @throws Zend_Exception
*/
public function fetchMoreProjects($project, $count = 6)
{
$q = $this->select()->from(array('project' => 'stat_projects'), array(
'project_id',
'image_small',
'title',
'catTitle' => 'cat_title',
'changed_at'
))->setIntegrityCheck(false)
->where('project.status = ?', self::PROJECT_ACTIVE)
->where('project.member_id = ?', $project->member_id, 'INTEGER')
->where('project.project_id != ?', $project->project_id, 'INTEGER')
->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD)
->where('project.amount_reports is null')
->where('project.project_category_id = ?', $project->project_category_id, 'INTEGER')
->limit($count)
->order('project.project_created_at DESC')
;
$tagFilter = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null;
if ($tagFilter) {
$q = $this->generateTagFilter($q, array(self::FILTER_NAME_TAG => $tagFilter));
}
$result = $this->fetchAll($q);
return $result;
}
/**
* @param Zend_Db_Select $statement
* @param array $filterArrayValue
*
* @return Zend_Db_Select
*/
protected function generateTagFilter(Zend_Db_Select $statement, $filterArrayValue)
{
if (false == isset($filterArrayValue[self::FILTER_NAME_TAG])) {
return $statement;
}
$filter = $filterArrayValue[self::FILTER_NAME_TAG];
if (is_array($filter)) {
$tagList = $filter;
//build where statement für projects
$selectAnd = $this->select()->from(array('project' => 'stat_projects'));
foreach($tagList as $item) {
#and
$selectAnd->where('find_in_set(?, tag_ids)', $item);
}
$statement->where(implode(' ', $selectAnd->getPart('where')));
/*
$statement->join(array(
'tags' => new Zend_Db_Expr('(SELECT DISTINCT project_id FROM stat_project_tagids WHERE tag_id in ('
. implode(',', $filter) . '))')
), 'project.project_id = tags.project_id', array());
*
*/
} else {
$statement->where('find_in_set(?, tag_ids)', $filter);
}
return $statement;
}
/**
* @param $project
* @param int $count
*
* @return Zend_Db_Table_Rowset_Abstract
* @throws Zend_Db_Statement_Exception
* @throws Zend_Exception
* @todo improve processing speed
*/
public function fetchMoreProjectsOfOtherUsr($project, $count = 8)
{
$sql = "
SELECT count(1) AS `count`
FROM `stat_projects`
WHERE `status` = :current_status
AND `member_id` <> :current_member_id
AND `project_category_id` = :category_id
AND `type_id` = :project_type
";
$result = $this->_db->query($sql, array(
'current_status' => self::PROJECT_ACTIVE,
'current_member_id' => $project->member_id,
'category_id' => $project->project_category_id,
'project_type' => self::PROJECT_TYPE_STANDARD
))->fetch()
;
if ($result['count'] > $count) {
$offset = rand(0, $result['count'] - $count);
} else {
$offset = 0;
}
$q = $this->select()->from(array('project' => 'stat_projects'), array(
'project_id',
'image_small',
'title',
'catTitle' => 'cat_title',
'changed_at'
))->setIntegrityCheck(false)->where('status = ?', self::PROJECT_ACTIVE)
->where('member_id != ?', $project->member_id, 'INTEGER')->where('type_id = ?', 1)
->where('amount_reports is null')
->where('project_category_id = ?', $project->project_category_id, 'INTEGER')->limit($count, $offset)
->order('project_created_at DESC')
;
$tagFilter = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null;
if ($tagFilter) {
$q = $this->generateTagFilter($q, array(self::FILTER_NAME_TAG => $tagFilter));
}
$result = $this->fetchAll($q);
return $result;
}
/**
* @param int $project_id
*
* @return Zend_Db_Table_Rowset_Abstract
*/
public function fetchProjectSupporter($project_id)
{
$plingTable = new Default_Model_DbTable_Plings();
return $plingTable->getSupporterForProjectId($project_id);
}
/**
* @param int $project_id
*
* @return Zend_Db_Table_Rowset_Abstract
*/
public function fetchProjectSupporterWithPlings($project_id)
{
$plingTable = new Default_Model_DbTable_Plings();
return $plingTable->getSupporterWithPlingsForProjectId($project_id);
}
/**
* @param $projectId
* @param $sources
*/
public function updateGalleryPictures($projectId, $sources)
{
$galleryPictureTable = new Default_Model_DbTable_ProjectGalleryPicture();
$galleryPictureTable->clean($projectId);
$galleryPictureTable->insertAll($projectId, $sources);
}
/**
* @param $projectId
*
* @return array
*/
public function getGalleryPictureSources($projectId)
{
$galleryPictureTable = new Default_Model_DbTable_ProjectGalleryPicture();
$stmt = $galleryPictureTable->select()->where('project_id = ?', $projectId)->order(array('sequence'));
$pics = array();
foreach ($galleryPictureTable->fetchAll($stmt) as $pictureRow) {
$pics[] = $pictureRow['picture_src'];
}
return $pics;
}
/**
* @param int $project_id
*
* @return array
* @throws Zend_Db_Statement_Exception
*/
public function fetchProjectViews($project_id)
{
$sql = "
SELECT
`project_id`,
`count_views`,
`count_visitor`,
`last_view`
FROM
`stat_page_views_mv`
WHERE `project_id` = ?
";
$database = Zend_Db_Table::getDefaultAdapter();
$sql = $database->quoteInto($sql, $project_id, 'INTEGER', 1);
$resultSet = $database->query($sql)->fetchAll();
if (count($resultSet) > 0) {
$result = $resultSet[0]['count_views'];
} else {
$result = 0;
}
return $result;
}
/**
* @param int $member_id
*
* @return int
* @throws Zend_Db_Statement_Exception
*/
public function fetchOverallPageViewsByMember($member_id)
{
$sql = "
SELECT sum(`stat`.`amount`) AS `page_views`
FROM `project`
JOIN (SELECT `project_id`, count(`project_id`) AS `amount` FROM `stat_page_views` GROUP BY `project_id`) AS `stat` ON `stat`.`project_id` = `project`.`project_id`
WHERE `project`.`member_id` = :member_id AND `project`.`status` = :project_status
GROUP BY `member_id`
";
$result = $this->_db->query($sql, array('member_id' => $member_id, 'project_status' => self::PROJECT_ACTIVE));
if ($result->rowCount() > 0) {
$row = $result->fetch();
return $row['page_views'];
} else {
return 0;
}
}
/**
* @return array
* @throws Zend_Db_Statement_Exception
*/
public function getStatsForNewProjects()
{
$sql = "
SELECT
DATE_FORMAT(`time`, '%M %D') AS `projectdate`,
count(1) AS `daycount`
FROM
`activity_log`
WHERE
`activity_type_id` = 0
GROUP BY DATE_FORMAT(`time`, '%Y%M%D')
ORDER BY `time` DESC
LIMIT 14
;";
$database = Zend_Db_Table::getDefaultAdapter();
$resultSet = $database->query($sql)->fetchAll();
return $resultSet;
}
/**
* @param int $idCategory
* @param int|null $limit
*
* @return Zend_Db_Table_Rowset_Abstract
* @throws Zend_Cache_Exception
* @throws Zend_Db_Statement_Exception
*/
public function fetchProductsByCategory($idCategory, $limit = null)
{
$select =
$this->select()->setIntegrityCheck(false)->from($this->_name)->where('project.project_category_id in (?)', $idCategory)
->where('project.status = ?', self::PROJECT_ACTIVE)->where('project.type_id = ?', self::PROJECT_TYPE_STANDARD)
->joinLeft(array(
'pling_amount' => new Zend_Db_Expr('(SELECT
project_id as plinged_project_id, SUM(amount) AS sumAmount, count(1) as countPlings
FROM
plings
where status_id >= 2
group by project_id
order by sumAmount DESC)')
), 'pling_amount.plinged_project_id = project.project_id')
->joinLeft('project_category', 'project_category.project_category_id = project.project_category_id',
array('cat_title' => 'title'))->order('pling_amount.sumAmount DESC')
;
if (false === is_null($limit)) {
$select->limit($limit);
}
$modelCategory = new Default_Model_DbTable_ProjectCategory();
$subCategories = $modelCategory->fetchChildElements($idCategory);
if (count($subCategories) > 0) {
$sqlwhere = '';
foreach ($subCategories as $element) {
$sqlwhere .= "{$element['project_category_id']},";
}
$sqlwhere = substr($sqlwhere, 0, -1);
if (!empty($sqlwhere)) {
$sqlwhere = explode(',', $sqlwhere);
}
$select->orWhere('project.project_category_id in (?)', $sqlwhere);
}
return $this->fetchAll($select);
}
/**
* @param int|array $idCategory id of a category or an array of id's
* @param bool $withSubCat if was set true it will also count products in sub categories
* @param null $store_id
*
* @return int count of products in given category
* @throws Zend_Exception
* @deprecated
*/
public function countProductsInCategory($idCategory = null, $withSubCat = true, $store_id = null)
{
if (empty($idCategory)) {
throw new Zend_Exception('idCategory param was not set');
}
if (false == is_array($idCategory)) {
$idCategory = array($idCategory);
}
if (isset($store_id)) {
$configurations = Zend_Registry::get('application_store_config_id_list');
$store_config = isset($configurations[$store_id]) ? $configurations[$store_id] : null;
} else {
$store_config = Zend_Registry::isRegistered('store_config') ? Zend_Registry::get('store_config') : null;
}
$tagFilter = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null;
$cacheName = __FUNCTION__ . '_' . md5(serialize($idCategory) . $withSubCat . serialize($tagFilter));
/** @var Zend_Cache_Core $cache */
$cache = Zend_Registry::get('cache');
if (false !== ($resultSet = $cache->load($cacheName))) {
return (int)$resultSet[0]['count_active_projects'];
}
$select = $this->select()->setIntegrityCheck(false)->from('stat_projects', array('count_active_projects' => 'COUNT(1)'))
->where('status = ? ', self::PROJECT_ACTIVE)->where('type_id = ?', self::PROJECT_TYPE_STANDARD)
;
$select = $this->generateTagFilter($select, array(self::FILTER_NAME_TAG => $tagFilter));
if ($withSubCat) {
$modelCategory = new Default_Model_DbTable_ProjectCategory();
$subCategories = $modelCategory->fetchChildIds($idCategory);
$inCategories = implode(',', array_unique(array_merge($idCategory, $subCategories)));
} else {
$inCategories = implode(',', $idCategory);
}
$select->where('project_category_id in (' . $inCategories . ')');
$resultSet = $this->fetchAll($select)->toArray();
$cache->save($resultSet, $cacheName, array(), 60);
return (int)$resultSet[0]['count_active_projects'];
}
/**
* @param int|array $idCategory
*
* @return int
* @throws Zend_Exception
*/
public function countActiveMembersForCategory($idCategory)
{
$cacheName = __FUNCTION__ . md5(serialize($idCategory));
$cache = Zend_Registry::get('cache');
$result = $cache->load($cacheName);
if ($result) {
return (int)$result['count_active_members'];
}
$sqlwhereCat = "";
$sqlwhereSubCat = "";
if (false === is_array($idCategory)) {
$idCategory = array($idCategory);
}
$sqlwhereCat .= implode(',', $idCategory);
$modelCategory = new Default_Model_DbTable_ProjectCategory();
$subCategories = $modelCategory->fetchChildElements($idCategory);
if (count($subCategories) > 0) {
foreach ($subCategories as $element) {
$sqlwhereSubCat .= "{$element['project_category_id']},";
}
}
$selectWhere = 'AND p.project_category_id in (' . $sqlwhereSubCat . $sqlwhereCat . ')';
$sql = "SELECT count(1) AS `count_active_members` FROM (
SELECT count(1) AS `count_active_projects` FROM `project` `p`
WHERE `p`.`status` = 100
AND `p`.`type_id` = 1
{$selectWhere} GROUP BY p.member_id
) AS `A`;";
$result = $this->_db->fetchRow($sql);
$cache->save($result, $cacheName);
return (int)$result['count_active_members'];
}
/**
* @param int $project_id
*
* @return bool
*/
public function isProjectFeatured($project_id)
{
$sql_object =
"SELECT `project_id` FROM `project` WHERE `project_id`= :project_id AND `status` = 100 AND `type_id` = 1 AND `featured` = 1";
$r = $this->getAdapter()->fetchRow($sql_object, array('project_id' => $project_id));
if ($r) {
return true;
} else {
return false;
}
}
/**
* @param bool $in_current_store
*
* @return int
* @throws Zend_Exception
*/
public function fetchTotalProjectsCount($in_current_store = false)
{
$sql = "SELECT count(1) AS `total_project_count` FROM `stat_projects`";
if ($in_current_store) {
$store_tags = Zend_Registry::isRegistered('config_store_tags') ? Zend_Registry::get('config_store_tags') : null;
/*
if ($store_tags) {
$sql .= ' JOIN (SELECT DISTINCT project_id FROM stat_project_tagids WHERE tag_id in (' . implode(',', $store_tags)
. ')) AS tags ON stat_projects.project_id = tags.project_id';
}
*
*/
$info = new Default_Model_Info();
$activeCategories = $info->getActiveCategoriesForCurrentHost();
$sql .= ' WHERE project_category_id IN (' . implode(',', $activeCategories) . ')';
//Store Tag Filter
if ($store_tags) {
$tagList = $store_tags;
//build where statement für projects
$sql .= " AND (";
if(!is_array($tagList)) {
$tagList = array($tagList);
}
foreach($tagList as $item) {
#and
$sql .= ' find_in_set('.$item.', tag_ids) AND ';
}
$sql .= ' 1=1)';;
}
}
$result = $this->_db->fetchRow($sql);
return (int)$result['total_project_count'];
}
/**
* @param $member_id
*
* @throws Zend_Db_Statement_Exception
* @throws Zend_Exception
*/
public function setAllProjectsForMemberDeleted($member_id)
{
$sql =
"SELECT `project_id` FROM `project` WHERE `member_id` = :memberId AND `type_id` = :typeId AND `status` > :project_status";
$projectForDelete = $this->_db->fetchAll($sql, array(
'memberId' => $member_id,
'typeId' => self::PROJECT_TYPE_STANDARD,
'project_status' => self::PROJECT_DELETED
));
foreach ($projectForDelete as $item) {
$this->setDeleted($member_id, $item['project_id']);
}
// set personal page deleted
$sql = "SELECT project_id FROM project WHERE member_id = :memberId AND type_id = :typeId";
$projectForDelete = $this->_db->fetchAll($sql, array(
'memberId' => $member_id,
'typeId' => self::PROJECT_TYPE_PERSONAL
));
foreach ($projectForDelete as $item) {
$this->setDeleted($member_id, $item['project_id']);
}
/*
$sql = "UPDATE project SET `status` = :statusCode, deleted_at = NOW() WHERE member_id = :memberId AND type_id = :typeId";
$this->_db->query($sql, array(
'statusCode' => self::PROJECT_DELETED,
'memberId' => $member_id,
'typeId' => self::PROJECT_TYPE_PERSONAL
))->execute();
*/
}
/**
* @param int $member_id
* @param int $id
*
* @throws Zend_Db_Statement_Exception
* @throws Zend_Exception
*/
public function setDeleted($member_id, $id)
{
$id = (int)$id;
$updateValues = array(
'status' => self::PROJECT_DELETED,
'deleted_at' => new Zend_Db_Expr('Now()')
);
$this->update($updateValues, 'status > 30 AND project_id=' . $id);
$memberLog = new Default_Model_MemberDeactivationLog();
$memberLog->logProjectAsDeleted($member_id, $id);
$this->setDeletedForUpdates($member_id, $id);
$this->setDeletedForComments($member_id, $id);
$this->setDeletedInMaterializedView($id);
}
/**
* @param $member_id
* @param int $id
*/
protected function setDeletedForUpdates($member_id, $id)
{
$id = (int)$id;
$updateValues = array(
'status' => self::PROJECT_DELETED,
'deleted_at' => new Zend_Db_Expr('Now()')
);
$this->update($updateValues, 'status > 30 AND pid=' . $id);
}
/**
* @param $id
*
* @throws Zend_Db_Statement_Exception
*/
private function setDeletedInMaterializedView($id)
{
$sql = "UPDATE `stat_projects` SET `status` = :new_status WHERE `project_id` = :project_id";
$result = $this->_db->query($sql, array('new_status' => self::PROJECT_DELETED, 'project_id' => $id))->execute();
}
/**
* @param int $member_id
*
* @throws Zend_Exception
*/
public function setAllProjectsForMemberActivated($member_id)
{
$sql = "SELECT `p`.`project_id` FROM `project` `p`
JOIN `member_deactivation_log` `l` ON `l`.`object_type_id` = 3 AND `l`.`object_id` = `p`.`project_id` AND `l`.`deactivation_id` = `p`.`member_id`
WHERE `p`.`member_id` = :memberId";
$projectForDelete = $this->_db->fetchAll($sql, array(
'memberId' => $member_id
));
foreach ($projectForDelete as $item) {
$this->setActive($member_id, $item['project_id']);
}
}
/**
* @param int $member_id
* @param int $id
*
* @throws Zend_Exception
*/
public function setActive($member_id, $id)
{
$updateValues = array(
'status' => self::PROJECT_ACTIVE,
'deleted_at' => null
);
$this->update($updateValues, $this->_db->quoteInto('project_id=?', $id, 'INTEGER'));
$memberLog = new Default_Model_MemberDeactivationLog();
$memberLog->removeLogProjectAsDeleted($member_id, $id);
$this->setActiveForUpdates($member_id, $id);
$this->setActiveForComments($member_id, $id);
}
/**
* @param int $id
*/
protected function setActiveForUpdates($member_id, $id)
{
$updateValues = array(
'status' => self::PROJECT_ACTIVE,
'deleted_at' => null
);
$this->update($updateValues, $this->_db->quoteInto('pid=?', $id, 'INTEGER'));
}
/**
* @param int $member_id
* @param int $project_id
*/
private function setActiveForComments($member_id, $project_id)
{
$modelComments = new Default_Model_ProjectComments();
$modelComments->setAllCommentsForProjectActivated($member_id, $project_id);
}
/**
* @param array $inputFilterParams
* @param int|null $limit
* @param int|null $offset
*
* @return array
* @throws Zend_Cache_Exception
* @throws Zend_Db_Select_Exception
* @throws Zend_Exception
*/
public function fetchProjectsByFilter($inputFilterParams, $limit = null, $offset = null)
{
$cacheName = __FUNCTION__ . '_' . md5(serialize($inputFilterParams) . (string)$limit . (string)$offset);
/** @var Zend_Cache_Core $cache */
$cache = Zend_Registry::get('cache');
if (false === ($returnValue = $cache->load($cacheName))) {
$statement = $this->generateStatement($inputFilterParams, $limit, $offset);
if (APPLICATION_ENV == 'development') {
Zend_Registry::get('logger')->debug(__METHOD__ . ' - ' . $statement->__toString());
}
/** @var Zend_Db_Table_Rowset $fetchedElements */
$fetchedElements = $this->fetchAll($statement);
$statement->reset('limitcount')->reset('limitoffset');
$statement->reset('columns')->columns(array('count' => new Zend_Db_Expr('count(*)')));
$countElements = $this->fetchRow($statement);
$returnValue = array('elements' => $fetchedElements, 'total_count' => $countElements->count);
$cache->save($returnValue, $cacheName, array(), 120);
}
return $returnValue;
}
/**
* @param array $inputFilterParams
* @param int|null $limit
* @param int|null $offset
*
* @return Zend_Db_Select
* @throws Zend_Cache_Exception
* @throws Zend_Db_Statement_Exception
*/
protected function generateStatement($inputFilterParams, $limit = null, $offset = null)
{
$statement = $this->generateBaseStatement();
$statement = $this->generateCategoryFilter($statement, $inputFilterParams);
$statement = $this->generateOrderFilter($statement, $inputFilterParams);
$statement = $this->generateTagFilter($statement, $inputFilterParams);
$statement = $this->generateOriginalFilter($statement, $inputFilterParams);
$statement = $this->generateReportedSpamFilter($statement);
$statement->limit($limit, $offset);
return $statement;
}
/**
* @return Zend_Db_Select
*/
protected function generateBaseStatement()
{
$statement = $this->select()->setIntegrityCheck(false);
//$statement->from(array('project' => $this->_name), array(
$statement->from(array('project' => 'stat_projects'), array(
'*'
));
$statement->where('project.status = ?', self::PROJECT_ACTIVE)->where('project.type_id IN (?)', array(self::PROJECT_TYPE_STANDARD, self::PROJECT_TYPE_COLLECTION));
return $statement;
}
/**
* @param Zend_Db_Select $statement
* @param array $filterArrayValue
*
* @return Zend_Db_Select
* @throws Zend_Cache_Exception
* @throws Zend_Db_Statement_Exception
*/
protected function generateCategoryFilter(Zend_Db_Select $statement, $filterArrayValue)
{
if (false == isset($filterArrayValue[self::FILTER_NAME_CATEGORY])) {
return $statement;
}
$filter = $filterArrayValue[self::FILTER_NAME_CATEGORY];
if (false === is_array($filter)) {
$filter = array($filter);
}
// fetch child elements for each category
$modelProjectCategories = new Default_Model_DbTable_ProjectCategory();
$childElements = $modelProjectCategories->fetchChildIds($filter);
$allCategories = array_unique(array_merge($filter, $childElements));
$stringCategories = implode(',', $allCategories);
$statement->where("(
project.project_category_id IN ({$stringCategories})
)");
return $statement;
}
/**
* @param Zend_Db_Select $statement
* @param array $filterArrayValue
*
* @return Zend_Db_Select
*/
protected function generateOrderFilter(Zend_Db_Select $statement, $filterArrayValue)
{
if (!isset($filterArrayValue[self::FILTER_NAME_ORDER])) {
$filterValue = '';
} else {
$filterValue = $filterArrayValue[self::FILTER_NAME_ORDER];
}
switch ($filterValue) {
case 'latest':
$statement->order('project.major_updated_at DESC');
//$statement->order('project.changed_at DESC');
break;
case 'rating':
//$statement->order(array('amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC'));
//$statement->order(array(new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'),'amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC'));
/*$statement->order(array(
new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'),
'project.created_at DESC'
));*/
$statement->order('project.laplace_score DESC');
break;
case 'top':
$statement->order('project.laplace_score_old DESC');
break;
case 'download':
$statement->order('project.count_downloads_hive DESC');
break;
case 'downloadQuarter':
$statement->order('project.count_downloads_quarter DESC');
break;
case 'hot':
//$statement->order(array('amount_received DESC', 'count_plings DESC', 'latest_pling DESC', 'project.created_at DESC'));
$statement->order(array(
new Zend_Db_Expr('(round(((count_likes + 6) / ((count_likes + count_dislikes) + 12)),2) * 100) DESC'),
'amount_received DESC',
'count_plings DESC',
'latest_pling DESC',
'project.created_at DESC'
));
$statement->where(' project.created_at >= (NOW()- INTERVAL 14 DAY)');
break;
case 'alpha':
default:
$statement->order('project.title');
}
return $statement;
}
/**
* @param Zend_Db_Select $statement
* @param array $filterArrayValue
*
* @return Zend_Db_Select
*/
protected function generateOriginalFilter(Zend_Db_Select $statement, $filterArrayValue)
{
if (false == isset($filterArrayValue[self::FILTER_NAME_ORIGINAL])) {
return $statement;
}
$filter = $filterArrayValue[self::FILTER_NAME_ORIGINAL];
if (is_array($filter)) {
// todo maybe for other tags filter
} else {
$statement->where('find_in_set(?, tags)', $filter);
}
return $statement;
}
/**
* @param Zend_Db_Select $statement
*
* @return Zend_Db_Select
*/
protected function generateReportedSpamFilter(Zend_Db_Select $statement)
{
return $statement->where('(amount_reports is null)');
}
/**
* @param int $member_id
* @param array $values
* @param string $username
*
* @return Zend_Db_Table_Row_Abstract
* @throws Exception
* @throws Zend_Db_Table_Exception
*/
public function createProject($member_id, $values, $username)
{
$values = (array)$values;
if (empty($member_id)) {
throw new Zend_Db_Table_Exception('member_id is not set');
}
if (empty($username)) {
throw new Zend_Db_Table_Exception('username is not set');
}
// check important values for a new project
$values['uuid'] = (!array_key_exists('uuid', $values)) ? Local_Tools_UUID::generateUUID() : $values['uuid'];
$values['member_id'] = (!array_key_exists('member_id', $values)) ? $member_id : $values['member_id'];
$values['status'] = (!array_key_exists('status', $values)) ? self::PROJECT_INACTIVE : $values['status'];
$values['type_id'] = (!array_key_exists('type_id', $values)) ? self::ITEM_TYPE_PRODUCT : $values['type_id'];
$values['created_at'] = (!array_key_exists('created_at', $values)) ? new Zend_Db_Expr('NOW()') : $values['created_at'];
$values['start_date'] = (!array_key_exists('start_date', $values)) ? new Zend_Db_Expr('NULL') : $values['start_date'];
$values['creator_id'] = (!array_key_exists('creator_id', $values)) ? $member_id : $values['creator_id'];
+ $values['gitlab_project_id'] = empty($values['gitlab_project_id']) ? new Zend_Db_Expr('NULL') : $values['gitlab_project_id'];
if ($username == 'pling editor') {
$values['claimable'] = (!array_key_exists('claimable', $values)) ? self::PROJECT_CLAIMABLE : $values['claimable'];
}
$savedRow = $this->save($values);
return $savedRow;
}
/**
* @param int $project_id
* @param array $values
*
* @return Zend_Db_Table_Row_Abstract
- * @throws Exception
* @throws Zend_Db_Table_Exception
*/
public function updateProject($project_id, $values)
{
$values = (array)$values;
$projectData = $this->find($project_id)->current();
if (empty($projectData)) {
throw new Zend_Db_Table_Exception('project_id not found');
}
+ $values['gitlab_project_id'] = empty($values['gitlab_project_id']) ? new Zend_Db_Expr('NULL') : $values['gitlab_project_id'];
+
$projectData->setFromArray($values)->save();
return $projectData;
}
/**
* @param int $member_id
*
* @return array|mixed
*/
public function fetchMainProject($member_id)
{
$sql = "SELECT * FROM {$this->_name} WHERE type_id = :type AND member_id = :member";
// $this->_db->getProfiler()->setEnabled(true);
$result = $this->_db->fetchRow($sql, array('type' => self::PROJECT_TYPE_PERSONAL, 'member' => (int)$member_id));
// $dummy = $this->_db->getProfiler()->getLastQueryProfile()->getQuery();
// $this->_db->getProfiler()->setEnabled(true);
if (count($result) > 0) {
return $result;
} else {
return array();
}
}
/**
* @param $project_id
*
* @return Zend_Db_Table_Row_Abstract
* @throws Zend_Db_Statement_Exception
*/
public function fetchProductDataFromMV($project_id)
{
$sql = "SELECT * FROM `stat_projects` WHERE `project_id` = :project_id";
$resultSet = $this->_db->query($sql, array('project_id' => $project_id))->fetch();
if (false === $resultSet) {
return $this->generateRowClass(array());
}
return $this->generateRowClass($resultSet);
}
/**
* @return array
*/
public function fetchGhnsExcludedProjects()
{
$sql = "
SELECT `p`.`project_id`, `p`.`title`, `l`.`member_id` AS `exclude_member_id`, `l`.`time` AS `exclude_time`, `m`.`username` AS `exclude_member_name` FROM `project` `p`
JOIN `activity_log` `l` ON `l`.`project_id` = `p`.`project_id` AND `l`.`activity_type_id` = 314
INNER JOIN `member` `m` ON `m`.`member_id` = `l`.`member_id`
WHERE `p`.`ghns_excluded` = 1
";
$list = $this->_db->fetchAll($sql);
return $list;
}
public function getUserCreatingCategorys($member_id)
{
$sql = "
select
c.title as category1,
count(1) as cnt
from project p
join project_category c on p.project_category_id = c.project_category_id
where p.status = 100
and p.member_id =:member_id
and p.type_id = 1
group by c.title
order by cnt desc, c.title asc
";
$result = $this->_db->fetchAll($sql, array('member_id' => $member_id));
return $result;
}
/**
* @return array
*/
public function getUserActiveProjects($member_id, $limit = null, $offset = null)
{
// for member me page
$sql = "
SELECT
`p`.`project_id`,
`p`.`title`,
`p`.`created_at` AS `project_created_at`,
`p`.`changed_at` AS `project_changed_at`,
`pr`.`likes` AS count_likes,
`pr`.`dislikes`AS count_dislikes,
IFNULL(pr.score_with_pling, 500) AS laplace_score,
`p`.`member_id`,
`cat`.`title` AS `catTitle`,
`p`.`project_category_id`,
`p`.`image_small`,
(SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings`,
c.cnt cntCategory
FROM `project` `p`
join project_category cat on p.project_category_id = cat.project_category_id
LEFT join stat_rating_project AS pr ON p.project_id = pr.project_id
left join stat_cnt_projects_catid_memberid c on p.project_category_id = c.project_category_id and p.member_id = c.member_id
WHERE `p`.`status` =100
and `p`.`type_id` = 1
AND `p`.`member_id` = :member_id
ORDER BY cntCategory desc,catTitle asc, `p`.`changed_at` DESC
";
if (isset($limit)) {
$sql = $sql . ' limit ' . $limit;
}
if (isset($offset)) {
$sql = $sql . ' offset ' . $offset;
}
$result = $this->_db->fetchAll($sql, array('member_id' => $member_id));
if ($result) {
return $this->generateRowClass($result);
} else {
return null;
}
}
/**
* @return array
*/
public function getUserActiveProjectsDuplicatedSourceurl($member_id, $limit = null, $offset = null)
{
// for member me page
$sql = "
select * from
(
SELECT
`p`.`project_id`,
`p`.`title`,
`p`.`created_at` AS `project_created_at`,
`p`.`changed_at` AS `project_changed_at`,
`pr`.`likes` AS count_likes,
`pr`.`dislikes`AS count_dislikes,
IFNULL(pr.score_with_pling, 500) AS laplace_score,
`p`.`member_id`,
`cat`.`title` AS `catTitle`,
`p`.`project_category_id`,
`p`.`image_small`,
(SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings`,
c.cnt cntCategory,
(select count(1) from stat_projects_source_url s where TRIM(TRAILING '/' FROM p.source_url) = s.source_url) as cntDuplicates
FROM `project` `p`
join project_category cat on p.project_category_id = cat.project_category_id
left join stat_cnt_projects_catid_memberid c on p.project_category_id = c.project_category_id and p.member_id = c.member_id
LEFT join stat_rating_project AS pr ON p.project_id = pr.project_id
WHERE `p`.`status` =100
and `p`.`type_id` = 1
AND `p`.`member_id` = :member_id
ORDER BY cntCategory desc,catTitle asc, `p`.`changed_at` DESC
) t where t.cntDuplicates >1
";
if (isset($limit)) {
$sql = $sql . ' limit ' . $limit;
}
if (isset($offset)) {
$sql = $sql . ' offset ' . $offset;
}
$result = $this->_db->fetchAll($sql, array('member_id' => $member_id));
if ($result) {
return $this->generateRowClass($result);
} else {
return null;
}
}
/**
* @param int $member_id
* @param int|null $limit
* @param int|null $offset
*
* @return null|Zend_Db_Table_Row_Abstract
*/
public function fetchAllFeaturedProjectsForMember($member_id, $limit = null, $offset = null)
{
// for member me page
$sql = "
SELECT
`p`.`project_id`,
`p`.`title`,
`p`.`created_at` AS `project_created_at`,
`p`.`changed_at` AS `project_changed_at`,
`p`.`count_likes`,
`p`.`count_dislikes`,
`p`.`laplace_score`,
`p`.`member_id`,
`p`.`cat_title` AS `catTitle`,
`p`.`image_small`,
(SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings`
FROM `stat_projects` `p`
WHERE `p`.`status` =100
AND `p`.`type_id` = 1
AND `featured` = 1
AND `p`.`member_id` = :member_id
ORDER BY `p`.`changed_at` DESC
";
if (isset($limit)) {
$sql = $sql . ' limit ' . $limit;
}
if (isset($offset)) {
$sql = $sql . ' offset ' . $offset;
}
$result = $this->_db->fetchAll($sql, array('member_id' => $member_id));
if ($result) {
return $this->generateRowClass($result);
} else {
return null;
}
}
/**
* @param int $member_id
* @param int|null $limit
* @param int|null $offset
*
* @return null|Zend_Db_Table_Row_Abstract
*/
public function fetchAllCollectionsForMember($member_id, $limit = null, $offset = null)
{
// for member me page
$sql = "
SELECT
`p`.`project_id`,
`p`.`title`,
`p`.`created_at` AS `project_created_at`,
`p`.`changed_at` AS `project_changed_at`,
`p`.`count_likes`,
`p`.`count_dislikes`,
`p`.`laplace_score`,
`p`.`member_id`,
`p`.`cat_title` AS `catTitle`,
`p`.`image_small`,
(SELECT count(1) FROM `project_plings` `l` WHERE `p`.`project_id` = `l`.`project_id` AND `l`.`is_deleted` = 0 AND `l`.`is_active` = 1 ) `countplings`
FROM `stat_projects` `p`
WHERE `p`.`status` =100
AND `p`.`type_id` = 3
AND `p`.`member_id` = :member_id
ORDER BY `p`.`changed_at` DESC
";
if (isset($limit)) {
$sql = $sql . ' limit ' . $limit;
}
if (isset($offset)) {
$sql = $sql . ' offset ' . $offset;
}
$result = $this->_db->fetchAll($sql, array('member_id' => $member_id));
if ($result) {
return $this->generateRowClass($result);
} else {
return null;
}
}
/**
* @param string $orderby
* @param int|null $limit
* @param int|null $offset
*
* @return array
*/
public function fetchDuplicatedSourceProjects($orderby = 'source_url asc', $limit = null, $offset = null)
{
$sql = "
SELECT
`source_url`
,count(1) AS `cnt`,
GROUP_CONCAT(`p`.`project_id` ORDER BY `p`.`created_at`) `pids`
FROM `stat_projects_source_url` `p`
GROUP BY `source_url`
HAVING count(1)>1
";
if (isset($orderby)) {
$sql = $sql . ' order by ' . $orderby;
}
if (isset($limit)) {
$sql .= ' limit ' . (int)$limit;
}
if (isset($offset)) {
$sql .= ' offset ' . (int)$offset;
}
$result = $this->_db->fetchAll($sql);
return $result;
}
/**
* @return mixed
*/
public function getTotalCountDuplicates()
{
$sql = "
SELECT count(1) AS `cnt` FROM
(
SELECT
`source_url`
,count(1) AS `cnt`,
GROUP_CONCAT(`p`.`project_id` ORDER BY `p`.`created_at`) `pids`
FROM `stat_projects_source_url` `p`
GROUP BY `p`.`source_url`
HAVING count(1)>1
) `a`
";
$result = $this->_db->fetchAll($sql);
return $result[0]['cnt'];;
}
/**
* @param string $source_url
*
* @return mixed
*/
public function getCountSourceUrl($source_url)
{
$last = substr($source_url, -1);
if ($last == '/') {
$source_url = substr($source_url, 0, -1);
}
$sql = "
SELECT count(1) AS `cnt` FROM
`stat_projects_source_url` `p`
WHERE `p`.`source_url`= :source_url
";
$result = $this->_db->fetchAll($sql, array('source_url' => $source_url));
return $result[0]['cnt'];
}
public function getSourceUrlProjects($source_url)
{
$last = substr($source_url, -1);
if ($last == '/') {
$source_url = substr($source_url, 0, -1);
}
$sql = "
SELECT
p.project_id,
pj.title,
pj.member_id,
pj.created_at,
pj.changed_at,
m.username
FROM stat_projects_source_url p
inner join project pj on p.project_id = pj.project_id and pj.status=100
inner join member m on pj.member_id = m.member_id
WHERE p.source_url= :source_url
";
$result = $this->_db->fetchAll($sql, array('source_url' => $source_url));
return $result;
}
/**
* @param int $member_id
*
* @return mixed
*/
public function getCountProjectsDuplicateSourceurl($member_id)
{
$sql = "
SELECT count(1) AS `cnt`
FROM
(
SELECT `p`.`source_url`
,(SELECT count(1) FROM `stat_projects_source_url` `pp` WHERE `pp`.`source_url`=`p`.`source_url`) `cnt`
FROM `stat_projects_source_url` `p`
WHERE `p`.`member_id` = :member_id
) `t` WHERE `t`.`cnt`>1
";
$result = $this->_db->fetchAll($sql, array('member_id' => $member_id));
return $result[0]['cnt'];
}
/**
* @param $ids
*
* @return Zend_Db_Table_Row_Abstract
* @throws Zend_Db_Statement_Exception
*/
public function fetchProjects($ids)
{
$sql = "SELECT * FROM stat_projects WHERE project_id in (" . $ids . ")";
$resultSet = $this->_db->fetchAll($sql);
return $this->generateRowSet($resultSet);
}
/**
* @param $project_id
* @return true/false
* @throws Zend_Db_Statement_Exception
*/
public function validateDeleteProjectFromSpam($project_id)
{
//produkt ist ueber 6 monate alt oder produkt hat ueber 5 kommentare oder produkt hat minimum 1 pling
// darf nicht gelöscht werden
$sql ='select count_comments
,created_at
, (created_at+ INTERVAL 6 MONTH < NOW()) is_old
,(select count(1) from project_plings f where f.project_id = p.project_id and f.is_deleted = 0) plings
FROM project p where project_id =:project_id';
$result = $this->_db->fetchRow($sql, array(
'project_id' => $project_id,
));
if($result['count_comments'] >5 || $result['is_old'] ==1 || $result['plings']>0)
{
return false;
}
return true;
}
}
diff --git a/application/modules/default/views/helpers/Image.php b/application/modules/default/views/helpers/Image.php
index 98787a95a..ce50f98eb 100644
--- a/application/modules/default/views/helpers/Image.php
+++ b/application/modules/default/views/helpers/Image.php
@@ -1,126 +1,121 @@
.
**/
class Default_View_Helper_Image extends Zend_View_Helper_Abstract
{
protected $_operations = array(
'crop' => '%d',
'width' => '%d',
'height' => '%d',
'quality' => '%d',
'bgColor' => '%s',
'progressive' => '%d'
);
protected $_options = array(
'temporal' => false
);
protected $_separator = '-';
public function Image($filename, $options = array())
{
if (false === $this->validUri($filename)) {
return $this->createImageUri($filename, $options);
}
$httpScheme = 'https';
- if (PHP_SAPI != 'cli') {
- /** @var Zend_Controller_Request_Http $request */
- $request = Zend_Controller_Front::getInstance()->getRequest();
- $httpScheme = $request->getScheme();
- }
$uri = $this->replaceScheme($filename, $httpScheme);
if (empty($options)) {
return $uri;
}
return $this->updateImageUri($uri, $options);
}
private function validUri($filename)
{
return Zend_Uri::check($filename);
}
private function createImageUri($filename, $options)
{
$operations = "";
if (isset($options['width']) && isset($options['height'])) {
$operations .= $options['width'] . 'x' . $options['height'];
} else {
//$operations .= '80x80';
$operations .= '';
}
if (isset($options['crop'])) {
$operations .= '-' . $options['crop'];
} else {
//$operations .= '-2';
$operations .= '';
}
if ($filename == "") {
$filename = 'default.png';
}
if (isset($options['temporal'])) {
$filename = '/img/default/tmp/' . $filename;
$url = $filename;
} else {
if (strpos($filename, '.gif') > 0 || $operations == '') {
$url = IMAGES_MEDIA_SERVER . '/img/' . $filename;
} else {
$url = IMAGES_MEDIA_SERVER . '/cache/' . $operations . '/img/' . $filename;
}
}
return $url;
}
private function replaceScheme($filename, $getScheme)
{
$result = preg_replace("|^https?|", $getScheme, $filename);
return $result;
}
private function updateImageUri($filename, $options)
{
$dimension = '';
if (isset($options['width']) && isset($options['height'])) {
$dimension = $options['width'] . 'x' . $options['height'];
} else if (isset($options['width']) && (false === isset($options['height']))) {
$dimension = $options['width'] . 'x' . $options['width'];
} else if (isset($options['height']) && (false === isset($options['width']))) {
$dimension = $options['height'] . 'x' . $options['height'];
}
$uri = preg_replace("/\d\d\dx\d\d\d/", $dimension, $filename);
return $uri;
}
}
\ No newline at end of file
diff --git a/application/modules/default/views/scripts/product/add.phtml b/application/modules/default/views/scripts/product/add.phtml
index 3a0bff40a..557099a1d 100644
--- a/application/modules/default/views/scripts/product/add.phtml
+++ b/application/modules/default/views/scripts/product/add.phtml
@@ -1,2186 +1,2186 @@
.
**/
//$this->os = Zend_Registry::get('application_os');
$this->tab = 'add';
$helperImage = new Default_View_Helper_Image();
$helpMemberUrl = new Default_View_Helper_BuildMemberUrl();
$helpProductUrl = new Default_View_Helper_BuildProductUrl();
$helpBaseUrl = new Default_View_Helper_BuildBaseUrl();
$modelCategory = new Default_Model_DbTable_ProjectCategory();
$valueCatId = $this->form->project_category_id->getValue();
//$valueCatId = 55;
$storeCatIds = Zend_Registry::isRegistered('store_category_list') ? Zend_Registry::get('store_category_list') : null;
$categoryAncestors = $modelCategory->fetchAncestorsAsId($valueCatId);
$categories = $modelCategory->fetchCategoriesForFormNew($valueCatId);
$categoriesFallback = $modelCategory->fetchCategoriesForForm($valueCatId);
//$categories2 = array();
if (count($categoryAncestors) > 0) {
$categoryPath = explode(',',$categoryAncestors['ancestors']);
}
$categoryPath[] = $valueCatId;
$this->headLink()->appendStylesheet('/theme/flatui/css/chosen.css');
$this->inlineScript()->appendFile('/theme/flatui/js/lib/chosen.jquery.min.js');
$this->inlineScript()->appendScript('
$(document).ready(function(){
$("select.chosen").chosen({
width: "100%",
max_selected_options: "5",
disable_search: "false",
disable_search_threshold: "5"
});
});
');
?>
render('user/partials/userHeader_top.phtml'); ?>
render('user/partials/userHeader.phtml'); ?>
render('product/partials/header.phtml'); ?>
inlineScript()->appendScript(
' $(document).ready(function(){
ImagePreview.setup();
ProductForm.setup();
ProductGallery.setup();
Opendownloadfile.setup();
});
');
diff --git a/httpdocs/theme/react/assets/css/metaheader.css b/httpdocs/theme/react/assets/css/metaheader.css
index 69c74fc19..ba9a702a5 100644
--- a/httpdocs/theme/react/assets/css/metaheader.css
+++ b/httpdocs/theme/react/assets/css/metaheader.css
@@ -1 +1 @@
-#metaheader{float:left;width:100%;height:34px;font-family:"Helvetica","Arial",sans-serif !important;font-size:14px !important;position:absolute;top:0;left:0;z-index:1001;background-color:white}#metaheader .metamenu{display:block !important}#metaheader *{outline:none !important;box-sizing:border-box}#metaheader a{cursor:pointer;text-decoration:none !important}#metaheader button{cursor:pointer}#metaheader .dropdown-menu{position:absolute;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-color:white}#metaheader .dropdown-menu.dropdown-menu-right{right:0;left:auto}#metaheader .dropdown-menu li{padding:0}#metaheader .dropdown-menu li>a:hover,#metaheader .dropdown-menu .active>a,#metaheader .dropdown-menu .active>a:hover{color:#222;text-decoration:none;background-color:#eee}#metaheader .metamenu{height:34px}#metaheader #metaheader-nav{width:100%;float:left;height:34px}#metaheader #metaheader-nav .btn-metaheader{display:block !important;padding:0 12px !important;border-radius:2px !important;color:white !important;font-size:13px !important;height:26px !important;line-height:25px !important;font-weight:bold;border:1px solid #3079ed;background:-webkit-linear-gradient(top, #4387fd, #4683ea);margin-top:-2px;margin-right:5px}#metaheader #metaheader-nav #user-menu-container{float:right;height:34px}#metaheader #metaheader-nav ul.metaheader-menu{padding:0;margin:0;list-style-type:none}#metaheader #metaheader-nav ul.metaheader-menu>li{float:left;padding:5px}#metaheader #metaheader-nav ul.metaheader-menu>li#chat-link-item .riotIcon{width:20px;height:20px;vertical-align:middle}#metaheader #metaheader-nav ul.metaheader-menu>li .switch{position:relative;display:inline-block;width:45px;height:22px}#metaheader #metaheader-nav ul.metaheader-menu>li .switch input{opacity:0;width:0;height:0}#metaheader #metaheader-nav ul.metaheader-menu>li .switch .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s}#metaheader #metaheader-nav ul.metaheader-menu>li .switch .slider:before{position:absolute;content:"";height:18px;width:18px;left:0;bottom:2px;background-color:white;-webkit-transition:.4s;transition:.4s}#metaheader #metaheader-nav ul.metaheader-menu>li .switch input:checked+.slider{background-color:#2196F3}#metaheader #metaheader-nav ul.metaheader-menu>li .switch input:focus+.slider{box-shadow:0 0 1px #2196F3}#metaheader #metaheader-nav ul.metaheader-menu>li .switch input:checked+.slider:before{-webkit-transform:translateX(26px);-ms-transform:translateX(26px);transform:translateX(26px)}#metaheader #metaheader-nav ul.metaheader-menu>li .switch .slider.round{border-radius:34px}#metaheader #metaheader-nav ul.metaheader-menu>li .switch .slider.round:before{border-radius:50%}#metaheader #metaheader-nav ul.metaheader-menu>li>a{padding:5px;color:#6a7686;border-radius:5px;height:24px;line-height:24px;cursor:pointer}#metaheader #metaheader-nav ul.metaheader-menu>li>a:active,#metaheader #metaheader-nav ul.metaheader-menu>li>a:hover{background-color:#eee;text-decoration:none}#metaheader #metaheader-nav ul.metaheader-menu>li.active>a{background-color:#eee}#metaheader #metaheader-nav ul.metaheader-menu>li.active>a img{margin-right:5px}#metaheader #metaheader-nav ul.metaheader-menu>li .dropdown-menu::before{content:"";position:absolute;right:356px;top:-8px;width:0;height:0;border-style:solid;border-width:0 8.5px 8.5px;border-color:transparent transparent #b7bcc4 transparent;border-bottom-color:#fff;border-style:dashed dashed solid;z-index:1}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu{margin-left:10px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li{padding-left:0}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li>a{margin:0 10px 0 5px;cursor:pointer}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li>a#opendesktop-logo{position:relative;padding-left:25px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li>a#opendesktop-logo img{position:absolute;top:5px;left:5px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li::after{content:"•";color:#E2E2E2}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li:last-of-type::after{content:""}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li.dropdown>ul.dropdown-menu{margin-left:0;margin-top:-9px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu{position:relative;cursor:pointer;z-index:1000}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu.open .dropdown-menu{display:block}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu{width:600px;max-width:600px;top:45px;right:-473px;min-height:296px;bottom:auto}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu::before{right:556px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container{width:33.333%;float:left;height:auto}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container a.groupname{cursor:default;height:24px;line-height:24px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container a.groupname:hover{background-color:white !important}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul{list-style-type:none;padding:0;margin:0}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li a{padding:3px 20px;font-size:12px;color:#6a7686;cursor:pointer}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li ul{margin-bottom:10px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li ul li{height:24px;line-height:24px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li ul li a{padding:0 30px;display:block;width:100%;height:24px;line-height:24px;color:#6a7686}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li ul li:hover{background-color:#eee}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu{position:relative;cursor:pointer;z-index:1000}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards.open .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu.open .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu.open .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu.open .dropdown-menu{display:block}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu{width:200px;top:45px;right:auto;min-height:104px;bottom:auto !important}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu::before{right:156px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li{padding:0}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li a,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li a,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li a,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li a{margin:0;font-size:13px;height:24px;line-height:24px;padding:0 20px;border-radius:0;display:block;color:#6a7686}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li a.admins-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li a.admins-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li a.admins-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li a.admins-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li a.cd-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li a.cd-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li a.cd-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li a.cd-menu-link-item{font-weight:bold}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li>ul,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li>ul,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li>ul,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li>ul{position:relative;float:left;top:0;left:0;padding:5px;padding-top:0;border:0;height:auto;min-height:auto;width:100%;box-shadow:none;margin:0}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li>ul::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li>ul::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li>ul::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li>ul::before{display:none}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu>a{cursor:pointer}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu{left:-6px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu{right:auto;min-height:61px;height:auto}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu{right:auto;height:auto}#metaheader #metaheader-nav ul.metaheader-menu#user-menu{margin-right:10px}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#user-login-container{padding:5px;margin-top:1px}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#user-register-container{padding:5px;margin-top:1px}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#user-register-container a{font-size:11pt}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu{position:relative;cursor:pointer;z-index:1000}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu a.about-menu-link-item .th-icon{height:18px;width:18px;display:block;background-image:url(../img/down-arrow.svg);background-size:15px;background-position:bottom right;cursor:pointer;background-repeat:no-repeat;float:right}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu.open .dropdown-menu{display:block}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu{width:200px;top:45px;right:-125px;min-height:104px;bottom:auto !important}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu::before{right:156px}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu li{padding:0}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu li a{margin:0;font-size:13px;height:24px;line-height:24px;padding:0 20px;border-radius:0;display:block;color:#6a7686}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu li>ul{position:relative;float:left;top:0;left:0;padding:5px;padding-top:0;border:0;height:auto;min-height:auto;width:100%;box-shadow:none;margin:0}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu li>ul::before{display:none}#metaheader #metaheader-nav .user-dropdown{position:relative;height:auto;z-index:1000}#metaheader #metaheader-nav .user-dropdown.open .dropdown-menu,#metaheader #metaheader-nav .user-dropdown.show .dropdown-menu{display:block;right:-6px}#metaheader #metaheader-nav .user-dropdown.open #background-overlay,#metaheader #metaheader-nav .user-dropdown.show #background-overlay{position:fixed;top:34px;left:0;width:100%;height:100%;background-color:rgba(0,0,0,0.25)}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle{padding:0;background:none !important;background-color:white;color:#6a7686;border:0;margin:0;min-height:auto}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle:active{background-color:white;box-shadow:none;outline:none}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle .glyphicon{font-size:16px;top:1px;font-style:normal;font-weight:100;margin:0 5px;margin-top:2px}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle#userLoginDropdown{width:26px;height:25px;position:relative}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle#userLoginDropdown img{position:absolute;top:0;left:0}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle#userLoginDropdown span.badge-notification{display:inline-block;font-weight:normal;white-space:nowrap;border-radius:10px;padding:2px 4px;min-width:8px;vertical-align:middle;color:#fff;font-size:.7579em;line-height:1;text-align:center;background-color:#bdbdbd;position:absolute;z-index:1;min-width:6px;top:-3px;left:-5px;background:#090}#metaheader #metaheader-nav .user-dropdown .dropdown-menu{border-radius:0;padding:0;width:320px;top:40px;bottom:auto !important;background:#fff;border:1px solid #ccc;border-color:rgba(0,0,0,0.2);color:#000;box-shadow:0 2px 10px rgba(0,0,0,0.2);box-sizing:border-box !important}#metaheader #metaheader-nav .user-dropdown .dropdown-menu::before{content:"";position:absolute;right:6px;top:-8px;width:0;height:0;border-style:solid;border-width:0 8.5px 8.5px;border-color:transparent transparent #b7bcc4 transparent;border-bottom-color:#fff;border-style:dashed dashed solid;z-index:1}#metaheader #metaheader-nav .user-dropdown .dropdown-menu li{float:left;box-sizing:border-box !important}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel{height:100%;position:fixed;top:35px;right:0;padding:0;border:0;box-shadow:none;width:432px;border-left:1px solid #ccc;margin:0;padding-top:150px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel::before{display:none}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-info-menu-item{position:absolute;top:0;left:0;height:150px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-info-menu-item #user-info-section .user-details{width:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-info-menu-item #user-info-section .user-details .buttons{padding-left:0;padding-right:0;background:white}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-info-menu-item #user-details-username h2{margin:10px 0;font-size:26px;color:#353a3d;font-weight:bold}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-info-menu-item #user-details-email{color:#687a86;font-size:18px;margin-bottom:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item{height:100%;background-color:white;padding:10px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item .autosuggest{flex:1;display:flex;flex-direction:row}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container{position:relative;padding-top:40px;height:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu{height:40px;width:100%;position:absolute;top:0;left:0;border-bottom:2px solid #ccc}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul{padding:0;list-style-type:none;height:40px;display:table;margin:0 auto}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li{float:left;height:20px;width:auto;line-height:20px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li a{display:block;padding:10px 10px;height:40px;border-bottom:2px solid transparent}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li a.active,#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li a:hover{color:#2e9fff;border-bottom-color:#2e9fff}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li a input[type="text"]{height:24px;border-radius:5px;border:1px solid #ccc;padding:0 5px;margin:7px 0;color:#888;background-image:url('http://i.stack.imgur.com/MFpLm.png');background-repeat:no-repeat;background-position:0 -30px;border:1px solid #a9e2ff;padding:3px;width:200px;font-size:1em;padding-left:20px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li a span.search-button{height:23px;width:23px;display:block;float:right;background-image:url('../img/bg_sheet.png');background-position:-670px -149px;margin:6px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li#search-form-container{position:relative}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li#search-form-container ul{position:absolute;background:white;padding:5px;border:1px solid #ccc;border-radius:0 0 5px 5px;top:32px;left:140px;width:159px;z-index:10}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li#search-form-container ul li{float:left;width:100%;cursor:pointer}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li#search-form-container ul li:hover{background-color:#ccc}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content{height:100%;padding:10px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container{max-height:600px;overflow:auto}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .userinfo{color:#687a86;padding:10px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .userinfo .header{font-size:16px;border-bottom:1px solid #F1F1F1}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .userinfo .statistic .statisticRow{display:block}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .userinfo .statistic .statisticRow span.statisticRow{font-weight:bold}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container{width:100%;float:left;padding:10px;padding-bottom:20px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header{float:left;width:100%;border-bottom:1px solid #f1f1f1}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-subtitle{float:left;width:100%;font-size:14px;margin:5px 0}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-subtitle p{float:left;color:#687a86;margin:0}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-subtitle p+p{margin-left:5px;padding-left:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-subtitle p+p::before{content:"•";color:#e2e2e2}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-subtitle p+p span{margin-left:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-title{float:left;width:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-title h2{float:left;margin:0 0 10px 0;font-size:16px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments{float:left;width:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .thread-title{float:left;width:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .thread-title h2{float:left;margin:0 0 10px 0;font-size:18px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item{position:relative;height:auto;padding-left:40px;float:left;width:100%;margin-bottom:20px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item figure{position:absolute;top:0;left:0;width:32px;height:32px;margin:0}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item figure img{width:32px;height:32px;border-radius:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header{margin-bottom:5px;width:100%;float:left}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p{margin-bottom:0;float:left}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.user span,#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.replied-user span{margin-right:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.user a,#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.replied-user a{color:#2e9fff}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.user:hover a,#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.replied-user:hover a{color:#2e87e7}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.date-created{margin-left:5px;padding-left:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.date-created::before{content:"•";color:#e2e2e2}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.date-created span{margin-left:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p+p{margin-left:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-content{width:100%;float:left}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-votes-container{width:100%;float:left}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-votes-container>div{float:left;width:auto;margin-right:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container+.user-comments-thread-container{border-bottom:3px solid #ccc}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .th-icon{height:24px;width:24px;display:block;background-image:url(../img/search.svg);background-size:20px;background-position:center 3px;cursor:pointer;background-repeat:no-repeat}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-toggle img{height:26px;width:26px;border-radius:100%;margin-top:-1px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu::before{right:9px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-menu-item{width:100%;border-bottom:1px solid #ccc}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section{height:auto;padding:20px;background:white;float:left;padding-left:116px;position:relative;width:100%;min-height:136px;box-sizing:border-box}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar{height:96px;width:96px;float:left;border-radius:100%;overflow:hidden;position:absolute;top:20px;left:20px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter{border-radius:100%;height:100%;width:100%;background-color:#c1c1c1;text-align:center;line-height:80px;font-size:50px;color:white;overflow:hidden;position:relative}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter img{height:96px;width:96px;position:absolute;top:0;left:0}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter .change-profile-pic{width:100%;position:absolute;bottom:0;font-size:9px;height:26px;left:0;background-color:rgba(0,0,0,0.4);line-height:30px;color:white;cursor:pointer;font-weight:bold}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details{width:175px;padding-left:20px;float:left;margin-top:-4px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul{padding:0;margin:0;list-style-type:none;float:left;width:100%}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li{width:100%;float:left;height:auto;line-height:15px;font-size:13px;min-height:8px;color:#6a7686}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li a{color:#36c}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li b{color:black}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li button{margin-top:16px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu#right-panel{padding-top:10px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu li.buttons{padding:10px 20px;background-color:#f5f5f5;width:100%}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu li.buttons .btn{width:auto;display:block;border-radius:2px;padding:6px 16px !important;font-size:12px;height:30px;font-weight:normal;color:#666 !important;background:#f8f8f8;border:1px solid #c6c6c6;float:left;clear:none;line-height:12px !important}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu li.buttons .btn.pull-right{float:right}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu li.buttons .btn:hover{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-color:#c6c6c6;color:#222;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));background-image:-webkit-linear-gradient(top, #fff, #f8f8f8);background-image:linear-gradient(top, #fff, #f8f8f8)}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu li.buttons .btn span{display:block;float:left;height:12px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .th-icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .th-icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .th-icon{height:24px;width:24px;display:block;background-image:url(../img/glyphicons-th.svg);background-size:32px;background-position:center -5px;cursor:pointer}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu{padding:23px 28px;right:-42px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu::before,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu::before,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu::before{right:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li{height:auto;width:86px;border:1px solid white;margin:5px 0 10px 0}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li a,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li a,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li a{display:block;width:100%;padding:0;height:auto;float:left}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li a:hover,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li a:hover,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li a:hover{background-color:white !important}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li a .icon{width:55px;height:55px;margin:5px auto;background-size:50px;background-position:center center;background-repeat:no-repeat;width:100%}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li a span,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li a span,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li a span{float:left;width:100%;text-align:center;display:block;color:rgba(0,0,0,0.87);font-size:13px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li a:active,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li a:active,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li a:active{background-color:white}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li.clear-left,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li.clear-left,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li.clear-left{clear:left}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#issues-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#issues-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#issues-link-item a .icon{background-image:url(../img/issues.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#music-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#music-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#music-link-item a .icon{background-image:url(../img/logo-music.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#docs-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#docs-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#docs-link-item a .icon{background-image:url(../img/logo-docs.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#storage-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#storage-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#storage-link-item a .icon{background-image:url(../img/logo-storage.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#contacts-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#contacts-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#contacts-link-item a .icon{background-image:url(../img/logo-contacts.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#calendar-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#calendar-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#calendar-link-item a .icon{background-image:url(../img/logo-calendar.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#talk-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#talk-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#talk-link-item a .icon{background-image:url(../img/logo-talk.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#chat-link-item,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#chat-link-item,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#chat-link-item{display:block;clear:both}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#chat-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#chat-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#chat-link-item a .icon{background-image:url(../img/logo-riot.svg);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li:hover,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li:hover,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li:hover{border:1px solid #e5e5e5}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li:hover a,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li:hover a,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li:hover a{background-color:white}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li:active a,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li:active a,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li:active a{background-color:white}#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .th-icon{height:24px;width:24px;display:block;background-image:url(../img/glyphicons-th.svg);background-size:32px;background-position:center -5px;cursor:pointer}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-toggle img{height:26px;width:26px;border-radius:100%;margin-top:-1px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu::before{right:9px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-menu-item{width:100%;border-bottom:1px solid #ccc}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu{width:100%;border-bottom:1px solid #ccc;background-color:#fff}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container{list-style:none;padding-left:20px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li{height:auto;width:86px;border:1px solid white;margin:5px 0 10px 0}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li a{display:block;width:100%;padding:0;height:auto;float:left}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li a:hover{background-color:white !important}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li a .icon{width:55px;height:55px;margin:5px auto;background-size:50px;background-position:center center;background-repeat:no-repeat;width:100%}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li a span{float:left;width:100%;text-align:center;display:block;color:rgba(0,0,0,0.87);font-size:13px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li a:active{background-color:white}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li.clear-left{clear:left}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#opendesktop-link-item a .icon{background-image:url('../img/logo-opendesktop.png')}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#discourse-link-item a .icon{background-image:url('../img/logo-discourse.png');background-size:58px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#gitlab-link-item a .icon{background-image:url(../img/logo-gitlab.png)}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#opencode-link-item a .icon{background-image:url(../img/logo-opencode.png);background-size:40px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#addproduct-link-item a .icon{background-image:url(../img/add.svg);background-size:40px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#listproduct-link-item a .icon{background-image:url(../img/products.png);background-size:40px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#plings-link-item a .icon{background-image:url(../img/pling.png);background-size:40px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#messages-link-item{position:relative}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#messages-link-item a .icon{background-image:url(../img/messages.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#messages-link-item span.badge-notification{display:inline-block;font-weight:normal;white-space:nowrap;border-radius:10px;padding:2px 4px;min-width:8px;vertical-align:middle;color:#fff;font-size:.7579em;line-height:1;text-align:center;background-color:#bdbdbd;position:absolute;z-index:1;min-width:6px;width:15px;top:10px;left:15px;background:#090}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#issues-link-item a .icon{background-image:url(../img/issues.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#music-link-item a .icon{background-image:url(../img/logo-music.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#docs-link-item a .icon{background-image:url(../img/logo-docs.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#storage-link-item a .icon{background-image:url(../img/logo-storage.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#contacts-link-item a .icon{background-image:url(../img/logo-contacts.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#calendar-link-item a .icon{background-image:url(../img/logo-calendar.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#talk-link-item a .icon{background-image:url(../img/logo-talk.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#chat-link-item{display:block;clear:both}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#chat-link-item a .icon{background-image:url(../img/logo-riot.svg);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li:hover{border:1px solid #e5e5e5}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li:hover a{background-color:white}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li:active a{background-color:white}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-settings-item{width:100%;border-bottom:1px solid #ccc;padding:10px 20px;background-color:#f5f5f5}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-settings-item div.switchContainer{display:inline-block;vertical-align:middle;margin-right:5px;margin-left:5px;padding-top:5px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-settings-item span.user-settings-item-title{display:inline-block}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section{height:auto;padding:20px;background:white;float:left;padding-left:116px;position:relative;width:100%;min-height:136px;box-sizing:border-box}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar{height:96px;width:96px;float:left;border-radius:100%;overflow:hidden;position:absolute;top:20px;left:20px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter{border-radius:100%;height:100%;width:100%;background-color:#c1c1c1;text-align:center;line-height:80px;font-size:50px;color:white;overflow:hidden;position:relative}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter img{height:96px;width:96px;position:absolute;top:0;left:0}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter .change-profile-pic{width:100%;position:absolute;bottom:0;font-size:9px;height:26px;left:0;background-color:rgba(0,0,0,0.4);line-height:30px;color:white;cursor:pointer;font-weight:bold}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details{width:175px;padding-left:20px;float:left;margin-top:-4px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul{padding:0;margin:0;list-style-type:none;float:left;width:100%}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li{width:100%;float:left;height:auto;line-height:15px;font-size:13px;min-height:8px;color:#6a7686}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li a{color:#36c}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li b{color:black}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li button{margin-top:16px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu li.buttons{padding:10px 20px;background-color:#f5f5f5;width:100%}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu li.buttons .btn{width:auto;display:block;border-radius:2px;padding:6px 16px !important;font-size:12px;height:30px;font-weight:normal;color:#666 !important;background:#f8f8f8;border:1px solid #c6c6c6;float:left;clear:none;line-height:12px !important}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu li.buttons .btn.pull-right{float:right}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu li.buttons .btn:hover{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-color:#c6c6c6;color:#222;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));background-image:-webkit-linear-gradient(top, #fff, #f8f8f8);background-image:linear-gradient(top, #fff, #f8f8f8)}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu li.buttons .btn span{display:block;float:left;height:12px}#metaheader #metaheader-nav #development-app-menu-container .user-dropdown ul.dropdown-menu{right:-40px}#metaheader #metaheader-nav #development-app-menu-container .user-dropdown ul.dropdown-menu::before{right:42px}#metaheader #metaheader-left-mobile{float:left;height:34px;width:34px}#metaheader #metaheader-left-mobile a#menu-toggle-item{cursor:pointer;height:34px;width:40px;display:block;float:left;background-image:url(../img/hamburger-menu-icon.png);background-size:20px 16px;background-repeat:no-repeat;background-position:8px 10px;position:absolute;left:0;background-color:transparent;z-index:1000}#metaheader #metaheader-left-mobile #left-side-overlay{position:fixed;width:0;height:100%;background:rgba(0,0,0,0.5);z-index:1001;overflow:hidden}#metaheader #metaheader-left-mobile #left-side-overlay a{cursor:pointer;color:#6a7686}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel{height:100%;width:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-color:white;overflow:scroll}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #left-side-panel-thumb-block{width:100%;height:50px;position:absolute;top:0;left:0}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-header{background:#efefef;padding:20px;text-align:center;margin-bottom:10px}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-header img{margin:0 auto;clear:both;display:block}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu{width:100%}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu>ul>li>a{font-weight:bold}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul{list-style-type:none;padding:0;margin:0;width:100%;float:left}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li{width:100%;float:left}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li a{width:100%;line-height:24px;display:block;padding:0 10px;text-decoration:none;color:#6a7686;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li ul{display:block;position:relative;float:left;top:0;left:0;padding:5px;padding-top:0;border:0;height:auto;min-height:auto;width:100%;box-shadow:none;margin:0;padding:0 10px;margin-bottom:15px}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li ul::before{display:none}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li ul li{margin-bottom:0}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li ul li a{font-size:14px}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li ul li a:hover{background-color:#efefef}#metaheader #metaheader-left-mobile.open #left-side-overlay{width:100%}#metaheader #metaheader-left-mobile.open #left-side-overlay #left-side-panel{width:50%}#metaheader-modal{position:fixed;background:rgba(0,0,0,0.5);z-index:10000000000;height:100%;width:100%;top:0;left:0;padding:5%}#metaheader-modal #metaheader-modal-content{width:100%;height:100%;overflow:scroll;background:white;padding:10px;box-shadow:0 1px 2px rgba(0,0,0,0.25)}.react-autosuggest_status{display:block;line-height:30px;min-height:30px}.react-autosuggest__container{position:relative}.react-autosuggest__input{width:280px;height:30px;padding:10px 25px !important;font-family:Helvetica,sans-serif;font-weight:300;font-size:16px;border:1px solid #aaa;border-radius:4px}.react-autosuggest__input--focused{outline:none}.react-autosuggest__input--open{border-bottom-left-radius:0;border-bottom-right-radius:0}.react-autosuggest__suggestions-container{display:none}.react-autosuggest__suggestions-container--open{display:block;position:absolute;top:29px;width:280px;border:1px solid #aaa;background-color:#fff;font-family:Helvetica,sans-serif;font-weight:300;font-size:16px;border-bottom-left-radius:4px;border-bottom-right-radius:4px;z-index:2}.react-autosuggest__suggestions-container--open li{display:block !important}.react-autosuggest__suggestions-list{margin:0;padding:0;list-style-type:none}.react-autosuggest__suggestion{cursor:pointer;padding:10px 20px}.react-autosuggest__suggestion--highlighted{background-color:#ddd}.react-autosuggest__inputContainer{position:relative}.react-autosuggest__inputContainer .react-autosuggest__icon{position:absolute;top:4px;left:0;width:24px;height:24px}#metaheader #metaheader-nav .metamenu-theme-dark{background-color:#3D3D3E}#metaheader #metaheader-nav .metamenu-theme-dark ul.metaheader-menu>li>a{color:#E7F3F8}#metaheader #metaheader-nav .metamenu-theme-dark ul.metaheader-menu>li>a:hover{color:#24292E}#metaheader #metaheader-nav .metamenu-theme-dark ul.metaheader-menu>li.active>a{background-color:#2185D0;color:#E7F3F8}#metaheader #metaheader-nav .metamenu-theme-dark #user-context-menu-container .user-dropdown .th-icon{background-image:url(../img/glyphicons-th-light.svg)}#metaheader #metaheader-nav .metamenu-theme-dark #development-app-menu-container .user-dropdown .th-icon{background-image:url(../img/glyphicons-th-light.svg)}#metaheader #metaheader-nav .metamenu-theme-dark #user-search-menu-container .user-dropdown .th-icon{background-image:url(../img/search-light.svg)}
\ No newline at end of file
+#metaheader{float:left;width:100%;height:34px;font-family:"Helvetica","Arial",sans-serif !important;font-size:14px !important;position:absolute;top:0;left:0;z-index:1001;background-color:white}#metaheader .metamenu{display:block !important}#metaheader *{outline:none !important;box-sizing:border-box}#metaheader a{cursor:pointer;text-decoration:none !important}#metaheader button{cursor:pointer}#metaheader .dropdown-menu{position:absolute;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-color:white}#metaheader .dropdown-menu.dropdown-menu-right{right:0;left:auto}#metaheader .dropdown-menu li{padding:0}#metaheader .dropdown-menu li>a:hover,#metaheader .dropdown-menu .active>a,#metaheader .dropdown-menu .active>a:hover{color:#222;text-decoration:none;background-color:#eee}#metaheader .metamenu{height:34px}#metaheader #metaheader-nav{width:100%;float:left;height:34px}#metaheader #metaheader-nav .btn-metaheader{display:block !important;padding:0 12px !important;border-radius:2px !important;color:white !important;font-size:13px !important;height:26px !important;line-height:25px !important;font-weight:bold;border:1px solid #3079ed;background:-webkit-linear-gradient(top, #4387fd, #4683ea);margin-top:-2px;margin-right:5px}#metaheader #metaheader-nav #user-menu-container{float:right;height:34px}#metaheader #metaheader-nav ul.metaheader-menu{padding:0;margin:0;list-style-type:none}#metaheader #metaheader-nav ul.metaheader-menu>li{float:left;padding:5px}#metaheader #metaheader-nav ul.metaheader-menu>li#chat-link-item .riotIcon{width:20px;height:20px;vertical-align:middle}#metaheader #metaheader-nav ul.metaheader-menu>li .switch{position:relative;display:inline-block;width:45px;height:22px}#metaheader #metaheader-nav ul.metaheader-menu>li .switch input{opacity:0;width:0;height:0}#metaheader #metaheader-nav ul.metaheader-menu>li .switch .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s}#metaheader #metaheader-nav ul.metaheader-menu>li .switch .slider:before{position:absolute;content:"";height:18px;width:18px;left:0;bottom:2px;background-color:white;-webkit-transition:.4s;transition:.4s}#metaheader #metaheader-nav ul.metaheader-menu>li .switch input:checked+.slider{background-color:#2196F3}#metaheader #metaheader-nav ul.metaheader-menu>li .switch input:focus+.slider{box-shadow:0 0 1px #2196F3}#metaheader #metaheader-nav ul.metaheader-menu>li .switch input:checked+.slider:before{-webkit-transform:translateX(26px);-ms-transform:translateX(26px);transform:translateX(26px)}#metaheader #metaheader-nav ul.metaheader-menu>li .switch .slider.round{border-radius:34px}#metaheader #metaheader-nav ul.metaheader-menu>li .switch .slider.round:before{border-radius:50%}#metaheader #metaheader-nav ul.metaheader-menu>li>a{padding:5px;color:#6a7686;border-radius:5px;height:24px;line-height:24px;cursor:pointer}#metaheader #metaheader-nav ul.metaheader-menu>li>a:active,#metaheader #metaheader-nav ul.metaheader-menu>li>a:hover{background-color:#eee;text-decoration:none}#metaheader #metaheader-nav ul.metaheader-menu>li.active>a{background-color:#eee}#metaheader #metaheader-nav ul.metaheader-menu>li.active>a img{margin-right:5px}#metaheader #metaheader-nav ul.metaheader-menu>li .dropdown-menu::before{content:"";position:absolute;right:356px;top:-8px;width:0;height:0;border-style:solid;border-width:0 8.5px 8.5px;border-color:transparent transparent #b7bcc4 transparent;border-bottom-color:#fff;border-style:dashed dashed solid;z-index:1}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu{margin-left:10px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li{padding-left:0}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li>a{margin:0 10px 0 5px;cursor:pointer}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li>a#opendesktop-logo{position:relative;padding-left:25px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li>a#opendesktop-logo img{position:absolute;top:5px;left:5px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li::after{content:"•";color:#E2E2E2}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li:last-of-type::after{content:""}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li.dropdown>ul.dropdown-menu{margin-left:0;margin-top:-9px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu{position:relative;cursor:pointer;z-index:1000}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu.open .dropdown-menu{display:block}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu{width:600px;max-width:600px;top:45px;right:-473px;min-height:296px;bottom:auto}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu::before{right:556px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container{width:33.333%;float:left;height:auto}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container a.groupname{cursor:default;height:24px;line-height:24px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container a.groupname:hover{background-color:white !important}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul{list-style-type:none;padding:0;margin:0}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li a{padding:3px 20px;font-size:12px;color:#6a7686;cursor:pointer}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li ul{margin-bottom:10px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li ul li{height:24px;line-height:24px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li ul li a{padding:0 30px;display:block;width:100%;height:24px;line-height:24px;color:#6a7686}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li ul li:hover{background-color:#eee}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu{position:relative;cursor:pointer;z-index:1000}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards.open .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu.open .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu.open .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu.open .dropdown-menu{display:block}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu{width:200px;top:45px;right:auto;min-height:104px;bottom:auto !important}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu::before{right:156px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li{padding:0}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li a,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li a,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li a,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li a{margin:0;font-size:13px;height:24px;line-height:24px;padding:0 20px;border-radius:0;display:block;color:#6a7686}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li a.admins-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li a.admins-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li a.admins-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li a.admins-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li a.cd-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li a.cd-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li a.cd-menu-link-item,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li a.cd-menu-link-item{font-weight:bold}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li>ul,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li>ul,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li>ul,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li>ul{position:relative;float:left;top:0;left:0;padding:5px;padding-top:0;border:0;height:auto;min-height:auto;width:100%;box-shadow:none;margin:0}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu li>ul::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu li>ul::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu li>ul::before,#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu li>ul::before{display:none}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu>a{cursor:pointer}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#more-dropdown-menu .dropdown-menu{left:-6px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#admins-dropdown-menu .dropdown-menu{right:auto;min-height:61px;height:auto}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#cd-dropdown-menu .dropdown-menu{right:auto;height:auto}#metaheader #metaheader-nav ul.metaheader-menu#user-menu{margin-right:10px}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#user-login-container{padding:5px;margin-top:1px}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#user-register-container{padding:5px;margin-top:1px}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#user-register-container a{font-size:11pt}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu{position:relative;cursor:pointer;z-index:1000}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu a.about-menu-link-item .th-icon{height:18px;width:18px;display:block;background-image:url(../img/down-arrow.svg);background-size:15px;background-position:bottom right;cursor:pointer;background-repeat:no-repeat;float:right}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu.open .dropdown-menu{display:block}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu{width:200px;top:45px;right:-125px;min-height:104px;bottom:auto !important}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu::before{right:156px}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu li{padding:0}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu li a{margin:0;font-size:13px;height:24px;line-height:24px;padding:0 20px;border-radius:0;display:block;color:#6a7686}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu li>ul{position:relative;float:left;top:0;left:0;padding:5px;padding-top:0;border:0;height:auto;min-height:auto;width:100%;box-shadow:none;margin:0}#metaheader #metaheader-nav ul.metaheader-menu#user-menu>li#about-dropdown-menu .dropdown-menu li>ul::before{display:none}#metaheader #metaheader-nav .user-dropdown{position:relative;height:auto;z-index:1000}#metaheader #metaheader-nav .user-dropdown.open .dropdown-menu,#metaheader #metaheader-nav .user-dropdown.show .dropdown-menu{display:block;right:-6px}#metaheader #metaheader-nav .user-dropdown.open #background-overlay,#metaheader #metaheader-nav .user-dropdown.show #background-overlay{position:fixed;top:34px;left:0;width:100%;height:100%;background-color:rgba(0,0,0,0.25)}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle{padding:0;background:none !important;background-color:white;color:#6a7686;border:0;margin:0;min-height:auto}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle:active{background-color:white;box-shadow:none;outline:none}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle .glyphicon{font-size:16px;top:1px;font-style:normal;font-weight:100;margin:0 5px;margin-top:2px}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle#userLoginDropdown{width:26px;height:25px;position:relative}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle#userLoginDropdown img{position:absolute;top:0;left:0}#metaheader #metaheader-nav .user-dropdown .dropdown-toggle#userLoginDropdown span.badge-notification{display:inline-block;font-weight:normal;white-space:nowrap;border-radius:10px;padding:2px 4px;min-width:8px;vertical-align:middle;color:#fff;font-size:.7579em;line-height:1;text-align:center;background-color:#bdbdbd;position:absolute;z-index:1;min-width:6px;top:-3px;left:-5px;background:#090}#metaheader #metaheader-nav .user-dropdown .dropdown-menu{border-radius:0;padding:0;width:320px;top:40px;bottom:auto !important;background:#fff;border:1px solid #ccc;border-color:rgba(0,0,0,0.2);color:#000;box-shadow:0 2px 10px rgba(0,0,0,0.2);box-sizing:border-box !important}#metaheader #metaheader-nav .user-dropdown .dropdown-menu::before{content:"";position:absolute;right:6px;top:-8px;width:0;height:0;border-style:solid;border-width:0 8.5px 8.5px;border-color:transparent transparent #b7bcc4 transparent;border-bottom-color:#fff;border-style:dashed dashed solid;z-index:1}#metaheader #metaheader-nav .user-dropdown .dropdown-menu li{float:left;box-sizing:border-box !important}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel{height:100%;position:fixed;top:35px;right:0;padding:0;border:0;box-shadow:none;width:432px;border-left:1px solid #ccc;margin:0;padding-top:150px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel::before{display:none}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-info-menu-item{position:absolute;top:0;left:0;height:150px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-info-menu-item #user-info-section .user-details{width:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-info-menu-item #user-info-section .user-details .buttons{padding-left:0;padding-right:0;background:white}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-info-menu-item #user-details-username h2{margin:10px 0;font-size:26px;color:#353a3d;font-weight:bold}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-info-menu-item #user-details-email{color:#687a86;font-size:18px;margin-bottom:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item{height:100%;background-color:white;padding:10px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item .autosuggest{flex:1;display:flex;flex-direction:row}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container{position:relative;padding-top:40px;height:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu{height:40px;width:100%;position:absolute;top:0;left:0;border-bottom:2px solid #ccc}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul{padding:0;list-style-type:none;height:40px;display:table;margin:0 auto}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li{float:left;height:20px;width:auto;line-height:20px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li a{display:block;padding:10px 10px;height:40px;border-bottom:2px solid transparent}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li a.active,#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li a:hover{color:#2e9fff;border-bottom-color:#2e9fff}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li a input[type="text"]{height:24px;border-radius:5px;border:1px solid #ccc;padding:0 5px;margin:7px 0;color:#888;background-image:url('http://i.stack.imgur.com/MFpLm.png');background-repeat:no-repeat;background-position:0 -30px;border:1px solid #a9e2ff;padding:3px;width:200px;font-size:1em;padding-left:20px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li a span.search-button{height:23px;width:23px;display:block;float:right;background-image:url('../img/bg_sheet.png');background-position:-670px -149px;margin:6px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li#search-form-container{position:relative}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li#search-form-container ul{position:absolute;background:white;padding:5px;border:1px solid #ccc;border-radius:0 0 5px 5px;top:32px;left:140px;width:159px;z-index:10}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li#search-form-container ul li{float:left;width:100%;cursor:pointer}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-menu ul li#search-form-container ul li:hover{background-color:#ccc}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content{height:100%;padding:10px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container{max-height:600px;overflow:auto}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .userinfo{color:#687a86;padding:10px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .userinfo .header{font-size:16px;border-bottom:1px solid #F1F1F1}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .userinfo .statistic .statisticRow{display:block}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .userinfo .statistic .statisticRow span.statisticRow{font-weight:bold}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container{width:100%;float:left;padding:10px;padding-bottom:20px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header{float:left;width:100%;border-bottom:1px solid #f1f1f1}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-subtitle{float:left;width:100%;font-size:14px;margin:5px 0}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-subtitle p{float:left;color:#687a86;margin:0}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-subtitle p+p{margin-left:5px;padding-left:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-subtitle p+p::before{content:"•";color:#e2e2e2}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-subtitle p+p span{margin-left:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-title{float:left;width:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-header .thread-title h2{float:left;margin:0 0 10px 0;font-size:16px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments{float:left;width:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .thread-title{float:left;width:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .thread-title h2{float:left;margin:0 0 10px 0;font-size:18px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item{position:relative;height:auto;padding-left:40px;float:left;width:100%;margin-bottom:20px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item figure{position:absolute;top:0;left:0;width:32px;height:32px;margin:0}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item figure img{width:32px;height:32px;border-radius:100%}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header{margin-bottom:5px;width:100%;float:left}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p{margin-bottom:0;float:left}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.user span,#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.replied-user span{margin-right:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.user a,#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.replied-user a{color:#2e9fff}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.user:hover a,#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.replied-user:hover a{color:#2e87e7}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.date-created{margin-left:5px;padding-left:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.date-created::before{content:"•";color:#e2e2e2}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p.date-created span{margin-left:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-header p+p{margin-left:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-content{width:100%;float:left}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-votes-container{width:100%;float:left}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container .thread-comments .comment-item .comment-item-votes-container>div{float:left;width:auto;margin-right:5px}#metaheader #metaheader-nav .user-dropdown .dropdown-menu#right-panel #user-tabs-menu-item #user-tabs-container #user-tabs-content .user-comments-tab-container .user-comments-thread-container+.user-comments-thread-container{border-bottom:3px solid #ccc}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .th-icon{height:24px;width:24px;display:block;background-image:url(../img/search.svg);background-size:20px;background-position:center 3px;cursor:pointer;background-repeat:no-repeat}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-toggle img{height:26px;width:26px;border-radius:100%;margin-top:-1px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu::before{right:9px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-menu-item{width:100%;border-bottom:1px solid #ccc}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section{height:auto;padding:20px;background:white;float:left;padding-left:116px;position:relative;width:100%;min-height:136px;box-sizing:border-box}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar{height:96px;width:96px;float:left;border-radius:100%;overflow:hidden;position:absolute;top:20px;left:20px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter{border-radius:100%;height:100%;width:100%;background-color:#c1c1c1;text-align:center;line-height:80px;font-size:50px;color:white;overflow:hidden;position:relative}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter img{height:96px;width:96px;position:absolute;top:0;left:0}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter .change-profile-pic{width:100%;position:absolute;bottom:0;font-size:9px;height:26px;left:0;background-color:rgba(0,0,0,0.4);line-height:30px;color:white;cursor:pointer;font-weight:bold}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details{width:175px;padding-left:20px;float:left;margin-top:-4px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul{padding:0;margin:0;list-style-type:none;float:left;width:100%}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li{width:100%;float:left;height:auto;line-height:15px;font-size:13px;min-height:8px;color:#6a7686}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li a{color:#36c}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li b{color:black}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li button{margin-top:16px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu#right-panel{padding-top:10px}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu li.buttons{padding:10px 20px;background-color:#f5f5f5;width:100%}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu li.buttons .btn{width:auto;display:block;border-radius:2px;padding:6px 16px !important;font-size:12px;height:30px;font-weight:normal;color:#666 !important;background:#f8f8f8;border:1px solid #c6c6c6;float:left;clear:none;line-height:12px !important}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu li.buttons .btn.pull-right{float:right}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu li.buttons .btn:hover{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-color:#c6c6c6;color:#222;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));background-image:-webkit-linear-gradient(top, #fff, #f8f8f8);background-image:linear-gradient(top, #fff, #f8f8f8)}#metaheader #metaheader-nav #user-search-menu-container .user-dropdown .dropdown-menu li.buttons .btn span{display:block;float:left;height:12px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .th-icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .th-icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .th-icon{height:24px;width:24px;display:block;background-image:url(../img/glyphicons-th.svg);background-size:32px;background-position:center -5px;cursor:pointer}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu{padding:23px 28px;right:-42px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu::before,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu::before,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu::before{right:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li{height:auto;width:86px;border:1px solid white;margin:5px 0 10px 0}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li a,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li a,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li a{display:block;width:100%;padding:0;height:auto;float:left}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li a:hover,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li a:hover,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li a:hover{background-color:white !important}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li a .icon{width:55px;height:55px;margin:5px auto;background-size:50px;background-position:center center;background-repeat:no-repeat;width:100%}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li a span,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li a span,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li a span{float:left;width:100%;text-align:center;display:block;color:rgba(0,0,0,0.87);font-size:13px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li a:active,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li a:active,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li a:active{background-color:white}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li.clear-left,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li.clear-left,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li.clear-left{clear:left}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#opendesktop-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#opendesktop-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#opendesktop-link-item a .icon{background-image:url('../img/logo-opendesktop.png')}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#discourse-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#discourse-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#discourse-link-item a .icon{background-image:url('../img/logo-discourse.png');background-size:58px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#gitlab-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#gitlab-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#gitlab-link-item a .icon{background-image:url(../img/logo-gitlab.png)}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#opencode-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#opencode-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#opencode-link-item a .icon{background-image:url(../img/logo-opencode.png);background-size:40px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#addproduct-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#addproduct-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#addproduct-link-item a .icon{background-image:url(../img/add.svg);background-size:40px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#listproduct-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#listproduct-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#listproduct-link-item a .icon{background-image:url(../img/products.png);background-size:40px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#plings-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#plings-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#plings-link-item a .icon{background-image:url(../img/pling.png);background-size:40px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#messages-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#messages-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#messages-link-item a .icon{background-image:url(../img/messages.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#messages-link-item span.badge-notification,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#messages-link-item span.badge-notification,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#messages-link-item span.badge-notification{display:inline-block;font-weight:normal;white-space:nowrap;border-radius:10px;padding:2px 4px;min-width:8px;vertical-align:middle;color:#fff;font-size:.7579em;line-height:1;text-align:center;background-color:#bdbdbd;position:absolute;z-index:1;min-width:6px;top:-3px;left:-5px;background:#090}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#issues-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#issues-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#issues-link-item a .icon{background-image:url(../img/issues.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#music-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#music-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#music-link-item a .icon{background-image:url(../img/logo-music.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#docs-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#docs-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#docs-link-item a .icon{background-image:url(../img/logo-docs.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#storage-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#storage-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#storage-link-item a .icon{background-image:url(../img/logo-storage.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#contacts-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#contacts-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#contacts-link-item a .icon{background-image:url(../img/logo-contacts.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#calendar-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#calendar-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#calendar-link-item a .icon{background-image:url(../img/logo-calendar.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#talk-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#talk-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#talk-link-item a .icon{background-image:url(../img/logo-talk.png);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#chat-link-item,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#chat-link-item,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#chat-link-item{display:block;clear:both}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li#chat-link-item a .icon,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li#chat-link-item a .icon,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li#chat-link-item a .icon{background-image:url(../img/logo-riot.svg);background-size:45px}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li:hover,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li:hover,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li:hover{border:1px solid #e5e5e5}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li:hover a,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li:hover a,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li:hover a{background-color:white}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li:active a,#metaheader #metaheader-nav #about-menu-container .user-dropdown .dropdown-menu li:active a,#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .dropdown-menu li:active a{background-color:white}#metaheader #metaheader-nav #development-app-menu-container .user-dropdown .th-icon{height:24px;width:24px;display:block;background-image:url(../img/glyphicons-th.svg);background-size:32px;background-position:center -5px;cursor:pointer}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-toggle img{height:26px;width:26px;border-radius:100%;margin-top:-1px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu::before{right:9px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-menu-item{width:100%;border-bottom:1px solid #ccc}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu{width:100%;border-bottom:1px solid #ccc;background-color:#fff}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container{list-style:none;padding-left:20px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li{height:auto;width:86px;border:1px solid white;margin:5px 0 10px 0}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li a{display:block;width:100%;padding:0;height:auto;float:left}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li a:hover{background-color:white !important}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li a .icon{width:55px;height:55px;margin:5px auto;background-size:50px;background-position:center center;background-repeat:no-repeat;width:100%}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li a span{float:left;width:100%;text-align:center;display:block;color:rgba(0,0,0,0.87);font-size:13px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li a:active{background-color:white}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li.clear-left{clear:left}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#opendesktop-link-item a .icon{background-image:url('../img/logo-opendesktop.png')}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#discourse-link-item a .icon{background-image:url('../img/logo-discourse.png');background-size:58px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#gitlab-link-item a .icon{background-image:url(../img/logo-gitlab.png)}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#opencode-link-item a .icon{background-image:url(../img/logo-opencode.png);background-size:40px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#addproduct-link-item a .icon{background-image:url(../img/add.svg);background-size:40px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#listproduct-link-item a .icon{background-image:url(../img/products.png);background-size:40px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#plings-link-item a .icon{background-image:url(../img/pling.png);background-size:40px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#messages-link-item{position:relative}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#messages-link-item a .icon{background-image:url(../img/messages.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#messages-link-item span.badge-notification{display:inline-block;font-weight:normal;white-space:nowrap;border-radius:10px;padding:2px 4px;min-width:8px;vertical-align:middle;color:#fff;font-size:.7579em;line-height:1;text-align:center;background-color:#bdbdbd;position:absolute;z-index:1;min-width:6px;width:15px;top:10px;left:15px;background:#090}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#issues-link-item a .icon{background-image:url(../img/issues.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#music-link-item a .icon{background-image:url(../img/logo-music.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#docs-link-item a .icon{background-image:url(../img/logo-docs.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#storage-link-item a .icon{background-image:url(../img/logo-storage.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#contacts-link-item a .icon{background-image:url(../img/logo-contacts.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#calendar-link-item a .icon{background-image:url(../img/logo-calendar.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#talk-link-item a .icon{background-image:url(../img/logo-talk.png);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#chat-link-item{display:block;clear:both}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li#chat-link-item a .icon{background-image:url(../img/logo-riot.svg);background-size:45px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li:hover{border:1px solid #e5e5e5}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li:hover a{background-color:white}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-context-menu ul.user-context-menu-container li:active a{background-color:white}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-settings-item{width:100%;border-bottom:1px solid #ccc;padding:10px 20px;background-color:#f5f5f5}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-settings-item div.switchContainer{display:inline-block;vertical-align:middle;margin-right:5px;margin-left:5px;padding-top:5px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu .user-settings-item span.user-settings-item-title{display:inline-block}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section{height:auto;padding:20px;background:white;float:left;padding-left:116px;position:relative;width:100%;min-height:136px;box-sizing:border-box}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar{height:96px;width:96px;float:left;border-radius:100%;overflow:hidden;position:absolute;top:20px;left:20px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter{border-radius:100%;height:100%;width:100%;background-color:#c1c1c1;text-align:center;line-height:80px;font-size:50px;color:white;overflow:hidden;position:relative}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter img{height:96px;width:96px;position:absolute;top:0;left:0}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter .change-profile-pic{width:100%;position:absolute;bottom:0;font-size:9px;height:26px;left:0;background-color:rgba(0,0,0,0.4);line-height:30px;color:white;cursor:pointer;font-weight:bold}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details{width:175px;padding-left:20px;float:left;margin-top:-4px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul{padding:0;margin:0;list-style-type:none;float:left;width:100%}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li{width:100%;float:left;height:auto;line-height:15px;font-size:13px;min-height:8px;color:#6a7686}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li a{color:#36c}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li b{color:black}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li button{margin-top:16px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu li.buttons{padding:10px 20px;background-color:#f5f5f5;width:100%}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu li.buttons .btn{width:auto;display:block;border-radius:2px;padding:6px 16px !important;font-size:12px;height:30px;font-weight:normal;color:#666 !important;background:#f8f8f8;border:1px solid #c6c6c6;float:left;clear:none;line-height:12px !important}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu li.buttons .btn.pull-right{float:right}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu li.buttons .btn:hover{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-color:#c6c6c6;color:#222;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));background-image:-webkit-linear-gradient(top, #fff, #f8f8f8);background-image:linear-gradient(top, #fff, #f8f8f8)}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu li.buttons .btn span{display:block;float:left;height:12px}#metaheader #metaheader-nav #development-app-menu-container .user-dropdown ul.dropdown-menu{right:-40px}#metaheader #metaheader-nav #development-app-menu-container .user-dropdown ul.dropdown-menu::before{right:42px}#metaheader #metaheader-left-mobile{float:left;height:34px;width:34px}#metaheader #metaheader-left-mobile a#menu-toggle-item{cursor:pointer;height:34px;width:40px;display:block;float:left;background-image:url(../img/hamburger-menu-icon.png);background-size:20px 16px;background-repeat:no-repeat;background-position:8px 10px;position:absolute;left:0;background-color:transparent;z-index:1000}#metaheader #metaheader-left-mobile #left-side-overlay{position:fixed;width:0;height:100%;background:rgba(0,0,0,0.5);z-index:1001;overflow:hidden}#metaheader #metaheader-left-mobile #left-side-overlay a{cursor:pointer;color:#6a7686}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel{height:100%;width:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-color:white;overflow:scroll}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #left-side-panel-thumb-block{width:100%;height:50px;position:absolute;top:0;left:0}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-header{background:#efefef;padding:20px;text-align:center;margin-bottom:10px}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-header img{margin:0 auto;clear:both;display:block}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu{width:100%}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu>ul>li>a{font-weight:bold}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul{list-style-type:none;padding:0;margin:0;width:100%;float:left}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li{width:100%;float:left}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li a{width:100%;line-height:24px;display:block;padding:0 10px;text-decoration:none;color:#6a7686;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li ul{display:block;position:relative;float:left;top:0;left:0;padding:5px;padding-top:0;border:0;height:auto;min-height:auto;width:100%;box-shadow:none;margin:0;padding:0 10px;margin-bottom:15px}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li ul::before{display:none}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li ul li{margin-bottom:0}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li ul li a{font-size:14px}#metaheader #metaheader-left-mobile #left-side-overlay #left-side-panel #panel-menu ul li ul li a:hover{background-color:#efefef}#metaheader #metaheader-left-mobile.open #left-side-overlay{width:100%}#metaheader #metaheader-left-mobile.open #left-side-overlay #left-side-panel{width:50%}#metaheader-modal{position:fixed;background:rgba(0,0,0,0.5);z-index:10000000000;height:100%;width:100%;top:0;left:0;padding:5%}#metaheader-modal #metaheader-modal-content{width:100%;height:100%;overflow:scroll;background:white;padding:10px;box-shadow:0 1px 2px rgba(0,0,0,0.25)}.react-autosuggest_status{display:block;line-height:30px;min-height:30px}.react-autosuggest__container{position:relative}.react-autosuggest__input{width:280px;height:30px;padding:10px 25px !important;font-family:Helvetica,sans-serif;font-weight:300;font-size:16px;border:1px solid #aaa;border-radius:4px}.react-autosuggest__input--focused{outline:none}.react-autosuggest__input--open{border-bottom-left-radius:0;border-bottom-right-radius:0}.react-autosuggest__suggestions-container{display:none}.react-autosuggest__suggestions-container--open{display:block;position:absolute;top:29px;width:280px;border:1px solid #aaa;background-color:#fff;font-family:Helvetica,sans-serif;font-weight:300;font-size:16px;border-bottom-left-radius:4px;border-bottom-right-radius:4px;z-index:2}.react-autosuggest__suggestions-container--open li{display:block !important}.react-autosuggest__suggestions-list{margin:0;padding:0;list-style-type:none}.react-autosuggest__suggestion{cursor:pointer;padding:10px 20px}.react-autosuggest__suggestion--highlighted{background-color:#ddd}.react-autosuggest__inputContainer{position:relative}.react-autosuggest__inputContainer .react-autosuggest__icon{position:absolute;top:4px;left:0;width:24px;height:24px}#metaheader #metaheader-nav .metamenu-theme-dark{background-color:#3D3D3E}#metaheader #metaheader-nav .metamenu-theme-dark ul.metaheader-menu>li>a{color:#E7F3F8}#metaheader #metaheader-nav .metamenu-theme-dark ul.metaheader-menu>li>a:hover{color:#24292E}#metaheader #metaheader-nav .metamenu-theme-dark ul.metaheader-menu>li.active>a{background-color:#2185D0;color:#E7F3F8}#metaheader #metaheader-nav .metamenu-theme-dark #user-context-menu-container .user-dropdown .th-icon{background-image:url(../img/glyphicons-th-light.svg)}#metaheader #metaheader-nav .metamenu-theme-dark #development-app-menu-container .user-dropdown .th-icon{background-image:url(../img/glyphicons-th-light.svg)}#metaheader #metaheader-nav .metamenu-theme-dark #user-search-menu-container .user-dropdown .th-icon{background-image:url(../img/search-light.svg)}
\ No newline at end of file
diff --git a/httpdocs/theme/react/assets/less/metaheader.less b/httpdocs/theme/react/assets/less/metaheader.less
index d26e2dff1..96a602ee9 100644
--- a/httpdocs/theme/react/assets/less/metaheader.less
+++ b/httpdocs/theme/react/assets/less/metaheader.less
@@ -1,2129 +1,2129 @@
// out: ../css/metaheader.css, sourcemap: true, compress: true
@import "elements.less";
#metaheader {
float: left;
width: 100%;
height: 34px;
font-family: "Helvetica","Arial",sans-serif !important;
font-size: 14px !important;
position: absolute;
top: 0;
left: 0;
z-index: 1001;
background-color: white;
.metamenu {
display: block !important;
}
* {
outline: none !important;
box-sizing: border-box;
}
a {
cursor: pointer;
text-decoration: none !important;
}
button{
cursor: pointer;
}
.dropdown-menu {
position: absolute;
z-index: 1000;
display: none;
float: left;
min-width: 160px;
padding: 5px 0;
margin: 2px 0 0;
font-size: 14px;
text-align: left;
list-style: none;
background-color: #fff;
-webkit-background-clip: padding-box;
background-clip: padding-box;
border: 1px solid #ccc;
border: 1px solid rgba(0,0,0,.15);
border-radius: 4px;
-webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
box-shadow: 0 6px 12px rgba(0,0,0,.175);
background-color: white;
&.dropdown-menu-right {
right: 0;
left: auto;
}
li {
padding: 0;
}
li>a:hover,
.active>a,
.active>a:hover {
color: #222;
text-decoration: none;
background-color: #eee;
}
}
.metamenu {
height: 34px;
}
#metaheader-nav {
width: 100%;
float: left;
height: 34px;
.btn-metaheader {
display: block !important;
padding: 0 12px !important;
border-radius: 2px !important;
color: white !important;
font-size: 13px !important;
height: 26px !important;
line-height: 25px !important;
font-weight: bold;
border: 1px solid #3079ed;
background: -webkit-linear-gradient(top, #4387fd, #4683ea);
margin-top: -2px;
margin-right: 5px;
}
#user-menu-container {
float: right;
height: 34px;
}
ul.metaheader-menu {
padding: 0;
margin: 0;
list-style-type: none;
> li {
float: left;
padding: 5px;
/*height: 24px;*/
chat-link-item
{
.riotIcon{
width: 20px;
height: 20px;
vertical-align: middle;
}
}
.switch {
position: relative;
display: inline-block;
width: 45px;
height: 22px;
input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: 18px;
width: 18px;
left: 0px;
bottom: 2px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .slider {
background-color: #2196F3;
}
input:focus + .slider {
box-shadow: 0 0 1px #2196F3;
}
input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
}
> a {
color: #6a7686;
border-radius: 5px;
padding: 5px;
color: #6a7686;
border-radius: 5px;
height: 24px;
line-height: 24px;
cursor: pointer;
&:active,
&:hover {
background-color: #eee;
text-decoration: none;
}
}
&.active {
> a {
background-color: #eee;
img {
margin-right: 5px;
}
}
}
.dropdown-menu {
&::before {
content: "";
position: absolute;
right: 356px;
top: -8px;
width: 0;
height: 0;
border-style: solid;
border-width: 0 8.5px 8.5px;
border-color: transparent transparent #b7bcc4 transparent;
border-bottom-color: #fff;
border-style: dashed dashed solid;
z-index: 1;
}
}
}
domains-menu {
margin-left: 10px;
> li {
padding-left: 0;
> a {
margin: 0 10px 0 5px;
cursor: pointer;
opendesktop-logo {
position: relative;
padding-left: 25px;
img {
position: absolute;
top: 5px;
left: 5px;
}
}
}
&::after {
content: "•";
color: #E2E2E2;
}
&:last-of-type {
&::after {
content: "";
}
}
&.dropdown {
> ul.dropdown-menu {
margin-left: 0;
margin-top: -9px;
}
}
domains-dropdown-menu {
position: relative;
cursor: pointer;
z-index: 1000;
&.open {
.dropdown-menu {
display: block;
}
}
.dropdown-menu {
width: 600px;
max-width: 600px;
top: 45px;
right: -473px;
min-height: 296px;
bottom: auto;
&::before {
right: 556px;
}
.submenu-container {
width:33.333%;
float: left;
height: auto;
a.groupname {
cursor: default;
height: 24px;
line-height: 24px;
&:hover {
background-color: white !important;
}
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
li {
a {
padding: 3px 20px;
font-size: 12px;
color:#6a7686;
cursor: pointer;
}
ul {
margin-bottom: 10px;
li {
height: 24px;
line-height: 24px;
a {
padding: 0px 30px;
display: block;
width: 100%;
height: 24px;
line-height: 24px;
color:#6a7686;
}
&:hover {
background-color: #eee;
}
}
}
}
}
}
}
}
discussion-boards, admins-dropdown-menu, more-dropdown-menu, cd-dropdown-menu {
position: relative;
cursor: pointer;
z-index: 1000;
&.open {
.dropdown-menu {
display: block;
}
}
.dropdown-menu {
width: 200px;
top: 45px;
right: auto;
min-height: 104px;
bottom: auto !important;
&::before {
right: 156px;
}
li {
padding: 0;
a {
margin: 0;
font-size: 13px;
height: 24px;
line-height: 24px;
padding: 0 20px;
border-radius: 0;
display: block;
color: #6a7686;
&.admins-menu-link-item,
&.cd-menu-link-item {
font-weight: bold;
}
}
> ul {
position: relative;
float: left;
top: 0;
left: 0;
padding: 5px;
padding-top: 0;
border: 0;
height: auto;
min-height: auto;
width: 100%;
box-shadow: none;
margin: 0;
&::before {
display: none;
}
}
}
}
}
more-dropdown-menu {
> a {
cursor: pointer;
}
.dropdown-menu {
left: -6px;
}
}
admins-dropdown-menu {
.dropdown-menu {
right: auto;
min-height: 61px;
height: auto;
}
}
cd-dropdown-menu {
.dropdown-menu {
right: auto;
height: auto;
}
}
}
}
user-menu {
margin-right: 10px;
> li {
user-login-container {
padding: 5px;
margin-top: 1px;
}
user-register-container {
padding: 5px;
margin-top: 1px;
a{
font-size: 11pt;
}
}
about-dropdown-menu{
position: relative;
cursor: pointer;
z-index: 1000;
a.about-menu-link-item
{
.th-icon {
height: 18px;
width: 18px;
display: block;
background-image: url(../img/down-arrow.svg);
background-size: 15px;
background-position: bottom right;
cursor: pointer;
background-repeat: no-repeat;
float: right;
}
}
&.open {
.dropdown-menu {
display: block;
}
}
.dropdown-menu {
width: 200px;
top: 45px;
/*right: auto;*/
right: -125px;
min-height: 104px;
bottom: auto !important;
&::before {
/*right: 156px;*/
/*right: 100px;*/
right: 156px;
}
li {
padding: 0;
a {
margin: 0;
font-size: 13px;
height: 24px;
line-height: 24px;
padding: 0 20px;
border-radius: 0;
display: block;
color: #6a7686;
}
> ul {
position: relative;
float: left;
top: 0;
left: 0;
padding: 5px;
padding-top: 0;
border: 0;
height: auto;
min-height: auto;
width: 100%;
box-shadow: none;
margin: 0;
&::before {
display: none;
}
}
}
}
}
}
}
}
.user-dropdown {
position: relative;
height: auto;
z-index: 1000;
&.open,
&.show {
.dropdown-menu {
display: block;
right: -6px;
}
#background-overlay {
position: fixed;
top: 34px;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.25);
}
}
.dropdown-toggle {
padding: 0;
background: none !important;
background-color: white;
color: #6a7686;
border: 0;
margin: 0;
min-height: auto;
&:active {
background-color: white;
box-shadow: none;
outline: none;
}
.glyphicon {
font-size: 16px;
top: 1px;
font-style: normal;
font-weight: 100;
margin: 0 5px;
margin-top: 2px;
}
userLoginDropdown {
width: 26px;
height: 25px;
position: relative;
img {
position: absolute;
top: 0;
left: 0;
}
span.badge-notification{
display: inline-block;
font-weight: normal;
white-space: nowrap;
border-radius: 10px;
padding: 2px 4px;
min-width: 8px;
vertical-align: middle;
color: #fff;
font-size: .7579em;
line-height: 1;
text-align: center;
background-color: #bdbdbd;
position: absolute;
z-index: 1;
min-width: 6px;
top: -3px;
left: -5px;
background: #090;
}
}
}
.dropdown-menu {
border-radius: 0;
padding: 0;
width: 320px;
top: 40px;
bottom: auto !important;
background: #fff;
border: 1px solid #ccc;
border-color: rgba(0,0,0,0.2);
color: #000;
box-shadow: 0 2px 10px rgba(0,0,0,0.2);
box-sizing: border-box !important;
&::before {
content: "";
position: absolute;
right: 6px;
top: -8px;
width: 0;
height: 0;
border-style: solid;
border-width: 0 8.5px 8.5px;
border-color: transparent transparent #b7bcc4 transparent;
border-bottom-color: #fff;
border-style: dashed dashed solid;
z-index: 1;
}
li {
float: left;
box-sizing: border-box !important;
}
right-panel {
height: 100%;
position: fixed;
top: 35px;
right: 0;
padding: 0;
border: 0;
box-shadow: none;
width: 432px;
border-left: 1px solid #ccc;
margin: 0;
padding-top: 150px;
&::before {
display: none;
}
#user-info-menu-item {
position: absolute;
top: 0;
left: 0;
height: 150px;
#user-info-section {
.user-details {
width: 100%;
.buttons {
padding-left: 0;
padding-right: 0;
background: white;
}
}
}
#user-details-username {
h2 {
margin: 10px 0;
font-size: 26px;
color: #353a3d;
font-weight: bold;
}
}
#user-details-email {
color: #687a86;
font-size: 18px;
margin-bottom: 5px;
}
}
#user-tabs-menu-item {
height: 100%;
background-color: white;
padding:10px;
.autosuggest
{
flex: 1;
display: flex;
flex-direction:row;
}
#user-tabs-container {
position: relative;
padding-top: 40px;
height: 100%;
#user-tabs-menu {
height: 40px;
width: 100%;
position: absolute;
top: 0;
left: 0;
border-bottom: 2px solid #ccc;
ul {
padding: 0;
list-style-type: none;
height: 40px;
display: table;
margin: 0 auto;
li {
float: left;
height: 20px;
width: auto;
line-height: 20px;
a {
display: block;
padding: 10px 10px;
height: 40px;
border-bottom: 2px solid transparent;
&.active,
&:hover {
color: #2e9fff;
border-bottom-color: #2e9fff;
}
input[type="text"] {
height: 24px;
border-radius: 5px;
border: 1px solid #ccc;
padding: 0 5px;
margin: 7px 0;
color: #888;
background-image: url('http://i.stack.imgur.com/MFpLm.png');
background-repeat: no-repeat;
background-position: 0 -30px;
border: 1px solid #a9e2ff;
padding: 3px;
width: 200px;
font-size: 1em;
padding-left: 20px;
}
span.search-button {
height: 23px;
width: 23px;
display: block;
float: right;
background-image: url('../img/bg_sheet.png');
background-position: -670px -149px;
margin: 6px;
}
}
search-form-container {
position: relative;
ul {
position: absolute;
background: white;
padding: 5px;
border: 1px solid #ccc;
border-radius: 0 0 5px 5px;
top: 32px;
left: 140px;
width: 159px;
z-index: 10;
li {
float: left;
width: 100%;
cursor: pointer;
&:hover {
background-color: #ccc;
}
}
}
}
}
}
}
#user-tabs-content {
height: 100%;
padding: 10px;
/* overflow: scroll;*/
.user-comments-tab-container {
max-height: 600px;
overflow: auto;
.userinfo
{
color:#687a86;
padding: 10px;
.header{
font-size: 16px;
border-bottom: 1px solid #F1F1F1;
}
.statistic{
.statisticRow
{
display: block;
span.statisticRow{
font-weight: bold;
}
}
}
}
.user-comments-thread-container {
width: 100%;
float: left;
padding: 10px;
padding-bottom: 20px;
.thread-header {
float: left;
width: 100%;
border-bottom: 1px solid #f1f1f1;
.thread-subtitle {
float: left;
width: 100%;
font-size: 14px;
margin: 5px 0;
p {
float: left;
color: #687a86;
margin: 0;
}
p + p {
margin-left: 5px;
padding-left: 5px;
&::before {
content: "•";
color: rgb(226, 226, 226);
}
span {
margin-left: 5px;
}
}
}
.thread-title {
float: left;
width: 100%;
h2 {
float: left;
margin: 0 0 10px 0;
font-size: 16px;
}
}
}
.thread-comments {
float: left;
width: 100%;
.thread-title {
float: left;
width: 100%;
h2 {
float: left;
margin: 0 0 10px 0;
font-size: 18px;
}
}
.comment-item {
position: relative;
height: auto;
padding-left: 40px;
float: left;
width: 100%;
margin-bottom: 20px;
figure {
position: absolute;
top: 0;
left: 0;
width: 32px;
height: 32px;
margin: 0;
img {
width: 32px;
height: 32px;
border-radius: 100%;
}
}
.comment-item-header {
margin-bottom: 5px;
width: 100%;
float: left;
p {
margin-bottom: 0;
float: left;
&.user,
&.replied-user {
span {
margin-right: 5px;
}
a {
color: #2e9fff;
}
&:hover {
a {
color: #2e87e7;
}
}
}
&.date-created {
margin-left: 5px;
padding-left: 5px;
&::before {
content: "•";
color: rgb(226, 226, 226);
}
span {
margin-left: 5px;
}
}
}
p + p {
margin-left: 5px;
}
}
.comment-item-content {
width: 100%;
float: left;
}
.comment-item-votes-container {
width: 100%;
float: left;
> div {
float: left;
width: auto;
margin-right: 5px;
}
.comment-item-votes {
}
}
}
}
}
.user-comments-thread-container + .user-comments-thread-container {
border-bottom: 3px solid #ccc;
}
}
}
}
}
}
}
}
#user-search-menu-container {
.user-dropdown {
.th-icon {
height: 24px;
width: 24px;
display: block;
background-image: url(../img/search.svg);
background-size: 20px;
background-position: center 3px;
cursor: pointer;
background-repeat: no-repeat;
}
.dropdown-toggle {
img {
height: 26px;
width: 26px;
border-radius: 100%;
margin-top: -1px;
}
}
.dropdown-menu {
&::before {
right: 9px;
}
#user-info-menu-item {
width: 100%;
border-bottom: 1px solid #ccc;
}
#user-info-section {
height: auto;
padding: 20px;
background: white;
float: left;
padding-left: 116px;
position: relative;
width: 100%;
min-height: 136px;
box-sizing: border-box;
.user-avatar {
height: 96px;
width: 96px;
float: left;
border-radius: 100%;
overflow: hidden;
position: absolute;
top: 20px;
left: 20px;
.no-avatar-user-letter {
border-radius: 100%;
height: 100%;
width: 100%;
background-color: #c1c1c1;
text-align: center;
line-height: 80px;
font-size: 50px;
color: white;
overflow: hidden;
position: relative;
img {
height: 96px;
width: 96px;
position: absolute;
top: 0;
left: 0;
}
.change-profile-pic {
width: 100%;
position: absolute;
bottom: 0;
font-size: 9px;
height: 26px;
left: 0;
background-color: rgba(0,0,0,0.4);
line-height: 30px;
color: white;
cursor: pointer;
font-weight: bold;
}
}
}
.user-details {
width: 175px;
padding-left: 20px;
float: left;
margin-top: -4px;
ul {
padding: 0;
margin: 0;
list-style-type: none;
float: left;
width: 100%;
li {
width: 100%;
float: left;
height: auto;
line-height: 15px;
font-size: 13px;
min-height: 8px;
color: #6a7686;
a {
color: #36c;
}
b {
color: black;
}
button {
margin-top: 16px;
}
}
}
}
}
right-panel {
padding-top:10px;
}
li.buttons {
padding: 10px 20px;
background-color: #f5f5f5;
width: 100%;
.btn {
width: auto;
display: block;
border-radius: 2px;
padding: 6px 16px !important;
font-size: 12px;
height: 30px;
font-weight: normal;
color: #666 !important;
background: #f8f8f8;
border: 1px solid #c6c6c6;
float: left;
clear: none;
line-height: 12px !important;
&.pull-right {
float: right;
}
&:hover {
-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.1);
box-shadow: 0 1px 1px rgba(0,0,0,0.1);
border-color: #c6c6c6;
color: #222;
background-color: #fff;
background-image: -webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));
background-image: -webkit-linear-gradient(top,#fff,#f8f8f8);
background-image: -webkit-linear-gradient(top,#fff,#f8f8f8);
background-image: linear-gradient(top,#fff,#f8f8f8);
}
span {
display: block;
float: left;
height: 12px;
}
}
}
}
}
}
#user-context-menu-container,
#about-menu-container,
#development-app-menu-container {
.user-dropdown {
.th-icon {
height: 24px;
width: 24px;
display: block;
background-image: url(../img/glyphicons-th.svg);
background-size: 32px;
background-position: center -5px;
cursor: pointer;
}
.dropdown-menu {
padding: 23px 28px;
right: -42px;
&::before {
right: 45px;
}
li {
height: auto;
width: 86px;
border: 1px solid white;
margin: 5px 0 10px 0;
a {
display: block;
width: 100%;
padding: 0;
height: auto;
float: left;
&:hover {
background-color: white !important;
}
.icon {
width: 55px;
height: 55px;
margin: 5px auto;
background-size: 50px;
background-position: center center;
background-repeat: no-repeat;
width: 100%;
}
span {
float: left;
width: 100%;
text-align: center;
display: block;
color:rgba(0,0,0,0.87);
font-size: 13px;
}
&:active {
background-color: white;
}
}
&.clear-left{
clear: left;
}
- /*
+
opendesktop-link-item {
a {
.icon {
background-image: url('../img/logo-opendesktop.png');
}
}
}
discourse-link-item {
a {
.icon {
background-image: url('../img/logo-discourse.png');
background-size: 58px;
}
}
}
gitlab-link-item {
a {
.icon {
background-image: url(../img/logo-gitlab.png);
}
}
}
opencode-link-item {
a {
.icon {
background-image: url(../img/logo-opencode.png);
background-size: 40px;
}
}
}
addproduct-link-item {
a {
.icon {
background-image: url(../img/add.svg);
background-size: 40px;
}
}
}
listproduct-link-item {
a {
.icon {
background-image: url(../img/products.png);
background-size: 40px;
}
}
}
plings-link-item {
a {
.icon {
background-image: url(../img/pling.png);
background-size: 40px;
}
}
}
messages-link-item {
a {
.icon {
background-image: url(../img/messages.png);
background-size: 45px;
}
}
span.badge-notification{
display: inline-block;
font-weight: normal;
white-space: nowrap;
border-radius: 10px;
padding: 2px 4px;
min-width: 8px;
vertical-align: middle;
color: #fff;
font-size: .7579em;
line-height: 1;
text-align: center;
background-color: #bdbdbd;
position: absolute;
z-index: 1;
min-width: 6px;
top: -3px;
left: -5px;
background: #090;
}
}
- */
+
issues-link-item {
a {
.icon {
background-image: url(../img/issues.png);
background-size: 45px;
}
}
}
music-link-item {
a {
.icon {
background-image: url(../img/logo-music.png);
background-size: 45px;
}
}
}
docs-link-item {
a {
.icon {
background-image: url(../img/logo-docs.png);
background-size: 45px;
}
}
}
storage-link-item {
a {
.icon {
background-image: url(../img/logo-storage.png);
background-size: 45px;
}
}
}
contacts-link-item {
a {
.icon {
background-image: url(../img/logo-contacts.png);
background-size: 45px;
}
}
}
calendar-link-item {
a {
.icon {
background-image: url(../img/logo-calendar.png);
background-size: 45px;
}
}
}
talk-link-item {
a {
.icon {
background-image: url(../img/logo-talk.png);
background-size: 45px;
}
}
}
chat-link-item {
display: block;
clear: both;
a {
.icon {
background-image: url(../img/logo-riot.svg);
background-size: 45px;
}
}
}
&:hover {
border:1px solid #e5e5e5;
a {
background-color: white;
}
}
&:active {
a {
background-color: white;
}
}
}
}
}
}
#development-app-menu-container {
.user-dropdown {
.th-icon {
height: 24px;
width: 24px;
display: block;
/*background-image: url(../img/development-app-menu-item.png);*/
background-image: url(../img/glyphicons-th.svg);
background-size: 32px;
background-position: center -5px;
cursor: pointer;
}
}
}
#user-login-menu-container {
.user-dropdown {
.dropdown-toggle {
img {
height: 26px;
width: 26px;
border-radius: 100%;
margin-top: -1px;
}
}
.dropdown-menu {
&::before {
right: 9px;
}
#user-info-menu-item {
width: 100%;
border-bottom: 1px solid #ccc;
}
.user-context-menu{
width: 100%;
border-bottom: 1px solid #ccc;
background-color: #fff;
ul.user-context-menu-container{
list-style: none;
padding-left: 20px;
li {
height: auto;
width: 86px;
border: 1px solid white;
margin: 5px 0 10px 0;
a {
display: block;
width: 100%;
padding: 0;
height: auto;
float: left;
&:hover {
background-color: white !important;
}
.icon {
width: 55px;
height: 55px;
margin: 5px auto;
background-size: 50px;
background-position: center center;
background-repeat: no-repeat;
width: 100%;
}
span {
float: left;
width: 100%;
text-align: center;
display: block;
color:rgba(0,0,0,0.87);
font-size: 13px;
}
&:active {
background-color: white;
}
}
&.clear-left{
clear: left;
}
opendesktop-link-item {
a {
.icon {
background-image: url('../img/logo-opendesktop.png');
}
}
}
discourse-link-item {
a {
.icon {
background-image: url('../img/logo-discourse.png');
background-size: 58px;
}
}
}
gitlab-link-item {
a {
.icon {
background-image: url(../img/logo-gitlab.png);
}
}
}
opencode-link-item {
a {
.icon {
background-image: url(../img/logo-opencode.png);
background-size: 40px;
}
}
}
addproduct-link-item {
a {
.icon {
background-image: url(../img/add.svg);
background-size: 40px;
}
}
}
listproduct-link-item {
a {
.icon {
background-image: url(../img/products.png);
background-size: 40px;
}
}
}
plings-link-item {
a {
.icon {
background-image: url(../img/pling.png);
background-size: 40px;
}
}
}
messages-link-item {
position: relative;
a {
.icon {
background-image: url(../img/messages.png);
background-size: 45px;
}
}
span.badge-notification{
display: inline-block;
font-weight: normal;
white-space: nowrap;
border-radius: 10px;
padding: 2px 4px;
min-width: 8px;
vertical-align: middle;
- color: #fff;
+ color: #fff;
font-size: .7579em;
line-height: 1;
text-align: center;
background-color: #bdbdbd;
position: absolute;
z-index: 1;
min-width: 6px;
width:15px;
top: 10px;
left: 15px;
background: #090;
}
}
issues-link-item {
a {
.icon {
background-image: url(../img/issues.png);
background-size: 45px;
}
}
}
music-link-item {
a {
.icon {
background-image: url(../img/logo-music.png);
background-size: 45px;
}
}
}
docs-link-item {
a {
.icon {
background-image: url(../img/logo-docs.png);
background-size: 45px;
}
}
}
storage-link-item {
a {
.icon {
background-image: url(../img/logo-storage.png);
background-size: 45px;
}
}
}
contacts-link-item {
a {
.icon {
background-image: url(../img/logo-contacts.png);
background-size: 45px;
}
}
}
calendar-link-item {
a {
.icon {
background-image: url(../img/logo-calendar.png);
background-size: 45px;
}
}
}
talk-link-item {
a {
.icon {
background-image: url(../img/logo-talk.png);
background-size: 45px;
}
}
}
chat-link-item {
display: block;
clear: both;
a {
.icon {
background-image: url(../img/logo-riot.svg);
background-size: 45px;
}
}
}
&:hover {
border:1px solid #e5e5e5;
a {
background-color: white;
}
}
&:active {
a {
background-color: white;
}
}
}
}
}
.user-settings-item {
width: 100%;
border-bottom: 1px solid #ccc;
padding: 10px 20px;
background-color: #f5f5f5;
div.switchContainer{
display: inline-block;
vertical-align: middle;
margin-right: 5px;
margin-left: 5px;
padding-top:5px;
}
span.user-settings-item-title{
display: inline-block;
}
}
#user-info-section {
height: auto;
padding: 20px;
background: white;
float: left;
padding-left: 116px;
position: relative;
width: 100%;
min-height: 136px;
box-sizing: border-box;
.user-avatar {
height: 96px;
width: 96px;
float: left;
border-radius: 100%;
overflow: hidden;
position: absolute;
top: 20px;
left: 20px;
.no-avatar-user-letter {
border-radius: 100%;
height: 100%;
width: 100%;
background-color: #c1c1c1;
text-align: center;
line-height: 80px;
font-size: 50px;
color: white;
overflow: hidden;
position: relative;
img {
height: 96px;
width: 96px;
position: absolute;
top: 0;
left: 0;
}
.change-profile-pic {
width: 100%;
position: absolute;
bottom: 0;
font-size: 9px;
height: 26px;
left: 0;
background-color: rgba(0,0,0,0.4);
line-height: 30px;
color: white;
cursor: pointer;
font-weight: bold;
}
}
}
.user-details {
width: 175px;
padding-left: 20px;
float: left;
margin-top: -4px;
ul {
padding: 0;
margin: 0;
list-style-type: none;
float: left;
width: 100%;
li {
width: 100%;
float: left;
height: auto;
line-height: 15px;
font-size: 13px;
min-height: 8px;
color: #6a7686;
a {
color: #36c;
}
b {
color: black;
}
button {
margin-top: 16px;
}
}
}
}
}
li.buttons {
padding: 10px 20px;
background-color: #f5f5f5;
width: 100%;
.btn {
width: auto;
display: block;
border-radius: 2px;
padding: 6px 16px !important;
font-size: 12px;
height: 30px;
font-weight: normal;
color: #666 !important;
background: #f8f8f8;
border: 1px solid #c6c6c6;
float: left;
clear: none;
line-height: 12px !important;
&.pull-right {
float: right;
}
&:hover {
-webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.1);
box-shadow: 0 1px 1px rgba(0,0,0,0.1);
border-color: #c6c6c6;
color: #222;
background-color: #fff;
background-image: -webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));
background-image: -webkit-linear-gradient(top,#fff,#f8f8f8);
background-image: -webkit-linear-gradient(top,#fff,#f8f8f8);
background-image: linear-gradient(top,#fff,#f8f8f8);
}
span {
display: block;
float: left;
height: 12px;
}
}
}
}
}
}
#development-app-menu-container {
.user-dropdown {
ul.dropdown-menu {
/*right: -76px;*/
right: -40px;
&::before {
/*right: 78px;*/
right: 42px;
}
}
}
}
}
#metaheader-left-mobile {
float: left;
height: 34px;
width: 34px;
a#menu-toggle-item {
cursor: pointer;
height: 34px;
width: 40px;
display: block;
float: left;
background-image: url(../img/hamburger-menu-icon.png);
background-size: 20px 16px;
background-repeat: no-repeat;
background-position: 8px 10px;
position: absolute;
left: 0;
background-color: transparent;
z-index: 1000;
}
#left-side-overlay {
position: fixed;
width: 0;
height: 100%;
background: rgba(0,0,0,0.5);
z-index: 1001;
overflow: hidden;
a {
cursor: pointer;
color: #6a7686;
}
#left-side-panel {
height: 100%;
width: 0;
background-color: white;
-webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
box-shadow: 0 6px 12px rgba(0,0,0,.175);
background-color: white;
overflow: scroll;
#left-side-panel-thumb-block {
width: 100%;
height: 50px;
position: absolute;
top: 0;
left: 0;
}
#panel-header {
background: #efefef;
padding: 20px;
text-align: center;
margin-bottom: 10px;
img {
margin: 0 auto;
clear: both;
display: block;
}
}
#panel-menu {
width: 100%;
> ul > li > a {
font-weight: bold;
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
width: 100%;
float: left;
li {
width: 100%;
float: left;
a {
width: 100%;
line-height: 24px;
display: block;
padding: 0 10px;
text-decoration: none;
color: #6a7686;
.transition();
}
ul {
display: block;
position: relative;
float: left;
top: 0;
left: 0;
padding: 5px;
padding-top: 0;
border: 0;
height: auto;
min-height: auto;
width: 100%;
box-shadow: none;
margin: 0;
padding: 0 10px;
margin-bottom: 15px;
&::before {
display: none;
}
li {
margin-bottom: 0;
a {
font-size: 14px;
&:hover {
background-color: #efefef;
}
}
}
}
}
}
}
}
}
&.open {
#left-side-overlay {
width: 100%;
#left-side-panel {
width: 50%;
}
}
}
}
}
#metaheader-modal {
position: fixed;
background: rgba(0,0,0,0.5);
z-index: 10000000000;
height: 100%;
width: 100%;
top: 0;
left: 0;
padding: 5%;
#metaheader-modal-content {
width: 100%;
height: 100%;
overflow: scroll;
background: white;
padding: 10px;
box-shadow: 0px 1px 2px rgba(0,0,0,0.25);
}
}
/*********autosuggestion**********/
.react-autosuggest_status {
display: block;
line-height: 30px;
min-height: 30px;
}
.react-autosuggest__container {
position: relative;
}
.react-autosuggest__input {
width: 280px;
height: 30px;
padding: 10px 25px !important;
font-family: Helvetica, sans-serif;
font-weight: 300;
font-size: 16px;
border: 1px solid #aaa;
border-radius: 4px;
}
.react-autosuggest__input--focused {
outline: none;
}
.react-autosuggest__input--open {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.react-autosuggest__suggestions-container {
display: none;
}
.react-autosuggest__suggestions-container--open {
display: block;
position: absolute;
top: 29px;
width: 280px;
border: 1px solid #aaa;
background-color: #fff;
font-family: Helvetica, sans-serif;
font-weight: 300;
font-size: 16px;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
z-index: 2;
li{
display: block !important;
}
}
.react-autosuggest__suggestions-list {
margin: 0;
padding: 0;
list-style-type: none;
}
.react-autosuggest__suggestion {
cursor: pointer;
padding: 10px 20px;
}
.react-autosuggest__suggestion--highlighted {
background-color: #ddd;
}
.react-autosuggest__inputContainer{
position: relative;
.react-autosuggest__icon {
position: absolute;
top: 4px;
left: 0px;
width: 24px;
height: 24px;
}
}
/******************end of autosuggestion ******************/
/* metamenu dark theme*/
#metaheader #metaheader-nav .metamenu-theme-dark
{
background-color: #3D3D3E;
ul.metaheader-menu > li >a {
color:#E7F3F8 ;
&:hover{
color:#24292E ;
}
}
ul.metaheader-menu > li.active >a {
background-color: #2185D0;
color:#E7F3F8 ;
}
#user-context-menu-container .user-dropdown .th-icon {
background-image: url(../img/glyphicons-th-light.svg);
}
#development-app-menu-container .user-dropdown .th-icon {
/*background-image: url(../img/development-app-menu-item-white.png);*/
background-image: url(../img/glyphicons-th-light.svg);
}
#user-search-menu-container .user-dropdown .th-icon {
background-image: url(../img/search-light.svg);
}
}
diff --git a/library/Zend/Http/Client.php b/library/Zend/Http/Client.php
index a5e6be7b5..c382482c3 100644
--- a/library/Zend/Http/Client.php
+++ b/library/Zend/Http/Client.php
@@ -1,1607 +1,1610 @@
5,
'strictredirects' => false,
'useragent' => 'Zend_Http_Client',
'timeout' => 10,
'adapter' => 'Zend_Http_Client_Adapter_Socket',
'httpversion' => self::HTTP_1,
'keepalive' => false,
'storeresponse' => true,
'strict' => true,
'output_stream' => false,
'encodecookies' => true,
'rfc3986_strict' => false
);
/**
* The adapter used to perform the actual connection to the server
*
* @var Zend_Http_Client_Adapter_Interface
*/
protected $adapter = null;
/**
* Request URI
*
* @var Zend_Uri_Http
*/
protected $uri = null;
/**
* Associative array of request headers
*
* @var array
*/
protected $headers = array();
/**
* HTTP request method
*
* @var string
*/
protected $method = self::GET;
/**
* Associative array of GET parameters
*
* @var array
*/
protected $paramsGet = array();
/**
* Associative array of POST parameters
*
* @var array
*/
protected $paramsPost = array();
/**
* Request body content type (for POST requests)
*
* @var string
*/
protected $enctype = null;
/**
* The raw post data to send. Could be set by setRawData($data, $enctype).
*
* @var string
*/
protected $raw_post_data = null;
/**
* HTTP Authentication settings
*
* Expected to be an associative array with this structure:
* $this->auth = array('user' => 'username', 'password' => 'password', 'type' => 'basic')
* Where 'type' should be one of the supported authentication types (see the AUTH_*
* constants), for example 'basic' or 'digest'.
*
* If null, no authentication will be used.
*
* @var array|null
*/
protected $auth;
/**
* File upload arrays (used in POST requests)
*
* An associative array, where each element is of the format:
* 'name' => array('filename.txt', 'text/plain', 'This is the actual file contents')
*
* @var array
*/
protected $files = array();
/**
* Ordered list of keys from key/value pair data to include in body
*
* An associative array, where each element is of the format:
* '' => VTYPE_SCALAR | VTYPE_FILE
*
* @var array
*/
protected $body_field_order = array();
/**
* The client's cookie jar
*
* @var Zend_Http_CookieJar
*/
protected $cookiejar = null;
/**
* The last HTTP request sent by the client, as string
*
* @var string
*/
protected $last_request = null;
/**
* The last HTTP response received by the client
*
* @var Zend_Http_Response
*/
protected $last_response = null;
/**
* Redirection counter
*
* @var int
*/
protected $redirectCounter = 0;
/**
* Status for unmasking GET array params
*
* @var boolean
*/
protected $_unmaskStatus = false;
/**
* Status if the http_build_query function escapes brackets
*
* @var boolean
*/
protected $_queryBracketsEscaped = true;
/**
* Fileinfo magic database resource
*
* This variable is populated the first time _detectFileMimeType is called
* and is then reused on every call to this method
*
* @var resource
*/
protected static $_fileInfoDb = null;
/**
* Constructor method. Will create a new HTTP client. Accepts the target
* URL and optionally configuration array.
*
* @param Zend_Uri_Http|string $uri
- * @param array $config Configuration key-value pairs.
+ * @param array $config Configuration key-value pairs.
+ * @throws Zend_Http_Client_Exception
+ * @throws Zend_Uri_Exception
*/
public function __construct($uri = null, $config = null)
{
if ($uri !== null) {
$this->setUri($uri);
}
if ($config !== null) {
$this->setConfig($config);
}
$this->_queryBracketsEscaped = version_compare(phpversion(), '5.1.3', '>=');
}
/**
* Set the URI for the next request
*
- * @param Zend_Uri_Http|string $uri
+ * @param Zend_Uri_Http|string $uri
* @return Zend_Http_Client
* @throws Zend_Http_Client_Exception
+ * @throws Zend_Uri_Exception
*/
public function setUri($uri)
{
if ($uri instanceof Zend_Uri_Http) {
// clone the URI in order to keep the passed parameter constant
$uri = clone $uri;
} elseif (is_string($uri)) {
$uri = Zend_Uri::factory($uri);
}
if (!$uri instanceof Zend_Uri_Http) {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception('Passed parameter is not a valid HTTP URI.');
}
// Set auth if username and password has been specified in the uri
if ($uri->getUsername() && $uri->getPassword()) {
$this->setAuth($uri->getUsername(), $uri->getPassword());
}
// We have no ports, set the defaults
if (! $uri->getPort()) {
$uri->setPort(($uri->getScheme() == 'https' ? 443 : 80));
}
$this->uri = $uri;
return $this;
}
/**
* Get the URI for the next request
*
* @param boolean $as_string If true, will return the URI as a string
* @return Zend_Uri_Http|string
*/
public function getUri($as_string = false)
{
if ($as_string && $this->uri instanceof Zend_Uri_Http) {
return $this->uri->__toString();
} else {
return $this->uri;
}
}
/**
* Set configuration parameters for this HTTP client
*
* @param Zend_Config | array $config
* @return Zend_Http_Client
* @throws Zend_Http_Client_Exception
*/
public function setConfig($config = array())
{
if ($config instanceof Zend_Config) {
$config = $config->toArray();
} elseif (! is_array($config)) {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception('Array or Zend_Config object expected, got ' . gettype($config));
}
foreach ($config as $k => $v) {
$this->config[strtolower($k)] = $v;
}
// Pass configuration options to the adapter if it exists
if ($this->adapter instanceof Zend_Http_Client_Adapter_Interface) {
$this->adapter->setConfig($config);
}
return $this;
}
/**
* Set the next request's method
*
* Validated the passed method and sets it. If we have files set for
* POST requests, and the new method is not POST, the files are silently
* dropped.
*
* @param string $method
* @return Zend_Http_Client
* @throws Zend_Http_Client_Exception
*/
public function setMethod($method = self::GET)
{
if (! preg_match('/^[^\x00-\x1f\x7f-\xff\(\)<>@,;:\\\\"\/\[\]\?={}\s]+$/', $method)) {
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception("'{$method}' is not a valid HTTP request method.");
}
if (($method == self::POST
|| $method == self::PUT
|| $method == self::DELETE
|| $method == self::PATCH
|| $method == self::OPTIONS)
&& $this->enctype === null
) {
$this->setEncType(self::ENC_URLENCODED);
}
$this->method = $method;
return $this;
}
/**
* Set one or more request headers
*
* This function can be used in several ways to set the client's request
* headers:
* 1. By providing two parameters: $name as the header to set (e.g. 'Host')
* and $value as it's value (e.g. 'www.example.com').
* 2. By providing a single header string as the only parameter
* e.g. 'Host: www.example.com'
* 3. By providing an array of headers as the first parameter
* e.g. array('host' => 'www.example.com', 'x-foo: bar'). In This case
* the function will call itself recursively for each array item.
*
* @param string|array $name Header name, full header string ('Header: value')
* or an array of headers
* @param mixed $value Header value or null
* @return Zend_Http_Client
* @throws Zend_Http_Client_Exception
*/
public function setHeaders($name, $value = null)
{
// If we got an array, go recursive!
if (is_array($name)) {
foreach ($name as $k => $v) {
if (is_string($k)) {
$this->setHeaders($k, $v);
continue;
}
$this->setHeaders($v, null);
}
return $this;
}
// Check if $name needs to be split
if ($value === null && (strpos($name, ':') > 0)) {
list($name, $value) = explode(':', $name, 2);
}
// Make sure the name is valid if we are in strict mode
if ($this->config['strict'] && (! preg_match('/^[a-zA-Z0-9-]+$/', $name))) {
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception("{$name} is not a valid HTTP header name");
}
$normalized_name = strtolower($name);
// If $value is null or false, unset the header
if ($value === null || $value === false) {
unset($this->headers[$normalized_name]);
return $this;
}
// Validate value
$this->_validateHeaderValue($value);
// Header names are stored lowercase internally.
if (is_string($value)) {
$value = trim($value);
}
$this->headers[$normalized_name] = array($name, $value);
return $this;
}
/**
* Get the value of a specific header
*
* Note that if the header has more than one value, an array
* will be returned.
*
* @param string $key
* @return string|array|null The header value or null if it is not set
*/
public function getHeader($key)
{
$key = strtolower($key);
if (isset($this->headers[$key])) {
return $this->headers[$key][1];
} else {
return null;
}
}
/**
* Set a GET parameter for the request. Wrapper around _setParameter
*
* @param string|array $name
* @param string $value
* @return Zend_Http_Client
*/
public function setParameterGet($name, $value = null)
{
if (is_array($name)) {
foreach ($name as $k => $v)
$this->_setParameter('GET', $k, $v);
} else {
$this->_setParameter('GET', $name, $value);
}
return $this;
}
/**
* Set a POST parameter for the request. Wrapper around _setParameter
*
* @param string|array $name
* @param string $value
* @return Zend_Http_Client
*/
public function setParameterPost($name, $value = null)
{
if (is_array($name)) {
foreach ($name as $k => $v)
$this->_setParameter('POST', $k, $v);
} else {
$this->_setParameter('POST', $name, $value);
}
return $this;
}
/**
* Set a GET or POST parameter - used by SetParameterGet and SetParameterPost
*
* @param string $type GET or POST
* @param string $name
* @param string $value
* @return null
*/
protected function _setParameter($type, $name, $value)
{
$parray = array();
$type = strtolower($type);
switch ($type) {
case 'get':
$parray = &$this->paramsGet;
break;
case 'post':
$parray = &$this->paramsPost;
if ( $value === null ) {
if (isset($this->body_field_order[$name]))
unset($this->body_field_order[$name]);
} else {
$this->body_field_order[$name] = self::VTYPE_SCALAR;
}
break;
}
if ($value === null) {
if (isset($parray[$name])) unset($parray[$name]);
} else {
$parray[$name] = $value;
}
}
/**
* Get the number of redirections done on the last request
*
* @return int
*/
public function getRedirectionsCount()
{
return $this->redirectCounter;
}
/**
* Set HTTP authentication parameters
*
* $type should be one of the supported types - see the self::AUTH_*
* constants.
*
* To enable authentication:
*
* $this->setAuth('shahar', 'secret', Zend_Http_Client::AUTH_BASIC);
*
*
* To disable authentication:
*
* $this->setAuth(false);
*
*
* @see http://www.faqs.org/rfcs/rfc2617.html
* @param string|false $user User name or false disable authentication
* @param string $password Password
* @param string $type Authentication type
* @return Zend_Http_Client
* @throws Zend_Http_Client_Exception
*/
public function setAuth($user, $password = '', $type = self::AUTH_BASIC)
{
// If we got false or null, disable authentication
if ($user === false || $user === null) {
$this->auth = null;
// Clear the auth information in the uri instance as well
if ($this->uri instanceof Zend_Uri_Http) {
$this->getUri()->setUsername('');
$this->getUri()->setPassword('');
}
// Else, set up authentication
} else {
// Check we got a proper authentication type
if (! defined('self::AUTH_' . strtoupper($type))) {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception("Invalid or not supported authentication type: '$type'");
}
$this->auth = array(
'user' => (string) $user,
'password' => (string) $password,
'type' => $type
);
}
return $this;
}
/**
* Set the HTTP client's cookie jar.
*
* A cookie jar is an object that holds and maintains cookies across HTTP requests
* and responses.
*
* @param Zend_Http_CookieJar|boolean $cookiejar Existing cookiejar object, true to create a new one, false to disable
* @return Zend_Http_Client
* @throws Zend_Http_Client_Exception
*/
public function setCookieJar($cookiejar = true)
{
Zend_Loader::loadClass('Zend_Http_CookieJar');
if ($cookiejar instanceof Zend_Http_CookieJar) {
$this->cookiejar = $cookiejar;
} elseif ($cookiejar === true) {
$this->cookiejar = new Zend_Http_CookieJar();
} elseif (! $cookiejar) {
$this->cookiejar = null;
} else {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception('Invalid parameter type passed as CookieJar');
}
return $this;
}
/**
* Return the current cookie jar or null if none.
*
* @return Zend_Http_CookieJar|null
*/
public function getCookieJar()
{
return $this->cookiejar;
}
/**
* Add a cookie to the request. If the client has no Cookie Jar, the cookies
* will be added directly to the headers array as "Cookie" headers.
*
* @param Zend_Http_Cookie|string $cookie
* @param string|null $value If "cookie" is a string, this is the cookie value.
* @return Zend_Http_Client
* @throws Zend_Http_Client_Exception
*/
public function setCookie($cookie, $value = null)
{
Zend_Loader::loadClass('Zend_Http_Cookie');
if (is_array($cookie)) {
foreach ($cookie as $c => $v) {
if (is_string($c)) {
$this->setCookie($c, $v);
} else {
$this->setCookie($v);
}
}
return $this;
}
if ($value !== null && $this->config['encodecookies']) {
$value = urlencode($value);
}
if (isset($this->cookiejar)) {
if ($cookie instanceof Zend_Http_Cookie) {
$this->cookiejar->addCookie($cookie);
} elseif (is_string($cookie) && $value !== null) {
$cookie = Zend_Http_Cookie::fromString("{$cookie}={$value}",
$this->uri,
$this->config['encodecookies']);
$this->cookiejar->addCookie($cookie);
}
} else {
if ($cookie instanceof Zend_Http_Cookie) {
$name = $cookie->getName();
$value = $cookie->getValue();
$cookie = $name;
}
if (preg_match("/[=,; \t\r\n\013\014]/", $cookie)) {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception("Cookie name cannot contain these characters: =,; \t\r\n\013\014 ({$cookie})");
}
$value = addslashes($value);
if (! isset($this->headers['cookie'])) {
$this->headers['cookie'] = array('Cookie', '');
}
$this->headers['cookie'][1] .= $cookie . '=' . $value . '; ';
}
return $this;
}
/**
* Set a file to upload (using a POST request)
*
* Can be used in two ways:
*
* 1. $data is null (default): $filename is treated as the name if a local file which
* will be read and sent. Will try to guess the content type using mime_content_type().
* 2. $data is set - $filename is sent as the file name, but $data is sent as the file
* contents and no file is read from the file system. In this case, you need to
* manually set the Content-Type ($ctype) or it will default to
* application/octet-stream.
*
* @param string $filename Name of file to upload, or name to save as
* @param string $formname Name of form element to send as
* @param string $data Data to send (if null, $filename is read and sent)
* @param string $ctype Content type to use (if $data is set and $ctype is
* null, will be application/octet-stream)
* @return Zend_Http_Client
* @throws Zend_Http_Client_Exception
*/
public function setFileUpload($filename, $formname, $data = null, $ctype = null)
{
if ($data === null) {
if (($data = @file_get_contents($filename)) === false) {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception("Unable to read file '{$filename}' for upload");
}
if (! $ctype) {
$ctype = $this->_detectFileMimeType($filename);
}
}
// Force enctype to multipart/form-data
$this->setEncType(self::ENC_FORMDATA);
$this->files[] = array(
'formname' => $formname,
'filename' => basename($filename),
'ctype' => $ctype,
'data' => $data
);
$this->body_field_order[$formname] = self::VTYPE_FILE;
return $this;
}
/**
* Set the encoding type for POST data
*
* @param string $enctype
* @return Zend_Http_Client
*/
public function setEncType($enctype = self::ENC_URLENCODED)
{
$this->enctype = $enctype;
return $this;
}
/**
* Set the raw (already encoded) POST data.
*
* This function is here for two reasons:
* 1. For advanced user who would like to set their own data, already encoded
* 2. For backwards compatibilty: If someone uses the old post($data) method.
* this method will be used to set the encoded data.
*
* $data can also be stream (such as file) from which the data will be read.
*
* @param string|resource $data
* @param string $enctype
* @return Zend_Http_Client
*/
public function setRawData($data, $enctype = null)
{
$this->raw_post_data = $data;
$this->setEncType($enctype);
if (is_resource($data)) {
// We've got stream data
$stat = @fstat($data);
if($stat) {
$this->setHeaders(self::CONTENT_LENGTH, $stat['size']);
}
}
return $this;
}
/**
* Set the unmask feature for GET parameters as array
*
* Example:
* foo%5B0%5D=a&foo%5B1%5D=b
* becomes
* foo=a&foo=b
*
* This is usefull for some services
*
* @param boolean $status
* @return Zend_Http_Client
*/
public function setUnmaskStatus($status = true)
{
$this->_unmaskStatus = (BOOL)$status;
return $this;
}
/**
* Returns the currently configured unmask status
*
* @return boolean
*/
public function getUnmaskStatus()
{
return $this->_unmaskStatus;
}
/**
* Clear all GET and POST parameters
*
* Should be used to reset the request parameters if the client is
* used for several concurrent requests.
*
* clearAll parameter controls if we clean just parameters or also
* headers and last_*
*
* @param bool $clearAll Should all data be cleared?
* @return Zend_Http_Client
*/
public function resetParameters($clearAll = false)
{
// Reset parameter data
$this->paramsGet = array();
$this->paramsPost = array();
$this->files = array();
$this->raw_post_data = null;
$this->enctype = null;
if($clearAll) {
$this->headers = array();
$this->last_request = null;
$this->last_response = null;
} else {
// Clear outdated headers
if (isset($this->headers[strtolower(self::CONTENT_TYPE)])) {
unset($this->headers[strtolower(self::CONTENT_TYPE)]);
}
if (isset($this->headers[strtolower(self::CONTENT_LENGTH)])) {
unset($this->headers[strtolower(self::CONTENT_LENGTH)]);
}
}
return $this;
}
/**
* Get the last HTTP request as string
*
* @return string
*/
public function getLastRequest()
{
return $this->last_request;
}
/**
* Get the last HTTP response received by this client
*
* If $config['storeresponse'] is set to false, or no response was
* stored yet, will return null
*
* @return Zend_Http_Response or null if none
*/
public function getLastResponse()
{
return $this->last_response;
}
/**
* Load the connection adapter
*
* While this method is not called more than one for a client, it is
* seperated from ->request() to preserve logic and readability
*
* @param Zend_Http_Client_Adapter_Interface|string $adapter
* @return null
* @throws Zend_Http_Client_Exception
*/
public function setAdapter($adapter)
{
if (is_string($adapter)) {
try {
Zend_Loader::loadClass($adapter);
} catch (Zend_Exception $e) {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception("Unable to load adapter '$adapter': {$e->getMessage()}", 0, $e);
}
$adapter = new $adapter;
}
if (! $adapter instanceof Zend_Http_Client_Adapter_Interface) {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception('Passed adapter is not a HTTP connection adapter');
}
$this->adapter = $adapter;
$config = $this->config;
unset($config['adapter']);
$this->adapter->setConfig($config);
}
/**
* Load the connection adapter
*
* @return Zend_Http_Client_Adapter_Interface $adapter
*/
public function getAdapter()
{
if (null === $this->adapter) {
$this->setAdapter($this->config['adapter']);
}
return $this->adapter;
}
/**
* Set streaming for received data
*
* @param string|boolean $streamfile Stream file, true for temp file, false/null for no streaming
* @return Zend_Http_Client
*/
public function setStream($streamfile = true)
{
$this->setConfig(array("output_stream" => $streamfile));
return $this;
}
/**
* Get status of streaming for received data
* @return boolean|string
*/
public function getStream()
{
return $this->config["output_stream"];
}
/**
* Create temporary stream
*
* @return resource
*/
protected function _openTempStream()
{
$this->_stream_name = $this->config['output_stream'];
if(!is_string($this->_stream_name)) {
// If name is not given, create temp name
$this->_stream_name = tempnam(isset($this->config['stream_tmp_dir'])?$this->config['stream_tmp_dir']:sys_get_temp_dir(),
'Zend_Http_Client');
}
if (false === ($fp = @fopen($this->_stream_name, "w+b"))) {
if ($this->adapter instanceof Zend_Http_Client_Adapter_Interface) {
$this->adapter->close();
}
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception("Could not open temp file {$this->_stream_name}");
}
return $fp;
}
/**
* Send the HTTP request and return an HTTP response object
*
* @param string $method
* @return Zend_Http_Response
* @throws Zend_Http_Client_Exception
*/
public function request($method = null)
{
if (! $this->uri instanceof Zend_Uri_Http) {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception('No valid URI has been passed to the client');
}
if ($method) {
$this->setMethod($method);
}
$this->redirectCounter = 0;
$response = null;
// Make sure the adapter is loaded
if ($this->adapter == null) {
$this->setAdapter($this->config['adapter']);
}
// Send the first request. If redirected, continue.
do {
// Clone the URI and add the additional GET parameters to it
$uri = clone $this->uri;
if (! empty($this->paramsGet)) {
$query = $uri->getQuery();
if (! empty($query)) {
$query .= '&';
}
$query .= http_build_query($this->paramsGet, null, '&');
if ($this->config['rfc3986_strict']) {
$query = str_replace('+', '%20', $query);
}
// @see ZF-11671 to unmask for some services to foo=val1&foo=val2
if ($this->getUnmaskStatus()) {
if ($this->_queryBracketsEscaped) {
$query = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $query);
} else {
$query = preg_replace('/\\[(?:[0-9]|[1-9][0-9]+)\\]=/', '=', $query);
}
}
$uri->setQuery($query);
}
$body = $this->_prepareBody();
$headers = $this->_prepareHeaders();
// check that adapter supports streaming before using it
if(is_resource($body) && !($this->adapter instanceof Zend_Http_Client_Adapter_Stream)) {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception('Adapter does not support streaming');
}
// Open the connection, send the request and read the response
$this->adapter->connect($uri->getHost(), $uri->getPort(),
($uri->getScheme() == 'https' ? true : false));
if($this->config['output_stream']) {
if($this->adapter instanceof Zend_Http_Client_Adapter_Stream) {
$stream = $this->_openTempStream();
$this->adapter->setOutputStream($stream);
} else {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception('Adapter does not support streaming');
}
}
$this->last_request = $this->adapter->write($this->method,
$uri, $this->config['httpversion'], $headers, $body);
$response = $this->adapter->read();
if (! $response) {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception('Unable to read response, or response is empty');
}
if($this->config['output_stream']) {
$streamMetaData = stream_get_meta_data($stream);
if ($streamMetaData['seekable']) {
rewind($stream);
}
// cleanup the adapter
$this->adapter->setOutputStream(null);
$response = Zend_Http_Response_Stream::fromStream($response, $stream);
$response->setStreamName($this->_stream_name);
if(!is_string($this->config['output_stream'])) {
// we used temp name, will need to clean up
$response->setCleanup(true);
}
} else {
$response = Zend_Http_Response::fromString($response);
}
if ($this->config['storeresponse']) {
$this->last_response = $response;
}
// Load cookies into cookie jar
if (isset($this->cookiejar)) {
$this->cookiejar->addCookiesFromResponse($response, $uri, $this->config['encodecookies']);
}
// If we got redirected, look for the Location header
if ($response->isRedirect() && ($location = $response->getHeader('location'))) {
// Avoid problems with buggy servers that add whitespace at the
// end of some headers (See ZF-11283)
$location = trim($location);
// Check whether we send the exact same request again, or drop the parameters
// and send a GET request
if ($response->getStatus() == 303 ||
((! $this->config['strictredirects']) && ($response->getStatus() == 302 ||
$response->getStatus() == 301))) {
$this->resetParameters();
$this->setMethod(self::GET);
}
// If we got a well formed absolute URI
if (($scheme = substr($location, 0, 6)) && ($scheme == 'http:/' || $scheme == 'https:')) {
$this->setHeaders('host', null);
$this->setUri($location);
} else {
// Split into path and query and set the query
if (strpos($location, '?') !== false) {
list($location, $query) = explode('?', $location, 2);
} else {
$query = '';
}
$this->uri->setQuery($query);
// Else, if we got just an absolute path, set it
if(strpos($location, '/') === 0) {
$this->uri->setPath($location);
// Else, assume we have a relative path
} else {
// Get the current path directory, removing any trailing slashes
$path = $this->uri->getPath();
$path = rtrim(substr($path, 0, strrpos($path, '/')), "/");
$this->uri->setPath($path . '/' . $location);
}
}
++$this->redirectCounter;
} else {
// If we didn't get any location, stop redirecting
break;
}
} while ($this->redirectCounter < $this->config['maxredirects']);
return $response;
}
/**
* Prepare the request headers
*
* @return array
*/
protected function _prepareHeaders()
{
$headers = array();
// Set the host header
if (! isset($this->headers['host'])) {
$host = $this->uri->getHost();
// If the port is not default, add it
if (! (($this->uri->getScheme() == 'http' && $this->uri->getPort() == 80) ||
($this->uri->getScheme() == 'https' && $this->uri->getPort() == 443))) {
$host .= ':' . $this->uri->getPort();
}
$headers[] = "Host: {$host}";
}
// Set the connection header
if (! isset($this->headers['connection'])) {
if (! $this->config['keepalive']) {
$headers[] = "Connection: close";
}
}
// Set the Accept-encoding header if not set - depending on whether
// zlib is available or not.
if (! isset($this->headers['accept-encoding'])) {
if (function_exists('gzinflate')) {
$headers[] = 'Accept-encoding: gzip, deflate';
} else {
$headers[] = 'Accept-encoding: identity';
}
}
// Set the Content-Type header
if (($this->method == self::POST || $this->method == self::PUT) &&
(! isset($this->headers[strtolower(self::CONTENT_TYPE)]) && isset($this->enctype))) {
$headers[] = self::CONTENT_TYPE . ': ' . $this->enctype;
}
// Set the user agent header
if (! isset($this->headers['user-agent']) && isset($this->config['useragent'])) {
$headers[] = "User-Agent: {$this->config['useragent']}";
}
// Set HTTP authentication if needed
if (is_array($this->auth)) {
$auth = self::encodeAuthHeader($this->auth['user'], $this->auth['password'], $this->auth['type']);
$headers[] = "Authorization: {$auth}";
}
// Load cookies from cookie jar
if (isset($this->cookiejar)) {
$cookstr = $this->cookiejar->getMatchingCookies($this->uri,
true, Zend_Http_CookieJar::COOKIE_STRING_CONCAT);
if ($cookstr) {
$headers[] = "Cookie: {$cookstr}";
}
}
// Add all other user defined headers
foreach ($this->headers as $header) {
list($name, $value) = $header;
if (is_array($value)) {
$value = implode(', ', $value);
}
$headers[] = "$name: $value";
}
return $headers;
}
/**
* Prepare the request body (for POST and PUT requests)
*
* @return string
* @throws Zend_Http_Client_Exception
*/
protected function _prepareBody()
{
// According to RFC2616, a TRACE request should not have a body.
if ($this->method == self::TRACE) {
return '';
}
if (isset($this->raw_post_data) && is_resource($this->raw_post_data)) {
return $this->raw_post_data;
}
// If mbstring overloads substr and strlen functions, we have to
// override it's internal encoding
if (function_exists('mb_internal_encoding') &&
((int) ini_get('mbstring.func_overload')) & 2) {
$mbIntEnc = mb_internal_encoding();
mb_internal_encoding('ASCII');
}
// If we have raw_post_data set, just use it as the body.
if (isset($this->raw_post_data)) {
$this->setHeaders(self::CONTENT_LENGTH, strlen($this->raw_post_data));
if (isset($mbIntEnc)) {
mb_internal_encoding($mbIntEnc);
}
return $this->raw_post_data;
}
$body = '';
// If we have files to upload, force enctype to multipart/form-data
if (count ($this->files) > 0) {
$this->setEncType(self::ENC_FORMDATA);
}
// If we have POST parameters or files, encode and add them to the body
if (count($this->paramsPost) > 0 || count($this->files) > 0) {
switch($this->enctype) {
case self::ENC_FORMDATA:
// Encode body as multipart/form-data
$boundary = '---ZENDHTTPCLIENT-' . md5(microtime());
$this->setHeaders(self::CONTENT_TYPE, self::ENC_FORMDATA . "; boundary={$boundary}");
// Encode all files and POST vars in the order they were given
foreach ($this->body_field_order as $fieldName=>$fieldType) {
switch ($fieldType) {
case self::VTYPE_FILE:
foreach ($this->files as $file) {
if ($file['formname']===$fieldName) {
$fhead = array(self::CONTENT_TYPE => $file['ctype']);
$body .= self::encodeFormData($boundary, $file['formname'], $file['data'], $file['filename'], $fhead);
}
}
break;
case self::VTYPE_SCALAR:
if (isset($this->paramsPost[$fieldName])) {
if (is_array($this->paramsPost[$fieldName])) {
$flattened = self::_flattenParametersArray($this->paramsPost[$fieldName], $fieldName);
foreach ($flattened as $pp) {
$body .= self::encodeFormData($boundary, $pp[0], $pp[1]);
}
} else {
$body .= self::encodeFormData($boundary, $fieldName, $this->paramsPost[$fieldName]);
}
}
break;
}
}
$body .= "--{$boundary}--\r\n";
break;
case self::ENC_URLENCODED:
// Encode body as application/x-www-form-urlencoded
$this->setHeaders(self::CONTENT_TYPE, self::ENC_URLENCODED);
$body = http_build_query($this->paramsPost, '', '&');
break;
default:
if (isset($mbIntEnc)) {
mb_internal_encoding($mbIntEnc);
}
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception("Cannot handle content type '{$this->enctype}' automatically." .
" Please use Zend_Http_Client::setRawData to send this kind of content.");
break;
}
}
// Set the Content-Length if we have a body or if request is POST/PUT
if ($body || $this->method == self::POST || $this->method == self::PUT) {
$this->setHeaders(self::CONTENT_LENGTH, strlen($body));
}
if (isset($mbIntEnc)) {
mb_internal_encoding($mbIntEnc);
}
return $body;
}
/**
* Helper method that gets a possibly multi-level parameters array (get or
* post) and flattens it.
*
* The method returns an array of (key, value) pairs (because keys are not
* necessarily unique. If one of the parameters in as array, it will also
* add a [] suffix to the key.
*
* This method is deprecated since Zend Framework 1.9 in favour of
* self::_flattenParametersArray() and will be dropped in 2.0
*
* @deprecated since 1.9
*
* @param array $parray The parameters array
* @param bool $urlencode Whether to urlencode the name and value
* @return array
*/
protected function _getParametersRecursive($parray, $urlencode = false)
{
// Issue a deprecated notice
trigger_error("The " . __METHOD__ . " method is deprecated and will be dropped in 2.0.",
E_USER_NOTICE);
if (! is_array($parray)) {
return $parray;
}
$parameters = array();
foreach ($parray as $name => $value) {
if ($urlencode) {
$name = urlencode($name);
}
// If $value is an array, iterate over it
if (is_array($value)) {
$name .= ($urlencode ? '%5B%5D' : '[]');
foreach ($value as $subval) {
if ($urlencode) {
$subval = urlencode($subval);
}
$parameters[] = array($name, $subval);
}
} else {
if ($urlencode) {
$value = urlencode($value);
}
$parameters[] = array($name, $value);
}
}
return $parameters;
}
/**
* Attempt to detect the MIME type of a file using available extensions
*
* This method will try to detect the MIME type of a file. If the fileinfo
* extension is available, it will be used. If not, the mime_magic
* extension which is deprected but is still available in many PHP setups
* will be tried.
*
* If neither extension is available, the default application/octet-stream
* MIME type will be returned
*
* @param string $file File path
* @return string MIME type
*/
protected function _detectFileMimeType($file)
{
$type = null;
// First try with fileinfo functions
if (function_exists('finfo_open')) {
if (self::$_fileInfoDb === null) {
self::$_fileInfoDb = @finfo_open(FILEINFO_MIME);
}
if (self::$_fileInfoDb) {
$type = finfo_file(self::$_fileInfoDb, $file);
}
} elseif (function_exists('mime_content_type')) {
$type = mime_content_type($file);
}
// Fallback to the default application/octet-stream
if (! $type) {
$type = 'application/octet-stream';
}
return $type;
}
/**
* Encode data to a multipart/form-data part suitable for a POST request.
*
* @param string $boundary
* @param string $name
* @param mixed $value
* @param string $filename
* @param array $headers Associative array of optional headers @example ("Content-Transfer-Encoding" => "binary")
* @return string
*/
public static function encodeFormData($boundary, $name, $value, $filename = null, $headers = array())
{
$ret = "--{$boundary}\r\n" .
'Content-Disposition: form-data; name="' . $name .'"';
if ($filename) {
$ret .= '; filename="' . $filename . '"';
}
$ret .= "\r\n";
foreach ($headers as $hname => $hvalue) {
$ret .= "{$hname}: {$hvalue}\r\n";
}
$ret .= "\r\n";
$ret .= "{$value}\r\n";
return $ret;
}
/**
* Create a HTTP authentication "Authorization:" header according to the
* specified user, password and authentication method.
*
* @see http://www.faqs.org/rfcs/rfc2617.html
* @param string $user
* @param string $password
* @param string $type
* @return string
* @throws Zend_Http_Client_Exception
*/
public static function encodeAuthHeader($user, $password, $type = self::AUTH_BASIC)
{
$authHeader = null;
switch ($type) {
case self::AUTH_BASIC:
// In basic authentication, the user name cannot contain ":"
if (strpos($user, ':') !== false) {
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception("The user name cannot contain ':' in 'Basic' HTTP authentication");
}
$authHeader = 'Basic ' . base64_encode($user . ':' . $password);
break;
//case self::AUTH_DIGEST:
/**
* @todo Implement digest authentication
*/
// break;
default:
/** @see Zend_Http_Client_Exception */
// require_once 'Zend/Http/Client/Exception.php';
throw new Zend_Http_Client_Exception("Not a supported HTTP authentication type: '$type'");
}
return $authHeader;
}
/**
* Convert an array of parameters into a flat array of (key, value) pairs
*
* Will flatten a potentially multi-dimentional array of parameters (such
* as POST parameters) into a flat array of (key, value) paris. In case
* of multi-dimentional arrays, square brackets ([]) will be added to the
* key to indicate an array.
*
* @since 1.9
*
* @param array $parray
* @param string $prefix
* @return array
*/
protected static function _flattenParametersArray($parray, $prefix = null)
{
if (! is_array($parray)) {
return $parray;
}
$parameters = array();
foreach($parray as $name => $value) {
// Calculate array key
if ($prefix) {
if (is_int($name)) {
$key = $prefix . '[]';
} else {
$key = $prefix . "[$name]";
}
} else {
$key = $name;
}
if (is_array($value)) {
$parameters = array_merge($parameters, self::_flattenParametersArray($value, $key));
} else {
$parameters[] = array($key, $value);
}
}
return $parameters;
}
/**
* Ensure a header value is valid per RFC 7230.
*
* @see http://tools.ietf.org/html/rfc7230#section-3.2
* @param string|object|array $value
* @param bool $recurse
*/
protected function _validateHeaderValue($value, $recurse = true)
{
if (is_array($value) && $recurse) {
foreach ($value as $v) {
$this->_validateHeaderValue($v, false);
}
return;
}
// Cast integers and floats to strings for purposes of header representation.
if (is_int($value) || is_float($value)) {
$value = (string) $value;
}
if (! is_string($value) && (! is_object($value) || ! method_exists($value, '__toString'))) {
// require_once 'Zend/Http/Exception.php';
throw new Zend_Http_Exception('Invalid header value detected');
}
Zend_Http_Header_HeaderValue::assertValid($value);
}
}
diff --git a/sql_code/20160914_add_file_type.sql b/sql_code/20160914_add_file_type.sql
index 15e623b35..6204515cf 100644
--- a/sql_code/20160914_add_file_type.sql
+++ b/sql_code/20160914_add_file_type.sql
@@ -1,29 +1,35 @@
-CREATE TABLE `file_types` (
- `filetype_id` INT NOT NULL AUTO_INCREMENT,
- `text` VARCHAR(255) NOT NULL,
- `order` INT NULL,
- `is_active` INT(1) NULL DEFAULT '1',
- PRIMARY KEY (`filetype_id`)
+CREATE TABLE `file_types`
+(
+ `filetype_id` INT NOT NULL AUTO_INCREMENT,
+ `text` VARCHAR(255) NOT NULL,
+ `order` INT NULL,
+ `is_active` INT(1) NULL DEFAULT '1',
+ PRIMARY KEY (`filetype_id`)
)
-ENGINE=InnoDB
+ ENGINE = InnoDB
;
-CREATE TABLE `project_file_type` (
- `project_id` INT NOT NULL,
- `file_id` INT NOT NULL,
- `file_type_id` INT NOT NULL,
- PRIMARY KEY (`project_id`, `file_id`)
+CREATE TABLE `project_file_type`
+(
+ `project_id` INT NOT NULL,
+ `file_id` INT NOT NULL,
+ `file_type_id` INT NOT NULL,
+ PRIMARY KEY (`project_id`, `file_id`)
)
-ENGINE=InnoDB
+ ENGINE = InnoDB
;
-INSERT INTO `file_types` (`filetype_id`, `text`, `order`) VALUES ('1', 'AppImage', '1');
-INSERT INTO `file_types` (`filetype_id`, `text`, `order`) VALUES ('2', 'Android (APK)', '2');
-INSERT INTO `file_types` (`filetype_id`, `text`, `order`) VALUES ('3', 'OS X compatible', '3');
-INSERT INTO `file_types` (`filetype_id`, `text`, `order`) VALUES ('4', 'Windows executable', '4');
+INSERT INTO `file_types` (`filetype_id`, `text`, `order`)
+VALUES ('1', 'AppImage', '1');
+INSERT INTO `file_types` (`filetype_id`, `text`, `order`)
+VALUES ('2', 'Android (APK)', '2');
+INSERT INTO `file_types` (`filetype_id`, `text`, `order`)
+VALUES ('3', 'OS X compatible', '3');
+INSERT INTO `file_types` (`filetype_id`, `text`, `order`)
+VALUES ('4', 'Windows executable', '4');
ALTER TABLE `file_types`
-CHANGE COLUMN `text` `name` VARCHAR(255) NOT NULL ;
+ CHANGE COLUMN `text` `name` VARCHAR(255) NOT NULL;
ALTER TABLE `project_file_type`
-CHANGE COLUMN `file_type_id` `filetype_id` INT(11) NOT NULL ,
-ADD INDEX `idx_type_id` (`filetype_id` ASC);
\ No newline at end of file
+ CHANGE COLUMN `file_type_id` `filetype_id` INT(11) NOT NULL ,
+ ADD INDEX `idx_type_id` (`filetype_id` ASC);
\ No newline at end of file
diff --git a/sql_code/20160916_file_type_rename.sql b/sql_code/20160916_file_type_rename.sql
index 4f3ffe44a..5e94c13bb 100644
--- a/sql_code/20160916_file_type_rename.sql
+++ b/sql_code/20160916_file_type_rename.sql
@@ -1,7 +1,6 @@
-
ALTER TABLE `file_types`
-CHANGE COLUMN `text` `name` VARCHAR(255) NOT NULL ;
+ CHANGE COLUMN `text` `name` VARCHAR(255) NOT NULL;
ALTER TABLE `project_file_type`
-CHANGE COLUMN `file_type_id` `filetype_id` INT(11) NOT NULL ,
-ADD INDEX `idx_type_id` (`filetype_id` ASC);
\ No newline at end of file
+ CHANGE COLUMN `file_type_id` `filetype_id` INT(11) NOT NULL ,
+ ADD INDEX `idx_type_id` (`filetype_id` ASC);
\ No newline at end of file
diff --git a/sql_code/20160919_file_type_rename.sql b/sql_code/20160919_file_type_rename.sql
index aa4ae9005..19fb85e29 100644
--- a/sql_code/20160919_file_type_rename.sql
+++ b/sql_code/20160919_file_type_rename.sql
@@ -1,12 +1,12 @@
RENAME TABLE `file_types` TO `package_types`;
ALTER TABLE `package_types`
- CHANGE COLUMN `filetype_id` `package_type_id` INT(11) NOT NULL AUTO_INCREMENT FIRST;
+ CHANGE COLUMN `filetype_id` `package_type_id` INT(11) NOT NULL AUTO_INCREMENT FIRST;
ALTER TABLE `project_file_type`
- ALTER `filetype_id` DROP DEFAULT;
+ ALTER `filetype_id` DROP DEFAULT;
ALTER TABLE `project_file_type`
- CHANGE COLUMN `filetype_id` `package_type_id` INT(11) NOT NULL AFTER `file_id`;
+ CHANGE COLUMN `filetype_id` `package_type_id` INT(11) NOT NULL AFTER `file_id`;
RENAME TABLE `project_file_type` TO `project_package_type`;
diff --git a/sql_code/20160921_add_mail_template_comment_reply.sql b/sql_code/20160921_add_mail_template_comment_reply.sql
index e9d471a41..412c44f6b 100644
--- a/sql_code/20160921_add_mail_template_comment_reply.sql
+++ b/sql_code/20160921_add_mail_template_comment_reply.sql
@@ -1 +1,4 @@
-INSERT INTO `mail_template` (`name`, `subject`, `text`, `created_at`, `changed_at`) VALUES ('tpl_user_comment_reply_note', 'opendesktop.org - You received a new reply to your comment', 'Hey %username%, \r\n you received a new reply to your comment on %product_title%
\r\n Here is what the user wrote:
\r\n %comment_text%
\r\n
\r\n Kind regards, Your openDesktop Team contact@opendesktop.org
', '2016-09-15 12:32:48', '2016-09-15 12:32:48');
+INSERT INTO `mail_template` (`name`, `subject`, `text`, `created_at`, `changed_at`)
+VALUES ('tpl_user_comment_reply_note', 'opendesktop.org - You received a new reply to your comment',
+ 'Hey %username%, \r\n you received a new reply to your comment on %product_title%
\r\n Here is what the user wrote:
\r\n %comment_text%
\r\n
\r\n Kind regards, Your openDesktop Team contact@opendesktop.org
',
+ '2016-09-15 12:32:48', '2016-09-15 12:32:48');
diff --git a/sql_code/20160922_add_member_email_table.sql b/sql_code/20160922_add_member_email_table.sql
index 02c3cc83c..7fba002e2 100644
--- a/sql_code/20160922_add_member_email_table.sql
+++ b/sql_code/20160922_add_member_email_table.sql
@@ -1,46 +1,60 @@
DROP TABLE IF EXISTS `member_email`;
-CREATE TABLE `member_email` (
- `email_id` int(11) NOT NULL AUTO_INCREMENT,
- `email_member_id` int(11) NOT NULL,
- `email_address` varchar(255) NOT NULL,
- `email_primary` int(1) DEFAULT '0',
- `email_deleted` int(1) DEFAULT '0',
- `email_created` datetime DEFAULT NULL,
- `email_checked` datetime DEFAULT NULL,
- `email_verification_value` varchar(255) DEFAULT NULL,
- PRIMARY KEY (`email_id`),
- KEY `idx_address` (`email_address`),
- KEY `idx_member` (`email_member_id`),
- KEY `idx_verification` (`email_verification_value`)
-) ENGINE=InnoDB;
+CREATE TABLE `member_email`
+(
+ `email_id` int(11) NOT NULL AUTO_INCREMENT,
+ `email_member_id` int(11) NOT NULL,
+ `email_address` varchar(255) NOT NULL,
+ `email_primary` int(1) DEFAULT '0',
+ `email_deleted` int(1) DEFAULT '0',
+ `email_created` datetime DEFAULT NULL,
+ `email_checked` datetime DEFAULT NULL,
+ `email_verification_value` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`email_id`),
+ KEY `idx_address` (`email_address`),
+ KEY `idx_member` (`email_member_id`),
+ KEY `idx_verification` (`email_verification_value`)
+) ENGINE = InnoDB;
DELIMITER $$
-DROP TRIGGER IF EXISTS member_email_BEFORE_INSERT$$
-CREATE DEFINER = CURRENT_USER TRIGGER `member_email_BEFORE_INSERT` BEFORE INSERT ON `member_email` FOR EACH ROW
- BEGIN
- IF NEW.email_created IS NULL THEN
- SET NEW.email_created = NOW();
+DROP TRIGGER IF EXISTS `member_email_BEFORE_INSERT`$$
+CREATE DEFINER = CURRENT_USER TRIGGER `member_email_BEFORE_INSERT`
+ BEFORE INSERT
+ ON `member_email`
+ FOR EACH ROW
+BEGIN
+ IF `NEW`.`email_created` IS NULL THEN
+ SET `NEW`.`email_created` = NOW();
END IF;
- END$$
+END$$
DELIMITER ;
START TRANSACTION;
-- migrate all user email
-TRUNCATE member_email;
-INSERT INTO member_email (email_member_id, email_address, email_primary, email_created, email_checked, email_verification_value)
- SELECT member.member_id as email_member_id, member.mail as email_address, 1 as email_primary, member.created_at as email_created, member.created_at as email_checked, member.verificationVal as email_verification_value
- FROM member
- WHERE member.mail_checked AND member.is_active and member.mail IS NOT NULL
+TRUNCATE `member_email`;
+INSERT INTO `member_email` (`email_member_id`, `email_address`, `email_primary`, `email_created`, `email_checked`,
+ `email_verification_value`)
+SELECT `member`.`member_id` AS `email_member_id`,
+ `member`.`mail` AS `email_address`,
+ 1 AS `email_primary`,
+ `member`.`created_at` AS `email_created`,
+ `member`.`created_at` AS `email_checked`,
+ `member`.`verificationVal` AS `email_verification_value`
+FROM `member`
+WHERE `member`.`mail_checked`
+ AND `member`.`is_active`
+ AND `member`.`mail` IS NOT NULL
;
-- backup member table
-CREATE TABLE member_bak_20160928 LIKE member;
-INSERT member_bak_20160928 SELECT * FROM member;
+CREATE TABLE `member_bak_20160928` LIKE `member`;
+INSERT `member_bak_20160928`
+SELECT *
+FROM `member`;
-- after migrating to member_email we can drop the column `validationVal`
ALTER TABLE `member`
- DROP COLUMN `verificationVal`;
+ DROP COLUMN `verificationVal`;
COMMIT;
diff --git a/sql_code/20161011_add_index_stat_table_views.sql b/sql_code/20161011_add_index_stat_table_views.sql
index 9798e3659..374174086 100644
--- a/sql_code/20161011_add_index_stat_table_views.sql
+++ b/sql_code/20161011_add_index_stat_table_views.sql
@@ -1,5 +1,5 @@
ALTER TABLE `activity_log`
- ADD INDEX `idx_time` (`member_id` ASC,`time` DESC);
+ ADD INDEX `idx_time` (`member_id` ASC, `time` DESC);
ALTER TABLE `stat_page_views`
- ADD INDEX `idx_member` (`member_id` ASC, `created_at` ASC);
\ No newline at end of file
+ ADD INDEX `idx_member` (`member_id` ASC, `created_at` ASC);
\ No newline at end of file
diff --git a/sql_code/20161025_update_session_table.sql b/sql_code/20161025_update_session_table.sql
index 5a0c1e733..4cba40372 100644
--- a/sql_code/20161025_update_session_table.sql
+++ b/sql_code/20161025_update_session_table.sql
@@ -1,11 +1,11 @@
ALTER TABLE `session`
- CHANGE COLUMN `idsession` `session_id` INT(11) NOT NULL AUTO_INCREMENT,
- CHANGE COLUMN `member_id` `member_id` INT(11) NOT NULL ,
- CHANGE COLUMN `uuid` `remember_me_id` VARCHAR(255) NOT NULL ,
- ADD COLUMN `expiry` DATETIME NOT NULL AFTER `remember_me_id`,
- DROP INDEX `member_uuid` ,
- ADD INDEX `idx_remember` (`member_id` ASC, `remember_me_id` ASC, `expiry` ASC);
+ CHANGE COLUMN `idsession` `session_id` INT(11) NOT NULL AUTO_INCREMENT,
+ CHANGE COLUMN `member_id` `member_id` INT(11) NOT NULL ,
+ CHANGE COLUMN `uuid` `remember_me_id` VARCHAR(255) NOT NULL ,
+ ADD COLUMN `expiry` DATETIME NOT NULL AFTER `remember_me_id`,
+ DROP INDEX `member_uuid` ,
+ ADD INDEX `idx_remember` (`member_id` ASC, `remember_me_id` ASC, `expiry` ASC);
UPDATE `session`
-SET expiry = DATE_ADD( `session`.created, INTERVAL + 31536000 SECOND)
+SET `expiry` = DATE_ADD(`session`.`created`, INTERVAL + 31536000 SECOND)
;
diff --git a/sql_code/20161130_add_stat_downloads_quarter_year.sql b/sql_code/20161130_add_stat_downloads_quarter_year.sql
index 0666774a0..e65414ada 100644
--- a/sql_code/20161130_add_stat_downloads_quarter_year.sql
+++ b/sql_code/20161130_add_stat_downloads_quarter_year.sql
@@ -1,12 +1,12 @@
-
-CREATE TABLE `stat_downloads_quarter_year` (
- `project_id` INT(11) NOT NULL DEFAULT '0',
- `project_category_id` INT(11) NOT NULL DEFAULT '0',
- `ppload_collection_id` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `amount` BIGINT(21) NOT NULL DEFAULT '0',
- `category_title` VARCHAR(100) NOT NULL COLLATE 'utf8_general_ci',
- INDEX `idx_project_id` (`project_id`),
- INDEX `idx_collection_id` (`ppload_collection_id`)
+CREATE TABLE `stat_downloads_quarter_year`
+(
+ `project_id` INT(11) NOT NULL DEFAULT '0',
+ `project_category_id` INT(11) NOT NULL DEFAULT '0',
+ `ppload_collection_id` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `amount` BIGINT(21) NOT NULL DEFAULT '0',
+ `category_title` VARCHAR(100) NOT NULL COLLATE 'utf8_general_ci',
+ INDEX `idx_project_id` (`project_id`),
+ INDEX `idx_collection_id` (`ppload_collection_id`)
)
-ENGINE=InnoDB
+ ENGINE = InnoDB
;
\ No newline at end of file
diff --git a/sql_code/20170103_add_trigger_comment_update.sql b/sql_code/20170103_add_trigger_comment_update.sql
index 997976d9f..d3e7f4c28 100644
--- a/sql_code/20170103_add_trigger_comment_update.sql
+++ b/sql_code/20170103_add_trigger_comment_update.sql
@@ -1,14 +1,18 @@
/**
* If a comment will be deleted (hidden) then update num of
* active comments in project (viewd in explore list).
*/
-CREATE TRIGGER `comment_update` BEFORE UPDATE ON `comments` FOR EACH ROW BEGIN
+CREATE TRIGGER `comment_update`
+ BEFORE UPDATE
+ ON `comments`
+ FOR EACH ROW
+BEGIN
- IF NEW.comment_active = 0 AND OLD.comment_active = 1 THEN
-
- UPDATE project p
- SET p.count_comments = (p.count_comments-1)
- WHERE p.project_id = NEW.comment_target_id;
-
- END IF;
+ IF `NEW`.`comment_active` = 0 AND `OLD`.`comment_active` = 1 THEN
+
+ UPDATE `project` `p`
+ SET `p`.`count_comments` = (`p`.`count_comments` - 1)
+ WHERE `p`.`project_id` = `NEW`.`comment_target_id`;
+
+ END IF;
END
diff --git a/sql_code/20170112_create_table_member_token.sql b/sql_code/20170112_create_table_member_token.sql
index a91f1d526..0b007d6d8 100644
--- a/sql_code/20170112_create_table_member_token.sql
+++ b/sql_code/20170112_create_table_member_token.sql
@@ -1,25 +1,30 @@
-CREATE TABLE `member_token` (
- `token_id` int(11) NOT NULL AUTO_INCREMENT,
- `token_member_id` int(11) NOT NULL,
- `token_provider_name` varchar(45) NOT NULL,
- `token_value` varchar(45) NOT NULL,
- `token_provider_username` varchar(45) DEFAULT NULL,
- `token_fingerprint` varchar(45) DEFAULT NULL,
- `token_created` datetime DEFAULT NULL,
- `token_changed` datetime DEFAULT NULL,
- `token_deleted` datetime DEFAULT NULL,
- PRIMARY KEY (`token_id`),
- KEY `idx_token` (`token_member_id`,`token_provider_name`,`token_value`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+CREATE TABLE `member_token`
+(
+ `token_id` int(11) NOT NULL AUTO_INCREMENT,
+ `token_member_id` int(11) NOT NULL,
+ `token_provider_name` varchar(45) NOT NULL,
+ `token_value` varchar(45) NOT NULL,
+ `token_provider_username` varchar(45) DEFAULT NULL,
+ `token_fingerprint` varchar(45) DEFAULT NULL,
+ `token_created` datetime DEFAULT NULL,
+ `token_changed` datetime DEFAULT NULL,
+ `token_deleted` datetime DEFAULT NULL,
+ PRIMARY KEY (`token_id`),
+ KEY `idx_token` (`token_member_id`, `token_provider_name`, `token_value`)
+) ENGINE = InnoDB
+ DEFAULT CHARSET = `latin1`;
DELIMITER $$
-DROP TRIGGER IF EXISTS member_token_BEFORE_INSERT$$
+DROP TRIGGER IF EXISTS `member_token_BEFORE_INSERT`$$
-CREATE DEFINER = CURRENT_USER TRIGGER `member_token_BEFORE_INSERT` BEFORE INSERT ON `member_token` FOR EACH ROW
- BEGIN
- IF NEW.token_created IS NULL THEN
- SET NEW.token_created = NOW();
+CREATE DEFINER = CURRENT_USER TRIGGER `member_token_BEFORE_INSERT`
+ BEFORE INSERT
+ ON `member_token`
+ FOR EACH ROW
+BEGIN
+ IF `NEW`.`token_created` IS NULL THEN
+ SET `NEW`.`token_created` = NOW();
END IF;
- END$$
+END$$
DELIMITER ;
diff --git a/sql_code/20170123_add_masspay.sql b/sql_code/20170123_add_masspay.sql
index b21e80964..ce2e67cab 100644
--- a/sql_code/20170123_add_masspay.sql
+++ b/sql_code/20170123_add_masspay.sql
@@ -1,35 +1,41 @@
-DROP VIEW stat_dl_payment_last_month;
+DROP VIEW `stat_dl_payment_last_month`;
-CREATE VIEW stat_dl_payment_last_month AS
+CREATE VIEW `stat_dl_payment_last_month` AS
#Letzter Monat
-SELECT (DATE_FORMAT(NOW() - INTERVAL 1 MONTH,'%Y%m')) as yearmonth, count(d.id) AS num_downloads, d.owner_id as member_id, m.username, count(d.id)/100 as amount,m.mail,m.paypal_mail
-FROM ppload.ppload_files_downloaded d
-JOIN member m ON m.member_id = d.owner_id
-WHERE
- (d.downloaded_timestamp BETWEEN CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01 00:00:00') AND CONCAT(LEFT(NOW(),7),'-01 00:00:00'))
+SELECT (DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y%m')) AS `yearmonth`,
+ count(`d`.`id`) AS `num_downloads`,
+ `d`.`owner_id` AS `member_id`,
+ `m`.`username`,
+ count(`d`.`id`) / 100 AS `amount`,
+ `m`.`mail`,
+ `m`.`paypal_mail`
+FROM `ppload`.`ppload_files_downloaded` `d`
+ JOIN `member` `m` ON `m`.`member_id` = `d`.`owner_id`
+WHERE (`d`.`downloaded_timestamp` BETWEEN CONCAT(LEFT(NOW() - INTERVAL 1 MONTH, 7), '-01 00:00:00') AND CONCAT(LEFT(NOW(), 7), '-01 00:00:00'))
# AND count(d.id) > 100
-GROUP BY d.owner_id
-ORDER BY count(d.id) DESC;
+GROUP BY `d`.`owner_id`
+ORDER BY count(`d`.`id`) DESC;
-CREATE TABLE `payout` (
- `id` INT(11) NOT NULL AUTO_INCREMENT,
- `yearmonth` INT(11) NOT NULL,
- `member_id` INT(11) NOT NULL,
- `mail` VARCHAR(50) NOT NULL,
- `paypal_mail` VARCHAR(50) NULL DEFAULT NULL,
- `amount` DOUBLE NOT NULL,
- `num_downloads` INT(11) NOT NULL,
- `status` INT(11) NOT NULL DEFAULT '0' COMMENT '0=new,1=start request,2=money recieved,99=error',
- `timestamp_create` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `timestamp_masspay_start` TIMESTAMP NULL DEFAULT NULL,
- `timestamp_masspay_last_ipn` TIMESTAMP NULL DEFAULT NULL,
- `paypal_ipn` TEXT NULL,
- PRIMARY KEY (`id`),
- UNIQUE INDEX `UK_PAYOUT` (`yearmonth`, `member_id`)
+CREATE TABLE `payout`
+(
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
+ `yearmonth` INT(11) NOT NULL,
+ `member_id` INT(11) NOT NULL,
+ `mail` VARCHAR(50) NOT NULL,
+ `paypal_mail` VARCHAR(50) NULL DEFAULT NULL,
+ `amount` DOUBLE NOT NULL,
+ `num_downloads` INT(11) NOT NULL,
+ `status` INT(11) NOT NULL DEFAULT '0' COMMENT '0=new,1=start request,2=money recieved,99=error',
+ `timestamp_create` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `timestamp_masspay_start` TIMESTAMP NULL DEFAULT NULL,
+ `timestamp_masspay_last_ipn` TIMESTAMP NULL DEFAULT NULL,
+ `paypal_ipn` TEXT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE INDEX `UK_PAYOUT` (`yearmonth`, `member_id`)
)
-COMMENT='Table for our monthly payouts'
-COLLATE='latin1_swedish_ci'
-ENGINE=InnoDB
+ COMMENT ='Table for our monthly payouts'
+ COLLATE = 'latin1_swedish_ci'
+ ENGINE = InnoDB
;
diff --git a/sql_code/20170125_add_package_type_in_store_config.sql b/sql_code/20170125_add_package_type_in_store_config.sql
index 97f97a1ed..0359b19e0 100644
--- a/sql_code/20170125_add_package_type_in_store_config.sql
+++ b/sql_code/20170125_add_package_type_in_store_config.sql
@@ -1,2 +1,2 @@
ALTER TABLE `config_store`
- ADD COLUMN `package_type` VARCHAR(45) NULL DEFAULT NULL COMMENT '1-n package_type_ids' AFTER `google_id`;
+ ADD COLUMN `package_type` VARCHAR(45) NULL DEFAULT NULL COMMENT '1-n package_type_ids' AFTER `google_id`;
diff --git a/sql_code/20170223_add_table_sso_token b/sql_code/20170223_add_table_sso_token
deleted file mode 100644
index b6f094536..000000000
--- a/sql_code/20170223_add_table_sso_token
+++ /dev/null
@@ -1,28 +0,0 @@
-USE `pling`;
-
-CREATE TABLE `sso_auth_token` (
- `sso_auth_token_id` int(11) NOT NULL AUTO_INCREMENT,
- `token_member_id` int(11) NOT NULL,
- `token_value` varchar(45) NOT NULL,
- `token_action` varchar(45) NOT NULL,
- `remember_me` int(1) DEFAULT '0',
- `token_created` datetime DEFAULT NULL,
- `token_changed` datetime DEFAULT NULL,
- `token_expired` datetime DEFAULT NULL,
- PRIMARY KEY (`sso_auth_token_id`),
- KEY `idx_token` (`token_member_id`,`token_value`,`token_action`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
-
-DELIMITER $$
-
-DROP TRIGGER IF EXISTS sso_auth_token_BEFORE_INSERT$$
-CREATE DEFINER = CURRENT_USER TRIGGER `sso_auth_token_BEFORE_INSERT` BEFORE INSERT ON `sso_auth_token` FOR EACH ROW
- BEGIN
- IF NEW.token_created IS NULL THEN
- SET NEW.token_created = NOW();
- END IF;
- IF NEW.token_expired IS NULL THEN
- SET NEW.token_expired = NOW() + INTERVAL 1 HOUR;
- END IF;
- END$$
-DELIMITER ;
diff --git a/sql_code/20170223_add_table_sso_token.sql b/sql_code/20170223_add_table_sso_token.sql
new file mode 100644
index 000000000..2d70a5205
--- /dev/null
+++ b/sql_code/20170223_add_table_sso_token.sql
@@ -0,0 +1,34 @@
+
+
+CREATE TABLE `sso_auth_token`
+(
+ `sso_auth_token_id` int(11) NOT NULL AUTO_INCREMENT,
+ `token_member_id` int(11) NOT NULL,
+ `token_value` varchar(45) NOT NULL,
+ `token_action` varchar(45) NOT NULL,
+ `remember_me` int(1) DEFAULT '0',
+ `token_created` datetime DEFAULT NULL,
+ `token_changed` datetime DEFAULT NULL,
+ `token_expired` datetime DEFAULT NULL,
+ PRIMARY KEY (`sso_auth_token_id`),
+ KEY `idx_token` (`token_member_id`, `token_value`, `token_action`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 1
+ DEFAULT CHARSET = `latin1`;
+
+DELIMITER $$
+
+DROP TRIGGER IF EXISTS `sso_auth_token_BEFORE_INSERT`$$
+CREATE DEFINER = CURRENT_USER TRIGGER `sso_auth_token_BEFORE_INSERT`
+ BEFORE INSERT
+ ON `sso_auth_token`
+ FOR EACH ROW
+BEGIN
+ IF `NEW`.`token_created` IS NULL THEN
+ SET `NEW`.`token_created` = NOW();
+ END IF;
+ IF `NEW`.`token_expired` IS NULL THEN
+ SET `NEW`.`token_expired` = NOW() + INTERVAL 1 HOUR;
+ END IF;
+END$$
+DELIMITER ;
diff --git a/sql_code/20170505_projects_mv.sql b/sql_code/20170505_projects_mv.sql
index f5e9bd3a7..05d41cda8 100644
--- a/sql_code/20170505_projects_mv.sql
+++ b/sql_code/20170505_projects_mv.sql
@@ -1,160 +1,160 @@
ALTER TABLE `pling`.`project`
- ADD COLUMN `hive_category_id` INT(11) NOT NULL DEFAULT 0 AFTER `source_type`;
+ ADD COLUMN `hive_category_id` INT(11) NOT NULL DEFAULT 0 AFTER `source_type`;
#create view and tables
-DROP VIEW IF EXISTS stat_projects_v;
-CREATE VIEW stat_projects_v AS
-SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`is_active` AS `is_active`,
- `project`.`is_deleted` AS `is_deleted`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`github_code` AS `github_code`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- `project`.`ppload_collection_id` AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`approved` AS `approved`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `project`.`changed_at` AS `project_changed_at`,
- (ROUND(((`project`.`count_likes` + 6) / ((`project`.`count_likes` + `project`.`count_dislikes`) + 12)),2) * 100) AS `laplace_score`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`
+DROP VIEW IF EXISTS `stat_projects_v`;
+CREATE VIEW `stat_projects_v` AS
+SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`is_active` AS `is_active`,
+ `project`.`is_deleted` AS `is_deleted`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`github_code` AS `github_code`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`approved` AS `approved`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `project`.`changed_at` AS `project_changed_at`,
+ (ROUND(((`project`.`count_likes` + 6) / ((`project`.`count_likes` + `project`.`count_dislikes`) + 12)), 2) *
+ 100) AS `laplace_score`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`
FROM (((`project`
-JOIN `member` ON(((`project`.`member_id` = `member`.`member_id`) AND (`member`.`is_active` = 1) AND (`member`.`is_deleted` = 0))))
-JOIN `project_category` ON((`project`.`project_category_id` = `project_category`.`project_category_id`)))
-LEFT JOIN `stat_plings` ON((`project`.`project_id` = `stat_plings`.`project_id`)))
+ JOIN `member` ON (((`project`.`member_id` = `member`.`member_id`) AND (`member`.`is_active` = 1) AND
+ (`member`.`is_deleted` = 0))))
+ JOIN `project_category` ON ((`project`.`project_category_id` = `project_category`.`project_category_id`)))
+ LEFT JOIN `stat_plings` ON ((`project`.`project_id` = `stat_plings`.`project_id`)))
WHERE ((`project`.`status` = 100) AND (`project`.`type_id` = 1))
;
-CREATE TABLE `stat_projects` (
- `project_id` INT(11) NOT NULL DEFAULT '0',
- `member_id` INT(11) NOT NULL DEFAULT '0',
- `content_type` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
- `project_category_id` INT(11) NOT NULL DEFAULT '0',
- `hive_category_id` INT(11) NOT NULL DEFAULT '0',
- `is_active` INT(1) NOT NULL DEFAULT '0',
- `is_deleted` INT(1) NOT NULL DEFAULT '0',
- `status` INT(11) NOT NULL DEFAULT '0',
- `uuid` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `pid` INT(11) NULL DEFAULT NULL COMMENT 'ParentId',
- `type_id` INT(11) NULL DEFAULT NULL COMMENT '0 = DummyProject, 1 = Project, 2 = Update',
- `title` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `description` TEXT NULL COLLATE 'utf8_general_ci',
- `version` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `image_big` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `image_small` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `start_date` DATETIME NULL DEFAULT NULL,
- `content_url` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `created_at` DATETIME NULL DEFAULT NULL,
- `changed_at` DATETIME NULL DEFAULT NULL,
- `deleted_at` DATETIME NULL DEFAULT NULL,
- `creator_id` INT(11) NULL DEFAULT NULL COMMENT 'Member_id of the creator. Importent for groups.',
- `facebook_code` TEXT NULL COLLATE 'utf8_general_ci',
- `github_code` TEXT NULL COLLATE 'utf8_general_ci',
- `twitter_code` TEXT NULL COLLATE 'utf8_general_ci',
- `google_code` TEXT NULL COLLATE 'utf8_general_ci',
- `link_1` TEXT NULL COLLATE 'utf8_general_ci',
- `embed_code` TEXT NULL COLLATE 'utf8_general_ci',
- `ppload_collection_id` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `validated` INT(1) NULL DEFAULT NULL,
- `validated_at` DATETIME NULL DEFAULT NULL,
- `featured` INT(1) NULL DEFAULT NULL,
- `approved` INT(1) NULL DEFAULT NULL,
- `amount` INT(11) NULL DEFAULT NULL,
- `amount_period` VARCHAR(45) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `claimable` INT(1) NULL DEFAULT NULL,
- `claimed_by_member` INT(11) NULL DEFAULT NULL,
- `count_likes` INT(11) NULL DEFAULT NULL,
- `count_dislikes` INT(11) NULL DEFAULT NULL,
- `count_comments` INT(11) NULL DEFAULT NULL,
- `count_downloads_hive` INT(11) NULL DEFAULT NULL,
- `source_id` INT(11) NULL DEFAULT NULL,
- `source_pk` INT(11) NULL DEFAULT NULL,
- `source_type` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `project_validated` INT(1) NULL DEFAULT NULL,
- `project_uuid` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `project_status` INT(11) NOT NULL DEFAULT '0',
- `project_created_at` DATETIME NULL DEFAULT NULL,
- `member_type` INT(1) NOT NULL DEFAULT '0' COMMENT 'Type: 0 = Member, 1 = group',
- `project_member_id` INT(10) NOT NULL DEFAULT '0',
- `project_changed_at` DATETIME NULL DEFAULT NULL,
- `laplace_score` DECIMAL(17,2) NULL DEFAULT NULL,
- `username` VARCHAR(255) NOT NULL COLLATE 'utf8_bin',
- `profile_image_url` VARCHAR(355) NULL DEFAULT NULL COMMENT 'URL to the profile-image' COLLATE 'utf8_general_ci',
- `city` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `country` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `member_created_at` DATETIME NULL DEFAULT NULL,
- `paypal_mail` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
- `cat_title` VARCHAR(100) NOT NULL COLLATE 'utf8_general_ci',
- `amount_received` DOUBLE(19,2) NULL DEFAULT NULL,
- `count_plings` BIGINT(21) NULL DEFAULT NULL,
- `count_plingers` BIGINT(21) NULL DEFAULT NULL,
- `latest_pling` TIMESTAMP NULL DEFAULT NULL COMMENT 'When did paypal say, that this pling was payed successfull',
- INDEX `idx_project_cat_id` (`project_category_id`)
+CREATE TABLE `stat_projects`
+(
+ `project_id` INT(11) NOT NULL DEFAULT '0',
+ `member_id` INT(11) NOT NULL DEFAULT '0',
+ `content_type` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
+ `project_category_id` INT(11) NOT NULL DEFAULT '0',
+ `hive_category_id` INT(11) NOT NULL DEFAULT '0',
+ `is_active` INT(1) NOT NULL DEFAULT '0',
+ `is_deleted` INT(1) NOT NULL DEFAULT '0',
+ `status` INT(11) NOT NULL DEFAULT '0',
+ `uuid` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `pid` INT(11) NULL DEFAULT NULL COMMENT 'ParentId',
+ `type_id` INT(11) NULL DEFAULT NULL COMMENT '0 = DummyProject, 1 = Project, 2 = Update',
+ `title` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `description` TEXT NULL COLLATE 'utf8_general_ci',
+ `version` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `image_big` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `image_small` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `start_date` DATETIME NULL DEFAULT NULL,
+ `content_url` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `created_at` DATETIME NULL DEFAULT NULL,
+ `changed_at` DATETIME NULL DEFAULT NULL,
+ `deleted_at` DATETIME NULL DEFAULT NULL,
+ `creator_id` INT(11) NULL DEFAULT NULL COMMENT 'Member_id of the creator. Importent for groups.',
+ `facebook_code` TEXT NULL COLLATE 'utf8_general_ci',
+ `github_code` TEXT NULL COLLATE 'utf8_general_ci',
+ `twitter_code` TEXT NULL COLLATE 'utf8_general_ci',
+ `google_code` TEXT NULL COLLATE 'utf8_general_ci',
+ `link_1` TEXT NULL COLLATE 'utf8_general_ci',
+ `embed_code` TEXT NULL COLLATE 'utf8_general_ci',
+ `ppload_collection_id` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `validated` INT(1) NULL DEFAULT NULL,
+ `validated_at` DATETIME NULL DEFAULT NULL,
+ `featured` INT(1) NULL DEFAULT NULL,
+ `approved` INT(1) NULL DEFAULT NULL,
+ `amount` INT(11) NULL DEFAULT NULL,
+ `amount_period` VARCHAR(45) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `claimable` INT(1) NULL DEFAULT NULL,
+ `claimed_by_member` INT(11) NULL DEFAULT NULL,
+ `count_likes` INT(11) NULL DEFAULT NULL,
+ `count_dislikes` INT(11) NULL DEFAULT NULL,
+ `count_comments` INT(11) NULL DEFAULT NULL,
+ `count_downloads_hive` INT(11) NULL DEFAULT NULL,
+ `source_id` INT(11) NULL DEFAULT NULL,
+ `source_pk` INT(11) NULL DEFAULT NULL,
+ `source_type` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `project_validated` INT(1) NULL DEFAULT NULL,
+ `project_uuid` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `project_status` INT(11) NOT NULL DEFAULT '0',
+ `project_created_at` DATETIME NULL DEFAULT NULL,
+ `member_type` INT(1) NOT NULL DEFAULT '0' COMMENT 'Type: 0 = Member, 1 = group',
+ `project_member_id` INT(10) NOT NULL DEFAULT '0',
+ `project_changed_at` DATETIME NULL DEFAULT NULL,
+ `laplace_score` DECIMAL(17, 2) NULL DEFAULT NULL,
+ `username` VARCHAR(255) NOT NULL COLLATE 'utf8_bin',
+ `profile_image_url` VARCHAR(355) NULL DEFAULT NULL COMMENT 'URL to the profile-image' COLLATE 'utf8_general_ci',
+ `city` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `country` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `member_created_at` DATETIME NULL DEFAULT NULL,
+ `paypal_mail` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
+ `cat_title` VARCHAR(100) NOT NULL COLLATE 'utf8_general_ci',
+ `amount_received` DOUBLE(19, 2) NULL DEFAULT NULL,
+ `count_plings` BIGINT(21) NULL DEFAULT NULL,
+ `count_plingers` BIGINT(21) NULL DEFAULT NULL,
+ `latest_pling` TIMESTAMP NULL DEFAULT NULL COMMENT 'When did paypal say, that this pling was payed successfull',
+ INDEX `idx_project_cat_id` (`project_category_id`)
)
-ENGINE=InnoDB
+ ENGINE = InnoDB
;
-
-
#Update machanism
START TRANSACTION;
-CREATE TABLE stat_projects_new LIKE stat_projects;
-INSERT INTO stat_projects_new (select * from stat_projects_v);
+CREATE TABLE `stat_projects_new` LIKE `stat_projects`;
+INSERT INTO `stat_projects_new` (SELECT * FROM `stat_projects_v`);
RENAME TABLE `stat_projects` TO `stat_projects_old`;
RENAME TABLE `stat_projects_new` TO `stat_projects`;
DROP TABLE `stat_projects_old`;
COMMIT;
diff --git a/sql_code/20170510_add_fields_stat_projects.sql b/sql_code/20170510_add_fields_stat_projects.sql
index 8a8b32a4d..abda2e921 100644
--- a/sql_code/20170510_add_fields_stat_projects.sql
+++ b/sql_code/20170510_add_fields_stat_projects.sql
@@ -1,3 +1,3 @@
ALTER TABLE `stat_projects`
- ADD COLUMN `cat_xdg_type` VARCHAR(100) NOT NULL AFTER `cat_title`,
- ADD COLUMN `cat_name_legacy` VARCHAR(100) NOT NULL AFTER `cat_xdg_type`;
+ ADD COLUMN `cat_xdg_type` VARCHAR(100) NOT NULL AFTER `cat_title`,
+ ADD COLUMN `cat_name_legacy` VARCHAR(100) NOT NULL AFTER `cat_xdg_type`;
diff --git a/sql_code/20170526_alter_table_report_project.sql b/sql_code/20170526_alter_table_report_project.sql
index 200b7a849..7060fd7b9 100644
--- a/sql_code/20170526_alter_table_report_project.sql
+++ b/sql_code/20170526_alter_table_report_project.sql
@@ -1,6 +1,6 @@
-USE `pling`;
+
ALTER TABLE `reports_project`
- CHANGE COLUMN `is_deleted` `is_deleted` INT(1) NOT NULL DEFAULT '0' ,
- ADD INDEX `idxReport` (`project_id` ASC, `reported_by` ASC, `is_deleted` ASC, `created_at` ASC),
- DROP INDEX `idxMemberId` ,
- DROP INDEX `idxProjectId` ;
\ No newline at end of file
+ CHANGE COLUMN `is_deleted` `is_deleted` INT(1) NOT NULL DEFAULT '0' ,
+ ADD INDEX `idxReport` (`project_id` ASC, `reported_by` ASC, `is_deleted` ASC, `created_at` ASC),
+ DROP INDEX `idxMemberId` ,
+ DROP INDEX `idxProjectId`;
\ No newline at end of file
diff --git a/sql_code/20170529_add_view reported_projects.sql b/sql_code/20170529_add_view reported_projects.sql
index c0ed1b284..3df6ff036 100644
--- a/sql_code/20170529_add_view reported_projects.sql
+++ b/sql_code/20170529_add_view reported_projects.sql
@@ -1,103 +1,98 @@
-USE `pling`;
+
CREATE OR REPLACE
- ALGORITHM = UNDEFINED
- DEFINER = CURRENT_USER
- SQL SECURITY DEFINER
-VIEW `view_reported_projects` AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+ ALGORITHM = UNDEFINED
+ DEFINER = CURRENT_USER
+ SQL SECURITY DEFINER
+ VIEW `view_reported_projects` AS
+SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+FROM `reports_project`
+WHERE (`reports_project`.`is_deleted` = 0)
+GROUP BY `reports_project`.`project_id`
+;
CREATE OR REPLACE
- ALGORITHM = TEMPTABLE
- DEFINER = CURRENT_USER
- SQL SECURITY DEFINER
-VIEW `stat_projects_v` AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`github_code` AS `github_code`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- `project`.`ppload_collection_id` AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`approved` AS `approved`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `project`.`changed_at` AS `project_changed_at`,
- (ROUND(((`project`.`count_likes` + 6) / ((`project`.`count_likes` + `project`.`count_dislikes`) + 12)), 2) * 100) AS `laplace_score`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `view_reported_projects`.`amount_reports` AS `amount_reports`
- FROM
- `project`
- JOIN
- `member` ON ((`member`.`member_id` = `project`.`member_id`))
- JOIN
- `project_category` ON ((`project`.`project_category_id` = `project_category`.`project_category_id`))
- LEFT JOIN
- `stat_plings` ON ((`stat_plings`.`project_id` = `project`.`project_id`))
- LEFT JOIN
- `view_reported_projects` ON ((`view_reported_projects`.`project_id` = `project`.`project_id`))
- WHERE
- ((`member`.`is_deleted` = 0)
- AND (`member`.`is_active` = 1)
- AND (`project`.`type_id` = 1)
- AND (`project`.`status` = 100))
+ ALGORITHM = TEMPTABLE
+ DEFINER = CURRENT_USER
+ SQL SECURITY DEFINER
+ VIEW `stat_projects_v` AS
+SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`github_code` AS `github_code`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`approved` AS `approved`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `project`.`changed_at` AS `project_changed_at`,
+ (ROUND(((`project`.`count_likes` + 6) / ((`project`.`count_likes` + `project`.`count_dislikes`) + 12)), 2) *
+ 100) AS `laplace_score`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `view_reported_projects`.`amount_reports` AS `amount_reports`
+FROM `project`
+ JOIN
+ `member` ON ((`member`.`member_id` = `project`.`member_id`))
+ JOIN
+ `project_category` ON ((`project`.`project_category_id` = `project_category`.`project_category_id`))
+ LEFT JOIN
+ `stat_plings` ON ((`stat_plings`.`project_id` = `project`.`project_id`))
+ LEFT JOIN
+ `view_reported_projects` ON ((`view_reported_projects`.`project_id` = `project`.`project_id`))
+WHERE ((`member`.`is_deleted` = 0)
+ AND (`member`.`is_active` = 1)
+ AND (`project`.`type_id` = 1)
+ AND (`project`.`status` = 100))
;
diff --git a/sql_code/20170607_add_field_to_config_store.sql b/sql_code/20170607_add_field_to_config_store.sql
index 8aac6d310..410700e56 100644
--- a/sql_code/20170607_add_field_to_config_store.sql
+++ b/sql_code/20170607_add_field_to_config_store.sql
@@ -1,2 +1,2 @@
ALTER TABLE `config_store`
- ADD COLUMN `cross_domain_login` INT(1) NOT NULL DEFAULT '0' AFTER `package_type`;
+ ADD COLUMN `cross_domain_login` INT(1) NOT NULL DEFAULT '0' AFTER `package_type`;
diff --git a/sql_code/20170607_add_field_to_project.sql b/sql_code/20170607_add_field_to_project.sql
index 8870ebfe0..a927ef29e 100644
--- a/sql_code/20170607_add_field_to_project.sql
+++ b/sql_code/20170607_add_field_to_project.sql
@@ -1,2 +1,2 @@
ALTER TABLE `project`
- ADD COLUMN `spam_checked` INT(1) NOT NULL DEFAULT '0' AFTER `approved`;
+ ADD COLUMN `spam_checked` INT(1) NOT NULL DEFAULT '0' AFTER `approved`;
diff --git a/sql_code/20170608_add_paypal_valid_status.sql b/sql_code/20170608_add_paypal_valid_status.sql
index 0cf31d699..eba6fe687 100644
--- a/sql_code/20170608_add_paypal_valid_status.sql
+++ b/sql_code/20170608_add_paypal_valid_status.sql
@@ -1,23 +1,36 @@
ALTER TABLE `member`
- ADD COLUMN `paypal_valid_status` MEDIUMINT NULL DEFAULT NULL AFTER `paypal_mail`;
+ ADD COLUMN `paypal_valid_status` MEDIUMINT NULL DEFAULT NULL AFTER `paypal_mail`;
-CREATE TABLE `paypal_valid_status` (
- `id` INT(11) NOT NULL,
- `title` VARCHAR(50) NULL DEFAULT NULL,
- `description` TEXT NULL,
- `color` VARCHAR(50) NULL DEFAULT NULL,
- `is_active` INT(1) NULL DEFAULT '1',
- PRIMARY KEY (`id`)
+CREATE TABLE `paypal_valid_status`
+(
+ `id` INT(11) NOT NULL,
+ `title` VARCHAR(50) NULL DEFAULT NULL,
+ `description` TEXT NULL,
+ `color` VARCHAR(50) NULL DEFAULT NULL,
+ `is_active` INT(1) NULL DEFAULT '1',
+ PRIMARY KEY (`id`)
)
-COLLATE='latin1_swedish_ci'
-ENGINE=InnoDB
+ COLLATE = 'latin1_swedish_ci'
+ ENGINE = InnoDB
;
-insert into paypal_valid_status (id,title,desciption,color) values (0,'New','New - valid status unknown','yellow');
-insert into paypal_valid_status (id,title,desciption,color) values (100,'Valid','Valid - we can send you money per PayPal','green');
-insert into paypal_valid_status (id,title,desciption,color) values (404,'Unknown Address','Invalid - Your PayPal-Address could not be found.','red');
-insert into paypal_valid_status (id,title,desciption,color) values (500,'Invalid','Invalid - at the moment we can not send you money per PayPal','red');
-insert into paypal_valid_status (id,title,desciption,color) values (501,'Can receive only from homepage.','Invalid - You can only receive money from homepage. Please change your Settings on the PayPal Website.','red');
-insert into paypal_valid_status (id,title,desciption,color) values (502,'Can receive only personal payments.','Invalid - You can not receive personal payments. Please change your Settings on the PayPal Website.','red');
-insert into paypal_valid_status (id,title,desciption,color) values (503,'Currently unable to receive money.','Invalid - You are currently unable to receive money. Please change your Settings on the PayPal Website.','red');
+INSERT INTO `paypal_valid_status` (`id`, `title`, `desciption`, `color`)
+VALUES (0, 'New', 'New - valid status unknown', 'yellow');
+INSERT INTO `paypal_valid_status` (`id`, `title`, `desciption`, `color`)
+VALUES (100, 'Valid', 'Valid - we can send you money per PayPal', 'green');
+INSERT INTO `paypal_valid_status` (`id`, `title`, `desciption`, `color`)
+VALUES (404, 'Unknown Address', 'Invalid - Your PayPal-Address could not be found.', 'red');
+INSERT INTO `paypal_valid_status` (`id`, `title`, `desciption`, `color`)
+VALUES (500, 'Invalid', 'Invalid - at the moment we can not send you money per PayPal', 'red');
+INSERT INTO `paypal_valid_status` (`id`, `title`, `desciption`, `color`)
+VALUES (501, 'Can receive only from homepage.',
+ 'Invalid - You can only receive money from homepage. Please change your Settings on the PayPal Website.',
+ 'red');
+INSERT INTO `paypal_valid_status` (`id`, `title`, `desciption`, `color`)
+VALUES (502, 'Can receive only personal payments.',
+ 'Invalid - You can not receive personal payments. Please change your Settings on the PayPal Website.', 'red');
+INSERT INTO `paypal_valid_status` (`id`, `title`, `desciption`, `color`)
+VALUES (503, 'Currently unable to receive money.',
+ 'Invalid - You are currently unable to receive money. Please change your Settings on the PayPal Website.',
+ 'red');
diff --git a/sql_code/20170608_alter_table_member_addcolumn.sql b/sql_code/20170608_alter_table_member_addcolumn.sql
index 066cf8416..37d38f632 100644
--- a/sql_code/20170608_alter_table_member_addcolumn.sql
+++ b/sql_code/20170608_alter_table_member_addcolumn.sql
@@ -1 +1,2 @@
-alter table member add column profile_image_url_bg varchar(355) after profile_image_url;
\ No newline at end of file
+ALTER TABLE `member`
+ ADD COLUMN `profile_image_url_bg` varchar(355) AFTER `profile_image_url`;
\ No newline at end of file
diff --git a/sql_code/20170613_alter_member_table.sql b/sql_code/20170613_alter_member_table.sql
index 49943d9ee..924596477 100644
--- a/sql_code/20170613_alter_member_table.sql
+++ b/sql_code/20170613_alter_member_table.sql
@@ -1,2 +1,2 @@
ALTER TABLE `member`
- ADD COLUMN `profile_image_url_bg` VARCHAR(355) NULL DEFAULT NULL AFTER `profile_image_url`;
+ ADD COLUMN `profile_image_url_bg` VARCHAR(355) NULL DEFAULT NULL AFTER `profile_image_url`;
diff --git a/sql_code/20170622_add_reviews.sql b/sql_code/20170622_add_reviews.sql
index 916cdc369..ef2cb37a1 100644
--- a/sql_code/20170622_add_reviews.sql
+++ b/sql_code/20170622_add_reviews.sql
@@ -1,5 +1,6 @@
ALTER TABLE `project_rating`
- ADD COLUMN `comment_id` INT(11) NULL DEFAULT '0' COMMENT 'review for rating' AFTER `user_dislike`,
- ADD COLUMN `rating_active` INT(1) NULL DEFAULT '1' COMMENT 'active = 1, deleted = 0' AFTER `comment_id`;
+ ADD COLUMN `comment_id` INT(11) NULL DEFAULT '0' COMMENT 'review for rating' AFTER `user_dislike`,
+ ADD COLUMN `rating_active` INT(1) NULL DEFAULT '1' COMMENT 'active = 1, deleted = 0' AFTER `comment_id`;
-UPDATE project_rating r SET r.rating_active = 1;
+UPDATE `project_rating` `r`
+SET `r`.`rating_active` = 1;
diff --git a/sql_code/20170629_add_event_daily_views.sql b/sql_code/20170629_add_event_daily_views.sql
index 808b8e8dc..fedefbf7a 100644
--- a/sql_code/20170629_add_event_daily_views.sql
+++ b/sql_code/20170629_add_event_daily_views.sql
@@ -1,22 +1,29 @@
-CREATE TABLE stat_page_views_48h LIKE stat_page_views;
+CREATE TABLE `stat_page_views_48h` LIKE `stat_page_views`;
DELIMITER $$
-DROP TRIGGER IF EXISTS stat_page_views_AFTER_INSERT$$
-CREATE TRIGGER stat_page_views_AFTER_INSERT AFTER INSERT ON stat_page_views FOR EACH ROW BEGIN
- #insert also into table stat_page_views_48h
- INSERT INTO stat_page_views_48h (stat_page_views_id,project_id,ip,member_id,created_at) values (new.stat_page_views_id,new.project_id,new.ip,new.member_id,new.created_at);
+DROP TRIGGER IF EXISTS `stat_page_views_AFTER_INSERT`$$
+CREATE TRIGGER `stat_page_views_AFTER_INSERT`
+ AFTER INSERT
+ ON `stat_page_views`
+ FOR EACH ROW
+BEGIN
+ #insert also into table stat_page_views_48h
+ INSERT INTO `stat_page_views_48h` (`stat_page_views_id`, `project_id`, `ip`, `member_id`, `created_at`)
+ VALUES (`new`.`stat_page_views_id`, `new`.`project_id`, `new`.`ip`, `new`.`member_id`, `new`.`created_at`);
END$$
DROP EVENT IF EXISTS `e_generate_page_views_48h`;
CREATE EVENT `e_generate_page_views_48h`
- ON SCHEDULE
- EVERY 1 DAY STARTS '2018-11-20 05:00:00'
- ON COMPLETION PRESERVE
- ENABLE
- COMMENT 'Delete old page_view data from table stat_page_views_48h'
- DO
- DELETE FROM stat_page_views_48h WHERE created_at <= subdate(now(), 2);
-
+ ON SCHEDULE
+ EVERY 1 DAY STARTS '2018-11-20 05:00:00'
+ ON COMPLETION PRESERVE
+ ENABLE
+ COMMENT 'Delete old page_view data from table stat_page_views_48h'
+ DO
+ DELETE
+ FROM `stat_page_views_48h`
+ WHERE `created_at` <= subdate(now(), 2);
+
DELIMITER ;
\ No newline at end of file
diff --git a/sql_code/20170629_prod_daily_views.sql b/sql_code/20170629_prod_daily_views.sql
index ac6e5b379..e00b96681 100644
--- a/sql_code/20170629_prod_daily_views.sql
+++ b/sql_code/20170629_prod_daily_views.sql
@@ -1,52 +1,51 @@
-USE `pling`;
+
DROP PROCEDURE IF EXISTS `generate_stat_views_today`;
DELIMITER $$
USE `pling`$$
-CREATE DEFINER = CURRENT_USER PROCEDURE `generate_stat_views_today`()
- BEGIN
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `generate_stat_views_today`()
+BEGIN
DROP TABLE IF EXISTS `temp_stat_views_today`;
- CREATE TABLE `temp_stat_views_today` (
- `id` INT NOT NULL AUTO_INCREMENT,
- `project_id` INT(11) NOT NULL,
- `count_views` INT(11) NULL DEFAULT 0,
- `count_visitor` INT(11) NULL DEFAULT 0,
- `last_view` DATETIME NULL DEFAULT NULL,
- PRIMARY KEY (`id`),
- INDEX `idx_project` (`project_id` ASC)
+ CREATE TABLE `temp_stat_views_today`
+ (
+ `id` INT NOT NULL AUTO_INCREMENT,
+ `project_id` INT(11) NOT NULL,
+ `count_views` INT(11) NULL DEFAULT 0,
+ `count_visitor` INT(11) NULL DEFAULT 0,
+ `last_view` DATETIME NULL DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ INDEX `idx_project` (`project_id` ASC)
)
- ENGINE = MyISAM
+ ENGINE = MyISAM
AS
- SELECT
- project_id,
- COUNT(*) AS count_views,
- COUNT(DISTINCT `stat_page_views`.`ip`) AS `count_visitor`,
- MAX(`stat_page_views`.`created_at`) AS `last_view`
- FROM stat_page_views
- WHERE (stat_page_views.`created_at`
- BETWEEN DATE_FORMAT(NOW(), '%Y-%m-%d 00:00') AND DATE_FORMAT(NOW(), '%Y-%m-%d 23:59')
- )
- GROUP BY project_id;
-
- IF EXISTS(SELECT table_name
- FROM INFORMATION_SCHEMA.TABLES
- WHERE table_schema = DATABASE()
- AND table_name = 'stat_page_views_today_mv')
-
+ SELECT `project_id`,
+ COUNT(*) AS `count_views`,
+ COUNT(DISTINCT `stat_page_views`.`ip`) AS `count_visitor`,
+ MAX(`stat_page_views`.`created_at`) AS `last_view`
+ FROM `stat_page_views`
+ WHERE (`stat_page_views`.`created_at`
+ BETWEEN DATE_FORMAT(NOW(), '%Y-%m-%d 00:00') AND DATE_FORMAT(NOW(), '%Y-%m-%d 23:59')
+ )
+ GROUP BY `project_id`;
+
+ IF EXISTS(SELECT `table_name`
+ FROM `INFORMATION_SCHEMA`.`TABLES`
+ WHERE `table_schema` = DATABASE()
+ AND `table_name` = 'stat_page_views_today_mv')
THEN
-
- ALTER TABLE `stat_page_views_today_mv`
- RENAME TO `old_stat_views_today_mv`;
+ ALTER TABLE `stat_page_views_today_mv`
+ RENAME TO `old_stat_views_today_mv`;
END IF;
ALTER TABLE `temp_stat_views_today`
- RENAME TO `stat_page_views_today_mv`;
+ RENAME TO `stat_page_views_today_mv`;
DROP TABLE IF EXISTS `old_stat_views_today_mv`;
- END $$
+END $$
DELIMITER ;
diff --git a/sql_code/20170704_add_member_paypal_table.sql b/sql_code/20170704_add_member_paypal_table.sql
index d6491afd1..a2ed76a25 100644
--- a/sql_code/20170704_add_member_paypal_table.sql
+++ b/sql_code/20170704_add_member_paypal_table.sql
@@ -1,107 +1,397 @@
DROP TABLE `member_paypal`;
-CREATE TABLE `member_paypal` (
- `id` INT(11) NOT NULL AUTO_INCREMENT,
- `member_id` INT(11) NULL DEFAULT NULL,
- `paypal_address` VARCHAR(150) NULL DEFAULT NULL,
- `is_active` INT(1) NOT NULL DEFAULT '1',
- `name` VARCHAR(150) NULL DEFAULT NULL,
- `address` VARCHAR(150) NULL DEFAULT NULL,
- `currency` VARCHAR(150) NULL DEFAULT NULL,
- `country_code` VARCHAR(150) NULL DEFAULT NULL,
- `last_payment_status` VARCHAR(150) NULL DEFAULT NULL,
- `last_payment_amount` DOUBLE NULL DEFAULT NULL,
- `last_transaction_id` VARCHAR(50) NULL DEFAULT NULL,
- `last_transaction_event_code` VARCHAR(50) NULL DEFAULT NULL,
- `created_at` TIMESTAMP NULL DEFAULT NULL,
- `changed_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`)
+CREATE TABLE `member_paypal`
+(
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
+ `member_id` INT(11) NULL DEFAULT NULL,
+ `paypal_address` VARCHAR(150) NULL DEFAULT NULL,
+ `is_active` INT(1) NOT NULL DEFAULT '1',
+ `name` VARCHAR(150) NULL DEFAULT NULL,
+ `address` VARCHAR(150) NULL DEFAULT NULL,
+ `currency` VARCHAR(150) NULL DEFAULT NULL,
+ `country_code` VARCHAR(150) NULL DEFAULT NULL,
+ `last_payment_status` VARCHAR(150) NULL DEFAULT NULL,
+ `last_payment_amount` DOUBLE NULL DEFAULT NULL,
+ `last_transaction_id` VARCHAR(50) NULL DEFAULT NULL,
+ `last_transaction_event_code` VARCHAR(50) NULL DEFAULT NULL,
+ `created_at` TIMESTAMP NULL DEFAULT NULL,
+ `changed_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ PRIMARY KEY (`id`)
)
-COLLATE='utf8_general_ci'
-ENGINE=InnoDB
-AUTO_INCREMENT=74
+ COLLATE = 'utf8_general_ci'
+ ENGINE = InnoDB
+ AUTO_INCREMENT = 74
;
ALTER TABLE `member_paypal`
- ADD UNIQUE INDEX `uk_paypal_address` (`paypal_address`);
+ ADD UNIQUE INDEX `uk_paypal_address` (`paypal_address`);
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Алексей Варфоломеев','Completed','RUB','-21870.12','varlesh@gmail.com','7KK96863AX5754344','Алексей, Варфоломеев','T0000','RU',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Paul Beyens','Completed','EUR','-245.42','paulbeyens@gmail.com','96661567PS4341036','Paul, Beyens','T0000','BE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('LE MAOUT GUILLAUME','Completed','EUR','-94.48','exebetche@hotmail.fr','7F337922WT999935X','LE MAOUT, GUILLAUME','T0000','FR',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('','Pending','USD','-92.25','talamelli@libero.it','3M436460MU296622V','','T0000','',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Brook Hill','Completed','USD','-90.20','music_is4thesoul@yahoo.com','8GG56561YA353312S','Brook, Hill','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Keefer Rourke','Completed','CAD','-113.03','keefer.rourke@gmail.com','1DC62380HC6218649','Keefer, Rourke','T0000','CA',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Ahmed Alharbi','Completed','USD','-80.26','rsamalmot@gmail.com','9EY96472EY000824V','Ahmed, Alharbi','T0000','SA',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Matthieu James','Completed','EUR','-63.42','matthieu.james@gmail.com','2SY20996GF419200K','Matthieu, James','T0000','FR',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('CHRISTOPHER HOLLAND','Completed','CAD','-90.56','zrenfire@gmail.com','1UL56145SN3373905','CHRISTOPHER, HOLLAND','T0000','CA',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('eRescue','Completed','USD','-66.47','jmtodaro@gmail.com','99J12880X84142501','jeremy, todaro','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Michail Vourlakos','Completed','EUR','-44.59','mvourlakos@gmail.com','6FA17975VJ3169237','Michail, Vourlakos','T0000','GR',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('源斯 刘','Completed','USD','-50.70','1151548973@qq.com','8HC22880PR727672Y','源斯, 刘','T0000','C2',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('yanev','Completed','EUR','-42.06','gericom.hummer@gmail.com','1P966741WA233501Y','Nikola, Yanev','T0000','BG',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('RAVEfinity Open Source Design Project.','Completed','USD','-45.71','ravefinity@ravefinity.com','67A45065856497501','Jared, Soto','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Doyle Harpole','Completed','USD','-37.72','kubuntu4172@yahoo.com','2UK688847E0212107','Doyle, Harpole','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Dindin Hernawan','Completed','USD','-36.56','dindin_hernawan@yahoo.com','9TB91656EM146414W','Dindin, Hernawan','T0000','ID',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Michele Guerra','Completed','EUR','-30.66','mike.ieee1@gmail.com','85J96429SE204210U','Michele, Guerra','T0000','IT',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Charlie Henson','Completed','USD','-35.18','microfreaks@gmail.com','8LK70351BP7068617','Charlie, Henson','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('DRA','Completed','EUR','-28.65','daniruizdealegria@gmail.com','26N24064E8419024F','Daniel, Ruiz De Alegría','T0000','ES',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Holger Jaintsch','Pending','USD','-25.04','hjaintsch@gmail.com','2HL03710N2255450C','Holger, Jaintsch','T0000','DE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Oliver Scholtz','Completed','EUR','-20.22','scholli_tz@yahoo.de','5NX21697YB5246447','Oliver, Scholtz','T0000','ES',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Rudra Banerjee','Completed','SEK','-182.78','bnrj.rudra@live.com','7SJ50339R9869084T','Rudra, Banerjee','T0000','SE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Sam Hewitt','Completed','CAD','-25.90','hewittsamuel@gmail.com','7UR19536RV483230G','Sam, Hewitt','T0000','CA',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Daniel Faust','Pending','USD','-15.78','hessijames@ymail.com','5S9857397H8836636','Daniel, Faust','T0000','DE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Stolmet Żywiec Michał Dybczak','Completed','PLN','-52.91','biuro@stolmet-zywiec.pl','40V40234RC0517103','Michał, Dybczak','T0000','PL',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Milen Simic','Completed','EUR','-12.02','milen.simic@gmail.com','10809685DG1768543','Milen, Simic','T0000','RS',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Pierre ORANGE','Completed','EUR','-11.65','fruit94@msn.com','5BD115921T533740F','Pierre, ORANGE','T0000','FR',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Alessandro Roncone','Completed','EUR','-11.24','alecive87@gmail.com','2SN30584LL049141H','Alessandro, Roncone','T0000','IT',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Nattapong Pullkhow','Completed','USD','-13.03','exenatt@gmail.com','0CV65795G9635992N','Nattapong, Pullkhow','T0000','TH',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Максим Орлов','Completed','USD','-12.56','uubboo@gmail.com','36D61468MR0997132','Максим, Орлов','T0000','RU',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('John Goodland','Completed','JPY','-1107.00','zan642@gmail.com','1EG313746H690200S','John, Goodland','T0000','AU',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('alexis duca','Completed','EUR','-8.88','finonino26@gmail.com','2HD847814J4891837','alexis, duca','T0000','FR',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('stephane sansonetti','Completed','EUR','-8.61','steftrikia@gmail.com','9TK45357NR821725B','stephane, sansonetti','T0000','FR',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Kristofer Rickheden Gustavsson','Completed','SEK','-83.99','hackan@mbox301.tele2.se','8C058888879369153','Kristofer, Rickheden Gustavsson','T0000','SE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('chris stanko','Completed','USD','-10.00','3gs32g@gmail.com','9R125975B8300333G','chris, stanko','T0000','CA',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Jelena Narezkina','Completed','EUR','-7.50','jelena.narezkina@gmail.com','5M148944SD7341924','Jelena, Narezkina','T0000','LT',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Karoly Barcza','Completed','GBP','-6.20','donate@blackpanther.hu','2MM70282L7713503K','Karoly, Barcza','T0000','GB',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('felipe aristizabal','Completed','USD','-8.31','wfpaisa@gmail.com','3S572330VV0356111','felipe, aristizabal','T0000','CO',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Anton Gonzalez','Completed','USD','-123.56','anzigo@gmail.com','3L864047FA6931700','Anton, Gonzalez','T0000','TT',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Jani Lindholm','Completed','EUR','-6.85','paypal@em.tunk.org','3SG398139W115384W','Jani, Lindholm','T0000','FI',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Holger Jaintsch','Completed','USD','-25.04','hjaintsch@gmail.com','2HL03710N2255450C','Holger, Jaintsch','T0000','DE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Daniel Faust','Completed','USD','-15.78','hessijames@ymail.com','5S9857397H8836636','Daniel, Faust','T0000','DE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('József Makay','Completed','HUF','-2028.00','makay.jozsef@gmail.com','9WE09084XB549024S','József, Makay','T0000','HU',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Darin Liebegott','Completed','USD','-7.65','newhoa@gmail.com','6WK65505WT041512U','Darin, Liebegott','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Antonio Orefice','Completed','EUR','-6.45','kokoko3k@gmail.com','2DG114378U707135L','Antonio, Orefice','T0000','IT',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Konrad Stahlhofer','Completed','USD','-7.43','bluedxca93@googlemail.com','1H6504536W0007106','Konrad, Stahlhofer','T0000','DE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Everaldo Coelho','Completed','USD','-6.99','everaldo@everaldo.com','5LR93545UP308074U','Everaldo, Coelho','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('pling.it','Completed','USD','-10.10','payment@pling.it','2XS937018E529852G','Clemens, Toennies','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('pling.it','Completed','USD','-1.00','payment@pling.it','3WC96957X72670451','Clemens, Toennies','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('alessandro rei','Completed','EUR','-5.81','mentalrey@gmail.com','7L627466BJ432823Y','alessandro, rei','T0000','IT',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Tobias Kaiser','Pending','USD','-6.76','tobi012@gmx.de','7YT33817RJ175681T','Tobias, Kaiser','T0000','DE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Christophe Bricheux-Duchossois','Completed','EUR','-5.78','lefteye92@free.fr','2HF89418AM1281924','Christophe, Bricheux-Duchossois','T0000','FR',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Scott Ferguson','Completed','AUD','-8.51','s.cottscottf@gmail.com','9VE84679U1239605B','Scott, Ferguson','T0000','AU',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Ernesto Acosta','Completed','USD','-6.61','elavdeveloper@gmail.com','31D92286AS017950E','Ernesto, Acosta','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Christopher Wood','Completed','CAD','-8.31','frosspc@gmail.com','9EC909814Y156190K','Christopher, Wood','T0000','CA',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Tory Gaurnier','Completed','USD','-6.18','KoRnKloWn@linuxmail.org','10012372KS0103230','Tory, Gaurnier','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Georg Eckert','Pending','USD','-5.94','lion.d.gem.heart@gmail.com','83C754513D680272U','Georg, Eckert','T0000','DE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Александр Якубов','Completed','RUB','-330.58','World-fly@yandex.ru','7NB86158FR736702N','Александр, Якубов','T0000','RU',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Miha Čančula','Completed','EUR','-4.95','miha.cancula@gmail.com','3JM45056RV7515218','Miha, Čančula','T0000','SI',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('','Pending','USD','-41.22','celli.mode@web.de','23U45596HP4305453','','T0000','',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Daboribo Linux','Completed','USD','-31.25','etles.team@gmail.com','81232928MU912032S','Erwin, Edy Cahyono','T0000','ID',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Антон Тихомиров','Completed','RUB','-872.08','Diamond.kde@yahoo.com','35776372FX094794U','Антон, Тихомиров','T0000','RU',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Lars Acou','Completed','EUR','-4.88','lars.acou@telenet.be','8FP47977YF2401717','Lars, Acou','T0000','BE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Jean-Alexandre Anglès d\'Auriac','Completed','EUR','-4.79','jagw40k@free.fr','9J663139LD2104335','Jean-Alexandre, Anglès d\'Auriac','T0000','FR',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('James Hardy','Completed','GBP','-4.05','jameshardy88@gmail.com','0TJ05858BP1667740','James, Hardy','T0000','GB',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Stefano Rosselli','Completed','USD','-5.29','bloomind.studio@gmail.com','43P939541K426654C','Stefano, Rosselli','T0000','CH',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Daniel Fore','Completed','USD','-5.29','Daniel.P.Fore@gmail.com','8XX1253526902043D','Daniel, Fore','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Leszek Lesner','Pending','USD','-5.04','leszek.lesner@web.de','23V003349H478045E','Leszek, Lesner','T0000','DE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Robert Bosak','Completed','USD','-4.97','BBOSAK2143@gmail.com','5G716149E3425380F','Robert, Bosak','T0000','US',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Piotr Arłukowicz','Completed','EUR','-4.03','piotao@gmail.com','5P191039R5161262M','Piotr, Arłukowicz','T0000','PL',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Stefan Siegl','Pending','USD','-4.58','sis@soulinsadness.de','1KM71136EH2876453','Stefan, Siegl','T0000','DE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Leszek Lesner','Completed','USD','-5.04','leszek.lesner@web.de','23V003349H478045E','Leszek, Lesner','T0000','DE',NOW());
-INSERT INTO `member_paypal` (`name`,`last_payment_status`, `currency`,`last_payment_amount`, `paypal_address`,`last_transaction_id`,`address`,`last_transaction_event_code`, `country_code`, `created_at`) VALUES ('Tobias Kaiser','Completed','USD','-6.76','tobi012@gmx.de','7YT33817RJ175681T','Tobias, Kaiser','T0000','DE',NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Алексей Варфоломеев', 'Completed', 'RUB', '-21870.12', 'varlesh@gmail.com', '7KK96863AX5754344',
+ 'Алексей, Варфоломеев', 'T0000', 'RU', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Paul Beyens', 'Completed', 'EUR', '-245.42', 'paulbeyens@gmail.com', '96661567PS4341036', 'Paul, Beyens',
+ 'T0000', 'BE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('LE MAOUT GUILLAUME', 'Completed', 'EUR', '-94.48', 'exebetche@hotmail.fr', '7F337922WT999935X',
+ 'LE MAOUT, GUILLAUME', 'T0000', 'FR', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('', 'Pending', 'USD', '-92.25', 'talamelli@libero.it', '3M436460MU296622V', '', 'T0000', '', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Brook Hill', 'Completed', 'USD', '-90.20', 'music_is4thesoul@yahoo.com', '8GG56561YA353312S', 'Brook, Hill',
+ 'T0000', 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Keefer Rourke', 'Completed', 'CAD', '-113.03', 'keefer.rourke@gmail.com', '1DC62380HC6218649',
+ 'Keefer, Rourke', 'T0000', 'CA', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Ahmed Alharbi', 'Completed', 'USD', '-80.26', 'rsamalmot@gmail.com', '9EY96472EY000824V', 'Ahmed, Alharbi',
+ 'T0000', 'SA', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Matthieu James', 'Completed', 'EUR', '-63.42', 'matthieu.james@gmail.com', '2SY20996GF419200K',
+ 'Matthieu, James', 'T0000', 'FR', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('CHRISTOPHER HOLLAND', 'Completed', 'CAD', '-90.56', 'zrenfire@gmail.com', '1UL56145SN3373905',
+ 'CHRISTOPHER, HOLLAND', 'T0000', 'CA', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('eRescue', 'Completed', 'USD', '-66.47', 'jmtodaro@gmail.com', '99J12880X84142501', 'jeremy, todaro', 'T0000',
+ 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Michail Vourlakos', 'Completed', 'EUR', '-44.59', 'mvourlakos@gmail.com', '6FA17975VJ3169237',
+ 'Michail, Vourlakos', 'T0000', 'GR', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('源斯 刘', 'Completed', 'USD', '-50.70', '1151548973@qq.com', '8HC22880PR727672Y', '源斯, 刘', 'T0000', 'C2', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('yanev', 'Completed', 'EUR', '-42.06', 'gericom.hummer@gmail.com', '1P966741WA233501Y', 'Nikola, Yanev',
+ 'T0000', 'BG', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('RAVEfinity Open Source Design Project.', 'Completed', 'USD', '-45.71', 'ravefinity@ravefinity.com',
+ '67A45065856497501', 'Jared, Soto', 'T0000', 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Doyle Harpole', 'Completed', 'USD', '-37.72', 'kubuntu4172@yahoo.com', '2UK688847E0212107', 'Doyle, Harpole',
+ 'T0000', 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Dindin Hernawan', 'Completed', 'USD', '-36.56', 'dindin_hernawan@yahoo.com', '9TB91656EM146414W',
+ 'Dindin, Hernawan', 'T0000', 'ID', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Michele Guerra', 'Completed', 'EUR', '-30.66', 'mike.ieee1@gmail.com', '85J96429SE204210U', 'Michele, Guerra',
+ 'T0000', 'IT', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Charlie Henson', 'Completed', 'USD', '-35.18', 'microfreaks@gmail.com', '8LK70351BP7068617', 'Charlie, Henson',
+ 'T0000', 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('DRA', 'Completed', 'EUR', '-28.65', 'daniruizdealegria@gmail.com', '26N24064E8419024F',
+ 'Daniel, Ruiz De Alegría', 'T0000', 'ES', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Holger Jaintsch', 'Pending', 'USD', '-25.04', 'hjaintsch@gmail.com', '2HL03710N2255450C', 'Holger, Jaintsch',
+ 'T0000', 'DE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Oliver Scholtz', 'Completed', 'EUR', '-20.22', 'scholli_tz@yahoo.de', '5NX21697YB5246447', 'Oliver, Scholtz',
+ 'T0000', 'ES', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Rudra Banerjee', 'Completed', 'SEK', '-182.78', 'bnrj.rudra@live.com', '7SJ50339R9869084T', 'Rudra, Banerjee',
+ 'T0000', 'SE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Sam Hewitt', 'Completed', 'CAD', '-25.90', 'hewittsamuel@gmail.com', '7UR19536RV483230G', 'Sam, Hewitt',
+ 'T0000', 'CA', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Daniel Faust', 'Pending', 'USD', '-15.78', 'hessijames@ymail.com', '5S9857397H8836636', 'Daniel, Faust',
+ 'T0000', 'DE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Stolmet Żywiec Michał Dybczak', 'Completed', 'PLN', '-52.91', 'biuro@stolmet-zywiec.pl', '40V40234RC0517103',
+ 'Michał, Dybczak', 'T0000', 'PL', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Milen Simic', 'Completed', 'EUR', '-12.02', 'milen.simic@gmail.com', '10809685DG1768543', 'Milen, Simic',
+ 'T0000', 'RS', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Pierre ORANGE', 'Completed', 'EUR', '-11.65', 'fruit94@msn.com', '5BD115921T533740F', 'Pierre, ORANGE',
+ 'T0000', 'FR', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Alessandro Roncone', 'Completed', 'EUR', '-11.24', 'alecive87@gmail.com', '2SN30584LL049141H',
+ 'Alessandro, Roncone', 'T0000', 'IT', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Nattapong Pullkhow', 'Completed', 'USD', '-13.03', 'exenatt@gmail.com', '0CV65795G9635992N',
+ 'Nattapong, Pullkhow', 'T0000', 'TH', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Максим Орлов', 'Completed', 'USD', '-12.56', 'uubboo@gmail.com', '36D61468MR0997132', 'Максим, Орлов', 'T0000',
+ 'RU', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('John Goodland', 'Completed', 'JPY', '-1107.00', 'zan642@gmail.com', '1EG313746H690200S', 'John, Goodland',
+ 'T0000', 'AU', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('alexis duca', 'Completed', 'EUR', '-8.88', 'finonino26@gmail.com', '2HD847814J4891837', 'alexis, duca',
+ 'T0000', 'FR', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('stephane sansonetti', 'Completed', 'EUR', '-8.61', 'steftrikia@gmail.com', '9TK45357NR821725B',
+ 'stephane, sansonetti', 'T0000', 'FR', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Kristofer Rickheden Gustavsson', 'Completed', 'SEK', '-83.99', 'hackan@mbox301.tele2.se', '8C058888879369153',
+ 'Kristofer, Rickheden Gustavsson', 'T0000', 'SE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('chris stanko', 'Completed', 'USD', '-10.00', '3gs32g@gmail.com', '9R125975B8300333G', 'chris, stanko', 'T0000',
+ 'CA', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Jelena Narezkina', 'Completed', 'EUR', '-7.50', 'jelena.narezkina@gmail.com', '5M148944SD7341924',
+ 'Jelena, Narezkina', 'T0000', 'LT', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Karoly Barcza', 'Completed', 'GBP', '-6.20', 'donate@blackpanther.hu', '2MM70282L7713503K', 'Karoly, Barcza',
+ 'T0000', 'GB', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('felipe aristizabal', 'Completed', 'USD', '-8.31', 'wfpaisa@gmail.com', '3S572330VV0356111',
+ 'felipe, aristizabal', 'T0000', 'CO', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Anton Gonzalez', 'Completed', 'USD', '-123.56', 'anzigo@gmail.com', '3L864047FA6931700', 'Anton, Gonzalez',
+ 'T0000', 'TT', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Jani Lindholm', 'Completed', 'EUR', '-6.85', 'paypal@em.tunk.org', '3SG398139W115384W', 'Jani, Lindholm',
+ 'T0000', 'FI', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Holger Jaintsch', 'Completed', 'USD', '-25.04', 'hjaintsch@gmail.com', '2HL03710N2255450C', 'Holger, Jaintsch',
+ 'T0000', 'DE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Daniel Faust', 'Completed', 'USD', '-15.78', 'hessijames@ymail.com', '5S9857397H8836636', 'Daniel, Faust',
+ 'T0000', 'DE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('József Makay', 'Completed', 'HUF', '-2028.00', 'makay.jozsef@gmail.com', '9WE09084XB549024S', 'József, Makay',
+ 'T0000', 'HU', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Darin Liebegott', 'Completed', 'USD', '-7.65', 'newhoa@gmail.com', '6WK65505WT041512U', 'Darin, Liebegott',
+ 'T0000', 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Antonio Orefice', 'Completed', 'EUR', '-6.45', 'kokoko3k@gmail.com', '2DG114378U707135L', 'Antonio, Orefice',
+ 'T0000', 'IT', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Konrad Stahlhofer', 'Completed', 'USD', '-7.43', 'bluedxca93@googlemail.com', '1H6504536W0007106',
+ 'Konrad, Stahlhofer', 'T0000', 'DE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Everaldo Coelho', 'Completed', 'USD', '-6.99', 'everaldo@everaldo.com', '5LR93545UP308074U',
+ 'Everaldo, Coelho', 'T0000', 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('pling.it', 'Completed', 'USD', '-10.10', 'payment@pling.it', '2XS937018E529852G', 'Clemens, Toennies', 'T0000',
+ 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('pling.it', 'Completed', 'USD', '-1.00', 'payment@pling.it', '3WC96957X72670451', 'Clemens, Toennies', 'T0000',
+ 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('alessandro rei', 'Completed', 'EUR', '-5.81', 'mentalrey@gmail.com', '7L627466BJ432823Y', 'alessandro, rei',
+ 'T0000', 'IT', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Tobias Kaiser', 'Pending', 'USD', '-6.76', 'tobi012@gmx.de', '7YT33817RJ175681T', 'Tobias, Kaiser', 'T0000',
+ 'DE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Christophe Bricheux-Duchossois', 'Completed', 'EUR', '-5.78', 'lefteye92@free.fr', '2HF89418AM1281924',
+ 'Christophe, Bricheux-Duchossois', 'T0000', 'FR', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Scott Ferguson', 'Completed', 'AUD', '-8.51', 's.cottscottf@gmail.com', '9VE84679U1239605B', 'Scott, Ferguson',
+ 'T0000', 'AU', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Ernesto Acosta', 'Completed', 'USD', '-6.61', 'elavdeveloper@gmail.com', '31D92286AS017950E',
+ 'Ernesto, Acosta', 'T0000', 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Christopher Wood', 'Completed', 'CAD', '-8.31', 'frosspc@gmail.com', '9EC909814Y156190K', 'Christopher, Wood',
+ 'T0000', 'CA', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Tory Gaurnier', 'Completed', 'USD', '-6.18', 'KoRnKloWn@linuxmail.org', '10012372KS0103230', 'Tory, Gaurnier',
+ 'T0000', 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Georg Eckert', 'Pending', 'USD', '-5.94', 'lion.d.gem.heart@gmail.com', '83C754513D680272U', 'Georg, Eckert',
+ 'T0000', 'DE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Александр Якубов', 'Completed', 'RUB', '-330.58', 'World-fly@yandex.ru', '7NB86158FR736702N',
+ 'Александр, Якубов', 'T0000', 'RU', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Miha Čančula', 'Completed', 'EUR', '-4.95', 'miha.cancula@gmail.com', '3JM45056RV7515218', 'Miha, Čančula',
+ 'T0000', 'SI', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('', 'Pending', 'USD', '-41.22', 'celli.mode@web.de', '23U45596HP4305453', '', 'T0000', '', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Daboribo Linux', 'Completed', 'USD', '-31.25', 'etles.team@gmail.com', '81232928MU912032S',
+ 'Erwin, Edy Cahyono', 'T0000', 'ID', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Антон Тихомиров', 'Completed', 'RUB', '-872.08', 'Diamond.kde@yahoo.com', '35776372FX094794U',
+ 'Антон, Тихомиров', 'T0000', 'RU', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Lars Acou', 'Completed', 'EUR', '-4.88', 'lars.acou@telenet.be', '8FP47977YF2401717', 'Lars, Acou', 'T0000',
+ 'BE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Jean-Alexandre Anglès d\'Auriac', 'Completed', 'EUR', '-4.79', 'jagw40k@free.fr', '9J663139LD2104335',
+ 'Jean-Alexandre, Anglès d\'Auriac', 'T0000', 'FR', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('James Hardy', 'Completed', 'GBP', '-4.05', 'jameshardy88@gmail.com', '0TJ05858BP1667740', 'James, Hardy',
+ 'T0000', 'GB', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Stefano Rosselli', 'Completed', 'USD', '-5.29', 'bloomind.studio@gmail.com', '43P939541K426654C',
+ 'Stefano, Rosselli', 'T0000', 'CH', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Daniel Fore', 'Completed', 'USD', '-5.29', 'Daniel.P.Fore@gmail.com', '8XX1253526902043D', 'Daniel, Fore',
+ 'T0000', 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Leszek Lesner', 'Pending', 'USD', '-5.04', 'leszek.lesner@web.de', '23V003349H478045E', 'Leszek, Lesner',
+ 'T0000', 'DE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Robert Bosak', 'Completed', 'USD', '-4.97', 'BBOSAK2143@gmail.com', '5G716149E3425380F', 'Robert, Bosak',
+ 'T0000', 'US', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Piotr Arłukowicz', 'Completed', 'EUR', '-4.03', 'piotao@gmail.com', '5P191039R5161262M', 'Piotr, Arłukowicz',
+ 'T0000', 'PL', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Stefan Siegl', 'Pending', 'USD', '-4.58', 'sis@soulinsadness.de', '1KM71136EH2876453', 'Stefan, Siegl',
+ 'T0000', 'DE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Leszek Lesner', 'Completed', 'USD', '-5.04', 'leszek.lesner@web.de', '23V003349H478045E', 'Leszek, Lesner',
+ 'T0000', 'DE', NOW());
+INSERT INTO `member_paypal` (`name`, `last_payment_status`, `currency`, `last_payment_amount`, `paypal_address`,
+ `last_transaction_id`, `address`, `last_transaction_event_code`, `country_code`,
+ `created_at`)
+VALUES ('Tobias Kaiser', 'Completed', 'USD', '-6.76', 'tobi012@gmx.de', '7YT33817RJ175681T', 'Tobias, Kaiser', 'T0000',
+ 'DE', NOW());
#select * from member_paypal p
-update member_paypal p
-join member m on m.paypal_mail = p.paypal_address
-set p.member_id = m.member_id
-where p.member_id is null;
+UPDATE `member_paypal` `p`
+ JOIN `member` `m` ON `m`.`paypal_mail` = `p`.`paypal_address`
+SET `p`.`member_id` = `m`.`member_id`
+WHERE `p`.`member_id` IS NULL;
diff --git a/sql_code/20170706_add_stored_procedure_for_solr.sql b/sql_code/20170706_add_stored_procedure_for_solr.sql
index 7f5edd67b..1f31e889d 100644
--- a/sql_code/20170706_add_stored_procedure_for_solr.sql
+++ b/sql_code/20170706_add_stored_procedure_for_solr.sql
@@ -1,192 +1,209 @@
USE `pling-import`;
-DROP procedure IF EXISTS `solr_query_import`;
+DROP PROCEDURE IF EXISTS `solr_query_import`;
DELIMITER $$
USE `pling-import`$$
-CREATE PROCEDURE `solr_query_import` ()
- BEGIN
- DROP TABLE IF EXISTS tmp_cat_tree;
- CREATE TEMPORARY TABLE tmp_cat_tree AS
- SELECT
- pc.project_category_id,
- pc.title,
- pc.is_active,
- count(pc.lft) AS depth,
- GROUP_CONCAT(pc2.project_category_id ORDER BY pc2.lft) AS ancestor_id_path,
- GROUP_CONCAT(pc2.title ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path
- FROM project_category AS pc, project_category AS pc2
- WHERE (pc.lft BETWEEN pc2.lft AND pc2.rgt)
- GROUP BY pc.lft
- ORDER BY pc.lft;
+CREATE PROCEDURE `solr_query_import`()
+BEGIN
+ DROP TABLE IF EXISTS `tmp_cat_tree`;
+ CREATE TEMPORARY TABLE `tmp_cat_tree` AS
+ SELECT `pc`.`project_category_id`,
+ `pc`.`title`,
+ `pc`.`is_active`,
+ count(`pc`.`lft`) AS `depth`,
+ GROUP_CONCAT(`pc2`.`project_category_id` ORDER BY `pc2`.`lft`) AS `ancestor_id_path`,
+ GROUP_CONCAT(`pc2`.`title` ORDER BY `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path`
+ FROM `project_category` AS `pc`,
+ `project_category` AS `pc2`
+ WHERE (`pc`.`lft` BETWEEN `pc2`.`lft` AND `pc2`.`rgt`)
+ GROUP BY `pc`.`lft`
+ ORDER BY `pc`.`lft`;
- DROP TABLE IF EXISTS tmp_cat_store;
- CREATE TEMPORARY TABLE tmp_cat_store AS
- SELECT
- tct.project_category_id,
- tct.ancestor_id_path,
- tct.title,
- tct.is_active,
- group_concat(store_id) AS stores
- FROM tmp_cat_tree AS tct, config_store_category AS csc
- WHERE FIND_IN_SET(csc.project_category_id, tct.ancestor_id_path) > 0
- GROUP BY tct.project_category_id
- ORDER BY tct.project_category_id;
+ DROP TABLE IF EXISTS `tmp_cat_store`;
+ CREATE TEMPORARY TABLE `tmp_cat_store` AS
+ SELECT `tct`.`project_category_id`,
+ `tct`.`ancestor_id_path`,
+ `tct`.`title`,
+ `tct`.`is_active`,
+ group_concat(`store_id`) AS `stores`
+ FROM `tmp_cat_tree` AS `tct`,
+ `config_store_category` AS `csc`
+ WHERE FIND_IN_SET(`csc`.`project_category_id`, `tct`.`ancestor_id_path`) > 0
+ GROUP BY `tct`.`project_category_id`
+ ORDER BY `tct`.`project_category_id`;
- SELECT
- project_id,
- project.member_id AS project_member_id,
- project.project_category_id AS project_category_id,
- project.title AS project_title,
- description,
- image_small,
- member.username,
- member.firstname,
- member.lastname,
- tcs.title AS cat_title,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- (ROUND(((`project`.`count_likes` + 6) / ((`project`.`count_likes` + `project`.`count_dislikes`) + 12)), 2) *
- 100) AS `laplace_score`,
- project.created_at,
- project.changed_at,
- tcs.stores,
- tcs.ancestor_id_path AS `cat_id_ancestor_path`
- FROM project
- JOIN member ON member.member_id = project.member_id
- JOIN tmp_cat_store AS tcs ON project.project_category_id = tcs.project_category_id
- WHERE project.`status` = 100 AND project.`type_id` = 1 AND member.`is_active` = 1 AND tcs.`is_active` = 1;
- END$$
+ SELECT `project_id`,
+ `project`.`member_id` AS `project_member_id`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`title` AS `project_title`,
+ `description`,
+ `image_small`,
+ `member`.`username`,
+ `member`.`firstname`,
+ `member`.`lastname`,
+ `tcs`.`title` AS `cat_title`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ (ROUND(((`project`.`count_likes` + 6) / ((`project`.`count_likes` + `project`.`count_dislikes`) + 12)), 2) *
+ 100) AS `laplace_score`,
+ `project`.`created_at`,
+ `project`.`changed_at`,
+ `tcs`.`stores`,
+ `tcs`.`ancestor_id_path` AS `cat_id_ancestor_path`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `tmp_cat_store` AS `tcs` ON `project`.`project_category_id` = `tcs`.`project_category_id`
+ WHERE `project`.`status` = 100
+ AND `project`.`type_id` = 1
+ AND `member`.`is_active` = 1
+ AND `tcs`.`is_active` = 1;
+END$$
DELIMITER ;
USE `pling-import`;
-DROP procedure IF EXISTS `solr_query_delta_import`;
+DROP PROCEDURE IF EXISTS `solr_query_delta_import`;
DELIMITER $$
USE `pling-import`$$
-CREATE PROCEDURE `solr_query_delta_import` (IN projectID INT(11))
- BEGIN
- DROP TABLE IF EXISTS tmp_cat_tree;
- CREATE TEMPORARY TABLE tmp_cat_tree AS
- SELECT
- pc.project_category_id,
- pc.title,
- pc.is_active,
- count(pc.lft) AS depth,
- GROUP_CONCAT(pc2.project_category_id ORDER BY pc2.lft) AS ancestor_id_path,
- GROUP_CONCAT(pc2.title ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path
- FROM project_category AS pc, project_category AS pc2
- WHERE (pc.lft BETWEEN pc2.lft AND pc2.rgt)
- GROUP BY pc.lft
- ORDER BY pc.lft;
+CREATE PROCEDURE `solr_query_delta_import`(IN `projectID` INT(11))
+BEGIN
+ DROP TABLE IF EXISTS `tmp_cat_tree`;
+ CREATE TEMPORARY TABLE `tmp_cat_tree` AS
+ SELECT `pc`.`project_category_id`,
+ `pc`.`title`,
+ `pc`.`is_active`,
+ count(`pc`.`lft`) AS `depth`,
+ GROUP_CONCAT(`pc2`.`project_category_id` ORDER BY `pc2`.`lft`) AS `ancestor_id_path`,
+ GROUP_CONCAT(`pc2`.`title` ORDER BY `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path`
+ FROM `project_category` AS `pc`,
+ `project_category` AS `pc2`
+ WHERE (`pc`.`lft` BETWEEN `pc2`.`lft` AND `pc2`.`rgt`)
+ GROUP BY `pc`.`lft`
+ ORDER BY `pc`.`lft`;
- DROP TABLE IF EXISTS tmp_cat_store;
- CREATE TEMPORARY TABLE tmp_cat_store AS
- SELECT
- tct.project_category_id,
- tct.ancestor_id_path,
- tct.title,
- tct.is_active,
- group_concat(store_id) AS stores
- FROM tmp_cat_tree AS tct, config_store_category AS csc
- WHERE FIND_IN_SET(csc.project_category_id, tct.ancestor_id_path) > 0
- GROUP BY tct.project_category_id
- ORDER BY tct.project_category_id;
+ DROP TABLE IF EXISTS `tmp_cat_store`;
+ CREATE TEMPORARY TABLE `tmp_cat_store` AS
+ SELECT `tct`.`project_category_id`,
+ `tct`.`ancestor_id_path`,
+ `tct`.`title`,
+ `tct`.`is_active`,
+ group_concat(`store_id`) AS `stores`
+ FROM `tmp_cat_tree` AS `tct`,
+ `config_store_category` AS `csc`
+ WHERE FIND_IN_SET(`csc`.`project_category_id`, `tct`.`ancestor_id_path`) > 0
+ GROUP BY `tct`.`project_category_id`
+ ORDER BY `tct`.`project_category_id`;
- SELECT
- project_id,
- project.member_id AS project_member_id,
- project.project_category_id AS project_category_id,
- project.title AS project_title,
- description,
- image_small,
- member.username,
- member.firstname,
- member.lastname,
- tcs.title AS cat_title,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- (ROUND(((`project`.`count_likes` + 6) / ((`project`.`count_likes` + `project`.`count_dislikes`) + 12)), 2) *
- 100) AS `laplace_score`,
- project.created_at,
- project.changed_at,
- tcs.stores,
- tcs.ancestor_id_path AS `cat_id_ancestor_path`
- FROM project
- JOIN member ON member.member_id = project.member_id
- JOIN tmp_cat_store AS tcs ON project.project_category_id = tcs.project_category_id
- WHERE project_id = projectID;
- END$$
+ SELECT `project_id`,
+ `project`.`member_id` AS `project_member_id`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`title` AS `project_title`,
+ `description`,
+ `image_small`,
+ `member`.`username`,
+ `member`.`firstname`,
+ `member`.`lastname`,
+ `tcs`.`title` AS `cat_title`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ (ROUND(((`project`.`count_likes` + 6) / ((`project`.`count_likes` + `project`.`count_dislikes`) + 12)), 2) *
+ 100) AS `laplace_score`,
+ `project`.`created_at`,
+ `project`.`changed_at`,
+ `tcs`.`stores`,
+ `tcs`.`ancestor_id_path` AS `cat_id_ancestor_path`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `tmp_cat_store` AS `tcs` ON `project`.`project_category_id` = `tcs`.`project_category_id`
+ WHERE `project_id` = `projectID`;
+END$$
DELIMITER ;
USE `pling-import`;
-DROP procedure IF EXISTS `solr_query_delta`;
+DROP PROCEDURE IF EXISTS `solr_query_delta`;
DELIMITER $$
USE `pling-import`$$
-CREATE PROCEDURE `solr_query_delta` (IN lastIndexed varchar(255))
- BEGIN
- SELECT project_id
- FROM project
- JOIN member ON member.member_id = project.member_id
- JOIN project_category AS pc ON pc.project_category_id = project.project_category_id
- WHERE project.`status` = 100 AND project.`type_id` = 1 AND member.`is_active` = 1 AND pc.`is_active` = 1 AND
- project.changed_at > lastIndexed;
- END$$
+CREATE PROCEDURE `solr_query_delta`(IN `lastIndexed` varchar(255))
+BEGIN
+ SELECT `project_id`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `project`.`project_category_id`
+ WHERE `project`.`status` = 100
+ AND `project`.`type_id` = 1
+ AND `member`.`is_active` = 1
+ AND `pc`.`is_active` = 1
+ AND `project`.`changed_at` > `lastIndexed`;
+END$$
DELIMITER ;
USE `pling-import`;
-DROP procedure IF EXISTS `solr_query_deleted_pk`;
+DROP PROCEDURE IF EXISTS `solr_query_deleted_pk`;
DELIMITER $$
USE `pling-import`$$
-CREATE PROCEDURE `solr_query_deleted_pk` (IN lastIndexed VARCHAR(255))
- BEGIN
- SELECT project_id
- FROM project
- JOIN member ON member.member_id = project.member_id
- JOIN project_category AS pc ON pc.project_category_id = project.project_category_id
- WHERE project.deleted_at > lastIndexed OR member.deleted_at > lastIndexed OR
- (project.changed_at > lastIndexed AND project.status < 100);
- END$$
+CREATE PROCEDURE `solr_query_deleted_pk`(IN `lastIndexed` VARCHAR(255))
+BEGIN
+ SELECT `project_id`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `project`.`project_category_id`
+ WHERE `project`.`deleted_at` > `lastIndexed`
+ OR `member`.`deleted_at` > `lastIndexed`
+ OR (`project`.`changed_at` > `lastIndexed` AND `project`.`status` < 100);
+END$$
DELIMITER ;
USE `pling-import`;
DELIMITER $$
-DROP TRIGGER IF EXISTS project_BEFORE_UPDATE$$
+DROP TRIGGER IF EXISTS `project_BEFORE_UPDATE`$$
USE `pling-import`$$
-CREATE DEFINER=CURRENT_USER TRIGGER `project_BEFORE_UPDATE` BEFORE UPDATE ON `project` FOR EACH ROW
- BEGIN
- SET NEW.changed_at = NOW();
- END$$
+CREATE DEFINER = CURRENT_USER TRIGGER `project_BEFORE_UPDATE`
+ BEFORE UPDATE
+ ON `project`
+ FOR EACH ROW
+BEGIN
+ SET `NEW`.`changed_at` = NOW();
+END$$
DELIMITER ;
USE `pling-import`;
DELIMITER $$
-DROP TRIGGER IF EXISTS member_BEFORE_UPDATE$$
+DROP TRIGGER IF EXISTS `member_BEFORE_UPDATE`$$
USE `pling-import`$$
-CREATE DEFINER = CURRENT_USER TRIGGER `member_BEFORE_UPDATE` BEFORE UPDATE ON `member` FOR EACH ROW
- BEGIN
- SET NEW.changed_at = NOW();
- END$$
+CREATE DEFINER = CURRENT_USER TRIGGER `member_BEFORE_UPDATE`
+ BEFORE UPDATE
+ ON `member`
+ FOR EACH ROW
+BEGIN
+ SET `NEW`.`changed_at` = NOW();
+END$$
DELIMITER ;
USE `pling-import`;
DELIMITER $$
-DROP TRIGGER IF EXISTS project_category_BEFORE_INSERT$$
+DROP TRIGGER IF EXISTS `project_category_BEFORE_INSERT`$$
USE `pling-import`$$
-CREATE DEFINER = CURRENT_USER TRIGGER `project_category_BEFORE_INSERT` BEFORE INSERT ON `project_category` FOR EACH ROW
- BEGIN
- IF NEW.created_at IS NULL THEN
- SET NEW.created_at = NOW();
+CREATE DEFINER = CURRENT_USER TRIGGER `project_category_BEFORE_INSERT`
+ BEFORE INSERT
+ ON `project_category`
+ FOR EACH ROW
+BEGIN
+ IF `NEW`.`created_at` IS NULL THEN
+ SET `NEW`.`created_at` = NOW();
END IF;
- END$$
+END$$
DELIMITER ;
USE `pling-import`;
DELIMITER $$
-DROP TRIGGER IF EXISTS project_category_BEFORE_UPDATE$$
+DROP TRIGGER IF EXISTS `project_category_BEFORE_UPDATE`$$
USE `pling-import`$$
-CREATE DEFINER = CURRENT_USER TRIGGER `project_category_BEFORE_UPDATE` BEFORE UPDATE ON `project_category` FOR EACH ROW
- BEGIN
- SET NEW.changed_at = NOW();
- END$$
+CREATE DEFINER = CURRENT_USER TRIGGER `project_category_BEFORE_UPDATE`
+ BEFORE UPDATE
+ ON `project_category`
+ FOR EACH ROW
+BEGIN
+ SET `NEW`.`changed_at` = NOW();
+END$$
DELIMITER ;
diff --git a/sql_code/20170713_add_table_payout_status.sql b/sql_code/20170713_add_table_payout_status.sql
index fe4656695..05000cd47 100644
--- a/sql_code/20170713_add_table_payout_status.sql
+++ b/sql_code/20170713_add_table_payout_status.sql
@@ -1,33 +1,48 @@
-CREATE TABLE `payout_status` (
- `id` INT(11) NOT NULL,
- `type` VARCHAR(50) NOT NULL DEFAULT 'info',
- `title` VARCHAR(50) NULL DEFAULT NULL,
- `description` TEXT NULL,
- `color` VARCHAR(50) NULL DEFAULT NULL,
- `icon` VARCHAR(50) NULL DEFAULT 'glyphicon-info-sign',
- `is_active` INT(1) NULL DEFAULT '1',
- PRIMARY KEY (`id`)
+CREATE TABLE `payout_status`
+(
+ `id` INT(11) NOT NULL,
+ `type` VARCHAR(50) NOT NULL DEFAULT 'info',
+ `title` VARCHAR(50) NULL DEFAULT NULL,
+ `description` TEXT NULL,
+ `color` VARCHAR(50) NULL DEFAULT NULL,
+ `icon` VARCHAR(50) NULL DEFAULT 'glyphicon-info-sign',
+ `is_active` INT(1) NULL DEFAULT '1',
+ PRIMARY KEY (`id`)
)
-COLLATE='latin1_swedish_ci'
-ENGINE=InnoDB
+ COLLATE = 'latin1_swedish_ci'
+ ENGINE = InnoDB
;
/**
public static $PAYOUT_STATUS_NEW = 0;
public static $PAYOUT_STATUS_REQUESTED = 1;
public static $PAYOUT_STATUS_PROCESSED = 10;
public static $PAYOUT_STATUS_PENDING = 50;
public static $PAYOUT_STATUS_COMPLETED = 100;
public static $PAYOUT_STATUS_DENIED = 999;
public static $PAYOUT_STATUS_REFUND = 900;
public static $PAYOUT_STATUS_ERROR = 99;
**/
-insert into payout_status (id,title,description,color,icon) values (0,'New','New - valid status unknown','#31708f;','glyphicon-info-sign');
-insert into payout_status (id,title,description,color) values (1,'Status: Requested','We send your payout. The actual status is: Requested.','#31708f;','glyphicon-info-sign');
-insert into payout_status (id,title,description,color) values (10,'Status: Processed','We send your payout. The actual status is: Processed.','#31708f;','glyphicon-info-sign');
-insert into payout_status (id,title,description,color) values (50,'Status: Pending','We send your payout. The actual status is: Pending.','#31708f;','glyphicon-info-sign');
-insert into payout_status (id,title,description,color) values (100,'Status: Completed','For this month we has successfully paid you.','#3c763d;','glyphicon-ok-sign');
-insert into payout_status (id,title,description,color) values (999,'Status: Denied','We tried to payout your plings, but your payment was denied.','#a94442;','glyphicon-exclamation-sign');
-insert into payout_status (id,title,description,color) values (900,'Status: Refund','We tried to payout your plings, but your payment was refund.','#a94442;','glyphicon-exclamation-sign');
-insert into payout_status (id,title,description,color) values (99,'Status: Error','We tried to payout your plings, but there was an error.','#a94442;','glyphicon-exclamation-sign');
+INSERT INTO `payout_status` (`id`, `title`, `description`, `color`, `icon`)
+VALUES (0, 'New', 'New - valid status unknown', '#31708f;', 'glyphicon-info-sign');
+INSERT INTO `payout_status` (`id`, `title`, `description`, `color`)
+VALUES (1, 'Status: Requested', 'We send your payout. The actual status is: Requested.', '#31708f;',
+ 'glyphicon-info-sign');
+INSERT INTO `payout_status` (`id`, `title`, `description`, `color`)
+VALUES (10, 'Status: Processed', 'We send your payout. The actual status is: Processed.', '#31708f;',
+ 'glyphicon-info-sign');
+INSERT INTO `payout_status` (`id`, `title`, `description`, `color`)
+VALUES (50, 'Status: Pending', 'We send your payout. The actual status is: Pending.', '#31708f;',
+ 'glyphicon-info-sign');
+INSERT INTO `payout_status` (`id`, `title`, `description`, `color`)
+VALUES (100, 'Status: Completed', 'For this month we has successfully paid you.', '#3c763d;', 'glyphicon-ok-sign');
+INSERT INTO `payout_status` (`id`, `title`, `description`, `color`)
+VALUES (999, 'Status: Denied', 'We tried to payout your plings, but your payment was denied.', '#a94442;',
+ 'glyphicon-exclamation-sign');
+INSERT INTO `payout_status` (`id`, `title`, `description`, `color`)
+VALUES (900, 'Status: Refund', 'We tried to payout your plings, but your payment was refund.', '#a94442;',
+ 'glyphicon-exclamation-sign');
+INSERT INTO `payout_status` (`id`, `title`, `description`, `color`)
+VALUES (99, 'Status: Error', 'We tried to payout your plings, but there was an error.', '#a94442;',
+ 'glyphicon-exclamation-sign');
diff --git a/sql_code/20170801_add_laplace_scrore_sql_function.sql b/sql_code/20170801_add_laplace_scrore_sql_function.sql
index 6da504d24..8c357681e 100644
--- a/sql_code/20170801_add_laplace_scrore_sql_function.sql
+++ b/sql_code/20170801_add_laplace_scrore_sql_function.sql
@@ -1,13 +1,14 @@
-USE `pling`;
-DROP function IF EXISTS `laplace_score`;
+
+DROP FUNCTION IF EXISTS `laplace_score`;
DELIMITER $$
USE `pling`$$
-CREATE DEFINER=CURRENT_USER FUNCTION `laplace_score`(upvotes INT, downvotes INT) RETURNS int(11) DETERMINISTIC
- BEGIN
- DECLARE score INT(10);
- SET score = (round(((upvotes + 6) / ((upvotes + downvotes) + 12)),2) * 100);
- RETURN score;
- END$$
+CREATE
+ DEFINER = CURRENT_USER FUNCTION `laplace_score`(`upvotes` INT, `downvotes` INT) RETURNS int(11) DETERMINISTIC
+BEGIN
+ DECLARE `score` INT(10);
+ SET `score` = (round(((`upvotes` + 6) / ((`upvotes` + `downvotes`) + 12)), 2) * 100);
+ RETURN `score`;
+END$$
DELIMITER ;
\ No newline at end of file
diff --git a/sql_code/20170808_add_stored_procedure_projects.sql b/sql_code/20170808_add_stored_procedure_projects.sql
index 332015fa1..33c797f06 100644
--- a/sql_code/20170808_add_stored_procedure_projects.sql
+++ b/sql_code/20170808_add_stored_procedure_projects.sql
@@ -1,147 +1,142 @@
-USE `pling`;
-DROP procedure IF EXISTS `generate_stat_project`;
+
+DROP PROCEDURE IF EXISTS `generate_stat_project`;
DELIMITER $$
USE `pling`$$
-CREATE PROCEDURE `generate_stat_project` ()
- BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+CREATE PROCEDURE `generate_stat_project`()
+BEGIN
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0)
+ GROUP BY `reports_project`.`project_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- project_id,
- GROUP_CONCAT(DISTINCT project_package_type.package_type_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT package_types.`name`) AS `package_name_list`
- FROM
- project_package_type
- JOIN
- package_types ON project_package_type.package_type_id = package_types.package_type_id
- WHERE
- package_types.is_active = 1
- GROUP BY project_id
- ;
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project_id`,
+ GROUP_CONCAT(DISTINCT `project_package_type`.`package_type_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `package_types`.`name`) AS `package_name_list`
+ FROM `project_package_type`
+ JOIN
+ `package_types` ON `project_package_type`.`package_type_id` = `package_types`.`package_type_id`
+ WHERE `package_types`.`is_active` = 1
+ GROUP BY `project_id`;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_cat` (`project_category_id`))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`github_code` AS `github_code`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- `project`.`ppload_collection_id` AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`approved` AS `approved`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.package_type_id_list as package_types,
- `tppt`.package_name_list as package_names
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND `project`.`type_id` = 1
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_cat` (`project_category_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`github_code` AS `github_code`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`approved` AS `approved`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND `project`.`type_id` = 1
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
- DROP TABLE IF EXISTS old_stat_projects;
- END$$
+ DROP TABLE IF EXISTS `old_stat_projects`;
+END$$
DELIMITER ;
DROP EVENT IF EXISTS `e_generate_stat_projects`;
CREATE
- DEFINER = CURRENT_USER
-EVENT IF NOT EXISTS `e_generate_stat_projects`
- ON SCHEDULE
- EVERY 5 MINUTE STARTS DATE_FORMAT(NOW(),'%Y-%m-%d 05:00:00')
- ON COMPLETION PRESERVE
- -- DISABLE ON SLAVE
- COMMENT 'Regenerates stat_projects table'
-DO
- CALL pling.generate_stat_project();
\ No newline at end of file
+ DEFINER = CURRENT_USER
+ EVENT IF NOT EXISTS `e_generate_stat_projects`
+ ON SCHEDULE
+ EVERY 5 MINUTE STARTS DATE_FORMAT(NOW(), '%Y-%m-%d 05:00:00')
+ ON COMPLETION PRESERVE
+ -- DISABLE ON SLAVE
+ COMMENT 'Regenerates stat_projects table'
+ DO
+ CALL `pling`.generate_stat_project();
\ No newline at end of file
diff --git a/sql_code/20170811_add_stored_procedure_cat_tree.sql b/sql_code/20170811_add_stored_procedure_cat_tree.sql
index ab358731d..cabbb9cb1 100644
--- a/sql_code/20170811_add_stored_procedure_cat_tree.sql
+++ b/sql_code/20170811_add_stored_procedure_cat_tree.sql
@@ -1,107 +1,104 @@
-USE `pling`;
-DROP procedure IF EXISTS `generate_stat_cat_tree`;
+
+DROP PROCEDURE IF EXISTS `generate_stat_cat_tree`;
DELIMITER $$
-CREATE DEFINER=CURRENT_USER PROCEDURE `generate_stat_cat_tree`()
- BEGIN
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `generate_stat_cat_tree`()
+BEGIN
- DROP TABLE IF EXISTS tmp_stat_cat_tree;
- CREATE TABLE tmp_stat_cat_tree
+ DROP TABLE IF EXISTS `tmp_stat_cat_tree`;
+ CREATE TABLE `tmp_stat_cat_tree`
(
- `project_category_id` int(11) NOT NULL,
- `lft` int(11) NOT NULL,
- `rgt` int(11) NOT NULL,
- `title` varchar(100) NOT NULL,
- `name_legacy` varchar(50) NULL,
- `is_active` int(1),
- `orderPos` int(11) NULL,
- `depth` int(11) NOT NULL,
- `ancestor_id_path` varchar(100),
- `ancestor_path` varchar(256),
- `ancestor_path_legacy` varchar(256),
- PRIMARY KEY `primary` (project_category_id, lft, rgt)
+ `project_category_id` int(11) NOT NULL,
+ `lft` int(11) NOT NULL,
+ `rgt` int(11) NOT NULL,
+ `title` varchar(100) NOT NULL,
+ `name_legacy` varchar(50) NULL,
+ `is_active` int(1),
+ `orderPos` int(11) NULL,
+ `depth` int(11) NOT NULL,
+ `ancestor_id_path` varchar(100),
+ `ancestor_path` varchar(256),
+ `ancestor_path_legacy` varchar(256),
+ PRIMARY KEY `primary` (`project_category_id`, `lft`, `rgt`)
)
- ENGINE Memory
- AS
- SELECT
- pc.project_category_id,
- pc.lft,
- pc.rgt,
- pc.title,
- pc.name_legacy,
- pc.is_active,
- pc.orderPos,
- count(pc.lft) - 1 AS depth,
- GROUP_CONCAT(pc2.project_category_id ORDER BY pc2.lft) AS ancestor_id_path,
- GROUP_CONCAT(pc2.title ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path,
- GROUP_CONCAT(IF(LENGTH(TRIM(pc2.name_legacy))>0,pc2.name_legacy,pc2.title) ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path_legacy
- FROM project_category AS pc, project_category AS pc2
- WHERE (pc.lft BETWEEN pc2.lft AND pc2.rgt) AND pc.is_active = 1 and pc2.is_active = 1
- GROUP BY pc.lft -- HAVING depth >= 1
- ORDER BY pc.lft, pc.orderPos
- ;
+ ENGINE MEMORY
+ AS
+ SELECT `pc`.`project_category_id`,
+ `pc`.`lft`,
+ `pc`.`rgt`,
+ `pc`.`title`,
+ `pc`.`name_legacy`,
+ `pc`.`is_active`,
+ `pc`.`orderPos`,
+ count(`pc`.`lft`) - 1 AS `depth`,
+ GROUP_CONCAT(`pc2`.`project_category_id` ORDER BY `pc2`.`lft`) AS `ancestor_id_path`,
+ GROUP_CONCAT(`pc2`.`title` ORDER BY `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path`,
+ GROUP_CONCAT(IF(LENGTH(TRIM(`pc2`.`name_legacy`)) > 0, `pc2`.`name_legacy`, `pc2`.`title`) ORDER BY
+ `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path_legacy`
+ FROM `project_category` AS `pc`,
+ `project_category` AS `pc2`
+ WHERE (`pc`.`lft` BETWEEN `pc2`.`lft` AND `pc2`.`rgt`)
+ AND `pc`.`is_active` = 1
+ AND `pc2`.`is_active` = 1
+ GROUP BY `pc`.`lft` -- HAVING depth >= 1
+ ORDER BY `pc`.`lft`, `pc`.`orderPos`;
- DROP TABLE IF EXISTS tmp_stat_cat;
- CREATE TABLE tmp_stat_cat
+ DROP TABLE IF EXISTS `tmp_stat_cat`;
+ CREATE TABLE `tmp_stat_cat`
(
- `project_category_id` int(11) NOT NULL,
- `lft` int(11) NOT NULL,
- `rgt` int(11) NOT NULL,
- `title` varchar(100) NOT NULL,
- `name_legacy` varchar(50) NULL,
- `is_active` int(1),
- `orderPos` int(11) NULL,
- `depth` int(11) NOT NULL,
- `ancestor_id_path` varchar(100),
- `ancestor_path` varchar(256),
- `ancestor_path_legacy` varchar(256),
- `stores` varchar(256),
- PRIMARY KEY `primary` (project_category_id, lft, rgt)
+ `project_category_id` int(11) NOT NULL,
+ `lft` int(11) NOT NULL,
+ `rgt` int(11) NOT NULL,
+ `title` varchar(100) NOT NULL,
+ `name_legacy` varchar(50) NULL,
+ `is_active` int(1),
+ `orderPos` int(11) NULL,
+ `depth` int(11) NOT NULL,
+ `ancestor_id_path` varchar(100),
+ `ancestor_path` varchar(256),
+ `ancestor_path_legacy` varchar(256),
+ `stores` varchar(256),
+ PRIMARY KEY `primary` (`project_category_id`, `lft`, `rgt`)
)
- ENGINE Memory
- AS
- SELECT
- sct.*,
- GROUP_CONCAT(csc.store_id ORDER BY csc.store_id) AS stores
- FROM
- tmp_stat_cat_tree AS sct
- LEFT JOIN
- config_store_category AS csc ON FIND_IN_SET(csc.project_category_id,sct.ancestor_id_path)
- GROUP BY sct.project_category_id
- ORDER BY sct.lft
- ;
-
- IF EXISTS(SELECT table_name
- FROM INFORMATION_SCHEMA.TABLES
- WHERE table_schema = DATABASE()
- AND table_name = 'stat_cat_tree')
+ ENGINE MEMORY
+ AS
+ SELECT `sct`.*,
+ GROUP_CONCAT(`csc`.`store_id` ORDER BY `csc`.`store_id`) AS `stores`
+ FROM `tmp_stat_cat_tree` AS `sct`
+ LEFT JOIN
+ `config_store_category` AS `csc` ON FIND_IN_SET(`csc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ GROUP BY `sct`.`project_category_id`
+ ORDER BY `sct`.`lft`;
+ IF EXISTS(SELECT `table_name`
+ FROM `INFORMATION_SCHEMA`.`TABLES`
+ WHERE `table_schema` = DATABASE()
+ AND `table_name` = 'stat_cat_tree')
THEN
-
- RENAME TABLE stat_cat_tree TO old_stat_cat_tree, tmp_stat_cat TO stat_cat_tree;
+ RENAME TABLE `stat_cat_tree` TO `old_stat_cat_tree`, `tmp_stat_cat` TO `stat_cat_tree`;
ELSE
-
- RENAME TABLE tmp_stat_cat TO stat_cat_tree;
+ RENAME TABLE `tmp_stat_cat` TO `stat_cat_tree`;
END IF;
- DROP TABLE IF EXISTS old_stat_cat_tree;
- DROP TABLE IF EXISTS tmp_stat_cat_tree;
+ DROP TABLE IF EXISTS `old_stat_cat_tree`;
+ DROP TABLE IF EXISTS `tmp_stat_cat_tree`;
- END$$
+END$$
DELIMITER ;
DROP EVENT IF EXISTS `e_generate_stat_cat_tree`;
CREATE
- DEFINER = CURRENT_USER
-EVENT IF NOT EXISTS `e_generate_stat_cat_tree`
- ON SCHEDULE
- EVERY 60 MINUTE STARTS DATE_FORMAT(NOW(),'%Y-%m-%d 05:00:00')
- ON COMPLETION PRESERVE
- -- DISABLE ON SLAVE
- COMMENT 'Regenerates generate_stat_cat_tree table'
-DO
- CALL pling.generate_stat_cat_tree();
\ No newline at end of file
+ DEFINER = CURRENT_USER
+ EVENT IF NOT EXISTS `e_generate_stat_cat_tree`
+ ON SCHEDULE
+ EVERY 60 MINUTE STARTS DATE_FORMAT(NOW(), '%Y-%m-%d 05:00:00')
+ ON COMPLETION PRESERVE
+ -- DISABLE ON SLAVE
+ COMMENT 'Regenerates generate_stat_cat_tree table'
+ DO
+ CALL `pling`.generate_stat_cat_tree();
\ No newline at end of file
diff --git a/sql_code/20170811_add_stored_procedure_prod_count.sql b/sql_code/20170811_add_stored_procedure_prod_count.sql
index dece7b83b..ed5a511db 100644
--- a/sql_code/20170811_add_stored_procedure_prod_count.sql
+++ b/sql_code/20170811_add_stored_procedure_prod_count.sql
@@ -1,73 +1,68 @@
-USE `pling`;
-DROP procedure IF EXISTS `generate_stat_cat_prod_count`;
+
+DROP PROCEDURE IF EXISTS `generate_stat_cat_prod_count`;
DELIMITER $$
USE `pling`$$
-CREATE DEFINER=CURRENT_USER PROCEDURE `generate_stat_cat_prod_count`()
- BEGIN
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `generate_stat_cat_prod_count`()
+BEGIN
- DROP TABLE IF EXISTS tmp_stat_cat_prod_count;
- CREATE TABLE tmp_stat_cat_prod_count
+ DROP TABLE IF EXISTS `tmp_stat_cat_prod_count`;
+ CREATE TABLE `tmp_stat_cat_prod_count`
(
- `project_category_id` int(11) NOT NULL,
- `package_type_id` int(11) NULL,
- `count_product` int(11) NULL,
- INDEX `idx_package` (`project_category_id`,`package_type_id`)
+ `project_category_id` int(11) NOT NULL,
+ `package_type_id` int(11) NULL,
+ `count_product` int(11) NULL,
+ INDEX `idx_package` (`project_category_id`, `package_type_id`)
)
- ENGINE Memory
- AS
- SELECT
- sct2.project_category_id,
- NULL as package_type_id,
- count(p.project_id) as count_product
- FROM stat_cat_tree as sct1
- JOIN stat_cat_tree as sct2 ON sct1.lft between sct2.lft AND sct2.rgt
- LEFT JOIN stat_projects as p ON p.project_category_id = sct1.project_category_id
- GROUP BY sct2.project_category_id
-
- UNION
+ ENGINE MEMORY
+ AS
+ SELECT `sct2`.`project_category_id`,
+ NULL AS `package_type_id`,
+ count(`p`.`project_id`) AS `count_product`
+ FROM `stat_cat_tree` AS `sct1`
+ JOIN `stat_cat_tree` AS `sct2` ON `sct1`.`lft` BETWEEN `sct2`.`lft` AND `sct2`.`rgt`
+ LEFT JOIN `stat_projects` AS `p` ON `p`.`project_category_id` = `sct1`.`project_category_id`
+ GROUP BY `sct2`.`project_category_id`
- SELECT
- sct2.project_category_id,
- ppt.package_type_id,
- count(p.project_id) as count_product
- FROM stat_cat_tree as sct1
- JOIN stat_cat_tree as sct2 ON sct1.lft between sct2.lft AND sct2.rgt
- JOIN stat_projects as p ON p.project_category_id = sct1.project_category_id
- JOIN project_package_type AS ppt ON ppt.project_id = p.project_id
- GROUP BY sct2.lft, ppt.package_type_id
- ;
+ UNION
- IF EXISTS(SELECT table_name
- FROM INFORMATION_SCHEMA.TABLES
- WHERE table_schema = DATABASE()
- AND table_name = 'stat_cat_prod_count')
+ SELECT `sct2`.`project_category_id`,
+ `ppt`.`package_type_id`,
+ count(`p`.`project_id`) AS `count_product`
+ FROM `stat_cat_tree` AS `sct1`
+ JOIN `stat_cat_tree` AS `sct2` ON `sct1`.`lft` BETWEEN `sct2`.`lft` AND `sct2`.`rgt`
+ JOIN `stat_projects` AS `p` ON `p`.`project_category_id` = `sct1`.`project_category_id`
+ JOIN `project_package_type` AS `ppt` ON `ppt`.`project_id` = `p`.`project_id`
+ GROUP BY `sct2`.`lft`, `ppt`.`package_type_id`;
+ IF EXISTS(SELECT `table_name`
+ FROM `INFORMATION_SCHEMA`.`TABLES`
+ WHERE `table_schema` = DATABASE()
+ AND `table_name` = 'stat_cat_prod_count')
THEN
-
- RENAME TABLE stat_cat_prod_count TO old_stat_cat_prod_count, tmp_stat_cat_prod_count TO stat_cat_prod_count;
+ RENAME TABLE `stat_cat_prod_count` TO `old_stat_cat_prod_count`, `tmp_stat_cat_prod_count` TO `stat_cat_prod_count`;
ELSE
-
- RENAME TABLE tmp_stat_cat_prod_count TO stat_cat_prod_count;
+ RENAME TABLE `tmp_stat_cat_prod_count` TO `stat_cat_prod_count`;
END IF;
- DROP TABLE IF EXISTS old_stat_cat_prod_count;
+ DROP TABLE IF EXISTS `old_stat_cat_prod_count`;
- END$$
+END$$
DELIMITER ;
DROP EVENT IF EXISTS `e_generate_stat_cat_prod_count`;
CREATE
- DEFINER = CURRENT_USER
-EVENT IF NOT EXISTS `e_generate_stat_cat_prod_count`
- ON SCHEDULE
- EVERY 2 MINUTE STARTS DATE_FORMAT(NOW(),'%Y-%m-%d 05:00:00')
- ON COMPLETION PRESERVE
- -- DISABLE ON SLAVE
- COMMENT 'Regenerates generate_stat_cat_prod_count table'
-DO
- CALL pling.generate_stat_cat_prod_count();
\ No newline at end of file
+ DEFINER = CURRENT_USER
+ EVENT IF NOT EXISTS `e_generate_stat_cat_prod_count`
+ ON SCHEDULE
+ EVERY 2 MINUTE STARTS DATE_FORMAT(NOW(), '%Y-%m-%d 05:00:00')
+ ON COMPLETION PRESERVE
+ -- DISABLE ON SLAVE
+ COMMENT 'Regenerates generate_stat_cat_prod_count table'
+ DO
+ CALL `pling`.generate_stat_cat_prod_count();
\ No newline at end of file
diff --git a/sql_code/20170825_add_support_btn.sql b/sql_code/20170825_add_support_btn.sql
index bb26507c5..733c99b7a 100644
--- a/sql_code/20170825_add_support_btn.sql
+++ b/sql_code/20170825_add_support_btn.sql
@@ -1,26 +1,27 @@
-CREATE TABLE `support` (
- `id` INT(11) NOT NULL AUTO_INCREMENT,
- `member_id` INT(11) NOT NULL COMMENT 'Supporter',
- `status_id` INT(11) NULL DEFAULT '0' COMMENT 'Stati der donation: 0 = inactive, 1 = active (donated), 2 = payed successfull, 99 = deleted',
- `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation-time',
- `donation_time` TIMESTAMP NULL DEFAULT NULL COMMENT 'When was a project plinged?',
- `active_time` TIMESTAMP NULL DEFAULT NULL COMMENT 'When did paypal say, that this donation was payed successfull',
- `delete_time` TIMESTAMP NULL DEFAULT NULL,
- `amount` DOUBLE(10,2) NULL DEFAULT '0.00' COMMENT 'Amount of money',
- `comment` VARCHAR(140) NULL DEFAULT NULL COMMENT 'Comment from the supporter',
- `payment_provider` VARCHAR(45) NULL DEFAULT NULL,
- `payment_reference_key` VARCHAR(255) NULL DEFAULT NULL COMMENT 'uniquely identifies the request',
- `payment_transaction_id` VARCHAR(255) NULL DEFAULT NULL COMMENT 'uniquely identify caller (developer, facilliator, marketplace) transaction',
- `payment_raw_message` VARCHAR(2000) NULL DEFAULT NULL COMMENT 'the raw text message ',
- `payment_raw_error` VARCHAR(2000) NULL DEFAULT NULL,
- `payment_status` VARCHAR(45) NULL DEFAULT NULL,
- PRIMARY KEY (`id`),
- INDEX `status_id` (`status_id`),
- INDEX `member_id` (`member_id`),
- INDEX `DONATION_IX_01` (`status_id`, `member_id`, `active_time`, `amount`)
+CREATE TABLE `support`
+(
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
+ `member_id` INT(11) NOT NULL COMMENT 'Supporter',
+ `status_id` INT(11) NULL DEFAULT '0' COMMENT 'Stati der donation: 0 = inactive, 1 = active (donated), 2 = payed successfull, 99 = deleted',
+ `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation-time',
+ `donation_time` TIMESTAMP NULL DEFAULT NULL COMMENT 'When was a project plinged?',
+ `active_time` TIMESTAMP NULL DEFAULT NULL COMMENT 'When did paypal say, that this donation was payed successfull',
+ `delete_time` TIMESTAMP NULL DEFAULT NULL,
+ `amount` DOUBLE(10, 2) NULL DEFAULT '0.00' COMMENT 'Amount of money',
+ `comment` VARCHAR(140) NULL DEFAULT NULL COMMENT 'Comment from the supporter',
+ `payment_provider` VARCHAR(45) NULL DEFAULT NULL,
+ `payment_reference_key` VARCHAR(255) NULL DEFAULT NULL COMMENT 'uniquely identifies the request',
+ `payment_transaction_id` VARCHAR(255) NULL DEFAULT NULL COMMENT 'uniquely identify caller (developer, facilliator, marketplace) transaction',
+ `payment_raw_message` VARCHAR(2000) NULL DEFAULT NULL COMMENT 'the raw text message ',
+ `payment_raw_error` VARCHAR(2000) NULL DEFAULT NULL,
+ `payment_status` VARCHAR(45) NULL DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ INDEX `status_id` (`status_id`),
+ INDEX `member_id` (`member_id`),
+ INDEX `DONATION_IX_01` (`status_id`, `member_id`, `active_time`, `amount`)
)
-COLLATE='latin1_swedish_ci'
-ENGINE=InnoDB
-AUTO_INCREMENT=8
+ COLLATE = 'latin1_swedish_ci'
+ ENGINE = InnoDB
+ AUTO_INCREMENT = 8
;
diff --git a/sql_code/20170904_cat_show_description.sql b/sql_code/20170904_cat_show_description.sql
index f247d8ecb..00bd54b4e 100644
--- a/sql_code/20170904_cat_show_description.sql
+++ b/sql_code/20170904_cat_show_description.sql
@@ -1,159 +1,225 @@
ALTER TABLE `project_category`
- ADD COLUMN `show_description` INT(1) NOT NULL DEFAULT '0' AFTER `dl_pling_factor`;
-
+ ADD COLUMN `show_description` INT(1) NOT NULL DEFAULT '0' AFTER `dl_pling_factor`;
+
ALTER TABLE `stat_projects`
- ADD COLUMN `cat_show_description` INT(1) NULL DEFAULT NULL AFTER `cat_name_legacy`;
-
-DROP VIEW stat_projects_v;
-CREATE VIEW stat_projects_v AS
-select `project`.`project_id` AS `project_id`,`project`.`member_id` AS `member_id`,`project`.`content_type` AS `content_type`,`project`.`project_category_id` AS `project_category_id`,`project`.`hive_category_id` AS `hive_category_id`,`project`.`status` AS `status`,`project`.`uuid` AS `uuid`,`project`.`pid` AS `pid`,`project`.`type_id` AS `type_id`,`project`.`title` AS `title`,`project`.`description` AS `description`,`project`.`version` AS `version`,`project`.`image_big` AS `image_big`,`project`.`image_small` AS `image_small`,`project`.`start_date` AS `start_date`,`project`.`content_url` AS `content_url`,`project`.`created_at` AS `created_at`,`project`.`changed_at` AS `changed_at`,`project`.`deleted_at` AS `deleted_at`,`project`.`creator_id` AS `creator_id`,`project`.`facebook_code` AS `facebook_code`,`project`.`github_code` AS `github_code`,`project`.`twitter_code` AS `twitter_code`,`project`.`google_code` AS `google_code`,`project`.`link_1` AS `link_1`,`project`.`embed_code` AS `embed_code`,`project`.`ppload_collection_id` AS `ppload_collection_id`,`project`.`validated` AS `validated`,`project`.`validated_at` AS `validated_at`,`project`.`featured` AS `featured`,`project`.`approved` AS `approved`,`project`.`amount` AS `amount`,`project`.`amount_period` AS `amount_period`,`project`.`claimable` AS `claimable`,`project`.`claimed_by_member` AS `claimed_by_member`,`project`.`count_likes` AS `count_likes`,`project`.`count_dislikes` AS `count_dislikes`,`project`.`count_comments` AS `count_comments`,`project`.`count_downloads_hive` AS `count_downloads_hive`,`project`.`source_id` AS `source_id`,`project`.`source_pk` AS `source_pk`,`project`.`source_type` AS `source_type`,`project`.`validated` AS `project_validated`,`project`.`uuid` AS `project_uuid`,`project`.`status` AS `project_status`,`project`.`created_at` AS `project_created_at`,`member`.`type` AS `member_type`,`member`.`member_id` AS `project_member_id`,`project`.`changed_at` AS `project_changed_at`,(round(((`project`.`count_likes` + 6) / ((`project`.`count_likes` + `project`.`count_dislikes`) + 12)),2) * 100) AS `laplace_score`,`member`.`username` AS `username`,`member`.`profile_image_url` AS `profile_image_url`,`member`.`city` AS `city`,`member`.`country` AS `country`,`member`.`created_at` AS `member_created_at`,`member`.`paypal_mail` AS `paypal_mail`,`project_category`.`title` AS `cat_title`,`project_category`.`xdg_type` AS `cat_xdg_type`,`project_category`.`name_legacy` AS `cat_name_legacy`,`project_category`.`show_description` AS `cat_show_description`,`stat_plings`.`amount_received` AS `amount_received`,`stat_plings`.`count_plings` AS `count_plings`,`stat_plings`.`count_plingers` AS `count_plingers`,`stat_plings`.`latest_pling` AS `latest_pling`,`view_reported_projects`.`amount_reports` AS `amount_reports` from ((((`project` join `member` on((`member`.`member_id` = `project`.`member_id`))) join `project_category` on((`project`.`project_category_id` = `project_category`.`project_category_id`))) left join `stat_plings` on((`stat_plings`.`project_id` = `project`.`project_id`))) left join `view_reported_projects` on((`view_reported_projects`.`project_id` = `project`.`project_id`))) where ((`member`.`is_deleted` = 0) and (`member`.`is_active` = 1) and (`project`.`type_id` = 1) and (`project`.`status` = 100));
+ ADD COLUMN `cat_show_description` INT(1) NULL DEFAULT NULL AFTER `cat_name_legacy`;
+
+DROP VIEW `stat_projects_v`;
+CREATE VIEW `stat_projects_v` AS
+SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`github_code` AS `github_code`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`approved` AS `approved`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `project`.`changed_at` AS `project_changed_at`,
+ (round(((`project`.`count_likes` + 6) / ((`project`.`count_likes` + `project`.`count_dislikes`) + 12)), 2) *
+ 100) AS `laplace_score`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `view_reported_projects`.`amount_reports` AS `amount_reports`
+FROM ((((`project` JOIN `member` ON ((`member`.`member_id` = `project`.`member_id`))) JOIN `project_category` ON ((
+ `project`.`project_category_id` =
+ `project_category`.`project_category_id`))) LEFT JOIN `stat_plings` ON ((`stat_plings`.`project_id` = `project`.`project_id`)))
+ LEFT JOIN `view_reported_projects` ON ((`view_reported_projects`.`project_id` = `project`.`project_id`)))
+WHERE ((`member`.`is_deleted` = 0) AND (`member`.`is_active` = 1) AND (`project`.`type_id` = 1) AND
+ (`project`.`status` = 100));
+
-USE `pling`;
-DROP procedure IF EXISTS `generate_stat_project`;
+DROP PROCEDURE IF EXISTS `generate_stat_project`;
DELIMITER $$
USE `pling`$$
-CREATE PROCEDURE `generate_stat_project` ()
- BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+CREATE PROCEDURE `generate_stat_project`()
+BEGIN
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0)
+ GROUP BY `reports_project`.`project_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- project_id,
- GROUP_CONCAT(DISTINCT project_package_type.package_type_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT package_types.`name`) AS `package_name_list`
- FROM
- project_package_type
- JOIN
- package_types ON project_package_type.package_type_id = package_types.package_type_id
- WHERE
- package_types.is_active = 1
- GROUP BY project_id
- ;
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project_id`,
+ GROUP_CONCAT(DISTINCT `project_package_type`.`package_type_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `package_types`.`name`) AS `package_name_list`
+ FROM `project_package_type`
+ JOIN
+ `package_types` ON `project_package_type`.`package_type_id` = `package_types`.`package_type_id`
+ WHERE `package_types`.`is_active` = 1
+ GROUP BY `project_id`;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_cat` (`project_category_id`))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`github_code` AS `github_code`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- `project`.`ppload_collection_id` AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`approved` AS `approved`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.package_type_id_list as package_types,
- `tppt`.package_name_list as package_names
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND `project`.`type_id` = 1
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_cat` (`project_category_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`github_code` AS `github_code`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`approved` AS `approved`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND `project`.`type_id` = 1
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
- DROP TABLE IF EXISTS old_stat_projects;
- END$$
+ DROP TABLE IF EXISTS `old_stat_projects`;
+END$$
DELIMITER ;
DROP EVENT IF EXISTS `e_generate_stat_projects`;
CREATE
- DEFINER = CURRENT_USER
-EVENT IF NOT EXISTS `e_generate_stat_projects`
- ON SCHEDULE
- EVERY 5 MINUTE STARTS DATE_FORMAT(NOW(),'%Y-%m-%d 05:00:00')
- ON COMPLETION PRESERVE
- -- DISABLE ON SLAVE
- COMMENT 'Regenerates stat_projects table'
-DO
- CALL pling.generate_stat_project();
\ No newline at end of file
+ DEFINER = CURRENT_USER
+ EVENT IF NOT EXISTS `e_generate_stat_projects`
+ ON SCHEDULE
+ EVERY 5 MINUTE STARTS DATE_FORMAT(NOW(), '%Y-%m-%d 05:00:00')
+ ON COMPLETION PRESERVE
+ -- DISABLE ON SLAVE
+ COMMENT 'Regenerates stat_projects table'
+ DO
+ CALL `pling`.generate_stat_project();
\ No newline at end of file
diff --git a/sql_code/20170908_paypal_ipn.sql b/sql_code/20170908_paypal_ipn.sql
index c74695b23..9d0db802c 100644
--- a/sql_code/20170908_paypal_ipn.sql
+++ b/sql_code/20170908_paypal_ipn.sql
@@ -1,28 +1,29 @@
-CREATE TABLE `paypal_ipn` (
- `id` INT(11) NOT NULL AUTO_INCREMENT,
- `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `txn_type` VARCHAR(50) NULL DEFAULT NULL,
- `ipn_track_id` VARCHAR(50) NULL DEFAULT NULL,
- `txn_id` VARCHAR(50) NULL DEFAULT NULL,
- `payer_email` VARCHAR(50) NULL DEFAULT NULL,
- `payer_id` VARCHAR(50) NULL DEFAULT NULL,
- `auth_amount` VARCHAR(50) NULL DEFAULT NULL,
- `mc_currency` VARCHAR(50) NULL DEFAULT NULL,
- `mc_fee` VARCHAR(50) NULL DEFAULT NULL,
- `mc_gross` VARCHAR(50) NULL DEFAULT NULL,
- `memo` VARCHAR(50) NULL DEFAULT NULL,
- `payer_status` VARCHAR(50) NULL DEFAULT NULL,
- `payment_date` VARCHAR(50) NULL DEFAULT NULL,
- `payment_fee` VARCHAR(50) NULL DEFAULT NULL,
- `payment_status` VARCHAR(50) NULL DEFAULT NULL,
- `payment_type` VARCHAR(50) NULL DEFAULT NULL,
- `pending_reason` VARCHAR(50) NULL DEFAULT NULL,
- `reason_code` VARCHAR(50) NULL DEFAULT NULL,
- `custom` VARCHAR(50) NULL DEFAULT NULL,
- `raw` TEXT NULL,
- PRIMARY KEY (`id`)
+CREATE TABLE `paypal_ipn`
+(
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
+ `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `txn_type` VARCHAR(50) NULL DEFAULT NULL,
+ `ipn_track_id` VARCHAR(50) NULL DEFAULT NULL,
+ `txn_id` VARCHAR(50) NULL DEFAULT NULL,
+ `payer_email` VARCHAR(50) NULL DEFAULT NULL,
+ `payer_id` VARCHAR(50) NULL DEFAULT NULL,
+ `auth_amount` VARCHAR(50) NULL DEFAULT NULL,
+ `mc_currency` VARCHAR(50) NULL DEFAULT NULL,
+ `mc_fee` VARCHAR(50) NULL DEFAULT NULL,
+ `mc_gross` VARCHAR(50) NULL DEFAULT NULL,
+ `memo` VARCHAR(50) NULL DEFAULT NULL,
+ `payer_status` VARCHAR(50) NULL DEFAULT NULL,
+ `payment_date` VARCHAR(50) NULL DEFAULT NULL,
+ `payment_fee` VARCHAR(50) NULL DEFAULT NULL,
+ `payment_status` VARCHAR(50) NULL DEFAULT NULL,
+ `payment_type` VARCHAR(50) NULL DEFAULT NULL,
+ `pending_reason` VARCHAR(50) NULL DEFAULT NULL,
+ `reason_code` VARCHAR(50) NULL DEFAULT NULL,
+ `custom` VARCHAR(50) NULL DEFAULT NULL,
+ `raw` TEXT NULL,
+ PRIMARY KEY (`id`)
)
-COMMENT='Save all PayPal IPNs here'
-ENGINE=InnoDB
+ COMMENT ='Save all PayPal IPNs here'
+ ENGINE = InnoDB
;
diff --git a/sql_code/20170922_complete_sql_for_tags.sql b/sql_code/20170922_complete_sql_for_tags.sql
index 5562ec739..465c72a9c 100644
--- a/sql_code/20170922_complete_sql_for_tags.sql
+++ b/sql_code/20170922_complete_sql_for_tags.sql
@@ -1,408 +1,420 @@
-USE `pling`;
DROP TABLE IF EXISTS `tag`;
-CREATE TABLE `tag` (
- `tag_id` int(11) NOT NULL AUTO_INCREMENT,
- `tag_name` varchar(45) NOT NULL,
- PRIMARY KEY (`tag_id`),
- UNIQUE KEY `idx_name` (`tag_name`)
-) ENGINE=InnoDB;
+CREATE TABLE `tag`
+(
+ `tag_id` int(11) NOT NULL AUTO_INCREMENT,
+ `tag_name` varchar(45) NOT NULL,
+ PRIMARY KEY (`tag_id`),
+ UNIQUE KEY `idx_name` (`tag_name`)
+) ENGINE = InnoDB;
DROP TABLE IF EXISTS `tag_group`;
-CREATE TABLE `tag_group` (
- `group_id` int(11) NOT NULL AUTO_INCREMENT,
- `group_name` varchar(45) NOT NULL,
- PRIMARY KEY (`group_id`)
-) ENGINE=InnoDB;
+CREATE TABLE `tag_group`
+(
+ `group_id` int(11) NOT NULL AUTO_INCREMENT,
+ `group_name` varchar(45) NOT NULL,
+ PRIMARY KEY (`group_id`)
+) ENGINE = InnoDB;
DROP TABLE IF EXISTS `tag_group_item`;
-CREATE TABLE `tag_group_item` (
- `tag_group_item_id` int(11) NOT NULL AUTO_INCREMENT,
- `tag_group_id` int(11) NOT NULL,
- `tag_id` int(11) NOT NULL,
- PRIMARY KEY (`tag_group_item_id`),
- KEY `tag_group_idx` (`tag_group_id`),
- KEY `tag_idx` (`tag_id`),
- CONSTRAINT `tag` FOREIGN KEY (`tag_id`) REFERENCES `tag` (`tag_id`) ON DELETE CASCADE ON UPDATE NO ACTION,
- CONSTRAINT `tag_group` FOREIGN KEY (`tag_group_id`) REFERENCES `tag_group` (`group_id`) ON DELETE CASCADE ON UPDATE NO ACTION
-) ENGINE=InnoDB;
+CREATE TABLE `tag_group_item`
+(
+ `tag_group_item_id` int(11) NOT NULL AUTO_INCREMENT,
+ `tag_group_id` int(11) NOT NULL,
+ `tag_id` int(11) NOT NULL,
+ PRIMARY KEY (`tag_group_item_id`),
+ KEY `tag_group_idx` (`tag_group_id`),
+ KEY `tag_idx` (`tag_id`),
+ CONSTRAINT `tag` FOREIGN KEY (`tag_id`) REFERENCES `tag` (`tag_id`) ON DELETE CASCADE ON UPDATE NO ACTION,
+ CONSTRAINT `tag_group` FOREIGN KEY (`tag_group_id`) REFERENCES `tag_group` (`group_id`) ON DELETE CASCADE ON UPDATE NO ACTION
+) ENGINE = InnoDB;
DROP TABLE IF EXISTS `tag_object`;
-CREATE TABLE `tag_object` (
- `tag_item_id` int(11) NOT NULL AUTO_INCREMENT,
- `tag_id` int(11) NOT NULL,
- `tag_type_id` int(11) NOT NULL,
- `tag_object_id` int(11) NOT NULL,
- `tag_created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
- `tag_changed` datetime DEFAULT NULL,
- PRIMARY KEY (`tag_item_id`),
- UNIQUE KEY `tags_unique` (`tag_id`,`tag_type_id`,`tag_object_id`),
- KEY `tags_idx` (`tag_id`),
- KEY `types_idx` (`tag_type_id`)
-) ENGINE=InnoDB;
+CREATE TABLE `tag_object`
+(
+ `tag_item_id` int(11) NOT NULL AUTO_INCREMENT,
+ `tag_id` int(11) NOT NULL,
+ `tag_type_id` int(11) NOT NULL,
+ `tag_object_id` int(11) NOT NULL,
+ `tag_created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+ `tag_changed` datetime DEFAULT NULL,
+ PRIMARY KEY (`tag_item_id`),
+ UNIQUE KEY `tags_unique` (`tag_id`, `tag_type_id`, `tag_object_id`),
+ KEY `tags_idx` (`tag_id`),
+ KEY `types_idx` (`tag_type_id`)
+) ENGINE = InnoDB;
DELIMITER $$
-DROP TRIGGER IF EXISTS tag_object_BEFORE_INSERT$$
-CREATE DEFINER = CURRENT_USER TRIGGER `tag_object_BEFORE_INSERT` BEFORE INSERT ON `tag_object` FOR EACH ROW
- BEGIN
- IF NEW.tag_changed IS NULL THEN
- SET NEW.tag_changed = NOW();
+DROP TRIGGER IF EXISTS `tag_object_BEFORE_INSERT`$$
+CREATE DEFINER = CURRENT_USER TRIGGER `tag_object_BEFORE_INSERT`
+ BEFORE INSERT
+ ON `tag_object`
+ FOR EACH ROW
+BEGIN
+ IF `NEW`.`tag_changed` IS NULL THEN
+ SET `NEW`.`tag_changed` = NOW();
END IF;
- END$$
+END$$
DELIMITER ;
DROP TABLE IF EXISTS `tag_type`;
-CREATE TABLE `tag_type` (
- `tag_type_id` int(11) NOT NULL AUTO_INCREMENT,
- `tag_type_name` varchar(45) NOT NULL,
- PRIMARY KEY (`tag_type_id`)
-) ENGINE=InnoDB;
+CREATE TABLE `tag_type`
+(
+ `tag_type_id` int(11) NOT NULL AUTO_INCREMENT,
+ `tag_type_name` varchar(45) NOT NULL,
+ PRIMARY KEY (`tag_type_id`)
+) ENGINE = InnoDB;
-INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`) VALUES ('1', 'project');
-INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`) VALUES ('2', 'member');
-INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`) VALUES ('3', 'file');
-INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`) VALUES ('4', 'download');
-INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`) VALUES ('5', 'image');
-INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`) VALUES ('6', 'video');
-INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`) VALUES ('7', 'comment');
-INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`) VALUES ('8', 'activity');
+INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`)
+VALUES ('1', 'project');
+INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`)
+VALUES ('2', 'member');
+INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`)
+VALUES ('3', 'file');
+INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`)
+VALUES ('4', 'download');
+INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`)
+VALUES ('5', 'image');
+INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`)
+VALUES ('6', 'video');
+INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`)
+VALUES ('7', 'comment');
+INSERT INTO `tag_type` (`tag_type_id`, `tag_type_name`)
+VALUES ('8', 'activity');
-DROP procedure IF EXISTS `solr_query_import`;
+DROP PROCEDURE IF EXISTS `solr_query_import`;
DELIMITER $$
-CREATE PROCEDURE `solr_query_import` ()
- BEGIN
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags AS
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names, tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1
- GROUP BY tgo.tag_object_id
- ORDER BY tgo.tag_object_id;
+CREATE PROCEDURE `solr_query_import`()
+BEGIN
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags` AS
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`, `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1
+ GROUP BY `tgo`.`tag_object_id`
+ ORDER BY `tgo`.`tag_object_id`;
- DROP TABLE IF EXISTS tmp_cat_tree;
- CREATE TEMPORARY TABLE tmp_cat_tree AS
- SELECT
- pc.project_category_id,
- pc.title,
- pc.is_active,
- count(pc.lft) AS depth,
- GROUP_CONCAT(pc2.project_category_id ORDER BY pc2.lft) AS ancestor_id_path,
- GROUP_CONCAT(pc2.title ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path
- FROM project_category AS pc, project_category AS pc2
- WHERE (pc.lft BETWEEN pc2.lft AND pc2.rgt)
- GROUP BY pc.lft
- ORDER BY pc.lft;
+ DROP TABLE IF EXISTS `tmp_cat_tree`;
+ CREATE TEMPORARY TABLE `tmp_cat_tree` AS
+ SELECT `pc`.`project_category_id`,
+ `pc`.`title`,
+ `pc`.`is_active`,
+ count(`pc`.`lft`) AS `depth`,
+ GROUP_CONCAT(`pc2`.`project_category_id` ORDER BY `pc2`.`lft`) AS `ancestor_id_path`,
+ GROUP_CONCAT(`pc2`.`title` ORDER BY `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path`
+ FROM `project_category` AS `pc`,
+ `project_category` AS `pc2`
+ WHERE (`pc`.`lft` BETWEEN `pc2`.`lft` AND `pc2`.`rgt`)
+ GROUP BY `pc`.`lft`
+ ORDER BY `pc`.`lft`;
- DROP TABLE IF EXISTS tmp_cat_store;
- CREATE TEMPORARY TABLE tmp_cat_store AS
- SELECT
- tct.project_category_id,
- tct.ancestor_id_path,
- tct.title,
- tct.is_active,
- group_concat(store_id) AS stores
- FROM tmp_cat_tree AS tct, config_store_category AS csc
- WHERE FIND_IN_SET(csc.project_category_id, tct.ancestor_id_path) > 0
- GROUP BY tct.project_category_id
- ORDER BY tct.project_category_id;
+ DROP TABLE IF EXISTS `tmp_cat_store`;
+ CREATE TEMPORARY TABLE `tmp_cat_store` AS
+ SELECT `tct`.`project_category_id`,
+ `tct`.`ancestor_id_path`,
+ `tct`.`title`,
+ `tct`.`is_active`,
+ group_concat(`store_id`) AS `stores`
+ FROM `tmp_cat_tree` AS `tct`,
+ `config_store_category` AS `csc`
+ WHERE FIND_IN_SET(`csc`.`project_category_id`, `tct`.`ancestor_id_path`) > 0
+ GROUP BY `tct`.`project_category_id`
+ ORDER BY `tct`.`project_category_id`;
- DROP TABLE IF EXISTS solr_project_package_types;
- CREATE TEMPORARY TABLE solr_project_package_types
- (PRIMARY KEY `primary` (package_project_id))
- ENGINE MyISAM
- AS
- SELECT
- project_id as package_project_id,
- GROUP_CONCAT(DISTINCT project_package_type.package_type_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT package_types.`name`) AS `package_name_list`
- FROM
- project_package_type
- JOIN
- package_types ON project_package_type.package_type_id = package_types.package_type_id
- WHERE
- package_types.is_active = 1
- GROUP BY project_id
- ;
+ DROP TABLE IF EXISTS `solr_project_package_types`;
+ CREATE TEMPORARY TABLE `solr_project_package_types`
+ (
+ PRIMARY KEY `primary` (`package_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project_id` AS `package_project_id`,
+ GROUP_CONCAT(DISTINCT `project_package_type`.`package_type_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `package_types`.`name`) AS `package_name_list`
+ FROM `project_package_type`
+ JOIN
+ `package_types` ON `project_package_type`.`package_type_id` = `package_types`.`package_type_id`
+ WHERE `package_types`.`is_active` = 1
+ GROUP BY `project_id`;
- SELECT
- project_id,
- project.member_id AS project_member_id,
- project.project_category_id AS project_category_id,
- project.title AS project_title,
- description,
- image_small,
- member.username,
- member.firstname,
- member.lastname,
- tcs.title AS cat_title,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- laplace_score(project.count_likes, project.count_dislikes) AS `laplace_score`,
- project.created_at,
- project.changed_at,
- tcs.stores,
- tcs.ancestor_id_path AS `cat_id_ancestor_path`,
- sppt.package_type_id_list AS `package_ids`,
- sppt.package_name_list AS `package_names`,
- t.tag_names AS `tags`
- FROM project
- JOIN member ON member.member_id = project.member_id
- JOIN tmp_cat_store AS tcs ON project.project_category_id = tcs.project_category_id
- LEFT JOIN solr_project_package_types AS sppt ON sppt.package_project_id = project.project_id
- LEFT JOIN tmp_project_tags AS t ON t.tag_project_id = project.project_id
- WHERE project.`status` = 100 AND project.`type_id` = 1 AND member.`is_active` = 1 AND tcs.`is_active` = 1;
- END$$
+ SELECT `project_id`,
+ `project`.`member_id` AS `project_member_id`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`title` AS `project_title`,
+ `description`,
+ `image_small`,
+ `member`.`username`,
+ `member`.`firstname`,
+ `member`.`lastname`,
+ `tcs`.`title` AS `cat_title`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `project`.`created_at`,
+ `project`.`changed_at`,
+ `tcs`.`stores`,
+ `tcs`.`ancestor_id_path` AS `cat_id_ancestor_path`,
+ `sppt`.`package_type_id_list` AS `package_ids`,
+ `sppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `tmp_cat_store` AS `tcs` ON `project`.`project_category_id` = `tcs`.`project_category_id`
+ LEFT JOIN `solr_project_package_types` AS `sppt` ON `sppt`.`package_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ WHERE `project`.`status` = 100
+ AND `project`.`type_id` = 1
+ AND `member`.`is_active` = 1
+ AND `tcs`.`is_active` = 1;
+END$$
DELIMITER ;
-DROP procedure IF EXISTS `solr_query_delta_import`;
+DROP PROCEDURE IF EXISTS `solr_query_delta_import`;
DELIMITER $$
-CREATE PROCEDURE `solr_query_delta_import` (IN projectID INT(11))
- BEGIN
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags AS
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names, tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1
- GROUP BY tgo.tag_object_id
- ORDER BY tgo.tag_object_id;
+CREATE PROCEDURE `solr_query_delta_import`(IN `projectID` INT(11))
+BEGIN
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags` AS
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`, `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1
+ GROUP BY `tgo`.`tag_object_id`
+ ORDER BY `tgo`.`tag_object_id`;
- DROP TABLE IF EXISTS tmp_cat_tree;
- CREATE TEMPORARY TABLE tmp_cat_tree AS
- SELECT
- pc.project_category_id,
- pc.title,
- pc.is_active,
- count(pc.lft) AS depth,
- GROUP_CONCAT(pc2.project_category_id ORDER BY pc2.lft) AS ancestor_id_path,
- GROUP_CONCAT(pc2.title ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path
- FROM project_category AS pc, project_category AS pc2
- WHERE (pc.lft BETWEEN pc2.lft AND pc2.rgt)
- GROUP BY pc.lft
- ORDER BY pc.lft;
+ DROP TABLE IF EXISTS `tmp_cat_tree`;
+ CREATE TEMPORARY TABLE `tmp_cat_tree` AS
+ SELECT `pc`.`project_category_id`,
+ `pc`.`title`,
+ `pc`.`is_active`,
+ count(`pc`.`lft`) AS `depth`,
+ GROUP_CONCAT(`pc2`.`project_category_id` ORDER BY `pc2`.`lft`) AS `ancestor_id_path`,
+ GROUP_CONCAT(`pc2`.`title` ORDER BY `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path`
+ FROM `project_category` AS `pc`,
+ `project_category` AS `pc2`
+ WHERE (`pc`.`lft` BETWEEN `pc2`.`lft` AND `pc2`.`rgt`)
+ GROUP BY `pc`.`lft`
+ ORDER BY `pc`.`lft`;
- DROP TABLE IF EXISTS tmp_cat_store;
- CREATE TEMPORARY TABLE tmp_cat_store AS
- SELECT
- tct.project_category_id,
- tct.ancestor_id_path,
- tct.title,
- tct.is_active,
- group_concat(store_id) AS stores
- FROM tmp_cat_tree AS tct, config_store_category AS csc
- WHERE FIND_IN_SET(csc.project_category_id, tct.ancestor_id_path) > 0
- GROUP BY tct.project_category_id
- ORDER BY tct.project_category_id;
+ DROP TABLE IF EXISTS `tmp_cat_store`;
+ CREATE TEMPORARY TABLE `tmp_cat_store` AS
+ SELECT `tct`.`project_category_id`,
+ `tct`.`ancestor_id_path`,
+ `tct`.`title`,
+ `tct`.`is_active`,
+ group_concat(`store_id`) AS `stores`
+ FROM `tmp_cat_tree` AS `tct`,
+ `config_store_category` AS `csc`
+ WHERE FIND_IN_SET(`csc`.`project_category_id`, `tct`.`ancestor_id_path`) > 0
+ GROUP BY `tct`.`project_category_id`
+ ORDER BY `tct`.`project_category_id`;
- DROP TABLE IF EXISTS solr_project_package_types;
- CREATE TEMPORARY TABLE solr_project_package_types
- (PRIMARY KEY `primary` (package_project_id))
- ENGINE MyISAM
- AS
- SELECT
- project_id as package_project_id,
- GROUP_CONCAT(DISTINCT project_package_type.package_type_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT package_types.`name`) AS `package_name_list`
- FROM
- project_package_type
- JOIN
- package_types ON project_package_type.package_type_id = package_types.package_type_id
- WHERE
- package_types.is_active = 1
- GROUP BY project_id
- ;
+ DROP TABLE IF EXISTS `solr_project_package_types`;
+ CREATE TEMPORARY TABLE `solr_project_package_types`
+ (
+ PRIMARY KEY `primary` (`package_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project_id` AS `package_project_id`,
+ GROUP_CONCAT(DISTINCT `project_package_type`.`package_type_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `package_types`.`name`) AS `package_name_list`
+ FROM `project_package_type`
+ JOIN
+ `package_types` ON `project_package_type`.`package_type_id` = `package_types`.`package_type_id`
+ WHERE `package_types`.`is_active` = 1
+ GROUP BY `project_id`;
- SELECT
- project_id,
- project.member_id AS project_member_id,
- project.project_category_id AS project_category_id,
- project.title AS project_title,
- description,
- image_small,
- member.username,
- member.firstname,
- member.lastname,
- tcs.title AS cat_title,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- laplace_score(project.count_likes, project.count_dislikes) AS `laplace_score`,
- project.created_at,
- project.changed_at,
- tcs.stores,
- tcs.ancestor_id_path AS `cat_id_ancestor_path`,
- sppt.package_type_id_list AS `package_ids`,
- sppt.package_name_list AS `package_names`,
- t.tag_names AS `tags`
- FROM project
- JOIN member ON member.member_id = project.member_id
- JOIN tmp_cat_store AS tcs ON project.project_category_id = tcs.project_category_id
- LEFT JOIN solr_project_package_types AS sppt ON sppt.package_project_id = project.project_id
- LEFT JOIN tmp_project_tags AS t ON t.tag_project_id = project.project_id
- WHERE project_id = projectID;
- END$$
+ SELECT `project_id`,
+ `project`.`member_id` AS `project_member_id`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`title` AS `project_title`,
+ `description`,
+ `image_small`,
+ `member`.`username`,
+ `member`.`firstname`,
+ `member`.`lastname`,
+ `tcs`.`title` AS `cat_title`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `project`.`created_at`,
+ `project`.`changed_at`,
+ `tcs`.`stores`,
+ `tcs`.`ancestor_id_path` AS `cat_id_ancestor_path`,
+ `sppt`.`package_type_id_list` AS `package_ids`,
+ `sppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `tmp_cat_store` AS `tcs` ON `project`.`project_category_id` = `tcs`.`project_category_id`
+ LEFT JOIN `solr_project_package_types` AS `sppt` ON `sppt`.`package_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ WHERE `project_id` = `projectID`;
+END$$
DELIMITER ;
-DROP procedure IF EXISTS `solr_query_delta`;
+DROP PROCEDURE IF EXISTS `solr_query_delta`;
DELIMITER $$
-CREATE PROCEDURE `solr_query_delta` (IN lastIndexed varchar(255))
- BEGIN
- SELECT DISTINCT project_id
- FROM project
- JOIN member ON member.member_id = project.member_id
- JOIN project_category AS pc ON pc.project_category_id = project.project_category_id
- LEFT JOIN tag_object AS tgo ON tgo.tag_object_id = project.project_id AND tgo.tag_type_id = 1
- WHERE (project.`status` = 100 AND project.`type_id` = 1 AND member.`is_active` = 1 AND pc.`is_active` = 1 AND project.changed_at > lastIndexed)
- OR (project.`status` = 100 AND project.`type_id` = 1 AND member.`is_active` = 1 AND pc.`is_active` = 1 AND (tgo.tag_created > lastIndexed OR tgo.tag_changed > lastIndexed))
- ;
- END$$
+CREATE PROCEDURE `solr_query_delta`(IN `lastIndexed` varchar(255))
+BEGIN
+ SELECT DISTINCT `project_id`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `project`.`project_category_id`
+ LEFT JOIN `tag_object` AS `tgo`
+ ON `tgo`.`tag_object_id` = `project`.`project_id` AND `tgo`.`tag_type_id` = 1
+ WHERE (`project`.`status` = 100 AND `project`.`type_id` = 1 AND `member`.`is_active` = 1 AND
+ `pc`.`is_active` = 1 AND `project`.`changed_at` > `lastIndexed`)
+ OR (`project`.`status` = 100 AND `project`.`type_id` = 1 AND `member`.`is_active` = 1 AND
+ `pc`.`is_active` = 1 AND (`tgo`.`tag_created` > `lastIndexed` OR `tgo`.`tag_changed` > `lastIndexed`));
+END$$
DELIMITER ;
-DROP procedure IF EXISTS `generate_stat_project`;
+DROP PROCEDURE IF EXISTS `generate_stat_project`;
DELIMITER $$
-CREATE DEFINER=CURRENT_USER PROCEDURE `generate_stat_project`()
- BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `generate_stat_project`()
+BEGIN
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0)
+ GROUP BY `reports_project`.`project_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- project_id,
- GROUP_CONCAT(DISTINCT project_package_type.package_type_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT package_types.`name`) AS `package_name_list`
- FROM
- project_package_type
- JOIN
- package_types ON project_package_type.package_type_id = package_types.package_type_id
- WHERE
- package_types.is_active = 1
- GROUP BY project_id
- ;
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project_id`,
+ GROUP_CONCAT(DISTINCT `project_package_type`.`package_type_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `package_types`.`name`) AS `package_name_list`
+ FROM `project_package_type`
+ JOIN
+ `package_types` ON `project_package_type`.`package_type_id` = `package_types`.`package_type_id`
+ WHERE `package_types`.`is_active` = 1
+ GROUP BY `project_id`;
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names, tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1
- GROUP BY tgo.tag_object_id
- ORDER BY tgo.tag_object_id;
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`, `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1
+ GROUP BY `tgo`.`tag_object_id`
+ ORDER BY `tgo`.`tag_object_id`;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_cat` (`project_category_id`))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`github_code` AS `github_code`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- `project`.`ppload_collection_id` AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`approved` AS `approved`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.`package_type_id_list` AS `package_types`,
- `tppt`.`package_name_list` AS `package_names`,
- `t`.`tag_names` AS `tags`
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- LEFT JOIN `tmp_project_tags` AS t ON t.`tag_project_id` = project.`project_id`
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND `project`.`type_id` = 1
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_cat` (`project_category_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`github_code` AS `github_code`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`approved` AS `approved`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND `project`.`type_id` = 1
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
- DROP TABLE IF EXISTS old_stat_projects;
- END$$
+ DROP TABLE IF EXISTS `old_stat_projects`;
+END$$
DELIMITER ;
diff --git a/sql_code/20171109_activity_log_types_updated.sql b/sql_code/20171109_activity_log_types_updated.sql
index 401401472..efe50c8a8 100644
--- a/sql_code/20171109_activity_log_types_updated.sql
+++ b/sql_code/20171109_activity_log_types_updated.sql
@@ -1,22 +1,44 @@
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('50', 'ProjectFollowed');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('51', 'ProjectUnfollowed');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('52', 'ProjectShared');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('60', 'ProjectRatedHigher');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('61', 'ProjectRatedLower');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('200', 'ProjectFilesCreated');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('210', 'ProjectFilesUpdated');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('220', 'ProjectFilesDeleted');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('100', 'MemberJoined');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('101', 'MemberUpdated');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('102', 'MemberDeleted');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('107', 'MemberEdited');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('150', 'MemberFollowed');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('151', 'MemberUnfollowed');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('152', 'MemberShared');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('302', 'BackendLogin');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('304', 'BackendLogout');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('310', 'BackendProjectDelete');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('312', 'BackendProjectFeature');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('314', 'BackendProjectApproved');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('316', 'BackendProjectCatChanged');
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('320', 'BackendUserDeleted');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('50', 'ProjectFollowed');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('51', 'ProjectUnfollowed');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('52', 'ProjectShared');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('60', 'ProjectRatedHigher');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('61', 'ProjectRatedLower');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('200', 'ProjectFilesCreated');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('210', 'ProjectFilesUpdated');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('220', 'ProjectFilesDeleted');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('100', 'MemberJoined');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('101', 'MemberUpdated');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('102', 'MemberDeleted');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('107', 'MemberEdited');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('150', 'MemberFollowed');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('151', 'MemberUnfollowed');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('152', 'MemberShared');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('302', 'BackendLogin');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('304', 'BackendLogout');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('310', 'BackendProjectDelete');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('312', 'BackendProjectFeature');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('314', 'BackendProjectApproved');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('316', 'BackendProjectCatChanged');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('320', 'BackendUserDeleted');
diff --git a/sql_code/20171115_add_field_pling_excluded.sql b/sql_code/20171115_add_field_pling_excluded.sql
index 07ef98202..b7d3f3ec0 100644
--- a/sql_code/20171115_add_field_pling_excluded.sql
+++ b/sql_code/20171115_add_field_pling_excluded.sql
@@ -1,17 +1,30 @@
ALTER TABLE `project`
- ADD COLUMN `pling_excluded` INT(1) NOT NULL DEFAULT '0' COMMENT 'Project was excluded from pling payout' AFTER `spam_checked`;
+ ADD COLUMN `pling_excluded` INT(1) NOT NULL DEFAULT '0' COMMENT 'Project was excluded from pling payout' AFTER `spam_checked`;
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('318', 'BackendProjectPlingExcluded');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('318', 'BackendProjectPlingExcluded');
-DROP VIEW stat_member_dl_curent_month;
-CREATE VIEW stat_member_dl_curent_month AS
-SELECT DATE_FORMAT(NOW(),'%Y%m') AS `yearmonth`,`p`.`project_id` AS `project_id`,`p`.`project_category_id` AS `project_category_id`,`d`.`owner_id` AS `member_id`,`m`.`mail` AS `mail`,`m`.`paypal_mail` AS `paypal_mail`, COUNT(`d`.`id`) AS `num_downloads`,`c`.`dl_pling_factor` AS `dl_pling_factor`,((COUNT(`d`.`id`) * `c`.`dl_pling_factor`) / 100) AS `amount`, NULL AS `created_at`, NULL AS `updated_at`
+DROP VIEW `stat_member_dl_curent_month`;
+CREATE VIEW `stat_member_dl_curent_month` AS
+SELECT DATE_FORMAT(NOW(), '%Y%m') AS `yearmonth`,
+ `p`.`project_id` AS `project_id`,
+ `p`.`project_category_id` AS `project_category_id`,
+ `d`.`owner_id` AS `member_id`,
+ `m`.`mail` AS `mail`,
+ `m`.`paypal_mail` AS `paypal_mail`,
+ COUNT(`d`.`id`) AS `num_downloads`,
+ `c`.`dl_pling_factor` AS `dl_pling_factor`,
+ ((COUNT(`d`.`id`) * `c`.`dl_pling_factor`) / 100) AS `amount`,
+ NULL AS `created_at`,
+ NULL AS `updated_at`
FROM (((`ppload`.`ppload_files_downloaded` `d`
-JOIN `pling`.`member` `m` ON(((`m`.`member_id` = `d`.`owner_id`) AND (`m`.`is_active` = 1))))
-JOIN `pling`.`project` `p` ON(((CAST(`p`.`ppload_collection_id` AS UNSIGNED) = `d`.`collection_id`) AND (`p`.`pling_excluded` = 0) AND (`p`.`status` = 100))))
-JOIN `pling`.`project_category` `c` ON((`c`.`project_category_id` = `p`.`project_category_id`)))
+ JOIN `pling`.`member` `m` ON (((`m`.`member_id` = `d`.`owner_id`) AND (`m`.`is_active` = 1))))
+ JOIN `pling`.`project` `p` ON (((CAST(`p`.`ppload_collection_id` AS UNSIGNED) = `d`.`collection_id`) AND
+ (`p`.`pling_excluded` = 0) AND (`p`.`status` = 100))))
+ JOIN `pling`.`project_category` `c` ON ((`c`.`project_category_id` = `p`.`project_category_id`)))
WHERE ((`d`.`downloaded_timestamp` >= CONCAT(
-LEFT(NOW(),7),'-01 00:00:00')) AND (`p`.`ppload_collection_id` IS NOT NULL) AND (LENGTH(`p`.`ppload_collection_id`) > 0) AND (NOT((`p`.`ppload_collection_id` LIKE '!%'))))
-GROUP BY `d`.`owner_id`,`p`.`project_id`
+ LEFT(NOW(), 7), '-01 00:00:00')) AND (`p`.`ppload_collection_id` IS NOT NULL) AND
+ (LENGTH(`p`.`ppload_collection_id`) > 0) AND (NOT ((`p`.`ppload_collection_id` LIKE '!%'))))
+GROUP BY `d`.`owner_id`, `p`.`project_id`
ORDER BY COUNT(`d`.`id`) DESC;
diff --git a/sql_code/20171214_add_piwik.sql b/sql_code/20171214_add_piwik.sql
index 0ce93ce96..1b3db5992 100644
--- a/sql_code/20171214_add_piwik.sql
+++ b/sql_code/20171214_add_piwik.sql
@@ -1,4 +1,4 @@
ALTER TABLE `config_store`
- ADD COLUMN `piwik_id` INT NULL DEFAULT '1' AFTER `google_id`;
+ ADD COLUMN `piwik_id` INT NULL DEFAULT '1' AFTER `google_id`;
diff --git a/sql_code/20180122_member_dl_history.sql b/sql_code/20180122_member_dl_history.sql
index ac13df5e2..72aac6096 100644
--- a/sql_code/20180122_member_dl_history.sql
+++ b/sql_code/20180122_member_dl_history.sql
@@ -1,17 +1,18 @@
-CREATE TABLE `member_download_history` (
- `id` INT(11) NOT NULL AUTO_INCREMENT,
- `member_id` VARCHAR(255) NOT NULL,
- `project_id` INT(11) NOT NULL,
- `file_id` INT(11) NOT NULL,
- `file_name` VARCHAR(255) NOT NULL,
- `file_type` VARCHAR(255) NOT NULL,
- `file_size` BIGINT(20) UNSIGNED NOT NULL,
- `downloaded_timestamp` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- INDEX `idx_time` (`downloaded_timestamp`),
- INDEX `idx_projectid` (`project_id`),
- INDEX `idx_memberid` (`member_id`)
+CREATE TABLE `member_download_history`
+(
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
+ `member_id` VARCHAR(255) NOT NULL,
+ `project_id` INT(11) NOT NULL,
+ `file_id` INT(11) NOT NULL,
+ `file_name` VARCHAR(255) NOT NULL,
+ `file_type` VARCHAR(255) NOT NULL,
+ `file_size` BIGINT(20) UNSIGNED NOT NULL,
+ `downloaded_timestamp` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
+ PRIMARY KEY (`id`),
+ INDEX `idx_time` (`downloaded_timestamp`),
+ INDEX `idx_projectid` (`project_id`),
+ INDEX `idx_memberid` (`member_id`)
)
-COLLATE='latin1_swedish_ci'
-ENGINE=MyISAM
+ COLLATE = 'latin1_swedish_ci'
+ ENGINE = MyISAM
;
diff --git a/sql_code/20180131_add_activity_log_type_paypal.sql b/sql_code/20180131_add_activity_log_type_paypal.sql
index 605cb5afe..a5ef4b2a5 100644
--- a/sql_code/20180131_add_activity_log_type_paypal.sql
+++ b/sql_code/20180131_add_activity_log_type_paypal.sql
@@ -1,4 +1,11 @@
-INSERT INTO `pling`.`activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('110', 'MEMBER_PAYPAL_CHANGED');
-UPDATE `pling`.`activity_log_types` SET `activity_log_type_id`='401' WHERE `activity_log_type_id`=103;
-UPDATE `pling`.`activity_log_types` SET `activity_log_type_id`='410', `type_text`='MemberPaypalChanged' WHERE `activity_log_type_id`=110;
-INSERT INTO `pling`.`activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('402', 'MemberEmailChanged');
\ No newline at end of file
+INSERT INTO `pling`.`activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('110', 'MEMBER_PAYPAL_CHANGED');
+UPDATE `pling`.`activity_log_types`
+SET `activity_log_type_id`='401'
+WHERE `activity_log_type_id` = 103;
+UPDATE `pling`.`activity_log_types`
+SET `activity_log_type_id`='410',
+ `type_text`='MemberPaypalChanged'
+WHERE `activity_log_type_id` = 110;
+INSERT INTO `pling`.`activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('402', 'MemberEmailChanged');
\ No newline at end of file
diff --git a/sql_code/20180207_alter_comment_update_trigger.sql b/sql_code/20180207_alter_comment_update_trigger.sql
index c85752a90..4699e30a0 100644
--- a/sql_code/20180207_alter_comment_update_trigger.sql
+++ b/sql_code/20180207_alter_comment_update_trigger.sql
@@ -1,29 +1,32 @@
DROP TRIGGER IF EXISTS `comment_update`;
DELIMITER $$
-CREATE DEFINER = CURRENT_USER TRIGGER `comment_update` BEFORE UPDATE ON `comments` FOR EACH ROW
- BEGIN
-
- IF NEW.comment_active = 0 AND OLD.comment_active = 1 THEN
-
- UPDATE project p
- SET p.count_comments = (p.count_comments-1)
- WHERE p.project_id = NEW.comment_target_id;
-
- SET NEW.comment_deleted_at = NOW();
-
- END IF;
-
- IF NEW.comment_active = 1 AND OLD.comment_active = 0 THEN
-
- UPDATE project p
- SET p.count_comments = (p.count_comments+1)
- WHERE p.project_id = NEW.comment_target_id;
-
- SET NEW.comment_deleted_at = null;
-
- END IF;
-
- END$$
+CREATE DEFINER = CURRENT_USER TRIGGER `comment_update`
+ BEFORE UPDATE
+ ON `comments`
+ FOR EACH ROW
+BEGIN
+
+ IF `NEW`.`comment_active` = 0 AND `OLD`.`comment_active` = 1 THEN
+
+ UPDATE `project` `p`
+ SET `p`.`count_comments` = (`p`.`count_comments` - 1)
+ WHERE `p`.`project_id` = `NEW`.`comment_target_id`;
+
+ SET `NEW`.`comment_deleted_at` = NOW();
+
+ END IF;
+
+ IF `NEW`.`comment_active` = 1 AND `OLD`.`comment_active` = 0 THEN
+
+ UPDATE `project` `p`
+ SET `p`.`count_comments` = (`p`.`count_comments` + 1)
+ WHERE `p`.`project_id` = `NEW`.`comment_target_id`;
+
+ SET `NEW`.`comment_deleted_at` = NULL;
+
+ END IF;
+
+END$$
DELIMITER ;
\ No newline at end of file
diff --git a/sql_code/20180208_alter_table_project_follower.sql b/sql_code/20180208_alter_table_project_follower.sql
index 055f6bb54..bf7f6ebea 100644
--- a/sql_code/20180208_alter_table_project_follower.sql
+++ b/sql_code/20180208_alter_table_project_follower.sql
@@ -1,2 +1,2 @@
ALTER TABLE `project_follower`
- ADD COLUMN `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP AFTER `member_id`;
+ ADD COLUMN `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP AFTER `member_id`;
diff --git a/sql_code/20180208_reports_comment_add_ip.sql b/sql_code/20180208_reports_comment_add_ip.sql
index b18605b83..3272a7ad0 100644
--- a/sql_code/20180208_reports_comment_add_ip.sql
+++ b/sql_code/20180208_reports_comment_add_ip.sql
@@ -1,3 +1,3 @@
ALTER TABLE `reports_comment`
- ADD COLUMN `user_ip` VARCHAR(255) NULL AFTER `created_at`,
- ADD COLUMN `user_ip2` VARCHAR(255) NULL AFTER `user_ip`;
+ ADD COLUMN `user_ip` VARCHAR(255) NULL AFTER `created_at`,
+ ADD COLUMN `user_ip2` VARCHAR(255) NULL AFTER `user_ip`;
diff --git a/sql_code/20180213_ghns_excluded.sql b/sql_code/20180213_ghns_excluded.sql
index 95de74eb8..77a173dae 100644
--- a/sql_code/20180213_ghns_excluded.sql
+++ b/sql_code/20180213_ghns_excluded.sql
@@ -1,152 +1,152 @@
-INSERT INTO `member_role` (`member_role_id`, `title`, `shortname`, `is_active`) VALUES ('400', 'Moderator', 'moderator', '1');
+INSERT INTO `member_role` (`member_role_id`, `title`, `shortname`, `is_active`)
+VALUES ('400', 'Moderator', 'moderator', '1');
-ALTER TABLE `project` CHANGE COLUMN `approved` `ghns_excluded` INT(1) NULL DEFAULT '0' AFTER `featured`;
+ALTER TABLE `project`
+ CHANGE COLUMN `approved` `ghns_excluded` INT(1) NULL DEFAULT '0' AFTER `featured`;
-DROP procedure IF EXISTS `generate_stat_project`;
+DROP PROCEDURE IF EXISTS `generate_stat_project`;
DELIMITER $$
-CREATE DEFINER=current_user PROCEDURE `generate_stat_project`()
- BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `generate_stat_project`()
+BEGIN
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0)
+ GROUP BY `reports_project`.`project_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- project_id,
- GROUP_CONCAT(DISTINCT project_package_type.package_type_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT package_types.`name`) AS `package_name_list`
- FROM
- project_package_type
- JOIN
- package_types ON project_package_type.package_type_id = package_types.package_type_id
- WHERE
- package_types.is_active = 1
- GROUP BY project_id
- ;
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project_id`,
+ GROUP_CONCAT(DISTINCT `project_package_type`.`package_type_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `package_types`.`name`) AS `package_name_list`
+ FROM `project_package_type`
+ JOIN
+ `package_types` ON `project_package_type`.`package_type_id` = `package_types`.`package_type_id`
+ WHERE `package_types`.`is_active` = 1
+ GROUP BY `project_id`;
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names, tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1
- GROUP BY tgo.tag_object_id
- ORDER BY tgo.tag_object_id;
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`, `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1
+ GROUP BY `tgo`.`tag_object_id`
+ ORDER BY `tgo`.`tag_object_id`;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_cat` (`project_category_id`))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`github_code` AS `github_code`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- `project`.`ppload_collection_id` AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`ghns_excluded` AS `ghns_excluded`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.`package_type_id_list` AS `package_types`,
- `tppt`.`package_name_list` AS `package_names`,
- `t`.`tag_names` AS `tags`,
- `sdqy`.amount AS count_downloads_quarter
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- LEFT JOIN `tmp_project_tags` AS t ON t.`tag_project_id` = project.`project_id`
- LEFT JOIN `stat_downloads_quarter_year` AS sdqy ON sdqy.project_id = project.project_id
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND `project`.`type_id` = 1
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_cat` (`project_category_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`github_code` AS `github_code`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`ghns_excluded` AS `ghns_excluded`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`,
+ `sdqy`.`amount` AS `count_downloads_quarter`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `stat_downloads_quarter_year` AS `sdqy` ON `sdqy`.`project_id` = `project`.`project_id`
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND `project`.`type_id` = 1
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
- DROP TABLE IF EXISTS old_stat_projects;
- END$$
+ DROP TABLE IF EXISTS `old_stat_projects`;
+END$$
DELIMITER ;
\ No newline at end of file
diff --git a/sql_code/20180227_add_package_type_sourcecode.sql b/sql_code/20180227_add_package_type_sourcecode.sql
index 451a8ee3d..f20f92b9d 100644
--- a/sql_code/20180227_add_package_type_sourcecode.sql
+++ b/sql_code/20180227_add_package_type_sourcecode.sql
@@ -1 +1,2 @@
-INSERT INTO `pling-import`.`package_types` (`package_type_id`, `name`, `order`) VALUES ('12', 'Source Code', '100');
+INSERT INTO `pling-import`.`package_types` (`package_type_id`, `name`, `order`)
+VALUES ('12', 'Source Code', '100');
diff --git a/sql_code/20180228_hive_import_fan.sql b/sql_code/20180228_hive_import_fan.sql
index 6f1d848ce..258d09982 100644
--- a/sql_code/20180228_hive_import_fan.sql
+++ b/sql_code/20180228_hive_import_fan.sql
@@ -1,33 +1,35 @@
-
ALTER TABLE `project_follower`
- ADD COLUMN `source_id` INT(1) UNSIGNED NULL DEFAULT '0' AFTER `created_at`,
- ADD COLUMN `source_pk` INT(11) UNSIGNED NULL AFTER `source_id`;
-
-
-
-select
- count(1)
-from H01.fan f
-join H01.users u on u.userdb = 0 and u.login = f.user
-join `pling`.project p on p.source_id = 1 and p.source_pk = f.contentid and p.source_type = 'project'
-join `pling`.member m on m.is_active = 1 and m.is_deleted = 0 and m.source_id = 1 and m.source_pk = u.id
-where f.userdb = 0;
-
-
-INSERT INTO project_follower
-(
- select
- null as project_follower_id,
- p.project_id,
- m.member_id,
- from_unixtime(f.timestamp) AS `created_at`,
- 1 as source_id,
- f.id as source_pk
- from hive.fan f
- join hive.users u on u.userdb = 0 and u.login = f.user
- join `pling-import`.project p on p.source_id = 1 and p.source_pk = f.contentid and p.source_type = 'project'
- join `pling-import`.member m on m.is_active = 1 and m.is_deleted = 0 and m.source_id = 1 and m.source_pk = u.id
- where f.userdb = 0
-);
+ ADD COLUMN `source_id` INT(1) UNSIGNED NULL DEFAULT '0' AFTER `created_at`,
+ ADD COLUMN `source_pk` INT(11) UNSIGNED NULL AFTER `source_id`;
+
+
+
+SELECT count(1)
+FROM `H01`.`fan` `f`
+ JOIN `H01`.`users` `u` ON `u`.`userdb` = 0 AND `u`.`login` = `f`.`user`
+ JOIN `pling`.`project` `p`
+ ON `p`.`source_id` = 1 AND `p`.`source_pk` = `f`.`contentid` AND `p`.`source_type` = 'project'
+ JOIN `pling`.`member` `m`
+ ON `m`.`is_active` = 1 AND `m`.`is_deleted` = 0 AND `m`.`source_id` = 1 AND `m`.`source_pk` = `u`.`id`
+WHERE `f`.`userdb` = 0;
+
+
+INSERT INTO `project_follower`
+ (
+ SELECT NULL AS `project_follower_id`,
+ `p`.`project_id`,
+ `m`.`member_id`,
+ from_unixtime(`f`.`timestamp`) AS `created_at`,
+ 1 AS `source_id`,
+ `f`.`id` AS `source_pk`
+ FROM `hive`.`fan` `f`
+ JOIN `hive`.`users` `u` ON `u`.`userdb` = 0 AND `u`.`login` = `f`.`user`
+ JOIN `pling-import`.`project` `p`
+ ON `p`.`source_id` = 1 AND `p`.`source_pk` = `f`.`contentid` AND `p`.`source_type` = 'project'
+ JOIN `pling-import`.`member` `m`
+ ON `m`.`is_active` = 1 AND `m`.`is_deleted` = 0 AND `m`.`source_id` = 1 AND
+ `m`.`source_pk` = `u`.`id`
+ WHERE `f`.`userdb` = 0
+ );
diff --git a/sql_code/20180306_proejct_rating_memberid_idx.sql b/sql_code/20180306_proejct_rating_memberid_idx.sql
index ad2ce0f6a..0f655b96e 100644
--- a/sql_code/20180306_proejct_rating_memberid_idx.sql
+++ b/sql_code/20180306_proejct_rating_memberid_idx.sql
@@ -1 +1 @@
-CREATE INDEX idx_member_id ON project_rating (member_id) USING BTREE;
\ No newline at end of file
+CREATE INDEX `idx_member_id` ON `project_rating` (`member_id`) USING BTREE;
\ No newline at end of file
diff --git a/sql_code/20180326_source_required.sql b/sql_code/20180326_source_required.sql
index b9ace47d6..834e89fee 100644
--- a/sql_code/20180326_source_required.sql
+++ b/sql_code/20180326_source_required.sql
@@ -1,4 +1,4 @@
ALTER TABLE `project_category`
- ADD COLUMN `source_required` INT(1) NOT NULL DEFAULT '1' AFTER `show_description`;
+ ADD COLUMN `source_required` INT(1) NOT NULL DEFAULT '1' AFTER `show_description`;
diff --git a/sql_code/20180327_project_license.sql b/sql_code/20180327_project_license.sql
index b18c9d532..8fa7fe90c 100644
--- a/sql_code/20180327_project_license.sql
+++ b/sql_code/20180327_project_license.sql
@@ -1,190 +1,208 @@
ALTER TABLE `project`
- ADD COLUMN `project_license_id` INT(11) NULL DEFAULT NULL AFTER `version`;
+ ADD COLUMN `project_license_id` INT(11) NULL DEFAULT NULL AFTER `version`;
-CREATE TABLE `project_license` (
- `project_license_id` INT(11) NOT NULL AUTO_INCREMENT,
- `title` VARCHAR(50) NULL DEFAULT NULL,
- `description` VARCHAR(255) NULL DEFAULT NULL,
- PRIMARY KEY (`project_license_id`)
+CREATE TABLE `project_license`
+(
+ `project_license_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `title` VARCHAR(50) NULL DEFAULT NULL,
+ `description` VARCHAR(255) NULL DEFAULT NULL,
+ PRIMARY KEY (`project_license_id`)
)
-ENGINE=InnoDB
+ ENGINE = InnoDB
;
-INSERT INTO `project_license` VALUES (0, 'Other', NULL);
-INSERT INTO `project_license` VALUES (1, 'GPLv2 or later', NULL);
-INSERT INTO `project_license` VALUES (2, 'LGPL', NULL);
-INSERT INTO `project_license` VALUES (3, 'Artistic 2.0', NULL);
-INSERT INTO `project_license` VALUES (4, 'X11', NULL);
-INSERT INTO `project_license` VALUES (5, 'QPL', NULL);
-INSERT INTO `project_license` VALUES (6, 'BSD', NULL);
-INSERT INTO `project_license` VALUES (7, 'Proprietary License', NULL);
-INSERT INTO `project_license` VALUES (8, 'GFDL', NULL);
-INSERT INTO `project_license` VALUES (9, 'CPL 1.0', NULL);
-INSERT INTO `project_license` VALUES (10, 'Creative Commons by', NULL);
-INSERT INTO `project_license` VALUES (11, 'Creative Commons by-sa', NULL);
-INSERT INTO `project_license` VALUES (12, 'Creative Commons by-nd', NULL);
-INSERT INTO `project_license` VALUES (13, 'Creative Commons by-nc', NULL);
-INSERT INTO `project_license` VALUES (14, 'Creative Commons by-nc-sa', NULL);
-INSERT INTO `project_license` VALUES (15, 'Creative Commons by-nc-nd', NULL);
-INSERT INTO `project_license` VALUES (16, 'AGPL', NULL);
-INSERT INTO `project_license` VALUES (17, 'CC0 1.0 Universal (Public Domain)', NULL);
-INSERT INTO `project_license` VALUES (18, 'GPLv2 only', NULL);
-INSERT INTO `project_license` VALUES (19, 'GPLv3', NULL);
+INSERT INTO `project_license`
+VALUES (0, 'Other', NULL);
+INSERT INTO `project_license`
+VALUES (1, 'GPLv2 or later', NULL);
+INSERT INTO `project_license`
+VALUES (2, 'LGPL', NULL);
+INSERT INTO `project_license`
+VALUES (3, 'Artistic 2.0', NULL);
+INSERT INTO `project_license`
+VALUES (4, 'X11', NULL);
+INSERT INTO `project_license`
+VALUES (5, 'QPL', NULL);
+INSERT INTO `project_license`
+VALUES (6, 'BSD', NULL);
+INSERT INTO `project_license`
+VALUES (7, 'Proprietary License', NULL);
+INSERT INTO `project_license`
+VALUES (8, 'GFDL', NULL);
+INSERT INTO `project_license`
+VALUES (9, 'CPL 1.0', NULL);
+INSERT INTO `project_license`
+VALUES (10, 'Creative Commons by', NULL);
+INSERT INTO `project_license`
+VALUES (11, 'Creative Commons by-sa', NULL);
+INSERT INTO `project_license`
+VALUES (12, 'Creative Commons by-nd', NULL);
+INSERT INTO `project_license`
+VALUES (13, 'Creative Commons by-nc', NULL);
+INSERT INTO `project_license`
+VALUES (14, 'Creative Commons by-nc-sa', NULL);
+INSERT INTO `project_license`
+VALUES (15, 'Creative Commons by-nc-nd', NULL);
+INSERT INTO `project_license`
+VALUES (16, 'AGPL', NULL);
+INSERT INTO `project_license`
+VALUES (17, 'CC0 1.0 Universal (Public Domain)', NULL);
+INSERT INTO `project_license`
+VALUES (18, 'GPLv2 only', NULL);
+INSERT INTO `project_license`
+VALUES (19, 'GPLv3', NULL);
DROP PROCEDURE IF EXISTS `generate_stat_project`;
CREATE PROCEDURE `generate_stat_project`()
-LANGUAGE SQL
-NOT DETERMINISTIC
-CONTAINS SQL
-SQL SECURITY DEFINER
-COMMENT ''
+ LANGUAGE SQL
+ NOT DETERMINISTIC
+ CONTAINS SQL
+ SQL SECURITY DEFINER
+ COMMENT ''
BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0)
+ GROUP BY `reports_project`.`project_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- project_id,
- GROUP_CONCAT(DISTINCT project_package_type.package_type_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT package_types.`name`) AS `package_name_list`
- FROM
- project_package_type
- JOIN
- package_types ON project_package_type.package_type_id = package_types.package_type_id
- WHERE
- package_types.is_active = 1
- GROUP BY project_id
- ;
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project_id`,
+ GROUP_CONCAT(DISTINCT `project_package_type`.`package_type_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `package_types`.`name`) AS `package_name_list`
+ FROM `project_package_type`
+ JOIN
+ `package_types` ON `project_package_type`.`package_type_id` = `package_types`.`package_type_id`
+ WHERE `package_types`.`is_active` = 1
+ GROUP BY `project_id`;
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names, tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1
- GROUP BY tgo.tag_object_id
- ORDER BY tgo.tag_object_id;
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`, `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1
+ GROUP BY `tgo`.`tag_object_id`
+ ORDER BY `tgo`.`tag_object_id`;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_cat` (`project_category_id`))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`project_license_id` AS `project_license_id`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`github_code` AS `github_code`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- `project`.`ppload_collection_id` AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`ghns_excluded` AS `ghns_excluded`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.`package_type_id_list` AS `package_types`,
- `tppt`.`package_name_list` AS `package_names`,
- `t`.`tag_names` AS `tags`,
- `sdqy`.amount AS count_downloads_quarter,
- `project_license`.title AS project_license_title
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- LEFT JOIN `tmp_project_tags` AS t ON t.`tag_project_id` = project.`project_id`
- LEFT JOIN `stat_downloads_quarter_year` AS sdqy ON sdqy.project_id = project.project_id
- LEFT JOIN `project_license` ON project_license.project_license_id = project.project_license_id
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND `project`.`type_id` = 1
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_cat` (`project_category_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`project_license_id` AS `project_license_id`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`github_code` AS `github_code`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`ghns_excluded` AS `ghns_excluded`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`,
+ `sdqy`.`amount` AS `count_downloads_quarter`,
+ `project_license`.`title` AS `project_license_title`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `stat_downloads_quarter_year` AS `sdqy` ON `sdqy`.`project_id` = `project`.`project_id`
+ LEFT JOIN `project_license` ON `project_license`.`project_license_id` = `project`.`project_license_id`
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND `project`.`type_id` = 1
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
- DROP TABLE IF EXISTS old_stat_projects;
- END
\ No newline at end of file
+ DROP TABLE IF EXISTS `old_stat_projects`;
+END
\ No newline at end of file
diff --git a/sql_code/20180328_source_url.sql b/sql_code/20180328_source_url.sql
index a263ff6cd..d6af6ffce 100644
--- a/sql_code/20180328_source_url.sql
+++ b/sql_code/20180328_source_url.sql
@@ -1,158 +1,154 @@
-
ALTER TABLE `project`
- CHANGE COLUMN `github_code` `source_url` TEXT NULL AFTER `google_code`;
+ CHANGE COLUMN `github_code` `source_url` TEXT NULL AFTER `google_code`;
DROP PROCEDURE IF EXISTS `generate_stat_project`;
CREATE PROCEDURE `generate_stat_project`()
-LANGUAGE SQL
-NOT DETERMINISTIC
-CONTAINS SQL
-SQL SECURITY DEFINER
-COMMENT ''
+ LANGUAGE SQL
+ NOT DETERMINISTIC
+ CONTAINS SQL
+ SQL SECURITY DEFINER
+ COMMENT ''
BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0)
+ GROUP BY `reports_project`.`project_id`;
+
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project_id`,
+ GROUP_CONCAT(DISTINCT `project_package_type`.`package_type_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `package_types`.`name`) AS `package_name_list`
+ FROM `project_package_type`
+ JOIN
+ `package_types` ON `project_package_type`.`package_type_id` = `package_types`.`package_type_id`
+ WHERE `package_types`.`is_active` = 1
+ GROUP BY `project_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- project_id,
- GROUP_CONCAT(DISTINCT project_package_type.package_type_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT package_types.`name`) AS `package_name_list`
- FROM
- project_package_type
- JOIN
- package_types ON project_package_type.package_type_id = package_types.package_type_id
- WHERE
- package_types.is_active = 1
- GROUP BY project_id
- ;
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`, `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1
+ GROUP BY `tgo`.`tag_object_id`
+ ORDER BY `tgo`.`tag_object_id`;
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names, tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1
- GROUP BY tgo.tag_object_id
- ORDER BY tgo.tag_object_id;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_cat` (`project_category_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`project_license_id` AS `project_license_id`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`source_url` AS `source_url`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`ghns_excluded` AS `ghns_excluded`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`,
+ `sdqy`.`amount` AS `count_downloads_quarter`,
+ `project_license`.`title` AS `project_license_title`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `stat_downloads_quarter_year` AS `sdqy` ON `sdqy`.`project_id` = `project`.`project_id`
+ LEFT JOIN `project_license` ON `project_license`.`project_license_id` = `project`.`project_license_id`
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND `project`.`type_id` = 1
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_cat` (`project_category_id`))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`project_license_id` AS `project_license_id`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`source_url` AS `source_url`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- `project`.`ppload_collection_id` AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`ghns_excluded` AS `ghns_excluded`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.`package_type_id_list` AS `package_types`,
- `tppt`.`package_name_list` AS `package_names`,
- `t`.`tag_names` AS `tags`,
- `sdqy`.amount AS count_downloads_quarter,
- `project_license`.title AS project_license_title
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- LEFT JOIN `tmp_project_tags` AS t ON t.`tag_project_id` = project.`project_id`
- LEFT JOIN `stat_downloads_quarter_year` AS sdqy ON sdqy.project_id = project.project_id
- LEFT JOIN `project_license` ON project_license.project_license_id = project.project_license_id
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND `project`.`type_id` = 1
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
-
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
- DROP TABLE IF EXISTS old_stat_projects;
- END
\ No newline at end of file
+ DROP TABLE IF EXISTS `old_stat_projects`;
+END
\ No newline at end of file
diff --git a/sql_code/20180403_cat_tag.sql b/sql_code/20180403_cat_tag.sql
index cb93d982b..8eea463f4 100644
--- a/sql_code/20180403_cat_tag.sql
+++ b/sql_code/20180403_cat_tag.sql
@@ -1,3 +1,5 @@
-CREATE TABLE `category_tag` (
- `category_id` INT NOT NULL,
- `tag_id` INT NOT NULL);
+CREATE TABLE `category_tag`
+(
+ `category_id` INT NOT NULL,
+ `tag_id` INT NOT NULL
+);
diff --git a/sql_code/20180405_cat_tag_proj.sql b/sql_code/20180405_cat_tag_proj.sql
index 8f524bfa0..071e0e743 100644
--- a/sql_code/20180405_cat_tag_proj.sql
+++ b/sql_code/20180405_cat_tag_proj.sql
@@ -1,141 +1,149 @@
-
-DROP TABLE tmp_cat_tag_proj;
-
-CREATE TABLE `tmp_cat_tag_proj` (
- `project_id` INT(11) NOT NULL,
- `project_category_id` INT(11) NOT NULL,
- `tag_id` INT(11) NOT NULL,
- `ancestor_id_path` VARCHAR(50) NULL DEFAULT NULL,
- PRIMARY KEY (`project_id`, `project_category_id`, `tag_id`)
+DROP TABLE `tmp_cat_tag_proj`;
+
+CREATE TABLE `tmp_cat_tag_proj`
+(
+ `project_id` INT(11) NOT NULL,
+ `project_category_id` INT(11) NOT NULL,
+ `tag_id` INT(11) NOT NULL,
+ `ancestor_id_path` VARCHAR(50) NULL DEFAULT NULL,
+ PRIMARY KEY (`project_id`, `project_category_id`, `tag_id`)
)
-COLLATE='latin1_swedish_ci'
-ENGINE=MyISAM
+ COLLATE = 'latin1_swedish_ci'
+ ENGINE = MyISAM
;
DELIMITER $
-DROP PROCEDURE IF EXISTS generate_tmp_cat_tag_proj$
+DROP PROCEDURE IF EXISTS `generate_tmp_cat_tag_proj`$
-CREATE PROCEDURE generate_tmp_cat_tag_proj()
+CREATE PROCEDURE `generate_tmp_cat_tag_proj`()
BEGIN
- TRUNCATE table tmp_cat_tag_proj;
-
- INSERT INTO tmp_cat_tag_proj
-
- select p.project_id, p.project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = t.project_category_id
- join tag ta on ta.tag_id = c.tag_id
- WHERE p.`status` = 100
- ;
-
- INSERT IGNORE INTO tmp_cat_tag_proj
- #ebene 1
- select p.project_id, c.category_id as project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = (SPLIT_STRING(t.ancestor_id_path, ',', 1))
- join tag ta on ta.tag_id = c.tag_id
- WHERE p.`status` = 100;
-
- INSERT IGNORE INTO tmp_cat_tag_proj
- #ebene 2
- select p.project_id, c.category_id as project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = (SPLIT_STRING(t.ancestor_id_path, ',', 2))
- join tag ta on ta.tag_id = c.tag_id
- WHERE p.`status` = 100;
-
- INSERT IGNORE INTO tmp_cat_tag_proj
- #ebene 3
- select p.project_id, c.category_id as project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = (SPLIT_STRING(t.ancestor_id_path, ',', 3))
- join tag ta on ta.tag_id = c.tag_id
- WHERE p.`status` = 100;
-
- INSERT IGNORE INTO tmp_cat_tag_proj
- #ebene 4
- select p.project_id, c.category_id as project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = (SPLIT_STRING(t.ancestor_id_path, ',', 4))
- join tag ta on ta.tag_id = c.tag_id
- WHERE p.`status` = 100;
-
- INSERT IGNORE INTO tmp_cat_tag_proj
- #ebene 5
- select p.project_id, c.category_id as project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = (SPLIT_STRING(t.ancestor_id_path, ',', 5))
- join tag ta on ta.tag_id = c.tag_id
- WHERE p.`status` = 100;
-
- INSERT IGNORE INTO tmp_cat_tag_proj
- #ebene 6
- select p.project_id, c.category_id as project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = (SPLIT_STRING(t.ancestor_id_path, ',', 6))
- join tag ta on ta.tag_id = c.tag_id
- WHERE p.`status` = 100;
-
- INSERT IGNORE INTO tmp_cat_tag_proj
- #ebene 7
- select p.project_id, c.category_id as project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = (SPLIT_STRING(t.ancestor_id_path, ',', 7))
- join tag ta on ta.tag_id = c.tag_id
- WHERE p.`status` = 100;
-
- INSERT IGNORE INTO tmp_cat_tag_proj
- #ebene 8
- select p.project_id, c.category_id as project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = (SPLIT_STRING(t.ancestor_id_path, ',', 8))
- join tag ta on ta.tag_id = c.tag_id
- WHERE p.`status` = 100;
-
- INSERT IGNORE INTO tmp_cat_tag_proj
- #ebene 9
- select p.project_id, c.category_id as project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = (SPLIT_STRING(t.ancestor_id_path, ',', 9))
- join tag ta on ta.tag_id = c.tag_id
- WHERE p.`status` = 100;
-
- INSERT IGNORE INTO tmp_cat_tag_proj
- #ebene 10
- select p.project_id, c.category_id as project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = (SPLIT_STRING(t.ancestor_id_path, ',', 10))
- join tag ta on ta.tag_id = c.tag_id
- WHERE p.`status` = 100;
-
+ TRUNCATE TABLE `tmp_cat_tag_proj`;
+
+ INSERT INTO `tmp_cat_tag_proj`
+
+ SELECT `p`.`project_id`, `p`.`project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = `t`.`project_category_id`
+ JOIN `tag` `ta` ON `ta`.`tag_id` = `c`.`tag_id`
+ WHERE `p`.`status` = 100;
+
+ INSERT IGNORE INTO `tmp_cat_tag_proj`
+ #ebene 1
+ SELECT `p`.`project_id`, `c`.`category_id` AS `project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = (SPLIT_STRING(`t`.`ancestor_id_path`, ',', 1))
+ JOIN `tag` `ta` ON `ta`.`tag_id` = `c`.`tag_id`
+ WHERE `p`.`status` = 100;
+
+ INSERT IGNORE INTO `tmp_cat_tag_proj`
+ #ebene 2
+ SELECT `p`.`project_id`, `c`.`category_id` AS `project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = (SPLIT_STRING(`t`.`ancestor_id_path`, ',', 2))
+ JOIN `tag` `ta` ON `ta`.`tag_id` = `c`.`tag_id`
+ WHERE `p`.`status` = 100;
+
+ INSERT IGNORE INTO `tmp_cat_tag_proj`
+ #ebene 3
+ SELECT `p`.`project_id`, `c`.`category_id` AS `project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = (SPLIT_STRING(`t`.`ancestor_id_path`, ',', 3))
+ JOIN `tag` `ta` ON `ta`.`tag_id` = `c`.`tag_id`
+ WHERE `p`.`status` = 100;
+
+ INSERT IGNORE INTO `tmp_cat_tag_proj`
+ #ebene 4
+ SELECT `p`.`project_id`, `c`.`category_id` AS `project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = (SPLIT_STRING(`t`.`ancestor_id_path`, ',', 4))
+ JOIN `tag` `ta` ON `ta`.`tag_id` = `c`.`tag_id`
+ WHERE `p`.`status` = 100;
+
+ INSERT IGNORE INTO `tmp_cat_tag_proj`
+ #ebene 5
+ SELECT `p`.`project_id`, `c`.`category_id` AS `project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = (SPLIT_STRING(`t`.`ancestor_id_path`, ',', 5))
+ JOIN `tag` `ta` ON `ta`.`tag_id` = `c`.`tag_id`
+ WHERE `p`.`status` = 100;
+
+ INSERT IGNORE INTO `tmp_cat_tag_proj`
+ #ebene 6
+ SELECT `p`.`project_id`, `c`.`category_id` AS `project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = (SPLIT_STRING(`t`.`ancestor_id_path`, ',', 6))
+ JOIN `tag` `ta` ON `ta`.`tag_id` = `c`.`tag_id`
+ WHERE `p`.`status` = 100;
+
+ INSERT IGNORE INTO `tmp_cat_tag_proj`
+ #ebene 7
+ SELECT `p`.`project_id`, `c`.`category_id` AS `project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = (SPLIT_STRING(`t`.`ancestor_id_path`, ',', 7))
+ JOIN `tag` `ta` ON `ta`.`tag_id` = `c`.`tag_id`
+ WHERE `p`.`status` = 100;
+
+ INSERT IGNORE INTO `tmp_cat_tag_proj`
+ #ebene 8
+ SELECT `p`.`project_id`, `c`.`category_id` AS `project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = (SPLIT_STRING(`t`.`ancestor_id_path`, ',', 8))
+ JOIN `tag` `ta` ON `ta`.`tag_id` = `c`.`tag_id`
+ WHERE `p`.`status` = 100;
+
+ INSERT IGNORE INTO `tmp_cat_tag_proj`
+ #ebene 9
+ SELECT `p`.`project_id`, `c`.`category_id` AS `project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = (SPLIT_STRING(`t`.`ancestor_id_path`, ',', 9))
+ JOIN `tag` `ta` ON `ta`.`tag_id` = `c`.`tag_id`
+ WHERE `p`.`status` = 100;
+
+ INSERT IGNORE INTO `tmp_cat_tag_proj`
+ #ebene 10
+ SELECT `p`.`project_id`, `c`.`category_id` AS `project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = (SPLIT_STRING(`t`.`ancestor_id_path`, ',', 10))
+ JOIN `tag` `ta` ON `ta`.`tag_id` = `c`.`tag_id`
+ WHERE `p`.`status` = 100;
+
END$
-DELIMITER ;
+DELIMITER ;
DELIMITER $
-DROP PROCEDURE IF EXISTS SPLIT_STRING$
+DROP PROCEDURE IF EXISTS `SPLIT_STRING`$
-CREATE FUNCTION `SPLIT_STRING`(
- `s` VARCHAR(1024) ,
- `del` CHAR(1) ,
- `i` INT
-)
-RETURNS varchar(1024) CHARSET latin1
+CREATE FUNCTION `SPLIT_STRING`(`s` VARCHAR(1024),
+ `del` CHAR(1),
+ `i` INT)
+ RETURNS varchar(1024) CHARSET `latin1`
BEGIN
- DECLARE n INT ;
+ DECLARE `n` INT;
- -- get max number of items
- SET n = LENGTH(s) - LENGTH(REPLACE(s, del, '')) + 1;
+ -- get max number of items
+ SET `n` = LENGTH(`s`) - LENGTH(REPLACE(`s`, `del`, '')) + 1;
- IF i > n THEN
- RETURN NULL ;
- ELSE
- RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(s, del, i) , del , -1 ) ;
- END IF;
+ IF `i` > `n` THEN
+ RETURN NULL ;
+ ELSE
+ RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(`s`, `del`, `i`), `del`, -1);
+ END IF;
END$
DELIMITER ;
\ No newline at end of file
diff --git a/sql_code/20180406_alter_tag.sql b/sql_code/20180406_alter_tag.sql
index ea3640437..4db8b3c73 100644
--- a/sql_code/20180406_alter_tag.sql
+++ b/sql_code/20180406_alter_tag.sql
@@ -1,6 +1,7 @@
-alter table tag_object add column tag_group_id int(11) after tag_type_id;
-ALTER TABLE tag_object
- DROP INDEX tags_unique;
-
- ALTER TABLE tag_object
- ADD UNIQUE KEY `tags_unique` (`tag_id`,`tag_type_id`,`tag_object_id`,`tag_group_id`);
+ALTER TABLE `tag_object`
+ ADD COLUMN `tag_group_id` int(11) AFTER `tag_type_id`;
+ALTER TABLE `tag_object`
+ DROP INDEX `tags_unique`;
+
+ALTER TABLE `tag_object`
+ ADD UNIQUE KEY `tags_unique` (`tag_id`, `tag_type_id`, `tag_object_id`, `tag_group_id`);
diff --git a/sql_code/20180409_alter_tag.sql b/sql_code/20180409_alter_tag.sql
index 925e7502f..6ba55d46c 100644
--- a/sql_code/20180409_alter_tag.sql
+++ b/sql_code/20180409_alter_tag.sql
@@ -1,2 +1,4 @@
-alter table tag add column tag_fullname varchar(50);
-alter table tag add column tag_description text;
\ No newline at end of file
+ALTER TABLE `tag`
+ ADD COLUMN `tag_fullname` varchar(50);
+ALTER TABLE `tag`
+ ADD COLUMN `tag_description` text;
\ No newline at end of file
diff --git a/sql_code/20180412_payout_requierments.sql b/sql_code/20180412_payout_requierments.sql
index 81ec7c9aa..7e943891a 100644
--- a/sql_code/20180412_payout_requierments.sql
+++ b/sql_code/20180412_payout_requierments.sql
@@ -1,49 +1,77 @@
ALTER TABLE `member_dl_plings`
- ADD COLUMN `is_license_missing` INT(1) UNSIGNED NULL DEFAULT '0' AFTER `probably_payout_amount`,
- ADD COLUMN `is_source_missing` INT(1) UNSIGNED NULL DEFAULT '0' AFTER `is_license_missing`,
- ADD COLUMN `is_pling_excluded` INT(1) UNSIGNED NULL DEFAULT '0' AFTER `is_source_missing`;
+ ADD COLUMN `is_license_missing` INT(1) UNSIGNED NULL DEFAULT '0' AFTER `probably_payout_amount`,
+ ADD COLUMN `is_source_missing` INT(1) UNSIGNED NULL DEFAULT '0' AFTER `is_license_missing`,
+ ADD COLUMN `is_pling_excluded` INT(1) UNSIGNED NULL DEFAULT '0' AFTER `is_source_missing`;
-DROP VIEW stat_member_dl_curent_month;
-CREATE VIEW stat_member_dl_curent_month
+DROP VIEW `stat_member_dl_curent_month`;
+CREATE VIEW `stat_member_dl_curent_month`
AS
-SELECT DATE_FORMAT(NOW(),'%Y%m') AS `yearmonth`,`p`.`project_id` AS `project_id`,`p`.`project_category_id` AS `project_category_id`,`d`.`owner_id` AS `member_id`,`m`.`mail` AS `mail`,`m`.`paypal_mail` AS `paypal_mail`, COUNT(`d`.`id`) AS `num_downloads`,`c`.`dl_pling_factor` AS `dl_pling_factor`,((COUNT(`d`.`id`) * `c`.`dl_pling_factor`) / 100) AS `amount`,
-(CASE WHEN ISNULL(`tag`.`tag_item_id`) THEN 1 ELSE 0 END) AS `is_license_missing`,
-(CASE WHEN (((`c`.`source_required` = 1) AND (`p`.`source_url` IS NOT NULL) AND (LENGTH(`p`.`source_url`) > 0)) OR (`c`.`source_required` = 0)) THEN 0 ELSE 1 END) AS `is_source_missing`,
-`p`.`pling_excluded` AS `is_pling_excluded`,
-NULL AS `created_at`,
-NULL AS `updated_at`
+SELECT DATE_FORMAT(NOW(), '%Y%m') AS `yearmonth`,
+ `p`.`project_id` AS `project_id`,
+ `p`.`project_category_id` AS `project_category_id`,
+ `d`.`owner_id` AS `member_id`,
+ `m`.`mail` AS `mail`,
+ `m`.`paypal_mail` AS `paypal_mail`,
+ COUNT(`d`.`id`) AS `num_downloads`,
+ `c`.`dl_pling_factor` AS `dl_pling_factor`,
+ ((COUNT(`d`.`id`) * `c`.`dl_pling_factor`) / 100) AS `amount`,
+ (CASE WHEN ISNULL(`tag`.`tag_item_id`) THEN 1 ELSE 0 END) AS `is_license_missing`,
+ (CASE
+ WHEN (((`c`.`source_required` = 1) AND (`p`.`source_url` IS NOT NULL) AND (LENGTH(`p`.`source_url`) > 0)) OR
+ (`c`.`source_required` = 0)) THEN 0
+ ELSE 1 END) AS `is_source_missing`,
+ `p`.`pling_excluded` AS `is_pling_excluded`,
+ NULL AS `created_at`,
+ NULL AS `updated_at`
FROM ((((`ppload`.`ppload_files_downloaded` `d`
-JOIN `member` `m` ON(((`m`.`member_id` = `d`.`owner_id`) AND (`m`.`is_active` = 1))))
-JOIN `project` `p` ON(((CAST(`p`.`ppload_collection_id` AS UNSIGNED) = `d`.`collection_id`) AND (`p`.`status` = 100))))
-JOIN `project_category` `c` ON((`c`.`project_category_id` = `p`.`project_category_id`)))
-LEFT JOIN .`tag_object` `tag` ON(((`tag`.`tag_type_id` = 1) AND (`tag`.`tag_group_id` = 7) AND (`tag`.`tag_object_id` = `p`.`project_id`))))
+ JOIN `member` `m` ON (((`m`.`member_id` = `d`.`owner_id`) AND (`m`.`is_active` = 1))))
+ JOIN `project` `p` ON (((CAST(`p`.`ppload_collection_id` AS UNSIGNED) = `d`.`collection_id`) AND
+ (`p`.`status` = 100))))
+ JOIN `project_category` `c` ON ((`c`.`project_category_id` = `p`.`project_category_id`)))
+ LEFT JOIN.`tag_object` `tag` ON (((`tag` . `tag_type_id` = 1) AND (`tag` . `tag_group_id` = 7) AND (`tag` . `tag_object_id` = `p` . `project_id`))))
WHERE ((`d`.`downloaded_timestamp` >= CONCAT(
-LEFT(NOW(),7),'-01 00:00:00')) AND (`p`.`ppload_collection_id` IS NOT NULL) AND (LENGTH(`p`.`ppload_collection_id`) > 0) AND (NOT((`p`.`ppload_collection_id` LIKE '!%'))))
-GROUP BY `d`.`owner_id`,`p`.`project_id`
+ LEFT(NOW(), 7), '-01 00:00:00')) AND (`p`.`ppload_collection_id` IS NOT NULL) AND
+ (LENGTH(`p`.`ppload_collection_id`) > 0) AND (NOT ((`p`.`ppload_collection_id` LIKE '!%'))))
+GROUP BY `d`.`owner_id`, `p`.`project_id`
;
-DROP VIEW stat_member_dl_last_month;
-CREATE VIEW stat_member_dl_last_month
+DROP VIEW `stat_member_dl_last_month`;
+CREATE VIEW `stat_member_dl_last_month`
AS
-SELECT DATE_FORMAT((NOW() - INTERVAL 1 MONTH),'%Y%m') AS `yearmonth`,`p`.`project_id` AS `project_id`,`p`.`project_category_id` AS `project_category_id`,`d`.`owner_id` AS `member_id`,`m`.`mail` AS `mail`,`m`.`paypal_mail` AS `paypal_mail`, COUNT(`d`.`id`) AS `num_downloads`,`c`.`dl_pling_factor` AS `dl_pling_factor`,((COUNT(`d`.`id`) * `c`.`dl_pling_factor`) / 100) AS `amount`,
-(CASE WHEN ISNULL(`tag`.`tag_item_id`) THEN 1 ELSE 0 END) AS `is_license_missing`,
-(CASE WHEN (((`c`.`source_required` = 1) AND (`p`.`source_url` IS NOT NULL) AND (LENGTH(`p`.`source_url`) > 0)) OR (`c`.`source_required` = 0)) THEN 0 ELSE 1 END) AS `is_source_missing`,
-`p`.`pling_excluded` AS `is_pling_excluded`,
-NULL AS `created_at`, NULL AS `updated_at`
+SELECT DATE_FORMAT((NOW() - INTERVAL 1 MONTH), '%Y%m') AS `yearmonth`,
+ `p`.`project_id` AS `project_id`,
+ `p`.`project_category_id` AS `project_category_id`,
+ `d`.`owner_id` AS `member_id`,
+ `m`.`mail` AS `mail`,
+ `m`.`paypal_mail` AS `paypal_mail`,
+ COUNT(`d`.`id`) AS `num_downloads`,
+ `c`.`dl_pling_factor` AS `dl_pling_factor`,
+ ((COUNT(`d`.`id`) * `c`.`dl_pling_factor`) / 100) AS `amount`,
+ (CASE WHEN ISNULL(`tag`.`tag_item_id`) THEN 1 ELSE 0 END) AS `is_license_missing`,
+ (CASE
+ WHEN (((`c`.`source_required` = 1) AND (`p`.`source_url` IS NOT NULL) AND (LENGTH(`p`.`source_url`) > 0)) OR
+ (`c`.`source_required` = 0)) THEN 0
+ ELSE 1 END) AS `is_source_missing`,
+ `p`.`pling_excluded` AS `is_pling_excluded`,
+ NULL AS `created_at`,
+ NULL AS `updated_at`
FROM (((`ppload`.`ppload_files` `d`
-JOIN `member` `m` ON(((`m`.`member_id` = `d`.`owner_id`) AND (`m`.`is_active` = 1))))
-JOIN `project` `p` ON(((CAST(`p`.`ppload_collection_id` AS UNSIGNED) = `d`.`collection_id`) AND (`p`.`status` = 100))))
-JOIN `project_category` `c` ON((`c`.`project_category_id` = `p`.`project_category_id`))
-LEFT JOIN .`tag_object` `tag` ON(((`tag`.`tag_type_id` = 1) AND (`tag`.`tag_group_id` = 7) AND (`tag`.`tag_object_id` = `p`.`project_id`))))
+ JOIN `member` `m` ON (((`m`.`member_id` = `d`.`owner_id`) AND (`m`.`is_active` = 1))))
+ JOIN `project` `p` ON (((CAST(`p`.`ppload_collection_id` AS UNSIGNED) = `d`.`collection_id`) AND
+ (`p`.`status` = 100))))
+ JOIN `project_category` `c` ON ((`c`.`project_category_id` = `p`.`project_category_id`))
+ LEFT JOIN.`tag_object` `tag` ON (((`tag` . `tag_type_id` = 1) AND (`tag` . `tag_group_id` = 7) AND (`tag` . `tag_object_id` = `p` . `project_id`))))
WHERE ((`d`.`downloaded_timestamp` >= CONCAT(
-LEFT((NOW() - INTERVAL 1 MONTH),7),'-01 00:00:00')) AND (`p`.`ppload_collection_id` IS NOT NULL) AND (LENGTH(`p`.`ppload_collection_id`) > 0) AND (NOT((`p`.`ppload_collection_id` LIKE '!%'))))
-GROUP BY `d`.`owner_id`,`p`.`project_id`
+ LEFT((NOW() - INTERVAL 1 MONTH), 7), '-01 00:00:00')) AND (`p`.`ppload_collection_id` IS NOT NULL) AND
+ (LENGTH(`p`.`ppload_collection_id`) > 0) AND (NOT ((`p`.`ppload_collection_id` LIKE '!%'))))
+GROUP BY `d`.`owner_id`, `p`.`project_id`
;
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('70', 'ProjectLicenseChanged');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('70', 'ProjectLicenseChanged');
diff --git a/sql_code/20180417_alter_tag_fullname.sql b/sql_code/20180417_alter_tag_fullname.sql
index 76e622bc0..b49dd5bc2 100644
--- a/sql_code/20180417_alter_tag_fullname.sql
+++ b/sql_code/20180417_alter_tag_fullname.sql
@@ -1 +1,2 @@
-ALTER TABLE tag MODIFY tag_fullname VARCHAR(100);
\ No newline at end of file
+ALTER TABLE `tag`
+ MODIFY `tag_fullname` VARCHAR(100);
\ No newline at end of file
diff --git a/sql_code/20180422_project_plings.sql b/sql_code/20180422_project_plings.sql
index a856f20f6..960e3d1db 100644
--- a/sql_code/20180422_project_plings.sql
+++ b/sql_code/20180422_project_plings.sql
@@ -1,9 +1,12 @@
-CREATE TABLE `project_plings` (
- `project_plings_id` int(11) NOT NULL AUTO_INCREMENT,
- `project_id` int(11) NOT NULL,
- `member_id` int(11) NOT NULL,
- `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `is_deleted` int(1) DEFAULT 0,
- `deleted_at` timestamp,
- PRIMARY KEY (`project_plings_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
\ No newline at end of file
+CREATE TABLE `project_plings`
+(
+ `project_plings_id` int(11) NOT NULL AUTO_INCREMENT,
+ `project_id` int(11) NOT NULL,
+ `member_id` int(11) NOT NULL,
+ `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `is_deleted` int(1) DEFAULT 0,
+ `deleted_at` timestamp,
+ PRIMARY KEY (`project_plings_id`)
+) ENGINE = InnoDB
+ AUTO_INCREMENT = 1
+ DEFAULT CHARSET = `utf8`;
\ No newline at end of file
diff --git a/sql_code/20180424_add_file_tags.sql b/sql_code/20180424_add_file_tags.sql
index f4535d755..d6fb399da 100644
--- a/sql_code/20180424_add_file_tags.sql
+++ b/sql_code/20180424_add_file_tags.sql
@@ -1,2 +1,2 @@
ALTER TABLE `tag_object`
- ADD COLUMN `tag_parent_object_id` INT NULL AFTER `tag_group_id`;
+ ADD COLUMN `tag_parent_object_id` INT NULL AFTER `tag_group_id`;
diff --git a/sql_code/20180504_alter_project_pling.sql b/sql_code/20180504_alter_project_pling.sql
index b841a8c6c..a2c840202 100644
--- a/sql_code/20180504_alter_project_pling.sql
+++ b/sql_code/20180504_alter_project_pling.sql
@@ -1,2 +1,4 @@
-alter table project_plings add column is_active int(1) default 1 after created_at;
-alter table project_plings add column deactive_at date default null after is_active;
\ No newline at end of file
+ALTER TABLE `project_plings`
+ ADD COLUMN `is_active` int(1) DEFAULT 1 AFTER `created_at`;
+ALTER TABLE `project_plings`
+ ADD COLUMN `deactive_at` date DEFAULT NULL AFTER `is_active`;
\ No newline at end of file
diff --git a/sql_code/20180506_add_plings_member_dl_plings.sql b/sql_code/20180506_add_plings_member_dl_plings.sql
index 15594556e..1e3b3b3eb 100644
--- a/sql_code/20180506_add_plings_member_dl_plings.sql
+++ b/sql_code/20180506_add_plings_member_dl_plings.sql
@@ -1,3 +1,3 @@
ALTER TABLE `member_dl_plings`
- ADD COLUMN `num_plings` BIGINT NULL DEFAULT NULL
- AFTER `probably_payout_amount`;
+ ADD COLUMN `num_plings` BIGINT NULL DEFAULT NULL
+ AFTER `probably_payout_amount`;
diff --git a/sql_code/20180515_report_project_advance.sql b/sql_code/20180515_report_project_advance.sql
index 7b31245ea..231cfaf98 100644
--- a/sql_code/20180515_report_project_advance.sql
+++ b/sql_code/20180515_report_project_advance.sql
@@ -1,10 +1,10 @@
ALTER TABLE `reports_project`
- ADD COLUMN `report_type` INT(1) NOT NULL DEFAULT '0'
-COMMENT '0 = spam, 1 = fraud'
- AFTER `report_id`,
- ADD COLUMN `text` TEXT NOT NULL
- AFTER `reported_by`,
- ADD COLUMN `is_valid` INT(1) NOT NULL DEFAULT '0'
-COMMENT 'Admin can mark a report as valid'
- AFTER `is_deleted`;
+ ADD COLUMN `report_type` INT(1) NOT NULL DEFAULT '0'
+ COMMENT '0 = spam, 1 = fraud'
+ AFTER `report_id`,
+ ADD COLUMN `text` TEXT NOT NULL
+ AFTER `reported_by`,
+ ADD COLUMN `is_valid` INT(1) NOT NULL DEFAULT '0'
+ COMMENT 'Admin can mark a report as valid'
+ AFTER `is_deleted`;
diff --git a/sql_code/20180515_report_project_clone.sql b/sql_code/20180515_report_project_clone.sql
index 417a0f5cc..9b77e8da0 100644
--- a/sql_code/20180515_report_project_clone.sql
+++ b/sql_code/20180515_report_project_clone.sql
@@ -1,17 +1,18 @@
-CREATE TABLE `project_clone` (
- `project_clone_id` INT(11) NOT NULL AUTO_INCREMENT,
- `project_id` INT(11) NOT NULL,
- `project_id_parent` INT(11) NULL DEFAULT NULL COMMENT 'Project Id of the clone on opendesktop',
- `external_link` VARCHAR(255) NULL DEFAULT NULL COMMENT 'External Link to the original project',
- `member_id` INT(11) NULL DEFAULT NULL COMMENT 'Who send the report',
- `text` TEXT NULL,
- `is_deleted` INT(1) NOT NULL DEFAULT '0',
- `is_valid` INT(1) NOT NULL DEFAULT '0' COMMENT 'Admin can mark a report as valid',
- `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
- `changed_at` TIMESTAMP NULL DEFAULT NULL,
- `deleted_at` TIMESTAMP NULL DEFAULT NULL,
- PRIMARY KEY (`project_clone_id`),
- INDEX `idxReport` (`project_id`, `member_id`, `is_deleted`, `created_at`)
+CREATE TABLE `project_clone`
+(
+ `project_clone_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `project_id` INT(11) NOT NULL,
+ `project_id_parent` INT(11) NULL DEFAULT NULL COMMENT 'Project Id of the clone on opendesktop',
+ `external_link` VARCHAR(255) NULL DEFAULT NULL COMMENT 'External Link to the original project',
+ `member_id` INT(11) NULL DEFAULT NULL COMMENT 'Who send the report',
+ `text` TEXT NULL,
+ `is_deleted` INT(1) NOT NULL DEFAULT '0',
+ `is_valid` INT(1) NOT NULL DEFAULT '0' COMMENT 'Admin can mark a report as valid',
+ `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
+ `changed_at` TIMESTAMP NULL DEFAULT NULL,
+ `deleted_at` TIMESTAMP NULL DEFAULT NULL,
+ PRIMARY KEY (`project_clone_id`),
+ INDEX `idxReport` (`project_id`, `member_id`, `is_deleted`, `created_at`)
)
- ENGINE = InnoDB
+ ENGINE = InnoDB
;
\ No newline at end of file
diff --git a/sql_code/20180516_member_score.sql b/sql_code/20180516_member_score.sql
index 734cfedff..af3b50c05 100644
--- a/sql_code/20180516_member_score.sql
+++ b/sql_code/20180516_member_score.sql
@@ -1,38 +1,47 @@
DROP TABLE `member_score`;
-CREATE TABLE `member_score` (
- `member_score_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
- `member_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',
- `score` INT(10) NOT NULL DEFAULT '0',
- `count_product` INT(11) NULL DEFAULT '0',
- `count_pling` INT(11) NULL DEFAULT '0',
- `count_like` INT(11) NULL DEFAULT '0',
- `count_comment` INT(11) NULL DEFAULT '0',
- `count_years_membership` INT(11) NULL DEFAULT '0',
- `count_report_product_spam` INT(11) NULL DEFAULT '0',
- `count_report_product_fraud` INT(11) NULL DEFAULT '0',
- `count_report_comment` INT(11) NULL DEFAULT '0',
- `count_report_member` INT(11) NULL DEFAULT '0',
- `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`member_score_id`),
- INDEX `idx_member` (`member_id`)
+CREATE TABLE `member_score`
+(
+ `member_score_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
+ `member_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',
+ `score` INT(10) NOT NULL DEFAULT '0',
+ `count_product` INT(11) NULL DEFAULT '0',
+ `count_pling` INT(11) NULL DEFAULT '0',
+ `count_like` INT(11) NULL DEFAULT '0',
+ `count_comment` INT(11) NULL DEFAULT '0',
+ `count_years_membership` INT(11) NULL DEFAULT '0',
+ `count_report_product_spam` INT(11) NULL DEFAULT '0',
+ `count_report_product_fraud` INT(11) NULL DEFAULT '0',
+ `count_report_comment` INT(11) NULL DEFAULT '0',
+ `count_report_member` INT(11) NULL DEFAULT '0',
+ `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
+ PRIMARY KEY (`member_score_id`),
+ INDEX `idx_member` (`member_id`)
)
- ENGINE = InnoDB;
+ ENGINE = InnoDB;
DROP TABLE `member_score_factors`;
-CREATE TABLE `member_score_factors` (
- `factor_id` INT NOT NULL,
- `name` VARCHAR(50) NULL,
- `descrption` VARCHAR(255) NULL,
- `value` INT NULL,
- PRIMARY KEY (`factor_id`)
+CREATE TABLE `member_score_factors`
+(
+ `factor_id` INT NOT NULL,
+ `name` VARCHAR(50) NULL,
+ `descrption` VARCHAR(255) NULL,
+ `value` INT NULL,
+ PRIMARY KEY (`factor_id`)
);
-INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`) VALUES ('1', 'project', '1');
-INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`) VALUES ('2', 'pling', '100');
-INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`) VALUES ('3', 'like', '100');
-INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`) VALUES ('4', 'comment', '10');
-INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`) VALUES ('5', 'year', '10');
-INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`) VALUES ('6', 'report_product_spam', '-100');
-INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`) VALUES ('7', 'report_product_fraud', '-100');
+INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`)
+VALUES ('1', 'project', '1');
+INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`)
+VALUES ('2', 'pling', '100');
+INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`)
+VALUES ('3', 'like', '100');
+INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`)
+VALUES ('4', 'comment', '10');
+INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`)
+VALUES ('5', 'year', '10');
+INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`)
+VALUES ('6', 'report_product_spam', '-100');
+INSERT INTO `member_score_factors` (`factor_id`, `name`, `value`)
+VALUES ('7', 'report_product_fraud', '-100');
diff --git a/sql_code/20180518_member_pling_excluded.sql b/sql_code/20180518_member_pling_excluded.sql
index cde57e028..22abb9265 100644
--- a/sql_code/20180518_member_pling_excluded.sql
+++ b/sql_code/20180518_member_pling_excluded.sql
@@ -1,10 +1,11 @@
ALTER TABLE `member`
- ADD COLUMN `pling_excluded` INT(1) NOT NULL DEFAULT '0'
- AFTER `primary_mail`;
+ ADD COLUMN `pling_excluded` INT(1) NOT NULL DEFAULT '0'
+ AFTER `primary_mail`;
-INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('319', 'BackendUserPlingExcluded');
+INSERT INTO `activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('319', 'BackendUserPlingExcluded');
ALTER TABLE `member_dl_plings`
- ADD COLUMN `is_member_pling_excluded` INT(1) UNSIGNED NULL DEFAULT '0'
- AFTER `is_pling_excluded`;
+ ADD COLUMN `is_member_pling_excluded` INT(1) UNSIGNED NULL DEFAULT '0'
+ AFTER `is_pling_excluded`;
diff --git a/sql_code/20180605_tag_object.sql b/sql_code/20180605_tag_object.sql
index 0d5c14f6d..766b53005 100644
--- a/sql_code/20180605_tag_object.sql
+++ b/sql_code/20180605_tag_object.sql
@@ -1,2 +1,2 @@
ALTER TABLE `tag_object`
- ADD COLUMN `is_deleted` INT(1) DEFAULT 0;
\ No newline at end of file
+ ADD COLUMN `is_deleted` INT(1) DEFAULT 0;
\ No newline at end of file
diff --git a/sql_code/20180621_add_table_member_external_id.sql b/sql_code/20180621_add_table_member_external_id.sql
index 68a3bd578..33153bcbc 100644
--- a/sql_code/20180621_add_table_member_external_id.sql
+++ b/sql_code/20180621_add_table_member_external_id.sql
@@ -1,32 +1,33 @@
-CREATE TABLE `member_external_id` (
- `external_id` VARCHAR(255) NOT NULL,
- `member_id` INT(11) NOT NULL,
- `created_at` DATETIME NULL,
- `is_deleted` INT(1) NULL,
- PRIMARY KEY (`external_id`),
- INDEX `idx_member` (`member_id` ASC)
+CREATE TABLE `member_external_id`
+(
+ `external_id` VARCHAR(255) NOT NULL,
+ `member_id` INT(11) NOT NULL,
+ `created_at` DATETIME NULL,
+ `is_deleted` INT(1) NULL,
+ PRIMARY KEY (`external_id`),
+ INDEX `idx_member` (`member_id` ASC)
)
- ENGINE = InnoDB;
+ ENGINE = InnoDB;
DROP TRIGGER IF EXISTS `member_external_id_BEFORE_INSERT`;
DELIMITER $$
CREATE DEFINER = CURRENT_USER TRIGGER `member_external_id_BEFORE_INSERT`
- BEFORE INSERT
- ON `member_external_id`
- FOR EACH ROW
- BEGIN
+ BEFORE INSERT
+ ON `member_external_id`
+ FOR EACH ROW
+BEGIN
IF `NEW`.`created_at` IS NULL
THEN
- SET `NEW`.`created_at` = NOW();
+ SET `NEW`.`created_at` = NOW();
END IF;
- END$$
+END$$
DELIMITER ;
INSERT INTO `member_external_id` (`external_id`, `member_id`)
- SELECT
- SUBSTR(SHA(`member_id`), 1, 20) AS `external_id`,
- `member_id`
- FROM `member`
- WHERE `is_active` = 1 AND `is_deleted` = 0
- ORDER BY `member_id`;
\ No newline at end of file
+SELECT SUBSTR(SHA(`member_id`), 1, 20) AS `external_id`,
+ `member_id`
+FROM `member`
+WHERE `is_active` = 1
+ AND `is_deleted` = 0
+ORDER BY `member_id`;
\ No newline at end of file
diff --git a/sql_code/20180622_configstore_addcolumn.sql b/sql_code/20180622_configstore_addcolumn.sql
index 8f9e53003..9c0ccb044 100644
--- a/sql_code/20180622_configstore_addcolumn.sql
+++ b/sql_code/20180622_configstore_addcolumn.sql
@@ -1,3 +1,3 @@
ALTER TABLE `config_store`
- ADD COLUMN `is_show_title` INT(1) DEFAULT 1
- AFTER `cross_domain_login`;
\ No newline at end of file
+ ADD COLUMN `is_show_title` INT(1) DEFAULT 1
+ AFTER `cross_domain_login`;
\ No newline at end of file
diff --git a/sql_code/20180712_generate_stat_project.sql b/sql_code/20180712_generate_stat_project.sql
index c5b1794e4..841e690f8 100644
--- a/sql_code/20180712_generate_stat_project.sql
+++ b/sql_code/20180712_generate_stat_project.sql
@@ -1,161 +1,159 @@
CREATE PROCEDURE `generate_stat_project`()
BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
+ GROUP BY `reports_project`.`project_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- tag_object.tag_parent_object_id as project_id,
- GROUP_CONCAT(DISTINCT tag_object.tag_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT tag.tag_fullname) AS `package_name_list`
- FROM
- tag_object
- JOIN
- tag ON tag_object.tag_id = tag.tag_id
- JOIN
- ppload.ppload_files files ON files.id = tag_object.tag_object_id
- WHERE
- tag_object.tag_group_id = 8
- AND tag_object.is_deleted = 0
- AND files.active = 1
- GROUP BY tag_object.tag_parent_object_id
- ;
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `tag_object`.`tag_parent_object_id` AS `project_id`,
+ GROUP_CONCAT(DISTINCT `tag_object`.`tag_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `tag`.`tag_fullname`) AS `package_name_list`
+ FROM `tag_object`
+ JOIN
+ `tag` ON `tag_object`.`tag_id` = `tag`.`tag_id`
+ JOIN
+ `ppload`.`ppload_files` `files` ON `files`.`id` = `tag_object`.`tag_object_id`
+ WHERE `tag_object`.`tag_group_id` = 8
+ AND `tag_object`.`is_deleted` = 0
+ AND `files`.`active` = 1
+ GROUP BY `tag_object`.`tag_parent_object_id`;
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT GROUP_CONCAT(tag_name) AS tag_names, tag_project_id
- FROM (
- select distinct tag.tag_name, tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1 #project
- UNION ALL
- select distinct tag.tag_name, tgo.tag_parent_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- JOIN ppload.ppload_files files ON files.id = tgo.tag_object_id
- WHERE tag_type_id = 3 #file
- AND files.active = 1
- ) A
- GROUP BY tag_project_id
- ORDER BY tag_project_id;
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag_name`) AS `tag_names`, `tag_project_id`
+ FROM (
+ SELECT DISTINCT `tag`.`tag_name`, `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1 #project
+ UNION ALL
+ SELECT DISTINCT `tag`.`tag_name`, `tgo`.`tag_parent_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `tgo`.`tag_object_id`
+ WHERE `tag_type_id` = 3 #file
+ AND `files`.`active` = 1
+ ) `A`
+ GROUP BY `tag_project_id`
+ ORDER BY `tag_project_id`;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_cat` (`project_category_id`),INDEX `idx_member` (`member_id`))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`project_license_id` AS `project_license_id`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`source_url` AS `source_url`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- `project`.`ppload_collection_id` AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`ghns_excluded` AS `ghns_excluded`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.`package_type_id_list` AS `package_types`,
- `tppt`.`package_name_list` AS `package_names`,
- `t`.`tag_names` AS `tags`,
- `sdqy`.amount AS count_downloads_quarter,
- `project_license`.title AS project_license_title
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- LEFT JOIN `tmp_project_tags` AS t ON t.`tag_project_id` = project.`project_id`
- LEFT JOIN `stat_downloads_quarter_year` AS sdqy ON sdqy.project_id = project.project_id
- LEFT JOIN `project_license` ON project_license.project_license_id = project.project_license_id
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND `project`.`type_id` = 1
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
-
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_cat` (`project_category_id`),
+ INDEX `idx_member` (`member_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`project_license_id` AS `project_license_id`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`source_url` AS `source_url`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`ghns_excluded` AS `ghns_excluded`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`,
+ `sdqy`.`amount` AS `count_downloads_quarter`,
+ `project_license`.`title` AS `project_license_title`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `stat_downloads_quarter_year` AS `sdqy` ON `sdqy`.`project_id` = `project`.`project_id`
+ LEFT JOIN `project_license` ON `project_license`.`project_license_id` = `project`.`project_license_id`
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND `project`.`type_id` = 1
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- DROP TABLE IF EXISTS old_stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
+
+ DROP TABLE IF EXISTS `old_stat_projects`;
END
diff --git a/sql_code/20180718_configstore_addcolumn.sql b/sql_code/20180718_configstore_addcolumn.sql
index eadf6f8f2..992a7b733 100755
--- a/sql_code/20180718_configstore_addcolumn.sql
+++ b/sql_code/20180718_configstore_addcolumn.sql
@@ -1,17 +1,17 @@
ALTER TABLE `config_store`
- ADD COLUMN `is_show_home` INT(1) DEFAULT 0
- AFTER `is_show_title`;
+ ADD COLUMN `is_show_home` INT(1) DEFAULT 0
+ AFTER `is_show_title`;
ALTER TABLE `config_store`
- ADD COLUMN `layout_home` VARCHAR(45)
- AFTER `is_show_home`;
+ ADD COLUMN `layout_home` VARCHAR(45)
+ AFTER `is_show_home`;
ALTER TABLE `config_store`
- ADD COLUMN `layout` VARCHAR(45)
- AFTER `layout_home`;
+ ADD COLUMN `layout` VARCHAR(45)
+ AFTER `layout_home`;
ALTER TABLE `config_store`
- ADD COLUMN `render_view_postfix` VARCHAR(45)
- AFTER `layout`;
+ ADD COLUMN `render_view_postfix` VARCHAR(45)
+ AFTER `layout`;
\ No newline at end of file
diff --git a/sql_code/20180724_project_moderation.sql b/sql_code/20180724_project_moderation.sql
index f839e307b..0325127a0 100644
--- a/sql_code/20180724_project_moderation.sql
+++ b/sql_code/20180724_project_moderation.sql
@@ -1,28 +1,30 @@
-CREATE TABLE `project_moderation_type` (
- `project_moderation_type_id` INT(11) NOT NULL AUTO_INCREMENT,
- `name` VARCHAR(100) NOT NULL,
- `tag_id` INT(11) DEFAULT NULL
- COMMENT 'if exist insert/remove project tag_id relation',
- PRIMARY KEY (`project_moderation_type_id`)
+CREATE TABLE `project_moderation_type`
+(
+ `project_moderation_type_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `name` VARCHAR(100) NOT NULL,
+ `tag_id` INT(11) DEFAULT NULL
+ COMMENT 'if exist insert/remove project tag_id relation',
+ PRIMARY KEY (`project_moderation_type_id`)
)
- ENGINE = INNODB;
+ ENGINE = INNODB;
-CREATE TABLE `project_moderation` (
- `project_moderation_id` INT(11) NOT NULL AUTO_INCREMENT,
- `project_moderation_type_id` INT(11) NOT NULL,
- `project_id` INT(11) NOT NULL,
- `created_by` INT(11) NOT NULL,
- `updated_by` INT(11) DEFAULT NULL,
- `note` TEXT NOT NULL,
- `is_deleted` INT(1) NOT NULL DEFAULT '0',
- `is_valid` INT(1) NOT NULL DEFAULT '0'
- COMMENT 'Admin can mark a report as valid',
- `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
- `updated_at` DATETIME DEFAULT NULL,
- PRIMARY KEY (`project_moderation_id`),
- FOREIGN KEY (`project_moderation_type_id`)
- REFERENCES `project_moderation_type` (`project_moderation_type_id`)
+CREATE TABLE `project_moderation`
+(
+ `project_moderation_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `project_moderation_type_id` INT(11) NOT NULL,
+ `project_id` INT(11) NOT NULL,
+ `created_by` INT(11) NOT NULL,
+ `updated_by` INT(11) DEFAULT NULL,
+ `note` TEXT NOT NULL,
+ `is_deleted` INT(1) NOT NULL DEFAULT '0',
+ `is_valid` INT(1) NOT NULL DEFAULT '0'
+ COMMENT 'Admin can mark a report as valid',
+ `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
+ `updated_at` DATETIME DEFAULT NULL,
+ PRIMARY KEY (`project_moderation_id`),
+ FOREIGN KEY (`project_moderation_type_id`)
+ REFERENCES `project_moderation_type` (`project_moderation_type_id`)
)
- ENGINE = INNODB;
+ ENGINE = INNODB;
diff --git a/sql_code/20180724_project_moderation2.sql b/sql_code/20180724_project_moderation2.sql
index 697fa1a8c..3ec983aab 100755
--- a/sql_code/20180724_project_moderation2.sql
+++ b/sql_code/20180724_project_moderation2.sql
@@ -1,3 +1,6 @@
-alter table project_moderation drop column updated_by;
-alter table project_moderation drop column updated_at;
-alter table project_moderation add column `value` int(1) not null after `project_id`;
\ No newline at end of file
+ALTER TABLE `project_moderation`
+ DROP COLUMN `updated_by`;
+ALTER TABLE `project_moderation`
+ DROP COLUMN `updated_at`;
+ALTER TABLE `project_moderation`
+ ADD COLUMN `value` int(1) NOT NULL AFTER `project_id`;
\ No newline at end of file
diff --git a/sql_code/20180730_configstore_addcolumn.sql b/sql_code/20180730_configstore_addcolumn.sql
index 6628eccb5..ad3069d4b 100755
--- a/sql_code/20180730_configstore_addcolumn.sql
+++ b/sql_code/20180730_configstore_addcolumn.sql
@@ -1,8 +1,8 @@
ALTER TABLE `config_store`
- ADD COLUMN `layout_explore` VARCHAR(45)
- AFTER `layout_home`;
+ ADD COLUMN `layout_explore` VARCHAR(45)
+ AFTER `layout_home`;
ALTER TABLE `config_store`
- ADD COLUMN `layout_pagedetail` VARCHAR(45)
- AFTER `layout_explore`;
+ ADD COLUMN `layout_pagedetail` VARCHAR(45)
+ AFTER `layout_explore`;
diff --git a/sql_code/20180801_add_password_type.sql b/sql_code/20180801_add_password_type.sql
index b79a75b1c..2324a36b2 100644
--- a/sql_code/20180801_add_password_type.sql
+++ b/sql_code/20180801_add_password_type.sql
@@ -1,24 +1,27 @@
#Create Table member_password_types
-CREATE TABLE `member_password_types` (
- `password_type_id` INT(10) UNSIGNED NOT NULL,
- `name` VARCHAR(50) NOT NULL,
- `description` VARCHAR(255) NOT NULL,
- PRIMARY KEY (`password_type_id`)
+CREATE TABLE `member_password_types`
+(
+ `password_type_id` INT(10) UNSIGNED NOT NULL,
+ `name` VARCHAR(50) NOT NULL,
+ `description` VARCHAR(255) NOT NULL,
+ PRIMARY KEY (`password_type_id`)
)
- ENGINE = InnoDB;
+ ENGINE = InnoDB;
-INSERT INTO `member_password_types` (`password_type_id`, `name`, `description`) VALUES (0, 'MD5', 'Default OCS Password Hash');
-INSERT INTO `member_password_types` (`password_type_id`, `name`, `description`) VALUES (1, 'SHA', 'Hive Password Hash');
+INSERT INTO `member_password_types` (`password_type_id`, `name`, `description`)
+VALUES (0, 'MD5', 'Default OCS Password Hash');
+INSERT INTO `member_password_types` (`password_type_id`, `name`, `description`)
+VALUES (1, 'SHA', 'Hive Password Hash');
#Add field in table member
ALTER TABLE `member`
- ADD COLUMN `password_type` INT(1) NOT NULL DEFAULT '0'
-COMMENT 'Type: 0 = MD5 (OCS), 1 = SHA (Hive)'
- AFTER `password`;
+ ADD COLUMN `password_type` INT(1) NOT NULL DEFAULT '0'
+ COMMENT 'Type: 0 = MD5 (OCS), 1 = SHA (Hive)'
+ AFTER `password`;
#Update Hive-Members
UPDATE `member` `m`
SET `m`.`password_type` = 1
WHERE `m`.`source_id` = 1;
diff --git a/sql_code/20180802_add_email_hash.sql b/sql_code/20180802_add_email_hash.sql
index 24a8183fe..0d21f49b3 100644
--- a/sql_code/20180802_add_email_hash.sql
+++ b/sql_code/20180802_add_email_hash.sql
@@ -1,9 +1,9 @@
ALTER TABLE `member_email`
- ADD COLUMN `email_hash` VARCHAR(255) NOT NULL AFTER `email_verification_value`;
+ ADD COLUMN `email_hash` VARCHAR(255) NOT NULL AFTER `email_verification_value`;
ALTER TABLE `member_email`
- ADD INDEX `idx_hash` (`email_hash`);
+ ADD INDEX `idx_hash` (`email_hash`);
-UPDATE member_email me
-SET me.email_hash = MD5(me.email_address)
+UPDATE `member_email` `me`
+SET `me`.`email_hash` = MD5(`me`.`email_address`)
;
diff --git a/sql_code/20180809_member_pass.sql b/sql_code/20180809_member_pass.sql
index 7a54fc80c..203b0f055 100644
--- a/sql_code/20180809_member_pass.sql
+++ b/sql_code/20180809_member_pass.sql
@@ -1,4 +1,4 @@
ALTER TABLE `member`
- ADD COLUMN `password_old` VARCHAR(255) NULL AFTER `pling_excluded`,
- ADD COLUMN `password_type_old` INT(1) NULL AFTER `password_old`;
+ ADD COLUMN `password_old` VARCHAR(255) NULL AFTER `pling_excluded`,
+ ADD COLUMN `password_type_old` INT(1) NULL AFTER `password_old`;
diff --git a/sql_code/20180815_add_stored_procedure.sql b/sql_code/20180815_add_stored_procedure.sql
index cf79dc60c..5a0d8fde6 100644
--- a/sql_code/20180815_add_stored_procedure.sql
+++ b/sql_code/20180815_add_stored_procedure.sql
@@ -1,90 +1,138 @@
DELIMITER $$
-CREATE DEFINER=CURRENT_USER PROCEDURE `fetchCatTreeForStore`(IN STORE_ID int(11))
- BEGIN
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `fetchCatTreeForStore`(IN `STORE_ID` int(11))
+BEGIN
DROP TABLE IF EXISTS `tmp_store_cat`;
CREATE TEMPORARY TABLE `tmp_store_cat`
- (INDEX `idx_cat_id` (`project_category_id`) )
- ENGINE MEMORY
- AS
- SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
- FROM `config_store_category` AS `csc`
- JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
- WHERE `csc`.`store_id` = STORE_ID
- GROUP BY `csc`.`store_category_id`
- ORDER BY `csc`.`order`, `pc`.`title`
- ;
+ (
+ INDEX `idx_cat_id` (`project_category_id`)
+ )
+ ENGINE MEMORY
+ AS
+ SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
+ FROM `config_store_category` AS `csc`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
+ WHERE `csc`.`store_id` = `STORE_ID`
+ GROUP BY `csc`.`store_category_id`
+ ORDER BY `csc`.`order`, `pc`.`title`;
- SET @NEW_ORDER := 0;
+ SET @`NEW_ORDER` := 0;
- UPDATE `tmp_store_cat` SET `order` = (@NEW_ORDER := @NEW_ORDER + 10);
+ UPDATE `tmp_store_cat` SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10);
- SELECT `sct`.`lft`, `sct`.`rgt`, `sct`.`project_category_id` AS `id`, `sct`.`title`, `scpc`.`count_product` AS `product_count`, `sct`.`xdg_type`, `sct`.`name_legacy`, if(`sct`.`rgt`-`sct`.`lft` = 1, 0, 1) AS `has_children`, (SELECT `project_category_id` FROM `stat_cat_tree` AS `sct2` WHERE `sct2`.`lft` < `sct`.`lft` AND `sct2`.`rgt` > `sct`.`rgt` ORDER BY `sct2`.`rgt` - `sct`.`rgt` LIMIT 1) AS `parent_id`
+ SELECT `sct`.`lft`,
+ `sct`.`rgt`,
+ `sct`.`project_category_id` AS `id`,
+ `sct`.`title`,
+ `scpc`.`count_product` AS `product_count`,
+ `sct`.`xdg_type`,
+ `sct`.`name_legacy`,
+ if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
+ (SELECT `project_category_id`
+ FROM `stat_cat_tree` AS `sct2`
+ WHERE `sct2`.`lft` < `sct`.`lft`
+ AND `sct2`.`rgt` > `sct`.`rgt`
+ ORDER BY `sct2`.`rgt` - `sct`.`rgt`
+ LIMIT 1) AS `parent_id`
FROM `tmp_store_cat` AS `cfc`
- JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
- JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`package_type_id` is null
- WHERE cfc.store_id = STORE_ID
- ORDER BY cfc.`order`, sct.lft;
- END$$
+ JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ JOIN `stat_cat_prod_count` AS `scpc`
+ ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`package_type_id` IS NULL
+ WHERE `cfc`.`store_id` = `STORE_ID`
+ ORDER BY `cfc`.`order`, `sct`.`lft`;
+END$$
DELIMITER ;
DELIMITER $$
-CREATE DEFINER=CURRENT_USER PROCEDURE `fetchCatTreeWithPackage`(IN STORE_ID int(11), IN PACKAGE_TYPE int(11))
- BEGIN
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `fetchCatTreeWithPackage`(IN `STORE_ID` int(11), IN `PACKAGE_TYPE` int(11))
+BEGIN
DROP TABLE IF EXISTS `tmp_store_cat`;
CREATE TEMPORARY TABLE `tmp_store_cat`
- (INDEX `idx_cat_id` (`project_category_id`) )
- ENGINE MEMORY
- AS
- SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
- FROM `config_store_category` AS `csc`
- JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
- WHERE `csc`.`store_id` = STORE_ID
- GROUP BY `csc`.`store_category_id`
- ORDER BY `csc`.`order`, `pc`.`title`
- ;
+ (
+ INDEX `idx_cat_id` (`project_category_id`)
+ )
+ ENGINE MEMORY
+ AS
+ SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
+ FROM `config_store_category` AS `csc`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
+ WHERE `csc`.`store_id` = `STORE_ID`
+ GROUP BY `csc`.`store_category_id`
+ ORDER BY `csc`.`order`, `pc`.`title`;
- SET @NEW_ORDER := 0;
+ SET @`NEW_ORDER` := 0;
- UPDATE `tmp_store_cat` SET `order` = (@NEW_ORDER := @NEW_ORDER + 10);
+ UPDATE `tmp_store_cat` SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10);
- SELECT `sct`.`lft`, `sct`.`rgt`, `sct`.`project_category_id` AS `id`, `sct`.`title`, `scpc`.`count_product` AS `product_count`, `sct`.`xdg_type`, `sct`.`name_legacy`, if(`sct`.`rgt`-`sct`.`lft` = 1, 0, 1) AS `has_children`, (SELECT `project_category_id` FROM `stat_cat_tree` AS `sct2` WHERE `sct2`.`lft` < `sct`.`lft` AND `sct2`.`rgt` > `sct`.`rgt` ORDER BY `sct2`.`rgt` - `sct`.`rgt` LIMIT 1) AS `parent_id`
+ SELECT `sct`.`lft`,
+ `sct`.`rgt`,
+ `sct`.`project_category_id` AS `id`,
+ `sct`.`title`,
+ `scpc`.`count_product` AS `product_count`,
+ `sct`.`xdg_type`,
+ `sct`.`name_legacy`,
+ if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
+ (SELECT `project_category_id`
+ FROM `stat_cat_tree` AS `sct2`
+ WHERE `sct2`.`lft` < `sct`.`lft`
+ AND `sct2`.`rgt` > `sct`.`rgt`
+ ORDER BY `sct2`.`rgt` - `sct`.`rgt`
+ LIMIT 1) AS `parent_id`
FROM `tmp_store_cat` AS `cfc`
- JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
- JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`package_type_id` = PACKAGE_TYPE
- WHERE `cfc`.`store_id` = STORE_ID
+ JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND
+ `scpc`.`package_type_id` = `PACKAGE_TYPE`
+ WHERE `cfc`.`store_id` = `STORE_ID`
ORDER BY `cfc`.`order`, `sct`.`lft`;
- END$$
+END$$
DELIMITER ;
DROP PROCEDURE IF EXISTS `fetchCatTreeForStore`;
DELIMITER $$
-CREATE DEFINER=CURRENT_USER PROCEDURE `fetchCatTreeForStore`(IN STORE_ID int(11))
- BEGIN
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `fetchCatTreeForStore`(IN `STORE_ID` int(11))
+BEGIN
DROP TABLE IF EXISTS `tmp_store_cat`;
CREATE TEMPORARY TABLE `tmp_store_cat`
- (INDEX `idx_cat_id` (`project_category_id`) )
- ENGINE MEMORY
- AS
- SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
- FROM `config_store_category` AS `csc`
- JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
- WHERE `csc`.`store_id` = STORE_ID
- GROUP BY `csc`.`store_category_id`
- ORDER BY `csc`.`order`, `pc`.`title`
- ;
+ (
+ INDEX `idx_cat_id` (`project_category_id`)
+ )
+ ENGINE MEMORY
+ AS
+ SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
+ FROM `config_store_category` AS `csc`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
+ WHERE `csc`.`store_id` = `STORE_ID`
+ GROUP BY `csc`.`store_category_id`
+ ORDER BY `csc`.`order`, `pc`.`title`;
- SET @NEW_ORDER := 0;
+ SET @`NEW_ORDER` := 0;
- UPDATE `tmp_store_cat` SET `order` = (@NEW_ORDER := @NEW_ORDER + 10);
+ UPDATE `tmp_store_cat` SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10);
- SELECT `sct`.`lft`, `sct`.`rgt`, `sct`.`project_category_id` AS `id`, `sct`.`title`, `scpc`.`count_product` AS `product_count`, `sct`.`xdg_type`, `sct`.`name_legacy`, if(`sct`.`rgt`-`sct`.`lft` = 1, 0, 1) AS `has_children`, (SELECT `project_category_id` FROM `stat_cat_tree` AS `sct2` WHERE `sct2`.`lft` < `sct`.`lft` AND `sct2`.`rgt` > `sct`.`rgt` ORDER BY `sct2`.`rgt` - `sct`.`rgt` LIMIT 1) AS `parent_id`
+ SELECT `sct`.`lft`,
+ `sct`.`rgt`,
+ `sct`.`project_category_id` AS `id`,
+ `sct`.`title`,
+ `scpc`.`count_product` AS `product_count`,
+ `sct`.`xdg_type`,
+ `sct`.`name_legacy`,
+ if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
+ (SELECT `project_category_id`
+ FROM `stat_cat_tree` AS `sct2`
+ WHERE `sct2`.`lft` < `sct`.`lft`
+ AND `sct2`.`rgt` > `sct`.`rgt`
+ ORDER BY `sct2`.`rgt` - `sct`.`rgt`
+ LIMIT 1) AS `parent_id`
FROM `tmp_store_cat` AS `cfc`
- JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
- JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` is null
- WHERE cfc.store_id = STORE_ID
- ORDER BY cfc.`order`, sct.lft;
- END$$
+ JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ JOIN `stat_cat_prod_count` AS `scpc`
+ ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` IS NULL
+ WHERE `cfc`.`store_id` = `STORE_ID`
+ ORDER BY `cfc`.`order`, `sct`.`lft`;
+END$$
DELIMITER ;
diff --git a/sql_code/20180821_solr_procedure.sql b/sql_code/20180821_solr_procedure.sql
index b8b69e9c5..bb7d89a38 100644
--- a/sql_code/20180821_solr_procedure.sql
+++ b/sql_code/20180821_solr_procedure.sql
@@ -1,299 +1,339 @@
-drop PROCEDURE solr_query_fullimport_prepare;
+DROP PROCEDURE `solr_query_fullimport_prepare`;
DELIMITER $$
-CREATE PROCEDURE `solr_query_fullimport_prepare`()
+CREATE PROCEDURE `solr_query_fullimport_prepare`()
BEGIN
-
-
- DROP TABLE IF EXISTS tmp_solr_cat_tree;
- CREATE TEMPORARY TABLE tmp_solr_cat_tree
- (PRIMARY KEY `primary` (project_category_id) )
- AS
- SELECT
- pc.project_category_id,
- pc.title,
- pc.is_active,
- count(pc.lft) AS depth,
- GROUP_CONCAT(pc2.project_category_id ORDER BY pc2.lft) AS ancestor_id_path,
- GROUP_CONCAT(pc2.title ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path
- FROM project_category AS pc, project_category AS pc2
- WHERE (pc.lft BETWEEN pc2.lft AND pc2.rgt)
- GROUP BY pc.lft
- ORDER BY pc.lft;
-
- DROP TABLE IF EXISTS tmp_solr_cat_store;
- CREATE TEMPORARY TABLE tmp_solr_cat_store
- (PRIMARY KEY `primary` (project_category_id) )
- AS
- SELECT
- tct.project_category_id,
- tct.ancestor_id_path,
- tct.title,
- tct.is_active,
- group_concat(store_id) AS stores
- FROM tmp_solr_cat_tree AS tct, config_store_category AS csc
- WHERE FIND_IN_SET(csc.project_category_id, tct.ancestor_id_path) > 0
- GROUP BY tct.project_category_id
- ORDER BY tct.project_category_id;
-
- DROP TABLE IF EXISTS tmp_solr_project_tags;
- CREATE TEMPORARY TABLE tmp_solr_project_tags
- (PRIMARY KEY `primary` (tag_project_id) )
- AS
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- , tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tgo.tag_type_id = 1 and tgo.tag_group_id in (5,6) and tgo.is_deleted = 0
- GROUP BY tgo.tag_object_id;
-
- DROP TABLE IF EXISTS tmp_solr_project_license;
- CREATE TEMPORARY TABLE tmp_solr_project_license
- (PRIMARY KEY `primary` (license_project_id))
+
+
+ DROP TABLE IF EXISTS `tmp_solr_cat_tree`;
+ CREATE TEMPORARY TABLE `tmp_solr_cat_tree`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
+ AS
+ SELECT `pc`.`project_category_id`,
+ `pc`.`title`,
+ `pc`.`is_active`,
+ count(`pc`.`lft`) AS `depth`,
+ GROUP_CONCAT(`pc2`.`project_category_id` ORDER BY `pc2`.`lft`) AS `ancestor_id_path`,
+ GROUP_CONCAT(`pc2`.`title` ORDER BY `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path`
+ FROM `project_category` AS `pc`,
+ `project_category` AS `pc2`
+ WHERE (`pc`.`lft` BETWEEN `pc2`.`lft` AND `pc2`.`rgt`)
+ GROUP BY `pc`.`lft`
+ ORDER BY `pc`.`lft`;
+
+ DROP TABLE IF EXISTS `tmp_solr_cat_store`;
+ CREATE TEMPORARY TABLE `tmp_solr_cat_store`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
+ AS
+ SELECT `tct`.`project_category_id`,
+ `tct`.`ancestor_id_path`,
+ `tct`.`title`,
+ `tct`.`is_active`,
+ group_concat(`store_id`) AS `stores`
+ FROM `tmp_solr_cat_tree` AS `tct`,
+ `config_store_category` AS `csc`
+ WHERE FIND_IN_SET(`csc`.`project_category_id`, `tct`.`ancestor_id_path`) > 0
+ GROUP BY `tct`.`project_category_id`
+ ORDER BY `tct`.`project_category_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ AS
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ , `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tgo`.`tag_type_id` = 1
+ AND `tgo`.`tag_group_id` IN (5, 6)
+ AND `tgo`.`is_deleted` = 0
+ GROUP BY `tgo`.`tag_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_project_license`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_license`
+ (
+ PRIMARY KEY `primary` (`license_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `t`.`tag_object_id` AS `license_project_id`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_name`) AS `license_name_list`
+ FROM `tag_object` `t`
+ INNER JOIN `tag` `ta` ON `ta`.`tag_id` = `t`.`tag_id`
+ WHERE `t`.`tag_type_id` = 1
+ AND `t`.`tag_group_id` = 7
+ AND `t`.`is_deleted` = 0
+ GROUP BY `tag_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_package_types`
+ (
+ PRIMARY KEY `primary` (`package_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `t`.`tag_parent_object_id` AS `package_project_id`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_name`) AS `package_name_list`
+ FROM `tag_object` `t`
+ INNER JOIN `tag` `ta` ON `ta`.`tag_id` = `t`.`tag_id`
+ WHERE `t`.`tag_type_id` = 3
+ AND `t`.`tag_group_id` = 8
+ AND `t`.`is_deleted` = 0
+ GROUP BY `tag_parent_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_project_arch_types`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_arch_types`
+ (
+ PRIMARY KEY `primary` (`arch_project_id`)
+ )
ENGINE MyISAM
- AS
- SELECT
- t.tag_object_id as license_project_id,
- GROUP_CONCAT(DISTINCT ta.tag_name) AS `license_name_list`
- FROM tag_object t
- INNER JOIN tag ta on ta.tag_id = t.tag_id
- WHERE t.tag_type_id = 1 and t.tag_group_id = 7 AND t.is_deleted = 0
- group by tag_object_id
- ;
-
- DROP TABLE IF EXISTS tmp_solr_project_package_types;
- CREATE TEMPORARY TABLE tmp_solr_project_package_types
- (PRIMARY KEY `primary` (package_project_id))
- ENGINE MyISAM
- AS
- SELECT
- t.tag_parent_object_id as package_project_id,
- GROUP_CONCAT(DISTINCT ta.tag_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT ta.tag_name) AS `package_name_list`
- FROM tag_object t
- INNER JOIN tag ta on ta.tag_id = t.tag_id
- WHERE t.tag_type_id = 3 and t.tag_group_id = 8 AND t.is_deleted = 0
- group by tag_parent_object_id
- ;
-
- DROP TABLE IF EXISTS tmp_solr_project_arch_types;
- CREATE TEMPORARY TABLE tmp_solr_project_arch_types
- (PRIMARY KEY `primary` (arch_project_id))
- ENGINE MyISAM
- AS
- SELECT
- t.tag_parent_object_id as arch_project_id,
- GROUP_CONCAT(DISTINCT ta.tag_id) AS arch_type_id_list,
- GROUP_CONCAT(DISTINCT ta.tag_name) AS `arch_name_list`
- FROM tag_object t
- INNER JOIN tag ta on ta.tag_id = t.tag_id
- WHERE t.tag_type_id = 3 and t.tag_group_id = 9 AND t.is_deleted = 0
- group by tag_parent_object_id
- ;
-
- DROP TABLE IF EXISTS tmp_solr_query_fullimport;
- create table tmp_solr_query_fullimport as
-
- SELECT
- project_id,
- project.member_id AS project_member_id,
- project.project_category_id AS project_category_id,
- project.title AS project_title,
- description,
- image_small,
- member.username,
- member.firstname,
- member.lastname,
- tcs.title AS cat_title,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- laplace_score(project.count_likes, project.count_dislikes) AS `laplace_score`,
- DATE_FORMAT(project.created_at, '%Y-%m-%dT%TZ') AS created_at,
- DATE_FORMAT(project.changed_at, '%Y-%m-%dT%TZ') AS changed_at,
- tcs.stores,
- tcs.ancestor_id_path AS `cat_id_ancestor_path`,
- sppt.package_name_list AS `package_names`,
- appt.arch_name_list AS `arch_names`,
- c.license_name_list AS `license_names`,
- t.tag_names AS `tags`
- FROM project
- JOIN member ON member.member_id = project.member_id
- LEFT JOIN tmp_solr_cat_store AS tcs ON project.project_category_id = tcs.project_category_id
- LEFT JOIN tmp_solr_project_package_types AS sppt ON sppt.package_project_id = project.project_id
- LEFT JOIN tmp_solr_project_arch_types AS appt ON appt.arch_project_id = project.project_id
- LEFT JOIN tmp_solr_project_license AS c ON c.license_project_id = project.project_id
- LEFT JOIN tmp_solr_project_tags AS t ON t.tag_project_id = project.project_id
-
- WHERE project.`status` = 100 AND project.`type_id` = 1 AND member.`is_active` = 1 AND tcs.`is_active` = 1;
-
+ AS
+ SELECT `t`.`tag_parent_object_id` AS `arch_project_id`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_id`) AS `arch_type_id_list`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_name`) AS `arch_name_list`
+ FROM `tag_object` `t`
+ INNER JOIN `tag` `ta` ON `ta`.`tag_id` = `t`.`tag_id`
+ WHERE `t`.`tag_type_id` = 3
+ AND `t`.`tag_group_id` = 9
+ AND `t`.`is_deleted` = 0
+ GROUP BY `tag_parent_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_query_fullimport`;
+ CREATE TABLE `tmp_solr_query_fullimport` AS
+
+ SELECT `project_id`,
+ `project`.`member_id` AS `project_member_id`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`title` AS `project_title`,
+ `description`,
+ `image_small`,
+ `member`.`username`,
+ `member`.`firstname`,
+ `member`.`lastname`,
+ `tcs`.`title` AS `cat_title`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ DATE_FORMAT(`project`.`created_at`, '%Y-%m-%dT%TZ') AS `created_at`,
+ DATE_FORMAT(`project`.`changed_at`, '%Y-%m-%dT%TZ') AS `changed_at`,
+ `tcs`.`stores`,
+ `tcs`.`ancestor_id_path` AS `cat_id_ancestor_path`,
+ `sppt`.`package_name_list` AS `package_names`,
+ `appt`.`arch_name_list` AS `arch_names`,
+ `c`.`license_name_list` AS `license_names`,
+ `t`.`tag_names` AS `tags`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ LEFT JOIN `tmp_solr_cat_store` AS `tcs` ON `project`.`project_category_id` = `tcs`.`project_category_id`
+ LEFT JOIN `tmp_solr_project_package_types` AS `sppt`
+ ON `sppt`.`package_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_solr_project_arch_types` AS `appt` ON `appt`.`arch_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_solr_project_license` AS `c` ON `c`.`license_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_solr_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+
+ WHERE `project`.`status` = 100
+ AND `project`.`type_id` = 1
+ AND `member`.`is_active` = 1
+ AND `tcs`.`is_active` = 1;
+
END$$
DELIMITER ;
-call solr_query_fullimport_prepare();
+CALL solr_query_fullimport_prepare();
-drop PROCEDURE solr_query_delta_import_new;
+DROP PROCEDURE `solr_query_delta_import_new`;
DELIMITER $$
-CREATE PROCEDURE `solr_query_delta_import_new`(IN projectID INT(11))
+CREATE PROCEDURE `solr_query_delta_import_new`(IN `projectID` INT(11))
BEGIN
- DROP TABLE IF EXISTS tmp_cat_tree;
- CREATE TEMPORARY TABLE tmp_cat_tree
- (PRIMARY KEY `primary` (project_category_id) )
- AS
- SELECT
- pc.project_category_id,
- pc.title,
- pc.is_active,
- count(pc.lft) AS depth,
- GROUP_CONCAT(pc2.project_category_id ORDER BY pc2.lft) AS ancestor_id_path,
- GROUP_CONCAT(pc2.title ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path
- FROM project_category AS pc, project_category AS pc2
- WHERE (pc.lft BETWEEN pc2.lft AND pc2.rgt)
- GROUP BY pc.lft
- ORDER BY pc.lft;
-
- DROP TABLE IF EXISTS tmp_solr_cat_store;
- CREATE TEMPORARY TABLE tmp_solr_cat_store
- (PRIMARY KEY `primary` (project_category_id) )
+ DROP TABLE IF EXISTS `tmp_cat_tree`;
+ CREATE TEMPORARY TABLE `tmp_cat_tree`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
+ AS
+ SELECT `pc`.`project_category_id`,
+ `pc`.`title`,
+ `pc`.`is_active`,
+ count(`pc`.`lft`) AS `depth`,
+ GROUP_CONCAT(`pc2`.`project_category_id` ORDER BY `pc2`.`lft`) AS `ancestor_id_path`,
+ GROUP_CONCAT(`pc2`.`title` ORDER BY `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path`
+ FROM `project_category` AS `pc`,
+ `project_category` AS `pc2`
+ WHERE (`pc`.`lft` BETWEEN `pc2`.`lft` AND `pc2`.`rgt`)
+ GROUP BY `pc`.`lft`
+ ORDER BY `pc`.`lft`;
+
+ DROP TABLE IF EXISTS `tmp_solr_cat_store`;
+ CREATE TEMPORARY TABLE `tmp_solr_cat_store`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
AS
- SELECT
- tct.project_category_id,
- tct.ancestor_id_path,
- tct.title,
- tct.is_active,
- group_concat(store_id) AS stores
- FROM tmp_cat_tree AS tct, config_store_category AS csc
- WHERE FIND_IN_SET(csc.project_category_id, tct.ancestor_id_path) > 0
- GROUP BY tct.project_category_id
- ORDER BY tct.project_category_id;
-
- SELECT
- project_id,
- project.member_id AS project_member_id,
- project.project_category_id AS project_category_id,
- project.title AS project_title,
- description,
- image_small,
- member.username,
- member.firstname,
- member.lastname,
- tcs.title AS cat_title,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- laplace_score(project.count_likes, project.count_dislikes) AS `laplace_score`,
- DATE_FORMAT(project.created_at, '%Y-%m-%dT%TZ') AS created_at,
- DATE_FORMAT(project.changed_at, '%Y-%m-%dT%TZ') AS changed_at,
- tcs.stores,
- tcs.ancestor_id_path AS `cat_id_ancestor_path`,
- (
-
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id = 8 and tag_object.tag_type_id = 3 and tag_object.is_deleted = 0 and tag_object.tag_parent_object_id = project.project_id
- ) as package_names ,
- (
-
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id = 9 and tag_object.tag_type_id = 3 and tag_object.is_deleted = 0 and tag_object.tag_parent_object_id = project.project_id
- ) as arch_names,
- (
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id = 7 and tag_object.tag_type_id = 1 and tag_object.is_deleted = 0 and tag_object.tag_object_id = project.project_id
- ) as license_names,
- (
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id in (5,6) and tag_object.tag_type_id = 1 and tag_object.is_deleted = 0 and tag_object.tag_object_id = project.project_id
- ) as tags
- FROM project
- JOIN member ON member.member_id = project.member_id
- LEFT JOIN tmp_solr_cat_store AS tcs ON project.project_category_id = tcs.project_category_id
- WHERE project_id = projectID;
-
+ SELECT `tct`.`project_category_id`,
+ `tct`.`ancestor_id_path`,
+ `tct`.`title`,
+ `tct`.`is_active`,
+ group_concat(`store_id`) AS `stores`
+ FROM `tmp_cat_tree` AS `tct`,
+ `config_store_category` AS `csc`
+ WHERE FIND_IN_SET(`csc`.`project_category_id`, `tct`.`ancestor_id_path`) > 0
+ GROUP BY `tct`.`project_category_id`
+ ORDER BY `tct`.`project_category_id`;
+
+ SELECT `project_id`,
+ `project`.`member_id` AS `project_member_id`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`title` AS `project_title`,
+ `description`,
+ `image_small`,
+ `member`.`username`,
+ `member`.`firstname`,
+ `member`.`lastname`,
+ `tcs`.`title` AS `cat_title`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ DATE_FORMAT(`project`.`created_at`, '%Y-%m-%dT%TZ') AS `created_at`,
+ DATE_FORMAT(`project`.`changed_at`, '%Y-%m-%dT%TZ') AS `changed_at`,
+ `tcs`.`stores`,
+ `tcs`.`ancestor_id_path` AS `cat_id_ancestor_path`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` = 8
+ AND `tag_object`.`tag_type_id` = 3
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_parent_object_id` = `project`.`project_id`
+ ) AS `package_names`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` = 9
+ AND `tag_object`.`tag_type_id` = 3
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_parent_object_id` = `project`.`project_id`
+ ) AS `arch_names`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` = 7
+ AND `tag_object`.`tag_type_id` = 1
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_object_id` = `project`.`project_id`
+ ) AS `license_names`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` IN (5, 6)
+ AND `tag_object`.`tag_type_id` = 1
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_object_id` = `project`.`project_id`
+ ) AS `tags`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ LEFT JOIN `tmp_solr_cat_store` AS `tcs` ON `project`.`project_category_id` = `tcs`.`project_category_id`
+ WHERE `project_id` = `projectID`;
+
END$$
DELIMITER ;
-
-drop PROCEDURE solr_query_import_new;
+
+DROP PROCEDURE `solr_query_import_new`;
DELIMITER $$
CREATE PROCEDURE `solr_query_import_new`()
BEGIN
- select
- project_id,
- project_member_id,
- project_category_id,
- project_title,
- description,
- image_small,
- username,
- firstname,
- lastname,
- cat_title,
- count_likes,
- count_dislikes,
- laplace_score,
- created_at,
- changed_at,
- stores,
- cat_id_ancestor_path,
- package_names,
- arch_names,
- license_names,
- tags
- from tmp_solr_query_fullimport;
+ SELECT `project_id`,
+ `project_member_id`,
+ `project_category_id`,
+ `project_title`,
+ `description`,
+ `image_small`,
+ `username`,
+ `firstname`,
+ `lastname`,
+ `cat_title`,
+ `count_likes`,
+ `count_dislikes`,
+ `laplace_score`,
+ `created_at`,
+ `changed_at`,
+ `stores`,
+ `cat_id_ancestor_path`,
+ `package_names`,
+ `arch_names`,
+ `license_names`,
+ `tags`
+ FROM `tmp_solr_query_fullimport`;
END$$
DELIMITER ;
-drop PROCEDURE solr_query_delta_new;
+DROP PROCEDURE `solr_query_delta_new`;
DELIMITER $$
-CREATE PROCEDURE `solr_query_delta_new`(IN lastIndexed varchar(255))
+CREATE PROCEDURE `solr_query_delta_new`(IN `lastIndexed` varchar(255))
BEGIN
- select distinct project_id
- from
- (
- SELECT project_id
- FROM project
- JOIN member ON member.member_id = project.member_id
- WHERE (project.`status` = 100 AND project.`type_id` = 1 AND member.`is_active` = 1 AND project.changed_at > lastIndexed)
- union
- select distinct tag_object_id as project_id
- from tag_object
- where tag_type_id = 1 and (tag_created > lastIndexed or tag_changed > lastIndexed)
- union select distinct tag_parent_object_id as project_id
- from tag_object
- where tag_type_id in (8,9) and (tag_created > lastIndexed or tag_changed > lastIndexed)
- ) t ;
+ SELECT DISTINCT `project_id`
+ FROM (
+ SELECT `project_id`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ WHERE (`project`.`status` = 100 AND `project`.`type_id` = 1 AND `member`.`is_active` = 1 AND
+ `project`.`changed_at` > `lastIndexed`)
+ UNION
+ SELECT DISTINCT `tag_object_id` AS `project_id`
+ FROM `tag_object`
+ WHERE `tag_type_id` = 1
+ AND (`tag_created` > `lastIndexed` OR `tag_changed` > `lastIndexed`)
+ UNION
+ SELECT DISTINCT `tag_parent_object_id` AS `project_id`
+ FROM `tag_object`
+ WHERE `tag_type_id` IN (8, 9)
+ AND (`tag_created` > `lastIndexed` OR `tag_changed` > `lastIndexed`)
+ ) `t`;
END$$
DELIMITER ;
-drop procedure solr_query_deleted_pk_new;
+DROP PROCEDURE `solr_query_deleted_pk_new`;
DELIMITER $$
-CREATE PROCEDURE `solr_query_deleted_pk_new`(IN lastIndexed VARCHAR(255))
+CREATE PROCEDURE `solr_query_deleted_pk_new`(IN `lastIndexed` VARCHAR(255))
BEGIN
- SELECT project_id
- FROM project
- WHERE
- project.`type_id` = 1
- and(
- project.deleted_at > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY))
- OR (project.changed_at > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) AND project.status < 100)
- );
+ SELECT `project_id`
+ FROM `project`
+ WHERE `project`.`type_id` = 1
+ AND (
+ `project`.`deleted_at` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY))
+ OR (`project`.`changed_at` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)) AND
+ `project`.`status` < 100)
+ );
END$$
DELIMITER ;
diff --git a/sql_code/20180918_alter_table_tag.sql b/sql_code/20180918_alter_table_tag.sql
index 2b848d333..7ccf7f418 100644
--- a/sql_code/20180918_alter_table_tag.sql
+++ b/sql_code/20180918_alter_table_tag.sql
@@ -1,2 +1,2 @@
ALTER TABLE `tag`
- ADD COLUMN `is_active` INT(1) NOT NULL DEFAULT 1;
+ ADD COLUMN `is_active` INT(1) NOT NULL DEFAULT 1;
diff --git a/sql_code/20180920_add_member_username_old.sql b/sql_code/20180920_add_member_username_old.sql
index 0bd39666f..1850b30d0 100644
--- a/sql_code/20180920_add_member_username_old.sql
+++ b/sql_code/20180920_add_member_username_old.sql
@@ -1,3 +1,3 @@
ALTER TABLE `member`
- ADD COLUMN `username_old` VARCHAR(255) NULL DEFAULT NULL AFTER `password_type_old`,
- ADD COLUMN `mail_old` VARCHAR(255) NULL DEFAULT NULL AFTER `username_old`;
+ ADD COLUMN `username_old` VARCHAR(255) NULL DEFAULT NULL AFTER `password_type_old`,
+ ADD COLUMN `mail_old` VARCHAR(255) NULL DEFAULT NULL AFTER `username_old`;
diff --git a/sql_code/20180926_add_procedure_merge_members.sql b/sql_code/20180926_add_procedure_merge_members.sql
index 33bc65692..9ba1cdcd6 100644
--- a/sql_code/20180926_add_procedure_merge_members.sql
+++ b/sql_code/20180926_add_procedure_merge_members.sql
@@ -1,176 +1,182 @@
-INSERT INTO `pling-import`.`activity_log_types` (`activity_log_type_id`, `type_text`) VALUES ('321', 'BackendUserMerged');
-
-
-CREATE TABLE `merge_member_log` (
- `id` INT NOT NULL AUTO_INCREMENT,
- `object_type` VARCHAR(50) NOT NULL COMMENT 'project, comment, rating,...',
- `object_id` INT NOT NULL,
- `member_id_org` INT NOT NULL COMMENT 'MemberId vor dem Merge',
- `member_id_new` INT NOT NULL COMMENT 'MemberId nach dem Merge',
- PRIMARY KEY (`id`)
+INSERT INTO `pling-import`.`activity_log_types` (`activity_log_type_id`, `type_text`)
+VALUES ('321', 'BackendUserMerged');
+
+
+CREATE TABLE `merge_member_log`
+(
+ `id` INT NOT NULL AUTO_INCREMENT,
+ `object_type` VARCHAR(50) NOT NULL COMMENT 'project, comment, rating,...',
+ `object_id` INT NOT NULL,
+ `member_id_org` INT NOT NULL COMMENT 'MemberId vor dem Merge',
+ `member_id_new` INT NOT NULL COMMENT 'MemberId nach dem Merge',
+ PRIMARY KEY (`id`)
)
-COLLATE='latin1_swedish_ci'
+ COLLATE = 'latin1_swedish_ci'
;
-USE `pling`;
+
DROP PROCEDURE `merge_members`;
DELIMITER //
-CREATE PROCEDURE `merge_members`(
- IN `from_member_id` INT,
- IN `to_member_id` INT
-)
-COMMENT 'Merge of 2 members into 1'
+CREATE PROCEDURE `merge_members`(IN `from_member_id` INT,
+ IN `to_member_id` INT)
+ COMMENT 'Merge of 2 members into 1'
BEGIN
- DECLARE exit handler for sqlexception
- BEGIN
- -- ERROR
- ROLLBACK;
- END;
-
- START TRANSACTION;
-
- #Update table member
- UPDATE member m
- SET m.is_active = 0
- ,m.is_deleted = 1
- ,m.deleted_at = NOW()
- WHERE m.member_id = from_member_id;
-
- #Update table member_email
- UPDATE member_email me
- SET me.email_deleted = 1
- WHERE me.email_member_id = from_member_id;
-
- #Update table project
- INSERT INTO merge_member_log
- (
- SELECT null,'project', project_id, member_id, to_member_id
- FROM project p WHERE p.member_id = from_member_id AND p.type_id = 1
- );
-
- UPDATE project p
- SET p.member_id = to_member_id
- WHERE p.member_id = from_member_id
- AND p.type_id = 1;
-
- #Update table comments
- INSERT INTO merge_member_log
- (
- SELECT null, 'comments', comment_id, comment_member_id, to_member_id
- FROM comments c WHERE c.comment_member_id = from_member_id
- );
-
- UPDATE comments c
- SET c.comment_member_id = to_member_id
- WHERE c.comment_member_id = from_member_id;
-
- #Update table project_follower
- INSERT INTO merge_member_log
- (
- SELECT null, 'project_follower', project_follower_id, member_id, to_member_id
- FROM project_follower f WHERE f.member_id = from_member_id
- );
-
- UPDATE project_follower f
- SET f.member_id = to_member_id
- WHERE f.member_id = from_member_id;
-
- #Update table project_rating
- INSERT INTO merge_member_log
- (
- SELECT null, 'project_rating', rating_id, member_id, to_member_id
- FROM project_rating r WHERE r.member_id = from_member_id
- );
-
- UPDATE project_rating r
- SET r.member_id = to_member_id
- WHERE r.member_id = from_member_id;
-
- #Update table project_plings
- INSERT INTO merge_member_log
- (
- SELECT null, 'project_plings', project_plings_id, member_id, to_member_id
- FROM project_plings r WHERE r.member_id = from_member_id
- );
-
- UPDATE project_plings r
- SET r.member_id = to_member_id
- WHERE r.member_id = from_member_id;
-
-
- #Update ppload
-
- IF (SELECT count(1) FROM ppload.ppload_collections pc WHERE pc.owner_id = from_member_id) > 0
-
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ -- ERROR
+ ROLLBACK;
+ END;
+
+ START TRANSACTION;
+
+ #Update table member
+ UPDATE `member` `m`
+ SET `m`.`is_active` = 0
+ , `m`.`is_deleted` = 1
+ , `m`.`deleted_at` = NOW()
+ WHERE `m`.`member_id` = `from_member_id`;
+
+ #Update table member_email
+ UPDATE `member_email` `me`
+ SET `me`.`email_deleted` = 1
+ WHERE `me`.`email_member_id` = `from_member_id`;
+
+ #Update table project
+ INSERT INTO `merge_member_log`
+ (
+ SELECT NULL, 'project', `project_id`, `member_id`, `to_member_id`
+ FROM `project` `p`
+ WHERE `p`.`member_id` = `from_member_id`
+ AND `p`.`type_id` = 1
+ );
+
+ UPDATE `project` `p`
+ SET `p`.`member_id` = `to_member_id`
+ WHERE `p`.`member_id` = `from_member_id`
+ AND `p`.`type_id` = 1;
+
+ #Update table comments
+ INSERT INTO `merge_member_log`
+ (
+ SELECT NULL, 'comments', `comment_id`, `comment_member_id`, `to_member_id`
+ FROM `comments` `c`
+ WHERE `c`.`comment_member_id` = `from_member_id`
+ );
+
+ UPDATE `comments` `c`
+ SET `c`.`comment_member_id` = `to_member_id`
+ WHERE `c`.`comment_member_id` = `from_member_id`;
+
+ #Update table project_follower
+ INSERT INTO `merge_member_log`
+ (
+ SELECT NULL, 'project_follower', `project_follower_id`, `member_id`, `to_member_id`
+ FROM `project_follower` `f`
+ WHERE `f`.`member_id` = `from_member_id`
+ );
+
+ UPDATE `project_follower` `f`
+ SET `f`.`member_id` = `to_member_id`
+ WHERE `f`.`member_id` = `from_member_id`;
+
+ #Update table project_rating
+ INSERT INTO `merge_member_log`
+ (
+ SELECT NULL, 'project_rating', `rating_id`, `member_id`, `to_member_id`
+ FROM `project_rating` `r`
+ WHERE `r`.`member_id` = `from_member_id`
+ );
+
+ UPDATE `project_rating` `r`
+ SET `r`.`member_id` = `to_member_id`
+ WHERE `r`.`member_id` = `from_member_id`;
+
+ #Update table project_plings
+ INSERT INTO `merge_member_log`
+ (
+ SELECT NULL, 'project_plings', `project_plings_id`, `member_id`, `to_member_id`
+ FROM `project_plings` `r`
+ WHERE `r`.`member_id` = `from_member_id`
+ );
+
+ UPDATE `project_plings` `r`
+ SET `r`.`member_id` = `to_member_id`
+ WHERE `r`.`member_id` = `from_member_id`;
+
+
+ #Update ppload
+
+ IF (SELECT count(1) FROM `ppload`.`ppload_collections` `pc` WHERE `pc`.`owner_id` = `from_member_id`) > 0
THEN
- #Update ppload_collections
- INSERT INTO merge_member_log
- (
- SELECT null, 'ppload_collections', pc.id, pc.owner_id, to_member_id
- FROM ppload.ppload_collections pc WHERE pc.owner_id = from_member_id
- );
-
- UPDATE ppload.ppload_collections pc
- SET pc.owner_id = to_member_id
- WHERE pc.owner_id = from_member_id;
-
- #Update ppload_files
- INSERT INTO merge_member_log
- (
- SELECT null, 'ppload_files', pc.id, pc.owner_id, to_member_id
- FROM ppload.ppload_files pc WHERE pc.owner_id = from_member_id
- );
-
- UPDATE ppload.ppload_files pf
- SET pf.owner_id = to_member_id
- WHERE pf.owner_id = from_member_id;
-
- #Update ppload_files_downloaded?
- /*INSERT INTO merge_member_log
- (
- SELECT null, 'ppload_files_downloaded', pc.id, pc.owner_id, to_member_id
- FROM ppload.ppload_files_downloaded pc WHERE pc.owner_id = from_member_id
- );*/
-
- UPDATE ppload.ppload_files_downloaded pfd
- SET pfd.owner_id = to_member_id
- WHERE pfd.owner_id = from_member_id;
-
- /**
- #Update ppload_profiles
- INSERT INTO merge_member_log
- (
- SELECT null, 'ppload_profiles', pc.id, pc.owner_id, to_member_id
- FROM ppload_profiles pc WHERE pc.owner_id = from_member_id
- );
-
- UPDATE ppload.ppload_profiles pp
- SET pp.owner_id = to_member_id
- WHERE pp.owner_id = from_member_id;
- **/
+ #Update ppload_collections
+ INSERT INTO `merge_member_log`
+ (
+ SELECT NULL, 'ppload_collections', `pc`.`id`, `pc`.`owner_id`, `to_member_id`
+ FROM `ppload`.`ppload_collections` `pc`
+ WHERE `pc`.`owner_id` = `from_member_id`
+ );
+
+ UPDATE `ppload`.`ppload_collections` `pc`
+ SET `pc`.`owner_id` = `to_member_id`
+ WHERE `pc`.`owner_id` = `from_member_id`;
+
+ #Update ppload_files
+ INSERT INTO `merge_member_log`
+ (
+ SELECT NULL, 'ppload_files', `pc`.`id`, `pc`.`owner_id`, `to_member_id`
+ FROM `ppload`.`ppload_files` `pc`
+ WHERE `pc`.`owner_id` = `from_member_id`
+ );
+
+ UPDATE `ppload`.`ppload_files` `pf`
+ SET `pf`.`owner_id` = `to_member_id`
+ WHERE `pf`.`owner_id` = `from_member_id`;
+
+ #Update ppload_files_downloaded?
+ /*INSERT INTO merge_member_log
+ (
+ SELECT null, 'ppload_files_downloaded', pc.id, pc.owner_id, to_member_id
+ FROM ppload.ppload_files_downloaded pc WHERE pc.owner_id = from_member_id
+ );*/
+
+ UPDATE `ppload`.`ppload_files_downloaded` `pfd`
+ SET `pfd`.`owner_id` = `to_member_id`
+ WHERE `pfd`.`owner_id` = `from_member_id`;
+
+ /**
+ #Update ppload_profiles
+ INSERT INTO merge_member_log
+ (
+ SELECT null, 'ppload_profiles', pc.id, pc.owner_id, to_member_id
+ FROM ppload_profiles pc WHERE pc.owner_id = from_member_id
+ );
+
+ UPDATE ppload.ppload_profiles pp
+ SET pp.owner_id = to_member_id
+ WHERE pp.owner_id = from_member_id;
+ **/
END IF;
-
-
-
-
- #Write a log entry
- INSERT INTO `activity_log` (`member_id`, `object_id`, `object_ref`, `object_title`, `object_text`, `activity_type_id`, `time`) VALUES ('22', from_member_id, 'member', 'call merge_members', CONCAT('merge member ', from_member_id,' into member ',to_member_id), '321', NOW());
-
-
- COMMIT;
+
+
+ #Write a log entry
+ INSERT INTO `activity_log` (`member_id`, `object_id`, `object_ref`, `object_title`, `object_text`,
+ `activity_type_id`, `time`)
+ VALUES ('22', `from_member_id`, 'member', 'call merge_members',
+ CONCAT('merge member ', `from_member_id`, ' into member ', `to_member_id`), '321', NOW());
+ COMMIT;
END //
DELIMITER ;
diff --git a/sql_code/20180926_member_update.sql b/sql_code/20180926_member_update.sql
index 0cd211a34..7c72ebfc1 100644
--- a/sql_code/20180926_member_update.sql
+++ b/sql_code/20180926_member_update.sql
@@ -1,16 +1,22 @@
-CREATE TABLE `member_avatar_type` (
- `member_avatar_type_id` INT NOT NULL ,
- `title` VARCHAR(45) ,
- PRIMARY KEY (`member_avatar_type_id`));
+CREATE TABLE `member_avatar_type`
+(
+ `member_avatar_type_id` INT NOT NULL,
+ `title` VARCHAR(45),
+ PRIMARY KEY (`member_avatar_type_id`)
+);
-INSERT INTO `member_avatar_type` (`member_avatar_type_id`, `title`) VALUES (0, 'unknow');
-INSERT INTO `member_avatar_type` (`member_avatar_type_id`, `title`) VALUES (1, 'auto generated letter avatar');
-INSERT INTO `member_avatar_type` (`member_avatar_type_id`, `title`) VALUES (2, 'user uploaded');
+INSERT INTO `member_avatar_type` (`member_avatar_type_id`, `title`)
+VALUES (0, 'unknow');
+INSERT INTO `member_avatar_type` (`member_avatar_type_id`, `title`)
+VALUES (1, 'auto generated letter avatar');
+INSERT INTO `member_avatar_type` (`member_avatar_type_id`, `title`)
+VALUES (2, 'user uploaded');
-ALTER TABLE `member`
-ADD COLUMN `avatar_type_id` INT(11) NOT NULL DEFAULT 1 after avatar;
+ALTER TABLE `member`
+ ADD COLUMN `avatar_type_id` INT(11) NOT NULL DEFAULT 1 AFTER `avatar`;
-update member set avatar_type_id = 0;
\ No newline at end of file
+UPDATE `member`
+SET `avatar_type_id` = 0;
\ No newline at end of file
diff --git a/sql_code/20181012_add_git_group.sql b/sql_code/20181012_add_git_group.sql
index abadcbcbc..6a11b3dea 100644
--- a/sql_code/20181012_add_git_group.sql
+++ b/sql_code/20181012_add_git_group.sql
@@ -1,20 +1,20 @@
-CREATE TABLE git_group
+CREATE TABLE `git_group`
(
- git_group_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
- group_name VARCHAR(255),
- group_id INT,
- group_full_path VARCHAR(255)
+ `git_group_id` INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
+ `group_name` VARCHAR(255),
+ `group_id` INT,
+ `group_full_path` VARCHAR(255)
);
-CREATE INDEX git_group__group_id ON git_group (group_id);
+CREATE INDEX `git_group__group_id` ON `git_group` (`group_id`);
-CREATE TABLE git_group_user
+CREATE TABLE `git_group_user`
(
- git_group_user_id INT PRIMARY KEY AUTO_INCREMENT,
- group_id INT,
- user_id INT,
- user_name VARCHAR(255),
- user_email VARCHAR(255),
- group_access VARCHAR(40)
+ `git_group_user_id` INT PRIMARY KEY AUTO_INCREMENT,
+ `group_id` INT,
+ `user_id` INT,
+ `user_name` VARCHAR(255),
+ `user_email` VARCHAR(255),
+ `group_access` VARCHAR(40)
);
-CREATE INDEX git_group_user__email ON git_group_user (user_email);
-CREATE INDEX git_group_user__group_id ON git_group_user (group_id);
\ No newline at end of file
+CREATE INDEX `git_group_user__email` ON `git_group_user` (`user_email`);
+CREATE INDEX `git_group_user__group_id` ON `git_group_user` (`group_id`);
\ No newline at end of file
diff --git a/sql_code/20181019_alter_project_gitlab.sql b/sql_code/20181019_alter_project_gitlab.sql
index 7f6a6f44d..c28724688 100644
--- a/sql_code/20181019_alter_project_gitlab.sql
+++ b/sql_code/20181019_alter_project_gitlab.sql
@@ -1,5 +1,5 @@
ALTER TABLE `project`
- ADD COLUMN `is_gitlab_project` INT(1) NOT NULL DEFAULT '0' AFTER `count_downloads_hive`,
- ADD COLUMN `gitlab_project_id` INT(11) NULL DEFAULT NULL AFTER `is_gitlab_project`,
- ADD COLUMN `show_gitlab_project_issues` INT(1) NOT NULL DEFAULT '0' AFTER `gitlab_project_id`,
- ADD COLUMN `use_gitlab_project_readme` INT(1) NOT NULL DEFAULT '0' AFTER `show_gitlab_project_issues`;
+ ADD COLUMN `is_gitlab_project` INT(1) NOT NULL DEFAULT '0' AFTER `count_downloads_hive`,
+ ADD COLUMN `gitlab_project_id` INT(11) NULL DEFAULT NULL AFTER `is_gitlab_project`,
+ ADD COLUMN `show_gitlab_project_issues` INT(1) NOT NULL DEFAULT '0' AFTER `gitlab_project_id`,
+ ADD COLUMN `use_gitlab_project_readme` INT(1) NOT NULL DEFAULT '0' AFTER `show_gitlab_project_issues`;
diff --git a/sql_code/20181112_member_gitlab_user_id.sql b/sql_code/20181112_member_gitlab_user_id.sql
index 6c54d37e1..8450c0ffb 100644
--- a/sql_code/20181112_member_gitlab_user_id.sql
+++ b/sql_code/20181112_member_gitlab_user_id.sql
@@ -1,2 +1,2 @@
ALTER TABLE `member_external_id`
- ADD COLUMN `gitlab_user_id` INT(1) NULL DEFAULT NULL AFTER `is_deleted`;
+ ADD COLUMN `gitlab_user_id` INT(1) NULL DEFAULT NULL AFTER `is_deleted`;
diff --git a/sql_code/20181119_add_table_stat_projects_source_url.sql b/sql_code/20181119_add_table_stat_projects_source_url.sql
index 04373bf81..ac308fa3d 100644
--- a/sql_code/20181119_add_table_stat_projects_source_url.sql
+++ b/sql_code/20181119_add_table_stat_projects_source_url.sql
@@ -1,26 +1,32 @@
-CREATE DEFINER=`root`@`%` EVENT `e_generate_stat_projects_source_url`
- ON SCHEDULE
- EVERY 5 MINUTE STARTS '2018-11-19 11:57:15'
- ON COMPLETION NOT PRESERVE
- ENABLE
- COMMENT ''
- DO BEGIN
+CREATE DEFINER =`root`@`%` EVENT `e_generate_stat_projects_source_url`
+ ON SCHEDULE
+ EVERY 5 MINUTE STARTS '2018-11-19 11:57:15'
+ ON COMPLETION NOT PRESERVE
+ ENABLE
+ COMMENT ''
+ DO
+ BEGIN
- create table stat_projects_source_url_tmp
- (PRIMARY KEY `primary` (`project_id`)
- ,INDEX `idx_proj` (`project_id`)
- ,INDEX `idx_member` (`member_id`)
- ,INDEX `idx_source_url` (`source_url`(50))
- )
- ENGINE MyISAM
- as
- select p.project_id, p.member_id,TRIM(TRAILING '/' FROM p.source_url) as source_url, p.created_at, p.changed_at from stat_projects p
- where p.source_url is not null
- and p.source_url<>''
- and p.status=100
- ;
- rename table stat_projects_source_url to stat_projects_source_url_old;
- rename table stat_projects_source_url_tmp to stat_projects_source_url;
- drop table stat_projects_source_url_old;
+ CREATE TABLE `stat_projects_source_url_tmp`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_proj` (`project_id`),
+ INDEX `idx_member` (`member_id`),
+ INDEX `idx_source_url` (`source_url`(50))
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `p`.`project_id`,
+ `p`.`member_id`,
+ TRIM(TRAILING '/' FROM `p`.`source_url`) AS `source_url`,
+ `p`.`created_at`,
+ `p`.`changed_at`
+ FROM `stat_projects` `p`
+ WHERE `p`.`source_url` IS NOT NULL
+ AND `p`.`source_url` <> ''
+ AND `p`.`status` = 100;
+ RENAME TABLE `stat_projects_source_url` TO `stat_projects_source_url_old`;
+ RENAME TABLE `stat_projects_source_url_tmp` TO `stat_projects_source_url`;
+ DROP TABLE `stat_projects_source_url_old`;
-END
\ No newline at end of file
+ END
\ No newline at end of file
diff --git a/sql_code/20181119_page_views_48h.sql b/sql_code/20181119_page_views_48h.sql
index 808b8e8dc..fedefbf7a 100644
--- a/sql_code/20181119_page_views_48h.sql
+++ b/sql_code/20181119_page_views_48h.sql
@@ -1,22 +1,29 @@
-CREATE TABLE stat_page_views_48h LIKE stat_page_views;
+CREATE TABLE `stat_page_views_48h` LIKE `stat_page_views`;
DELIMITER $$
-DROP TRIGGER IF EXISTS stat_page_views_AFTER_INSERT$$
-CREATE TRIGGER stat_page_views_AFTER_INSERT AFTER INSERT ON stat_page_views FOR EACH ROW BEGIN
- #insert also into table stat_page_views_48h
- INSERT INTO stat_page_views_48h (stat_page_views_id,project_id,ip,member_id,created_at) values (new.stat_page_views_id,new.project_id,new.ip,new.member_id,new.created_at);
+DROP TRIGGER IF EXISTS `stat_page_views_AFTER_INSERT`$$
+CREATE TRIGGER `stat_page_views_AFTER_INSERT`
+ AFTER INSERT
+ ON `stat_page_views`
+ FOR EACH ROW
+BEGIN
+ #insert also into table stat_page_views_48h
+ INSERT INTO `stat_page_views_48h` (`stat_page_views_id`, `project_id`, `ip`, `member_id`, `created_at`)
+ VALUES (`new`.`stat_page_views_id`, `new`.`project_id`, `new`.`ip`, `new`.`member_id`, `new`.`created_at`);
END$$
DROP EVENT IF EXISTS `e_generate_page_views_48h`;
CREATE EVENT `e_generate_page_views_48h`
- ON SCHEDULE
- EVERY 1 DAY STARTS '2018-11-20 05:00:00'
- ON COMPLETION PRESERVE
- ENABLE
- COMMENT 'Delete old page_view data from table stat_page_views_48h'
- DO
- DELETE FROM stat_page_views_48h WHERE created_at <= subdate(now(), 2);
-
+ ON SCHEDULE
+ EVERY 1 DAY STARTS '2018-11-20 05:00:00'
+ ON COMPLETION PRESERVE
+ ENABLE
+ COMMENT 'Delete old page_view data from table stat_page_views_48h'
+ DO
+ DELETE
+ FROM `stat_page_views_48h`
+ WHERE `created_at` <= subdate(now(), 2);
+
DELIMITER ;
\ No newline at end of file
diff --git a/sql_code/20181129_add_stat_downloads_24h.sql b/sql_code/20181129_add_stat_downloads_24h.sql
index d34c2499c..859a76fba 100644
--- a/sql_code/20181129_add_stat_downloads_24h.sql
+++ b/sql_code/20181129_add_stat_downloads_24h.sql
@@ -1,45 +1,46 @@
-DROP TABLE pling-import.stat_downloads_24h;
+DROP TABLE `pling`-IMPORT.stat_downloads_24h;
-CREATE TABLE pling-import.stat_downloads_24h LIKE ppload.ppload_files_downloaded;
-ALTER TABLE pling-import.`stat_downloads_24h`
- ADD INDEX `idx_collection_id` (`collection_id`);
+CREATE TABLE `pling`- IMPORT.stat_downloads_24h LIKE ppload.ppload_files_downloaded;
+ALTER TABLE `pling`- IMPORT.`stat_downloads_24h`
+ ADD INDEX `idx_collection_id` (`collection_id`);
DELIMITER $$
-DROP TRIGGER IF EXISTS ppload.ppload_files_downloaded_AFTER_INSERT$$
-CREATE TRIGGER ppload.ppload_files_downloaded_AFTER_INSERT AFTER INSERT ON ppload.ppload_files_downloaded FOR EACH ROW BEGIN
- #insert also into table stat_downloads_24h
- INSERT INTO `pling-import`.`stat_downloads_24h` (
- id,
- client_id,
- owner_id,
- collection_id,
- file_id,
- user_id,
- referer,
- downloaded_timestamp,
- downloaded_ip
- ) values (
- new.id,
- new.client_id,
- new.owner_id,
- new.collection_id,
- new.file_id,
- new.user_id,
- new.referer,
- new.downloaded_timestamp,
- new.downloaded_ip
- );
+DROP TRIGGER IF EXISTS `ppload`.`ppload_files_downloaded_AFTER_INSERT`$$
+CREATE TRIGGER `ppload`.`ppload_files_downloaded_AFTER_INSERT`
+ AFTER INSERT
+ ON `ppload`.`ppload_files_downloaded`
+ FOR EACH ROW
+BEGIN
+ #insert also into table stat_downloads_24h
+ INSERT INTO `pling-import`.`stat_downloads_24h` (`id`,
+ `client_id`,
+ `owner_id`,
+ `collection_id`,
+ `file_id`,
+ `user_id`,
+ `referer`,
+ `downloaded_timestamp`,
+ `downloaded_ip`)
+ VALUES (`new`.`id`,
+ `new`.`client_id`,
+ `new`.`owner_id`,
+ `new`.`collection_id`,
+ `new`.`file_id`,
+ `new`.`user_id`,
+ `new`.`referer`,
+ `new`.`downloaded_timestamp`,
+ `new`.`downloaded_ip`);
END$$
-
+
DELIMITER ;
DROP EVENT IF EXISTS `e_generate_stat_downloads_24h`;
CREATE EVENT `e_generate_stat_downloads_24h`
- ON SCHEDULE
- EVERY 1 DAY STARTS '2018-11-30 01:00:00'
- ON COMPLETION PRESERVE
- ENABLE
- COMMENT 'Save download data for the last 24h into table stat_downloads_24h'
- DO
- TRUNCATE TABLE stat_downloads_24h;
\ No newline at end of file
+ ON SCHEDULE
+ EVERY 1 DAY STARTS '2018-11-30 01:00:00'
+ ON COMPLETION PRESERVE
+ ENABLE
+ COMMENT 'Save download data for the last 24h into table stat_downloads_24h'
+ DO
+ TRUNCATE TABLE `stat_downloads_24h`;
\ No newline at end of file
diff --git a/sql_code/20181205_member_deactivate_log.sql b/sql_code/20181205_member_deactivate_log.sql
index 9563b65ff..33ae80f8a 100644
--- a/sql_code/20181205_member_deactivate_log.sql
+++ b/sql_code/20181205_member_deactivate_log.sql
@@ -1,38 +1,48 @@
DROP TABLE IF EXISTS `member_deactivation_log`;
-CREATE TABLE `member_deactivation_log` (
- `log_id` INT NOT NULL AUTO_INCREMENT,
- `deactivation_id` INT NOT NULL DEFAULT '0' COMMENT 'Id of the deactivation',
- `object_type_id` INT NOT NULL DEFAULT '0',
- `object_id` INT NOT NULL DEFAULT '0',
- `member_id` INT NOT NULL DEFAULT '0' COMMENT 'Member was deactivated from this user',
- `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`log_id`)
+CREATE TABLE `member_deactivation_log`
+(
+ `log_id` INT NOT NULL AUTO_INCREMENT,
+ `deactivation_id` INT NOT NULL DEFAULT '0' COMMENT 'Id of the deactivation',
+ `object_type_id` INT NOT NULL DEFAULT '0',
+ `object_id` INT NOT NULL DEFAULT '0',
+ `member_id` INT NOT NULL DEFAULT '0' COMMENT 'Member was deactivated from this user',
+ `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ PRIMARY KEY (`log_id`)
)
-COLLATE='utf8_general_ci'
+ COLLATE = 'utf8_general_ci'
;
DROP TABLE IF EXISTS `member_deactivation_object_types`;
-CREATE TABLE `member_deactivation_object_types` (
- `object_type_id` INT NULL,
- `object_system` VARCHAR(50) NULL,
- `object_name` VARCHAR(50) NULL,
- PRIMARY KEY (`object_type_id`)
+CREATE TABLE `member_deactivation_object_types`
+(
+ `object_type_id` INT NULL,
+ `object_system` VARCHAR(50) NULL,
+ `object_name` VARCHAR(50) NULL,
+ PRIMARY KEY (`object_type_id`)
)
-COLLATE='utf8_general_ci'
+ COLLATE = 'utf8_general_ci'
;
-INSERT INTO member_deactivation_object_types (`object_type_id`,`object_system`,`object_name`) VALUES (1,'opendesktop','member');
-INSERT INTO member_deactivation_object_types (`object_type_id`,`object_system`,`object_name`) VALUES (2,'opendesktop','member_email');
-INSERT INTO member_deactivation_object_types (`object_type_id`,`object_system`,`object_name`) VALUES (3,'opendesktop','project');
-INSERT INTO member_deactivation_object_types (`object_type_id`,`object_system`,`object_name`) VALUES (4,'opendesktop','comments');
+INSERT INTO `member_deactivation_object_types` (`object_type_id`, `object_system`, `object_name`)
+VALUES (1, 'opendesktop', 'member');
+INSERT INTO `member_deactivation_object_types` (`object_type_id`, `object_system`, `object_name`)
+VALUES (2, 'opendesktop', 'member_email');
+INSERT INTO `member_deactivation_object_types` (`object_type_id`, `object_system`, `object_name`)
+VALUES (3, 'opendesktop', 'project');
+INSERT INTO `member_deactivation_object_types` (`object_type_id`, `object_system`, `object_name`)
+VALUES (4, 'opendesktop', 'comments');
-INSERT INTO member_deactivation_object_types (`object_type_id`,`object_system`,`object_name`) VALUES (20,'gitlab','user');
-INSERT INTO member_deactivation_object_types (`object_type_id`,`object_system`,`object_name`) VALUES (21,'gitlab','project');
+INSERT INTO `member_deactivation_object_types` (`object_type_id`, `object_system`, `object_name`)
+VALUES (20, 'gitlab', 'user');
+INSERT INTO `member_deactivation_object_types` (`object_type_id`, `object_system`, `object_name`)
+VALUES (21, 'gitlab', 'project');
-INSERT INTO member_deactivation_object_types (`object_type_id`,`object_system`,`object_name`) VALUES (30,'discourse','user');
-INSERT INTO member_deactivation_object_types (`object_type_id`,`object_system`,`object_name`) VALUES (31,'discourse','topic');
+INSERT INTO `member_deactivation_object_types` (`object_type_id`, `object_system`, `object_name`)
+VALUES (30, 'discourse', 'user');
+INSERT INTO `member_deactivation_object_types` (`object_type_id`, `object_system`, `object_name`)
+VALUES (31, 'discourse', 'topic');
ALTER TABLE `member_deactivation_log`
- ADD COLUMN `is_deleted` INT NULL DEFAULT '0' COMMENT 'Is the user undeleted -> is_deleted = 1' AFTER `created_at`,
- ADD COLUMN `deleted_at` TIMESTAMP NULL AFTER `is_deleted`;
+ ADD COLUMN `is_deleted` INT NULL DEFAULT '0' COMMENT 'Is the user undeleted -> is_deleted = 1' AFTER `created_at`,
+ ADD COLUMN `deleted_at` TIMESTAMP NULL AFTER `is_deleted`;
diff --git a/sql_code/20181214_dactivation_log.sql b/sql_code/20181214_dactivation_log.sql
index db854fa6d..054a643fc 100644
--- a/sql_code/20181214_dactivation_log.sql
+++ b/sql_code/20181214_dactivation_log.sql
@@ -1,2 +1,2 @@
ALTER TABLE `member_deactivation_log`
- ADD COLUMN `object_data` MEDIUMTEXT NULL DEFAULT NULL AFTER `deleted_at`;
+ ADD COLUMN `object_data` MEDIUMTEXT NULL DEFAULT NULL AFTER `deleted_at`;
diff --git a/sql_code/20181218_category_taggroup.sql b/sql_code/20181218_category_taggroup.sql
index f5184c1ec..e41435bc4 100644
--- a/sql_code/20181218_category_taggroup.sql
+++ b/sql_code/20181218_category_taggroup.sql
@@ -1,8 +1,8 @@
-
-CREATE TABLE `category_tag_group` (
- `category_id` INT(11) NOT NULL,
- `tag_group_id` INT(11) NOT NULL
+CREATE TABLE `category_tag_group`
+(
+ `category_id` INT(11) NOT NULL,
+ `tag_group_id` INT(11) NOT NULL
)
-COLLATE='latin1_swedish_ci'
-ENGINE=InnoDB
+ COLLATE = 'latin1_swedish_ci'
+ ENGINE = InnoDB
;
\ No newline at end of file
diff --git a/sql_code/20190104_add_suspicious_table.sql b/sql_code/20190104_add_suspicious_table.sql
index 8586080b5..9f72ff6e3 100644
--- a/sql_code/20190104_add_suspicious_table.sql
+++ b/sql_code/20190104_add_suspicious_table.sql
@@ -1,13 +1,15 @@
-CREATE TABLE IF NOT EXISTS `suspicion_log` (
- `suspicion_id` INT NOT NULL AUTO_INCREMENT,
- `project_id` INT(11) NOT NULL,
- `member_id` INT(11) NOT NULL,
- `http_referer` VARCHAR(255) NULL,
- `http_origin` VARCHAR(255) NULL,
- `client_ip` VARCHAR(45) NULL,
- `user_agent` VARCHAR(255) NULL,
- `suspicious` INT(1) NULL DEFAULT 0,
- PRIMARY KEY (`suspicion_id`),
- INDEX `idxProject` (`project_id` ASC),
- INDEX `idxMember` (`member_id` ASC))
- ENGINE = MyISAM;
\ No newline at end of file
+CREATE TABLE IF NOT EXISTS `suspicion_log`
+(
+ `suspicion_id` INT NOT NULL AUTO_INCREMENT,
+ `project_id` INT(11) NOT NULL,
+ `member_id` INT(11) NOT NULL,
+ `http_referer` VARCHAR(255) NULL,
+ `http_origin` VARCHAR(255) NULL,
+ `client_ip` VARCHAR(45) NULL,
+ `user_agent` VARCHAR(255) NULL,
+ `suspicious` INT(1) NULL DEFAULT 0,
+ PRIMARY KEY (`suspicion_id`),
+ INDEX `idxProject` (`project_id` ASC),
+ INDEX `idxMember` (`member_id` ASC)
+)
+ ENGINE = MyISAM;
\ No newline at end of file
diff --git a/sql_code/20190110_add_table_spam_keywords.sql b/sql_code/20190110_add_table_spam_keywords.sql
index ce7634bbb..825cc2ac1 100644
--- a/sql_code/20190110_add_table_spam_keywords.sql
+++ b/sql_code/20190110_add_table_spam_keywords.sql
@@ -1,46 +1,72 @@
-USE `pling`;
+
DROP TABLE IF EXISTS `spam_keywords`;
-CREATE TABLE `spam_keywords` (
- `spam_key_id` INT NOT NULL AUTO_INCREMENT,
- `spam_key_word` VARCHAR(45) NOT NULL,
- `spam_key_created_at` DATETIME NULL,
- `spam_key_is_deleted` INT(1) NULL DEFAULT 0,
- `spam_key_is_active` INT(1) NULL DEFAULT 1,
- PRIMARY KEY (`spam_key_id`))
- ENGINE = InnoDB;
+CREATE TABLE `spam_keywords`
+(
+ `spam_key_id` INT NOT NULL AUTO_INCREMENT,
+ `spam_key_word` VARCHAR(45) NOT NULL,
+ `spam_key_created_at` DATETIME NULL,
+ `spam_key_is_deleted` INT(1) NULL DEFAULT 0,
+ `spam_key_is_active` INT(1) NULL DEFAULT 1,
+ PRIMARY KEY (`spam_key_id`)
+)
+ ENGINE = InnoDB;
DROP TRIGGER IF EXISTS `spam_keywords_BEFORE_INSERT`;
DELIMITER $$
-CREATE DEFINER = CURRENT_USER TRIGGER `spam_keywords_BEFORE_INSERT` BEFORE INSERT ON `spam_keywords` FOR EACH ROW
- BEGIN
- IF NEW.spam_key_created_at IS NULL THEN
- SET NEW.spam_key_created_at = NOW();
+CREATE DEFINER = CURRENT_USER TRIGGER `spam_keywords_BEFORE_INSERT`
+ BEFORE INSERT
+ ON `spam_keywords`
+ FOR EACH ROW
+BEGIN
+ IF `NEW`.`spam_key_created_at` IS NULL THEN
+ SET `NEW`.`spam_key_created_at` = NOW();
END IF;
- END$$
+END$$
DELIMITER ;
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('keto');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('spartan');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('ingredient');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('rdx surge');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('vashikaran');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('muscles');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('viagra');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('s3xual');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('erection');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('praltrix');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('s3x');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('herpes');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('male enhancement');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('astrology');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('megashare');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('body weight');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('diet');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('foreskin');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('fat loss');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('cream');
-INSERT INTO `spam_keywords` (`spam_key_word`) VALUES ('healthy');
\ No newline at end of file
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('keto');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('spartan');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('ingredient');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('rdx surge');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('vashikaran');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('muscles');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('viagra');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('s3xual');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('erection');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('praltrix');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('s3x');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('herpes');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('male enhancement');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('astrology');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('megashare');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('body weight');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('diet');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('foreskin');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('fat loss');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('cream');
+INSERT INTO `spam_keywords` (`spam_key_word`)
+VALUES ('healthy');
\ No newline at end of file
diff --git a/sql_code/20190110_store_config_show_git.sql b/sql_code/20190110_store_config_show_git.sql
index 2471e4f04..d6bed654e 100644
--- a/sql_code/20190110_store_config_show_git.sql
+++ b/sql_code/20190110_store_config_show_git.sql
@@ -1,2 +1,2 @@
ALTER TABLE `config_store`
- ADD COLUMN `is_show_git_projects` INT(1) NULL DEFAULT '1' COMMENT 'Should the latest Git-Projects-Section been shown?' AFTER `is_show_home`;
+ ADD COLUMN `is_show_git_projects` INT(1) NULL DEFAULT '1' COMMENT 'Should the latest Git-Projects-Section been shown?' AFTER `is_show_home`;
diff --git a/sql_code/20190115_stat_cnt_projects_catid_memberid.sql b/sql_code/20190115_stat_cnt_projects_catid_memberid.sql
index 33bce56e0..694e360d9 100644
--- a/sql_code/20190115_stat_cnt_projects_catid_memberid.sql
+++ b/sql_code/20190115_stat_cnt_projects_catid_memberid.sql
@@ -1,39 +1,46 @@
-create table stat_cnt_projects_catid_memberid as
-select project_category_id, member_id,count(1) as cnt from project pp
-where pp.status = 100 and pp.type_id = 1
-group by project_category_id,member_id;
+CREATE TABLE `stat_cnt_projects_catid_memberid` AS
+SELECT `project_category_id`, `member_id`, count(1) AS `cnt`
+FROM `project` `pp`
+WHERE `pp`.`status` = 100
+ AND `pp`.`type_id` = 1
+GROUP BY `project_category_id`, `member_id`;
ALTER TABLE `stat_cnt_projects_catid_memberid`
- ADD INDEX `idx_project_category_id` (`project_category_id`),
- ADD INDEX `idx_member_id` (`member_id`);
+ ADD INDEX `idx_project_category_id` (`project_category_id`),
+ ADD INDEX `idx_member_id` (`member_id`);
-
-TRUNCATE TABLE stat_cnt_projects_catid_memberid;
-INSERT INTO stat_cnt_projects_catid_memberid
-select project_category_id, member_id,count(1) as cnt from project pp
-where pp.status = 100 and pp.type_id = 1
-group by project_category_id,member_id;
+TRUNCATE TABLE `stat_cnt_projects_catid_memberid`;
+
+INSERT INTO `stat_cnt_projects_catid_memberid`
+SELECT `project_category_id`, `member_id`, count(1) AS `cnt`
+FROM `project` `pp`
+WHERE `pp`.`status` = 100
+ AND `pp`.`type_id` = 1
+GROUP BY `project_category_id`, `member_id`;
CREATE EVENT `e_generate_stat_cnt_projects_catid_memberid`
- ON SCHEDULE
- EVERY 1 DAY STARTS '2019-01-15 03:30:00'
- ON COMPLETION NOT PRESERVE
- ENABLE
- COMMENT ''
- DO BEGIN
- TRUNCATE TABLE stat_cnt_projects_catid_memberid;
-
- INSERT INTO stat_cnt_projects_catid_memberid
- select project_category_id, member_id,count(1) as cnt from project pp
- where pp.status = 100 and pp.type_id = 1
- group by project_category_id,member_id;
-
-END;
+ ON SCHEDULE
+ EVERY 1 DAY STARTS '2019-01-15 03:30:00'
+ ON COMPLETION NOT PRESERVE
+ ENABLE
+ COMMENT ''
+ DO
+ BEGIN
+ TRUNCATE TABLE `stat_cnt_projects_catid_memberid`;
+
+ INSERT INTO `stat_cnt_projects_catid_memberid`
+ SELECT `project_category_id`, `member_id`, count(1) AS `cnt`
+ FROM `project` `pp`
+ WHERE `pp`.`status` = 100
+ AND `pp`.`type_id` = 1
+ GROUP BY `project_category_id`, `member_id`;
+
+ END;
diff --git a/sql_code/20190121_add_tag_group_display_name.sql b/sql_code/20190121_add_tag_group_display_name.sql
index 2c5c3e4ef..b027873aa 100644
--- a/sql_code/20190121_add_tag_group_display_name.sql
+++ b/sql_code/20190121_add_tag_group_display_name.sql
@@ -1,11 +1,21 @@
ALTER TABLE `tag_group`
- ADD COLUMN `group_display_name` VARCHAR(255) NOT NULL AFTER `group_name`;
+ ADD COLUMN `group_display_name` VARCHAR(255) NOT NULL AFTER `group_name`;
ALTER TABLE `tag_group`
- ADD COLUMN `group_legacy_name` VARCHAR(45) NOT NULL AFTER `group_display_name`;
+ ADD COLUMN `group_legacy_name` VARCHAR(45) NOT NULL AFTER `group_display_name`;
-UPDATE `pling-import`.`tag_group` SET `group_display_name`='Packagetype' WHERE `group_id`=8;
-UPDATE `pling-import`.`tag_group` SET `group_display_name`='Architecture' WHERE `group_id`=9;
+UPDATE `pling-import`.`tag_group`
+SET `group_display_name`='Packagetype'
+WHERE `group_id` = 8;
+UPDATE `pling-import`.`tag_group`
+SET `group_display_name`='Architecture'
+WHERE `group_id` = 9;
-UPDATE `pling-import`.`tag_group` SET `group_legacy_name`='license' WHERE `group_id`=7;
-UPDATE `pling-import`.`tag_group` SET `group_legacy_name`='packagetype' WHERE `group_id`=8;
-UPDATE `pling-import`.`tag_group` SET `group_legacy_name`='architecture' WHERE `group_id`=9;
+UPDATE `pling-import`.`tag_group`
+SET `group_legacy_name`='license'
+WHERE `group_id` = 7;
+UPDATE `pling-import`.`tag_group`
+SET `group_legacy_name`='packagetype'
+WHERE `group_id` = 8;
+UPDATE `pling-import`.`tag_group`
+SET `group_legacy_name`='architecture'
+WHERE `group_id` = 9;
diff --git a/sql_code/20190123_add_proc_stat_project_tagids.sql b/sql_code/20190123_add_proc_stat_project_tagids.sql
index f2e1f620c..0aba3a6c4 100644
--- a/sql_code/20190123_add_proc_stat_project_tagids.sql
+++ b/sql_code/20190123_add_proc_stat_project_tagids.sql
@@ -1,44 +1,47 @@
-DROP PROCEDURE IF EXISTS generate_stat_project_ids;
+DROP PROCEDURE IF EXISTS `generate_stat_project_ids`;
DELIMITER $$
CREATE PROCEDURE `generate_stat_project_ids`()
BEGIN
- DROP TABLE IF EXISTS tmp_stat_project_tagids;
- CREATE TABLE tmp_stat_project_tagids
- (INDEX `idx_tag_id` (`tag_id`),INDEX `idx_project_id` (`project_id`))
- ENGINE MyISAM
- AS
-
- select distinct tag_id, project_id from (
-
- select distinct tag.tag_id, tgo.tag_object_id AS project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1 #project
- AND tgo.is_deleted = 0
- UNION ALL
- select distinct tag.tag_id, tgo.tag_parent_object_id AS project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- JOIN ppload.ppload_files files ON files.id = tgo.tag_object_id
- WHERE tag_type_id = 3 #file
- AND files.active = 1
- AND tgo.is_deleted = 0
- ) A
- ;
- RENAME TABLE stat_project_tagids TO old_stat_project_tagids, tmp_stat_project_tagids TO stat_project_tagids;
- DROP TABLE IF EXISTS old_stat_project_tagids;
+ DROP TABLE IF EXISTS `tmp_stat_project_tagids`;
+ CREATE TABLE `tmp_stat_project_tagids`
+ (
+ INDEX `idx_tag_id` (`tag_id`),
+ INDEX `idx_project_id` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+
+ SELECT DISTINCT `tag_id`, `project_id`
+ FROM (
+ SELECT DISTINCT `tag`.`tag_id`, `tgo`.`tag_object_id` AS `project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1 #project
+ AND `tgo`.`is_deleted` = 0
+ UNION ALL
+ SELECT DISTINCT `tag`.`tag_id`, `tgo`.`tag_parent_object_id` AS `project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `tgo`.`tag_object_id`
+ WHERE `tag_type_id` = 3 #file
+ AND `files`.`active` = 1
+ AND `tgo`.`is_deleted` = 0
+ ) `A`;
+ RENAME TABLE `stat_project_tagids` TO `old_stat_project_tagids`, `tmp_stat_project_tagids` TO `stat_project_tagids`;
+ DROP TABLE IF EXISTS `old_stat_project_tagids`;
END$$
DELIMITER ;
CREATE EVENT `e_generate_stat_project_ids`
- ON SCHEDULE
- EVERY 15 MINUTE STARTS '2019-01-23 15:43:00'
- ON COMPLETION NOT PRESERVE
- ENABLE
- COMMENT ''
- DO BEGIN
- CALL generate_stat_project_ids();
-END
\ No newline at end of file
+ ON SCHEDULE
+ EVERY 15 MINUTE STARTS '2019-01-23 15:43:00'
+ ON COMPLETION NOT PRESERVE
+ ENABLE
+ COMMENT ''
+ DO
+ BEGIN
+ CALL generate_stat_project_ids();
+ END
\ No newline at end of file
diff --git a/sql_code/20190123_add_stored_prod_for tags.sql b/sql_code/20190123_add_stored_prod_for tags.sql
index 42cd236f1..b72f467c2 100644
--- a/sql_code/20190123_add_stored_prod_for tags.sql
+++ b/sql_code/20190123_add_stored_prod_for tags.sql
@@ -1,34 +1,50 @@
USE `pling-import`;
-DROP procedure IF EXISTS `fetchCatTreeWithTags`;
+DROP PROCEDURE IF EXISTS `fetchCatTreeWithTags`;
DELIMITER $$
USE `pling-import`$$
-CREATE DEFINER=CURRENT_USER PROCEDURE `fetchCatTreeWithTags`(IN STORE_ID int(11), IN TAGS VARCHAR(255))
- BEGIN
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `fetchCatTreeWithTags`(IN `STORE_ID` int(11), IN `TAGS` VARCHAR(255))
+BEGIN
DROP TABLE IF EXISTS `tmp_store_cat_tags`;
CREATE TEMPORARY TABLE `tmp_store_cat_tags`
- (INDEX `idx_cat_id` (`project_category_id`) )
- ENGINE MEMORY
- AS
- SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
- FROM `config_store_category` AS `csc`
- JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
- WHERE `csc`.`store_id` = STORE_ID
- GROUP BY `csc`.`store_category_id`
- ORDER BY `csc`.`order`, `pc`.`title`
- ;
+ (
+ INDEX `idx_cat_id` (`project_category_id`)
+ )
+ ENGINE MEMORY
+ AS
+ SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
+ FROM `config_store_category` AS `csc`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
+ WHERE `csc`.`store_id` = `STORE_ID`
+ GROUP BY `csc`.`store_category_id`
+ ORDER BY `csc`.`order`, `pc`.`title`;
- SET @NEW_ORDER := 0;
+ SET @`NEW_ORDER` := 0;
- UPDATE `tmp_store_cat_tags` SET `order` = (@NEW_ORDER := @NEW_ORDER + 10);
+ UPDATE `tmp_store_cat_tags` SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10);
- SELECT `sct`.`lft`, `sct`.`rgt`, `sct`.`project_category_id` AS `id`, `sct`.`title`, `scpc`.`count_product` AS `product_count`, `sct`.`xdg_type`, `sct`.`name_legacy`, if(`sct`.`rgt`-`sct`.`lft` = 1, 0, 1) AS `has_children`, (SELECT `project_category_id` FROM `stat_cat_tree` AS `sct2` WHERE `sct2`.`lft` < `sct`.`lft` AND `sct2`.`rgt` > `sct`.`rgt` ORDER BY `sct2`.`rgt` - `sct`.`rgt` LIMIT 1) AS `parent_id`
+ SELECT `sct`.`lft`,
+ `sct`.`rgt`,
+ `sct`.`project_category_id` AS `id`,
+ `sct`.`title`,
+ `scpc`.`count_product` AS `product_count`,
+ `sct`.`xdg_type`,
+ `sct`.`name_legacy`,
+ if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
+ (SELECT `project_category_id`
+ FROM `stat_cat_tree` AS `sct2`
+ WHERE `sct2`.`lft` < `sct`.`lft`
+ AND `sct2`.`rgt` > `sct`.`rgt`
+ ORDER BY `sct2`.`rgt` - `sct`.`rgt`
+ LIMIT 1) AS `parent_id`
FROM `tmp_store_cat_tags` AS `cfc`
- JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
- JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND FIND_IN_SET(`scpc`.`package_type_id`,TAGS)
- WHERE `cfc`.`store_id` = STORE_ID
+ JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND
+ FIND_IN_SET(`scpc`.`package_type_id`, `TAGS`)
+ WHERE `cfc`.`store_id` = `STORE_ID`
ORDER BY `cfc`.`order`, `sct`.`lft`;
- END$$
+END$$
DELIMITER ;
diff --git a/sql_code/20190123_add_table_config_store_tag.sql b/sql_code/20190123_add_table_config_store_tag.sql
index 16e2ce300..14dac201e 100644
--- a/sql_code/20190123_add_table_config_store_tag.sql
+++ b/sql_code/20190123_add_table_config_store_tag.sql
@@ -1,35 +1,39 @@
-CREATE TABLE `config_store_tag` (
- `config_store_tag_id` INT(11) NOT NULL AUTO_INCREMENT,
- `store_id` INT(11) NOT NULL,
- `tag_id` INT(11) NOT NULL,
- `is_active` INT(1) UNSIGNED NOT NULL DEFAULT '1',
- `created_at` DATETIME NULL DEFAULT NULL,
- `changed_at` DATETIME NULL DEFAULT NULL,
- `deleted_at` DATETIME NULL DEFAULT NULL,
- PRIMARY KEY (`config_store_tag_id`)
+CREATE TABLE `config_store_tag`
+(
+ `config_store_tag_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `store_id` INT(11) NOT NULL,
+ `tag_id` INT(11) NOT NULL,
+ `is_active` INT(1) UNSIGNED NOT NULL DEFAULT '1',
+ `created_at` DATETIME NULL DEFAULT NULL,
+ `changed_at` DATETIME NULL DEFAULT NULL,
+ `deleted_at` DATETIME NULL DEFAULT NULL,
+ PRIMARY KEY (`config_store_tag_id`)
)
;
-CREATE TRIGGER `config_store_tag_before_insert` BEFORE INSERT ON `config_store_tag` FOR EACH ROW BEGIN
- IF NEW.created_at IS NULL THEN
- SET NEW.created_at = NOW();
+CREATE TRIGGER `config_store_tag_before_insert`
+ BEFORE INSERT
+ ON `config_store_tag`
+ FOR EACH ROW
+BEGIN
+ IF `NEW`.`created_at` IS NULL THEN
+ SET `NEW`.`created_at` = NOW();
END IF;
END;
-insert into config_store_tag
+INSERT INTO `config_store_tag`
-select
-null as `config_store_tag_id`,
- s.store_id as `store_id`,
- s.package_type as `tag_id`,
- 1 as `is_active`,
- null as `created_at`,
- null as `changed_at`,
- null as `deleted_at`
-from config_store s
-where s.package_type is not null;
+SELECT NULL AS `config_store_tag_id`,
+ `s`.`store_id` AS `store_id`,
+ `s`.`package_type` AS `tag_id`,
+ 1 AS `is_active`,
+ NULL AS `created_at`,
+ NULL AS `changed_at`,
+ NULL AS `deleted_at`
+FROM `config_store` `s`
+WHERE `s`.`package_type` IS NOT NULL;
diff --git a/sql_code/20190124_add_table_member_setting.sql b/sql_code/20190124_add_table_member_setting.sql
index 8600f14c6..ae924d0c9 100644
--- a/sql_code/20190124_add_table_member_setting.sql
+++ b/sql_code/20190124_add_table_member_setting.sql
@@ -1,24 +1,29 @@
+CREATE TABLE `member_setting_group`
+(
+ `member_setting_group_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `title` VARCHAR(45) NOT NULL,
+ PRIMARY KEY (`member_setting_group_id`)
+);
-CREATE TABLE `member_setting_group` (
- `member_setting_group_id` INT(11) NOT NULL AUTO_INCREMENT,
- `title` VARCHAR(45) NOT NULL,
- PRIMARY KEY (`member_setting_group_id`));
+CREATE TABLE `member_setting_item`
+(
+ `member_setting_item_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `title` VARCHAR(45) NOT NULL,
+ `member_setting_group_id` INT(11) NOT NULL,
+ PRIMARY KEY (`member_setting_item_id`)
+);
-CREATE TABLE `member_setting_item` (
- `member_setting_item_id` INT(11) NOT NULL AUTO_INCREMENT,
- `title` VARCHAR(45) NOT NULL,
- `member_setting_group_id` INT(11) NOT NULL,
- PRIMARY KEY (`member_setting_item_id`));
-
-CREATE TABLE `member_setting_value` (
- `member_setting_value_id` INT(11) NOT NULL AUTO_INCREMENT,
- `member_setting_item_id` INT(11) NOT NULL,
- `value` VARCHAR(100) NOT NULL,
- `member_id` INT(11) NOT NULL,
- `created_at` TIMESTAMP NOT NULL DEFAULT now(),
- `changed_at` DATETIME NULL DEFAULT NULL,
- `deleted_at` DATETIME NULL DEFAULT NULL,
- `is_active` INT(1) NOT NULL DEFAULT 1,
- PRIMARY KEY (`member_setting_value_id`));
+CREATE TABLE `member_setting_value`
+(
+ `member_setting_value_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `member_setting_item_id` INT(11) NOT NULL,
+ `value` VARCHAR(100) NOT NULL,
+ `member_id` INT(11) NOT NULL,
+ `created_at` TIMESTAMP NOT NULL DEFAULT now(),
+ `changed_at` DATETIME NULL DEFAULT NULL,
+ `deleted_at` DATETIME NULL DEFAULT NULL,
+ `is_active` INT(1) NOT NULL DEFAULT 1,
+ PRIMARY KEY (`member_setting_value_id`)
+);
diff --git a/sql_code/20190125_change_stat_cat_prod_count.sql b/sql_code/20190125_change_stat_cat_prod_count.sql
index 427df6948..4c59d24d3 100644
--- a/sql_code/20190125_change_stat_cat_prod_count.sql
+++ b/sql_code/20190125_change_stat_cat_prod_count.sql
@@ -1,400 +1,401 @@
DROP PROCEDURE IF EXISTS `generate_stat_cat_prod_count`;
DELIMITER $$
CREATE PROCEDURE `generate_stat_cat_prod_count`()
BEGIN
- DROP TABLE IF EXISTS tmp_stat_cat_prod_count;
- CREATE TABLE tmp_stat_cat_prod_count
+ DROP TABLE IF EXISTS `tmp_stat_cat_prod_count`;
+ CREATE TABLE `tmp_stat_cat_prod_count`
(
- `project_category_id` int(11) NOT NULL,
- `tag_id` int(11) NULL,
- `count_product` int(11) NULL,
- INDEX `idx_tag` (`project_category_id`,`tag_id`)
+ `project_category_id` int(11) NOT NULL,
+ `tag_id` int(11) NULL,
+ `count_product` int(11) NULL,
+ INDEX `idx_tag` (`project_category_id`, `tag_id`)
)
- ENGINE Memory
- AS
- SELECT
- sct2.project_category_id,
- NULL as tag_id,
- count(distinct p.project_id) as count_product
- FROM stat_cat_tree as sct1
- JOIN stat_cat_tree as sct2 ON sct1.lft between sct2.lft AND sct2.rgt
- LEFT JOIN stat_projects as p ON p.project_category_id = sct1.project_category_id
- WHERE p.amount_reports is null
- GROUP BY sct2.project_category_id
-
- UNION
-
- SELECT
- sct2.project_category_id,
- tg.tag_ids as tag_id,
- count(distinct p.project_id) as count_product
- FROM stat_cat_tree as sct1
- JOIN stat_cat_tree as sct2 ON sct1.lft between sct2.lft AND sct2.rgt
- JOIN stat_projects as p ON p.project_category_id = sct1.project_category_id
- JOIN (select cs.store_id, GROUP_CONCAT(ct.tag_id) as tag_ids from config_store cs
- join config_store_tag ct on ct.store_id = cs.store_id and ct.is_active = 1
- group by cs.store_id) tg
- JOIN (
-
- SELECT DISTINCT project_id,tag_ids
- FROM stat_project_tagids
- JOIN (select cs.store_id, GROUP_CONCAT(ct.tag_id) as tag_ids from config_store cs
- join config_store_tag ct on ct.store_id = cs.store_id and ct.is_active = 1
- group by cs.store_id) tg WHERE tag_id in (tg.tag_ids)
-
-
- ) AS store_tags ON p.project_id = store_tags.project_id AND store_tags.tag_ids = tg.tag_ids
- JOIN tag_object AS ppt ON
- ((ppt.tag_parent_object_id = p.project_id AND ppt.tag_type_id = 3) OR (ppt.tag_object_id = p.project_id) ) AND ppt.is_deleted = 0
- JOIN ppload.ppload_files AS files ON files.id = ppt.tag_object_id AND files.active = 1
- WHERE p.amount_reports is null
- GROUP BY sct2.lft, tg.tag_ids
- ;
-
- IF EXISTS(SELECT table_name
- FROM INFORMATION_SCHEMA.TABLES
- WHERE table_schema = DATABASE()
- AND table_name = 'stat_cat_prod_count')
-
+ ENGINE MEMORY
+ AS
+ SELECT `sct2`.`project_category_id`,
+ NULL AS `tag_id`,
+ count(DISTINCT `p`.`project_id`) AS `count_product`
+ FROM `stat_cat_tree` AS `sct1`
+ JOIN `stat_cat_tree` AS `sct2` ON `sct1`.`lft` BETWEEN `sct2`.`lft` AND `sct2`.`rgt`
+ LEFT JOIN `stat_projects` AS `p` ON `p`.`project_category_id` = `sct1`.`project_category_id`
+ WHERE `p`.`amount_reports` IS NULL
+ GROUP BY `sct2`.`project_category_id`
+
+ UNION
+
+ SELECT `sct2`.`project_category_id`,
+ `tg`.`tag_ids` AS `tag_id`,
+ count(DISTINCT `p`.`project_id`) AS `count_product`
+ FROM `stat_cat_tree` AS `sct1`
+ JOIN `stat_cat_tree` AS `sct2` ON `sct1`.`lft` BETWEEN `sct2`.`lft` AND `sct2`.`rgt`
+ JOIN `stat_projects` AS `p` ON `p`.`project_category_id` = `sct1`.`project_category_id`
+ JOIN (SELECT `cs`.`store_id`, GROUP_CONCAT(`ct`.`tag_id`) AS `tag_ids`
+ FROM `config_store` `cs`
+ JOIN `config_store_tag` `ct` ON `ct`.`store_id` = `cs`.`store_id` AND `ct`.`is_active` = 1
+ GROUP BY `cs`.`store_id`) `tg`
+ JOIN (
+ SELECT DISTINCT `project_id`, `tag_ids`
+ FROM `stat_project_tagids`
+ JOIN (SELECT `cs`.`store_id`, GROUP_CONCAT(`ct`.`tag_id`) AS `tag_ids`
+ FROM `config_store` `cs`
+ JOIN `config_store_tag` `ct`
+ ON `ct`.`store_id` = `cs`.`store_id` AND `ct`.`is_active` = 1
+ GROUP BY `cs`.`store_id`) `tg`
+ WHERE `tag_id` IN (`tg`.`tag_ids`)
+ ) AS `store_tags` ON `p`.`project_id` = `store_tags`.`project_id` AND `store_tags`.`tag_ids` = `tg`.`tag_ids`
+ JOIN `tag_object` AS `ppt` ON
+ ((`ppt`.`tag_parent_object_id` = `p`.`project_id` AND `ppt`.`tag_type_id` = 3) OR
+ (`ppt`.`tag_object_id` = `p`.`project_id`)) AND `ppt`.`is_deleted` = 0
+ JOIN `ppload`.`ppload_files` AS `files` ON `files`.`id` = `ppt`.`tag_object_id` AND `files`.`active` = 1
+ WHERE `p`.`amount_reports` IS NULL
+ GROUP BY `sct2`.`lft`, `tg`.`tag_ids`;
+
+ IF EXISTS(SELECT `table_name`
+ FROM `INFORMATION_SCHEMA`.`TABLES`
+ WHERE `table_schema` = DATABASE()
+ AND `table_name` = 'stat_cat_prod_count')
THEN
-
- RENAME TABLE stat_cat_prod_count TO old_stat_cat_prod_count, tmp_stat_cat_prod_count TO stat_cat_prod_count;
+ RENAME TABLE `stat_cat_prod_count` TO `old_stat_cat_prod_count`, `tmp_stat_cat_prod_count` TO `stat_cat_prod_count`;
ELSE
-
- RENAME TABLE tmp_stat_cat_prod_count TO stat_cat_prod_count;
+ RENAME TABLE `tmp_stat_cat_prod_count` TO `stat_cat_prod_count`;
END IF;
- DROP TABLE IF EXISTS old_stat_cat_prod_count;
+ DROP TABLE IF EXISTS `old_stat_cat_prod_count`;
END$$
DELIMITER ;
-CALL generate_stat_cat_prod_count;
+CALL `generate_stat_cat_prod_count`;
DROP PROCEDURE IF EXISTS `generate_stat_cat_prod_count_w_spam`;
DELIMITER $$
CREATE PROCEDURE `generate_stat_cat_prod_count_w_spam`()
BEGIN
- DROP TABLE IF EXISTS tmp_stat_cat_prod_count_w_spam;
- CREATE TABLE tmp_stat_cat_prod_count_w_spam
+ DROP TABLE IF EXISTS `tmp_stat_cat_prod_count_w_spam`;
+ CREATE TABLE `tmp_stat_cat_prod_count_w_spam`
(
- `project_category_id` int(11) NOT NULL,
- `tag_id` int(11) NULL,
- `count_product` int(11) NULL,
- INDEX `idx_tag` (`project_category_id`,`tag_id`)
+ `project_category_id` int(11) NOT NULL,
+ `tag_id` int(11) NULL,
+ `count_product` int(11) NULL,
+ INDEX `idx_tag` (`project_category_id`, `tag_id`)
)
- ENGINE Memory
- AS
- SELECT
- sct2.project_category_id,
- NULL as tag_id,
- count(distinct p.project_id) as count_product
- FROM stat_cat_tree as sct1
- JOIN stat_cat_tree as sct2 ON sct1.lft between sct2.lft AND sct2.rgt
- LEFT JOIN stat_projects as p ON p.project_category_id = sct1.project_category_id
- GROUP BY sct2.project_category_id
-
- UNION
-
- SELECT
- sct2.project_category_id,
- tg.tag_ids as tag_id,
- count(distinct p.project_id) as count_product
- FROM stat_cat_tree as sct1
- JOIN stat_cat_tree as sct2 ON sct1.lft between sct2.lft AND sct2.rgt
- JOIN stat_projects as p ON p.project_category_id = sct1.project_category_id
- JOIN (select cs.store_id, GROUP_CONCAT(ct.tag_id) as tag_ids from config_store cs
- join config_store_tag ct on ct.store_id = cs.store_id and ct.is_active = 1
- group by cs.store_id) tg
- JOIN (
-
- SELECT DISTINCT project_id,tag_ids
- FROM stat_project_tagids
- JOIN (select cs.store_id, GROUP_CONCAT(ct.tag_id) as tag_ids from config_store cs
- join config_store_tag ct on ct.store_id = cs.store_id and ct.is_active = 1
- group by cs.store_id) tg WHERE tag_id in (tg.tag_ids)
-
-
- ) AS store_tags ON p.project_id = store_tags.project_id AND store_tags.tag_ids = tg.tag_ids
- JOIN tag_object AS ppt ON
- ((ppt.tag_parent_object_id = p.project_id AND ppt.tag_type_id = 3) OR (ppt.tag_object_id = p.project_id) ) AND ppt.is_deleted = 0
- JOIN ppload.ppload_files AS files ON files.id = ppt.tag_object_id AND files.active = 1
-
- GROUP BY sct2.lft, tg.tag_ids
- ;
-
- IF EXISTS(SELECT table_name
- FROM INFORMATION_SCHEMA.TABLES
- WHERE table_schema = DATABASE()
- AND table_name = 'stat_cat_prod_count_w_spam')
-
+ ENGINE MEMORY
+ AS
+ SELECT `sct2`.`project_category_id`,
+ NULL AS `tag_id`,
+ count(DISTINCT `p`.`project_id`) AS `count_product`
+ FROM `stat_cat_tree` AS `sct1`
+ JOIN `stat_cat_tree` AS `sct2` ON `sct1`.`lft` BETWEEN `sct2`.`lft` AND `sct2`.`rgt`
+ LEFT JOIN `stat_projects` AS `p` ON `p`.`project_category_id` = `sct1`.`project_category_id`
+ GROUP BY `sct2`.`project_category_id`
+
+ UNION
+
+ SELECT `sct2`.`project_category_id`,
+ `tg`.`tag_ids` AS `tag_id`,
+ count(DISTINCT `p`.`project_id`) AS `count_product`
+ FROM `stat_cat_tree` AS `sct1`
+ JOIN `stat_cat_tree` AS `sct2` ON `sct1`.`lft` BETWEEN `sct2`.`lft` AND `sct2`.`rgt`
+ JOIN `stat_projects` AS `p` ON `p`.`project_category_id` = `sct1`.`project_category_id`
+ JOIN (SELECT `cs`.`store_id`, GROUP_CONCAT(`ct`.`tag_id`) AS `tag_ids`
+ FROM `config_store` `cs`
+ JOIN `config_store_tag` `ct` ON `ct`.`store_id` = `cs`.`store_id` AND `ct`.`is_active` = 1
+ GROUP BY `cs`.`store_id`) `tg`
+ JOIN (
+ SELECT DISTINCT `project_id`, `tag_ids`
+ FROM `stat_project_tagids`
+ JOIN (SELECT `cs`.`store_id`, GROUP_CONCAT(`ct`.`tag_id`) AS `tag_ids`
+ FROM `config_store` `cs`
+ JOIN `config_store_tag` `ct`
+ ON `ct`.`store_id` = `cs`.`store_id` AND `ct`.`is_active` = 1
+ GROUP BY `cs`.`store_id`) `tg`
+ WHERE `tag_id` IN (`tg`.`tag_ids`)
+ ) AS `store_tags` ON `p`.`project_id` = `store_tags`.`project_id` AND `store_tags`.`tag_ids` = `tg`.`tag_ids`
+ JOIN `tag_object` AS `ppt` ON
+ ((`ppt`.`tag_parent_object_id` = `p`.`project_id` AND `ppt`.`tag_type_id` = 3) OR
+ (`ppt`.`tag_object_id` = `p`.`project_id`)) AND `ppt`.`is_deleted` = 0
+ JOIN `ppload`.`ppload_files` AS `files` ON `files`.`id` = `ppt`.`tag_object_id` AND `files`.`active` = 1
+
+ GROUP BY `sct2`.`lft`, `tg`.`tag_ids`;
+
+ IF EXISTS(SELECT `table_name`
+ FROM `INFORMATION_SCHEMA`.`TABLES`
+ WHERE `table_schema` = DATABASE()
+ AND `table_name` = 'stat_cat_prod_count_w_spam')
THEN
-
- RENAME TABLE stat_cat_prod_count_w_spam TO old_stat_cat_prod_count_w_spam, tmp_stat_cat_prod_count_w_spam TO stat_cat_prod_count_w_spam;
+ RENAME TABLE `stat_cat_prod_count_w_spam` TO `old_stat_cat_prod_count_w_spam`, `tmp_stat_cat_prod_count_w_spam` TO `stat_cat_prod_count_w_spam`;
ELSE
-
- RENAME TABLE tmp_stat_cat_prod_count_w_spam TO stat_cat_prod_count_w_spam;
+ RENAME TABLE `tmp_stat_cat_prod_count_w_spam` TO `stat_cat_prod_count_w_spam`;
END IF;
- DROP TABLE IF EXISTS old_stat_cat_prod_count_w_spam;
+ DROP TABLE IF EXISTS `old_stat_cat_prod_count_w_spam`;
END$$
DELIMITER ;
-
-
DROP PROCEDURE IF EXISTS `fetchCatTreeWithTags`;
DELIMITER $$
-CREATE PROCEDURE `fetchCatTreeWithTags`(
- IN `STORE_ID` int(11),
- IN `TAGS` VARCHAR(255)
-)
+CREATE PROCEDURE `fetchCatTreeWithTags`(IN `STORE_ID` int(11),
+ IN `TAGS` VARCHAR(255))
BEGIN
DROP TABLE IF EXISTS `tmp_store_cat_tags`;
CREATE TEMPORARY TABLE `tmp_store_cat_tags`
- (INDEX `idx_cat_id` (`project_category_id`) )
- ENGINE MEMORY
- AS
- SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
- FROM `config_store_category` AS `csc`
- JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
- WHERE `csc`.`store_id` = STORE_ID
- GROUP BY `csc`.`store_category_id`
- ORDER BY `csc`.`order`, `pc`.`title`
- ;
-
- SET @NEW_ORDER := 0;
-
- UPDATE `tmp_store_cat_tags` SET `order` = (@NEW_ORDER := @NEW_ORDER + 10);
-
- SELECT `sct`.`lft`, `sct`.`rgt`, `sct`.`project_category_id` AS `id`, `sct`.`title`, `scpc`.`count_product` AS `product_count`, `sct`.`xdg_type`, `sct`.`name_legacy`, if(`sct`.`rgt`-`sct`.`lft` = 1, 0, 1) AS `has_children`, (SELECT `project_category_id` FROM `stat_cat_tree` AS `sct2` WHERE `sct2`.`lft` < `sct`.`lft` AND `sct2`.`rgt` > `sct`.`rgt` ORDER BY `sct2`.`rgt` - `sct`.`rgt` LIMIT 1) AS `parent_id`
+ (
+ INDEX `idx_cat_id` (`project_category_id`)
+ )
+ ENGINE MEMORY
+ AS
+ SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
+ FROM `config_store_category` AS `csc`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
+ WHERE `csc`.`store_id` = `STORE_ID`
+ GROUP BY `csc`.`store_category_id`
+ ORDER BY `csc`.`order`, `pc`.`title`;
+
+ SET @`NEW_ORDER` := 0;
+
+ UPDATE `tmp_store_cat_tags` SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10);
+
+ SELECT `sct`.`lft`,
+ `sct`.`rgt`,
+ `sct`.`project_category_id` AS `id`,
+ `sct`.`title`,
+ `scpc`.`count_product` AS `product_count`,
+ `sct`.`xdg_type`,
+ `sct`.`name_legacy`,
+ if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
+ (SELECT `project_category_id`
+ FROM `stat_cat_tree` AS `sct2`
+ WHERE `sct2`.`lft` < `sct`.`lft`
+ AND `sct2`.`rgt` > `sct`.`rgt`
+ ORDER BY `sct2`.`rgt` - `sct`.`rgt`
+ LIMIT 1) AS `parent_id`
FROM `tmp_store_cat_tags` AS `cfc`
- JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
- JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND FIND_IN_SET(`scpc`.`tag_id`,TAGS)
- WHERE `cfc`.`store_id` = STORE_ID
+ JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ JOIN `stat_cat_prod_count` AS `scpc`
+ ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND FIND_IN_SET(`scpc`.`tag_id`, `TAGS`)
+ WHERE `cfc`.`store_id` = `STORE_ID`
ORDER BY `cfc`.`order`, `sct`.`lft`;
- END$$
+END$$
DELIMITER ;
-
-
-
-drop PROCEDURE generate_stat_project;
+DROP PROCEDURE `generate_stat_project`;
DELIMITER $$
CREATE PROCEDURE `generate_stat_project`()
BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
-
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- tag_object.tag_parent_object_id as project_id,
- GROUP_CONCAT(DISTINCT tag_object.tag_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT tag.tag_fullname) AS `package_name_list`
- FROM
- tag_object
- JOIN
- tag ON tag_object.tag_id = tag.tag_id
- JOIN
- ppload.ppload_files files ON files.id = tag_object.tag_object_id
- WHERE
- tag_object.tag_group_id = 8
- AND tag_object.is_deleted = 0
- AND files.active = 1
- GROUP BY tag_object.tag_parent_object_id
- ;
-
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT GROUP_CONCAT(tag_name) AS tag_names, tag_project_id
- FROM (
- select distinct tag.tag_name, tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1 #project
- AND tgo.is_deleted = 0
- UNION ALL
- select distinct tag.tag_name, tgo.tag_parent_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- JOIN ppload.ppload_files files ON files.id = tgo.tag_object_id
- WHERE tag_type_id = 3 #file
- AND files.active = 1
- AND tgo.is_deleted = 0
- ) A
- GROUP BY tag_project_id
- ORDER BY tag_project_id;
-
-
- DROP TABLE IF EXISTS tmp_project_tagids;
- CREATE TEMPORARY TABLE tmp_project_tagids
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT GROUP_CONCAT(tag_id) AS tag_ids, tag_project_id
- FROM (
- select distinct tag.tag_id, tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1 #project
- AND tgo.is_deleted = 0
- UNION ALL
- select distinct tag.tag_id, tgo.tag_parent_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- JOIN ppload.ppload_files files ON files.id = tgo.tag_object_id
- WHERE tag_type_id = 3 #file
- AND files.active = 1
- AND tgo.is_deleted = 0
- ) A
- GROUP BY tag_project_id
- ORDER BY tag_project_id;
-
-
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_cat` (`project_category_id`),INDEX `idx_member` (`member_id`),INDEX `idx_source_url` (`source_url`(50)))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`project_license_id` AS `project_license_id`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`source_url` AS `source_url`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- `project`.`ppload_collection_id` AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`ghns_excluded` AS `ghns_excluded`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.`package_type_id_list` AS `package_types`,
- `tppt`.`package_name_list` AS `package_names`,
- `t`.`tag_names` AS `tags`,
- `t2`.`tag_ids` AS `tag_ids`,
- `sdqy`.amount AS count_downloads_quarter,
- `project_license`.title AS project_license_title
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- LEFT JOIN `tmp_project_tags` AS t ON t.`tag_project_id` = project.`project_id`
- LEFT JOIN `tmp_project_tagids` AS t2 ON t2.`tag_project_id` = project.`project_id`
- LEFT JOIN `stat_downloads_quarter_year` AS sdqy ON sdqy.project_id = project.project_id
- LEFT JOIN `project_license` ON project_license.project_license_id = project.project_license_id
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND `project`.`type_id` = 1
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
-
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
-
- DROP TABLE IF EXISTS old_stat_projects;
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
+ GROUP BY `reports_project`.`project_id`;
+
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `tag_object`.`tag_parent_object_id` AS `project_id`,
+ GROUP_CONCAT(DISTINCT `tag_object`.`tag_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `tag`.`tag_fullname`) AS `package_name_list`
+ FROM `tag_object`
+ JOIN
+ `tag` ON `tag_object`.`tag_id` = `tag`.`tag_id`
+ JOIN
+ `ppload`.`ppload_files` `files` ON `files`.`id` = `tag_object`.`tag_object_id`
+ WHERE `tag_object`.`tag_group_id` = 8
+ AND `tag_object`.`is_deleted` = 0
+ AND `files`.`active` = 1
+ GROUP BY `tag_object`.`tag_parent_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag_name`) AS `tag_names`, `tag_project_id`
+ FROM (
+ SELECT DISTINCT `tag`.`tag_name`, `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1 #project
+ AND `tgo`.`is_deleted` = 0
+ UNION ALL
+ SELECT DISTINCT `tag`.`tag_name`, `tgo`.`tag_parent_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `tgo`.`tag_object_id`
+ WHERE `tag_type_id` = 3 #file
+ AND `files`.`active` = 1
+ AND `tgo`.`is_deleted` = 0
+ ) `A`
+ GROUP BY `tag_project_id`
+ ORDER BY `tag_project_id`;
+
+
+ DROP TABLE IF EXISTS `tmp_project_tagids`;
+ CREATE TEMPORARY TABLE `tmp_project_tagids`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag_id`) AS `tag_ids`, `tag_project_id`
+ FROM (
+ SELECT DISTINCT `tag`.`tag_id`, `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1 #project
+ AND `tgo`.`is_deleted` = 0
+ UNION ALL
+ SELECT DISTINCT `tag`.`tag_id`, `tgo`.`tag_parent_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `tgo`.`tag_object_id`
+ WHERE `tag_type_id` = 3 #file
+ AND `files`.`active` = 1
+ AND `tgo`.`is_deleted` = 0
+ ) `A`
+ GROUP BY `tag_project_id`
+ ORDER BY `tag_project_id`;
+
+
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_cat` (`project_category_id`),
+ INDEX `idx_member` (`member_id`),
+ INDEX `idx_source_url` (`source_url`(50))
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`project_license_id` AS `project_license_id`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`source_url` AS `source_url`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`ghns_excluded` AS `ghns_excluded`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`,
+ `t2`.`tag_ids` AS `tag_ids`,
+ `sdqy`.`amount` AS `count_downloads_quarter`,
+ `project_license`.`title` AS `project_license_title`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tagids` AS `t2` ON `t2`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `stat_downloads_quarter_year` AS `sdqy` ON `sdqy`.`project_id` = `project`.`project_id`
+ LEFT JOIN `project_license` ON `project_license`.`project_license_id` = `project`.`project_license_id`
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND `project`.`type_id` = 1
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
+
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
+
+ DROP TABLE IF EXISTS `old_stat_projects`;
END$$
DELIMITER ;
diff --git a/sql_code/20190131_ updated_generate_stat_product.sql b/sql_code/20190131_ updated_generate_stat_product.sql
index 14a4f981c..2746a6fef 100644
--- a/sql_code/20190131_ updated_generate_stat_product.sql
+++ b/sql_code/20190131_ updated_generate_stat_product.sql
@@ -1,180 +1,176 @@
-
-DROP procedure IF EXISTS `generate_stat_project`;
+DROP PROCEDURE IF EXISTS `generate_stat_project`;
DELIMITER $$
-CREATE DEFINER=CURRENT_USER PROCEDURE `generate_stat_project`()
- BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `generate_stat_project`()
+BEGIN
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
+ GROUP BY `reports_project`.`project_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- tag_object.tag_parent_object_id as project_id,
- GROUP_CONCAT(DISTINCT tag_object.tag_id ORDER BY tag_object.tag_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT tag.tag_fullname) AS `package_name_list`
- FROM
- tag_object
- JOIN
- tag ON tag_object.tag_id = tag.tag_id
- JOIN
- ppload.ppload_files files ON files.id = tag_object.tag_object_id
- WHERE
- tag_object.tag_group_id = 8
- AND tag_object.is_deleted = 0
- AND files.active = 1
- GROUP BY tag_object.tag_parent_object_id
- ;
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `tag_object`.`tag_parent_object_id` AS `project_id`,
+ GROUP_CONCAT(DISTINCT `tag_object`.`tag_id` ORDER BY `tag_object`.`tag_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `tag`.`tag_fullname`) AS `package_name_list`
+ FROM `tag_object`
+ JOIN
+ `tag` ON `tag_object`.`tag_id` = `tag`.`tag_id`
+ JOIN
+ `ppload`.`ppload_files` `files` ON `files`.`id` = `tag_object`.`tag_object_id`
+ WHERE `tag_object`.`tag_group_id` = 8
+ AND `tag_object`.`is_deleted` = 0
+ AND `files`.`active` = 1
+ GROUP BY `tag_object`.`tag_parent_object_id`;
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT
- GROUP_CONCAT(tag_name) AS tag_names,
- GROUP_CONCAT(tag_id ORDER BY tag_id) AS tag_ids,
- tag_project_id
- FROM (
- select
- distinct tag.tag_name,
- tag.tag_id,
- tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1 #project
- AND tgo.is_deleted = 0
- UNION ALL
- select
- distinct tag.tag_name,
- tag.tag_ID,
- tgo.tag_parent_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- JOIN ppload.ppload_files files ON files.id = tgo.tag_object_id
- WHERE tag_type_id = 3 #file
- AND files.active = 1
- AND tgo.is_deleted = 0
- ) A
- GROUP BY tag_project_id
- ORDER BY tag_project_id;
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag_name`) AS `tag_names`,
+ GROUP_CONCAT(`tag_id` ORDER BY `tag_id`) AS `tag_ids`,
+ `tag_project_id`
+ FROM (
+ SELECT DISTINCT `tag`.`tag_name`,
+ `tag`.`tag_id`,
+ `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1 #project
+ AND `tgo`.`is_deleted` = 0
+ UNION ALL
+ SELECT DISTINCT `tag`.`tag_name`,
+ `tag`.`tag_ID`,
+ `tgo`.`tag_parent_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `tgo`.`tag_object_id`
+ WHERE `tag_type_id` = 3 #file
+ AND `files`.`active` = 1
+ AND `tgo`.`is_deleted` = 0
+ ) `A`
+ GROUP BY `tag_project_id`
+ ORDER BY `tag_project_id`;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_cat` (`project_category_id`),INDEX `idx_member` (`member_id`),INDEX `idx_source_url` (`source_url`(50)))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`project_license_id` AS `project_license_id`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`source_url` AS `source_url`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- `project`.`ppload_collection_id` AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`ghns_excluded` AS `ghns_excluded`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.`package_type_id_list` AS `package_types`,
- `tppt`.`package_name_list` AS `package_names`,
- `t`.`tag_names` AS `tags`,
- `t`.`tag_ids` AS `tag_ids`,
- `sdqy`.amount AS count_downloads_quarter,
- `project_license`.title AS project_license_title
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- LEFT JOIN `tmp_project_tags` AS t ON t.`tag_project_id` = project.`project_id`
- LEFT JOIN `stat_downloads_quarter_year` AS sdqy ON sdqy.project_id = project.project_id
- LEFT JOIN `project_license` ON project_license.project_license_id = project.project_license_id
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND `project`.`type_id` = 1
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_cat` (`project_category_id`),
+ INDEX `idx_member` (`member_id`),
+ INDEX `idx_source_url` (`source_url`(50))
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`project_license_id` AS `project_license_id`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`source_url` AS `source_url`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ `project`.`ppload_collection_id` AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`ghns_excluded` AS `ghns_excluded`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`,
+ `t`.`tag_ids` AS `tag_ids`,
+ `sdqy`.`amount` AS `count_downloads_quarter`,
+ `project_license`.`title` AS `project_license_title`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `stat_downloads_quarter_year` AS `sdqy` ON `sdqy`.`project_id` = `project`.`project_id`
+ LEFT JOIN `project_license` ON `project_license`.`project_license_id` = `project`.`project_license_id`
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND `project`.`type_id` = 1
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
- DROP TABLE IF EXISTS old_stat_projects;
- END$$
+ DROP TABLE IF EXISTS `old_stat_projects`;
+END$$
DELIMITER ;
diff --git a/sql_code/20190131_update_fetch_tree_with_tags_for_store.sql b/sql_code/20190131_update_fetch_tree_with_tags_for_store.sql
index 68a6f7fc7..b6d598da3 100644
--- a/sql_code/20190131_update_fetch_tree_with_tags_for_store.sql
+++ b/sql_code/20190131_update_fetch_tree_with_tags_for_store.sql
@@ -1,57 +1,55 @@
-DROP procedure IF EXISTS `fetchCatTreeWithTagsForStore`;
+DROP PROCEDURE IF EXISTS `fetchCatTreeWithTagsForStore`;
DELIMITER $$
-CREATE DEFINER = CURRENT_USER PROCEDURE `fetchCatTreeWithTagsForStore`(
- IN `STORE_ID` INT(11),
- IN `TAGS` VARCHAR(255)
-
-)
- BEGIN
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `fetchCatTreeWithTagsForStore`(IN `STORE_ID` INT(11),
+ IN `TAGS` VARCHAR(255))
+BEGIN
DROP TABLE IF EXISTS `tmp_store_cat_tags`;
CREATE TEMPORARY TABLE `tmp_store_cat_tags`
(
- INDEX `idx_cat_id` (`project_category_id`)
+ INDEX `idx_cat_id` (`project_category_id`)
)
- ENGINE MEMORY
- AS
- SELECT
- `csc`.`store_id`,
- `csc`.`project_category_id`,
- `csc`.`order`,
- `pc`.`title`,
- `pc`.`lft`,
- `pc`.`rgt`
- FROM `config_store_category` AS `csc`
- JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
- WHERE `csc`.`store_id` = STORE_ID
- GROUP BY `csc`.`store_category_id`
- ORDER BY `csc`.`order`, `pc`.`title`;
+ ENGINE MEMORY
+ AS
+ SELECT `csc`.`store_id`,
+ `csc`.`project_category_id`,
+ `csc`.`order`,
+ `pc`.`title`,
+ `pc`.`lft`,
+ `pc`.`rgt`
+ FROM `config_store_category` AS `csc`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
+ WHERE `csc`.`store_id` = `STORE_ID`
+ GROUP BY `csc`.`store_category_id`
+ ORDER BY `csc`.`order`, `pc`.`title`;
SET @`NEW_ORDER` := 0;
UPDATE `tmp_store_cat_tags`
SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10);
- SELECT
- `sct`.`lft`,
- `sct`.`rgt`,
- `sct`.`project_category_id` AS `id`,
- `sct`.`title`,
- `scpc`.`count_product` AS `product_count`,
- `sct`.`xdg_type`,
- `sct`.`name_legacy`,
- if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
- (SELECT `project_category_id`
- FROM `stat_cat_tree` AS `sct2`
- WHERE `sct2`.`lft` < `sct`.`lft` AND `sct2`.`rgt` > `sct`.`rgt`
- ORDER BY `sct2`.`rgt` - `sct`.`rgt`
- LIMIT 1) AS `parent_id`
+ SELECT `sct`.`lft`,
+ `sct`.`rgt`,
+ `sct`.`project_category_id` AS `id`,
+ `sct`.`title`,
+ `scpc`.`count_product` AS `product_count`,
+ `sct`.`xdg_type`,
+ `sct`.`name_legacy`,
+ if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
+ (SELECT `project_category_id`
+ FROM `stat_cat_tree` AS `sct2`
+ WHERE `sct2`.`lft` < `sct`.`lft`
+ AND `sct2`.`rgt` > `sct`.`rgt`
+ ORDER BY `sct2`.`rgt` - `sct`.`rgt`
+ LIMIT 1) AS `parent_id`
FROM `tmp_store_cat_tags` AS `cfc`
- JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
- JOIN `stat_store_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` = TAGS
- WHERE `cfc`.`store_id` = STORE_ID
+ JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ JOIN `stat_store_prod_count` AS `scpc`
+ ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` = `TAGS`
+ WHERE `cfc`.`store_id` = `STORE_ID`
ORDER BY `cfc`.`order`, `sct`.`lft`;
- END$$
+END$$
DELIMITER ;
diff --git a/sql_code/20190131_updated_generate_stat_store_prod_count.sql b/sql_code/20190131_updated_generate_stat_store_prod_count.sql
index 5951b106d..a4f0b7bc1 100644
--- a/sql_code/20190131_updated_generate_stat_store_prod_count.sql
+++ b/sql_code/20190131_updated_generate_stat_store_prod_count.sql
@@ -1,275 +1,297 @@
DROP PROCEDURE IF EXISTS `generate_stat_store_prod_count`;
DELIMITER $$
-CREATE DEFINER = CURRENT_USER PROCEDURE `generate_stat_store_prod_count`()
- BEGIN
-
-DECLARE v_finished INTEGER DEFAULT 0;
-DECLARE v_store_id varchar(255) DEFAULT "";
-DECLARE v_store_tag_ids varchar(255) DEFAULT "";
-
-declare idx,prev_idx int;
-declare v_id varchar(10);
-
+CREATE
+ DEFINER = CURRENT_USER PROCEDURE `generate_stat_store_prod_count`()
+BEGIN
+
+ DECLARE `v_finished` INTEGER DEFAULT 0;
+ DECLARE `v_store_id` varchar(255) DEFAULT "";
+ DECLARE `v_store_tag_ids` varchar(255) DEFAULT "";
+
+ DECLARE `idx`,`prev_idx` int;
+ DECLARE `v_id` varchar(10);
+
-- declare cursor for employee email
-DECLARE store_cursor CURSOR FOR
- SELECT * FROM tmp_stat_store_tagids;
-
+ DECLARE `store_cursor` CURSOR FOR
+ SELECT * FROM `tmp_stat_store_tagids`;
+
-- declare NOT FOUND handler
-DECLARE CONTINUE HANDLER
-FOR NOT FOUND SET v_finished = 1;
+ DECLARE CONTINUE HANDLER
+ FOR NOT FOUND SET `v_finished` = 1;
+
+
+ DROP TABLE IF EXISTS `tmp_stat_store_tagids`;
+ CREATE TEMPORARY TABLE `tmp_stat_store_tagids`
+ AS
+ SELECT `cs`.`store_id`,
+ GROUP_CONCAT(`ct`.`tag_id`
+ ORDER BY `ct`.`tag_id`) AS `tag_ids`
+ FROM `config_store` `cs`
+ LEFT JOIN
+ `config_store_tag` `ct` ON `ct`.`store_id` = `cs`.`store_id`
+ AND `ct`.`is_active` = 1
+#WHERE `cs`.`store_id` = 7
+ GROUP BY `cs`.`store_id`;
-DROP TABLE IF EXISTS `tmp_stat_store_tagids`;
-CREATE TEMPORARY TABLE `tmp_stat_store_tagids`
-AS
-SELECT
- `cs`.`store_id`,
- GROUP_CONCAT(`ct`.`tag_id`
- ORDER BY `ct`.`tag_id`) AS `tag_ids`
-FROM
- `config_store` `cs`
-LEFT JOIN
- `config_store_tag` `ct` ON `ct`.`store_id` = `cs`.`store_id`
-AND `ct`.`is_active` = 1
-#WHERE `cs`.`store_id` = 7
-GROUP BY `cs`.`store_id`;
-
-
-DROP TABLE IF EXISTS `tmp_stat_store_prod_count`;
- CREATE TABLE `tmp_stat_store_prod_count`
- (
- `project_category_id` INT(11) NOT NULL,
- `tag_id` VARCHAR(255) NULL,
- `count_product` INT(11) NULL,
- `stores` VARCHAR(255) NULL,
- INDEX `idx_tag` (`project_category_id`, `tag_id`)
- )
- ENGINE MyISAM
- AS
- SELECT
- sct2.project_category_id,
- NULL as tag_id,
- count(distinct p.project_id) as count_product
- FROM stat_cat_tree as sct1
- JOIN stat_cat_tree as sct2 ON sct1.lft between sct2.lft AND sct2.rgt
- LEFT JOIN stat_projects as p ON p.project_category_id = sct1.project_category_id
- WHERE p.amount_reports is null
- GROUP BY sct2.project_category_id;
-
-
-OPEN store_cursor;
-
-get_store: LOOP
-
- FETCH store_cursor INTO v_store_id, v_store_tag_ids;
-
- IF v_finished = 1 THEN
- LEAVE get_store;
- END IF;
-
- -- build email list
-
-
- SET @sql = '
+ DROP TABLE IF EXISTS `tmp_stat_store_prod_count`;
+ CREATE TABLE `tmp_stat_store_prod_count`
+ (
+ `project_category_id` INT(11) NOT NULL,
+ `tag_id` VARCHAR(255) NULL,
+ `count_product` INT(11) NULL,
+ `stores` VARCHAR(255) NULL,
+ INDEX `idx_tag` (`project_category_id`, `tag_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `sct2`.`project_category_id`,
+ NULL AS `tag_id`,
+ count(DISTINCT `p`.`project_id`) AS `count_product`
+ FROM `stat_cat_tree` AS `sct1`
+ JOIN `stat_cat_tree` AS `sct2` ON `sct1`.`lft` BETWEEN `sct2`.`lft` AND `sct2`.`rgt`
+ LEFT JOIN `stat_projects` AS `p` ON `p`.`project_category_id` = `sct1`.`project_category_id`
+ WHERE `p`.`amount_reports` IS NULL
+ GROUP BY `sct2`.`project_category_id`;
+
+
+ OPEN `store_cursor`;
+
+ `get_store`:
+ LOOP
+
+ FETCH `store_cursor` INTO `v_store_id`, `v_store_tag_ids`;
+
+ IF `v_finished` = 1 THEN
+ LEAVE `get_store`;
+ END IF;
+
+ -- build email list
+
+
+ SET @`sql` = '
INSERT INTO tmp_stat_store_prod_count
SELECT
sct2.project_category_id,
tg.tag_ids as tag_id,
count(distinct p.project_id) as count_product,
tg.store_id
FROM stat_cat_tree as sct1
JOIN stat_cat_tree as sct2 ON sct1.lft between sct2.lft AND sct2.rgt
JOIN stat_projects as p ON p.project_category_id = sct1.project_category_id
JOIN tmp_stat_store_tagids tg
WHERE p.amount_reports is null
';
- SET @sql = CONCAT(@sql,' AND tg.store_id = ', v_store_id, ' ');
- SET @sql = CONCAT(@sql,' AND (1=1 ');
-
- set idx := locate(',',v_store_tag_ids,1);
-
- if LENGTH(v_store_tag_ids) > 0 then
-
- if idx > 0 then
- set prev_idx := 1;
- WHILE idx > 0 DO
- set v_id := substr(v_store_tag_ids,prev_idx,idx-prev_idx);
- SET @sql = CONCAT(@sql,' AND FIND_IN_SET(', v_id, ', p.tag_ids) ');
- set prev_idx := idx+1;
- set idx := locate(',',v_store_tag_ids,prev_idx);
-
- if idx = 0 then
- set v_id := substr(v_store_tag_ids,prev_idx);
- SET @sql = CONCAT(@sql,' AND FIND_IN_SET(', v_id, ', p.tag_ids) ');
- end if;
-
-
- END WHILE;
- else
-
- SET @sql = CONCAT(@sql,' AND FIND_IN_SET(', v_store_tag_ids, ', p.tag_ids) ');
-
- end if;
- end if;
-
- SET @sql = CONCAT(@sql,') ');
- SET @sql = CONCAT(@sql,'GROUP BY sct2.lft, tg.tag_ids,tg.store_id');
-
- select @sql;
-
- PREPARE stmt FROM @sql;
- EXECUTE stmt;
- DEALLOCATE PREPARE stmt;
-
- END LOOP get_store;
-
-CLOSE store_cursor;
-
-
- IF EXISTS(SELECT `table_name`
+ SET @`sql` = CONCAT(@`sql`, ' AND tg.store_id = ', `v_store_id`, ' ');
+ SET @`sql` = CONCAT(@`sql`, ' AND (1=1 ');
+
+ SET `idx` := locate(',', `v_store_tag_ids`, 1);
+
+ IF LENGTH(`v_store_tag_ids`) > 0 THEN
+
+ IF `idx` > 0 THEN
+ SET `prev_idx` := 1;
+ WHILE `idx` > 0 DO
+ SET `v_id` := substr(`v_store_tag_ids`, `prev_idx`, `idx` - `prev_idx`);
+ SET @`sql` = CONCAT(@`sql`, ' AND FIND_IN_SET(', `v_id`, ', p.tag_ids) ');
+ SET `prev_idx` := `idx` + 1;
+ SET `idx` := locate(',', `v_store_tag_ids`, `prev_idx`);
+
+ IF `idx` = 0 THEN
+ SET `v_id` := substr(`v_store_tag_ids`, `prev_idx`);
+ SET @`sql` = CONCAT(@`sql`, ' AND FIND_IN_SET(', `v_id`, ', p.tag_ids) ');
+ END IF;
+ END WHILE;
+ ELSE
+
+ SET @`sql` = CONCAT(@`sql`, ' AND FIND_IN_SET(', `v_store_tag_ids`, ', p.tag_ids) ');
+
+ END IF;
+ END IF;
+
+ SET @`sql` = CONCAT(@`sql`, ') ');
+ SET @`sql` = CONCAT(@`sql`, 'GROUP BY sct2.lft, tg.tag_ids,tg.store_id');
+
+ SELECT @`sql`;
+
+ PREPARE `stmt` FROM @`sql`;
+ EXECUTE `stmt`;
+ DEALLOCATE PREPARE `stmt`;
+
+ END LOOP `get_store`;
+
+ CLOSE `store_cursor`;
+
+
+ IF EXISTS(SELECT `table_name`
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE `table_schema` = DATABASE()
- AND `table_name` = 'stat_store_prod_count')
-
+ AND `table_name` = 'stat_store_prod_count')
THEN
-
- RENAME TABLE
- `stat_store_prod_count` TO `old_stat_store_prod_count`,
- `tmp_stat_store_prod_count` TO `stat_store_prod_count`;
+ RENAME TABLE
+ `stat_store_prod_count` TO `old_stat_store_prod_count`,
+ `tmp_stat_store_prod_count` TO `stat_store_prod_count`;
ELSE
-
- RENAME TABLE
- `tmp_stat_store_prod_count` TO `stat_store_prod_count`;
+ RENAME TABLE
+ `tmp_stat_store_prod_count` TO `stat_store_prod_count`;
END IF;
DROP TABLE IF EXISTS `old_stat_store_prod_count`;
END$$
-CREATE PROCEDURE `fetchCatTreeWithTagsForStore`(
- IN `STORE_ID` INT(11),
- IN `TAGS` VARCHAR(255)
-)
+CREATE PROCEDURE `fetchCatTreeWithTagsForStore`(IN `STORE_ID` INT(11),
+ IN `TAGS` VARCHAR(255))
BEGIN
DROP TABLE IF EXISTS `tmp_store_cat_tags`;
CREATE TEMPORARY TABLE `tmp_store_cat_tags`
(
- INDEX `idx_cat_id` (`project_category_id`)
+ INDEX `idx_cat_id` (`project_category_id`)
)
- ENGINE MEMORY
- AS
- SELECT
- `csc`.`store_id`,
- `csc`.`project_category_id`,
- `csc`.`order`,
- `pc`.`title`,
- `pc`.`lft`,
- `pc`.`rgt`
- FROM `config_store_category` AS `csc`
- JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
- WHERE `csc`.`store_id` = STORE_ID
- GROUP BY `csc`.`store_category_id`
- ORDER BY `csc`.`order`, `pc`.`title`;
+ ENGINE MEMORY
+ AS
+ SELECT `csc`.`store_id`,
+ `csc`.`project_category_id`,
+ `csc`.`order`,
+ `pc`.`title`,
+ `pc`.`lft`,
+ `pc`.`rgt`
+ FROM `config_store_category` AS `csc`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
+ WHERE `csc`.`store_id` = `STORE_ID`
+ GROUP BY `csc`.`store_category_id`
+ ORDER BY `csc`.`order`, `pc`.`title`;
SET @`NEW_ORDER` := 0;
UPDATE `tmp_store_cat_tags`
SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10);
- SELECT
- `sct`.`lft`,
- `sct`.`rgt`,
- `sct`.`project_category_id` AS `id`,
- `sct`.`title`,
- `scpc`.`count_product` AS `product_count`,
- `sct`.`xdg_type`,
- `sct`.`name_legacy`,
- if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
- (SELECT `project_category_id`
- FROM `stat_cat_tree` AS `sct2`
- WHERE `sct2`.`lft` < `sct`.`lft` AND `sct2`.`rgt` > `sct`.`rgt`
- ORDER BY `sct2`.`rgt` - `sct`.`rgt`
- LIMIT 1) AS `parent_id`
+ SELECT `sct`.`lft`,
+ `sct`.`rgt`,
+ `sct`.`project_category_id` AS `id`,
+ `sct`.`title`,
+ `scpc`.`count_product` AS `product_count`,
+ `sct`.`xdg_type`,
+ `sct`.`name_legacy`,
+ if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
+ (SELECT `project_category_id`
+ FROM `stat_cat_tree` AS `sct2`
+ WHERE `sct2`.`lft` < `sct`.`lft`
+ AND `sct2`.`rgt` > `sct`.`rgt`
+ ORDER BY `sct2`.`rgt` - `sct`.`rgt`
+ LIMIT 1) AS `parent_id`
FROM `tmp_store_cat_tags` AS `cfc`
- JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
- #LEFT JOIN `stat_store_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` = TAGS
- JOIN stat_store_prod_count AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`stores` = STORE_ID
- WHERE `cfc`.`store_id` = STORE_ID
+ JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ #LEFT JOIN `stat_store_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` = TAGS
+ JOIN `stat_store_prod_count` AS `scpc`
+ ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`stores` = `STORE_ID`
+ WHERE `cfc`.`store_id` = `STORE_ID`
ORDER BY `cfc`.`order`, `sct`.`lft`;
END$$
-
-CREATE PROCEDURE `fetchCatTreeWithTags`(
- IN `STORE_ID` int(11),
- IN `TAGS` VARCHAR(255)
-)
+CREATE PROCEDURE `fetchCatTreeWithTags`(IN `STORE_ID` int(11),
+ IN `TAGS` VARCHAR(255))
BEGIN
DROP TABLE IF EXISTS `tmp_store_cat_tags`;
CREATE TEMPORARY TABLE `tmp_store_cat_tags`
- (INDEX `idx_cat_id` (`project_category_id`) )
- ENGINE MEMORY
- AS
- SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
- FROM `config_store_category` AS `csc`
- JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
- WHERE `csc`.`store_id` = STORE_ID
- GROUP BY `csc`.`store_category_id`
- ORDER BY `csc`.`order`, `pc`.`title`
- ;
-
- SET @NEW_ORDER := 0;
-
- UPDATE `tmp_store_cat_tags` SET `order` = (@NEW_ORDER := @NEW_ORDER + 10);
-
- SELECT `sct`.`lft`, `sct`.`rgt`, `sct`.`project_category_id` AS `id`, `sct`.`title`, `scpc`.`count_product` AS `product_count`, `sct`.`xdg_type`, `sct`.`name_legacy`, if(`sct`.`rgt`-`sct`.`lft` = 1, 0, 1) AS `has_children`, (SELECT `project_category_id` FROM `stat_cat_tree` AS `sct2` WHERE `sct2`.`lft` < `sct`.`lft` AND `sct2`.`rgt` > `sct`.`rgt` ORDER BY `sct2`.`rgt` - `sct`.`rgt` LIMIT 1) AS `parent_id`
+ (
+ INDEX `idx_cat_id` (`project_category_id`)
+ )
+ ENGINE MEMORY
+ AS
+ SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
+ FROM `config_store_category` AS `csc`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
+ WHERE `csc`.`store_id` = `STORE_ID`
+ GROUP BY `csc`.`store_category_id`
+ ORDER BY `csc`.`order`, `pc`.`title`;
+
+ SET @`NEW_ORDER` := 0;
+
+ UPDATE `tmp_store_cat_tags` SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10);
+
+ SELECT `sct`.`lft`,
+ `sct`.`rgt`,
+ `sct`.`project_category_id` AS `id`,
+ `sct`.`title`,
+ `scpc`.`count_product` AS `product_count`,
+ `sct`.`xdg_type`,
+ `sct`.`name_legacy`,
+ if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
+ (SELECT `project_category_id`
+ FROM `stat_cat_tree` AS `sct2`
+ WHERE `sct2`.`lft` < `sct`.`lft`
+ AND `sct2`.`rgt` > `sct`.`rgt`
+ ORDER BY `sct2`.`rgt` - `sct`.`rgt`
+ LIMIT 1) AS `parent_id`
FROM `tmp_store_cat_tags` AS `cfc`
- JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
- #JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` = TAGS
- JOIN stat_store_prod_count AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`stores` = STORE_ID
- WHERE `cfc`.`store_id` = STORE_ID
+ JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ #JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` = TAGS
+ JOIN `stat_store_prod_count` AS `scpc`
+ ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`stores` = `STORE_ID`
+ WHERE `cfc`.`store_id` = `STORE_ID`
ORDER BY `cfc`.`order`, `sct`.`lft`;
END$$
-
-CREATE `fetchCatTreeForStore`(
- IN `STORE_ID` int(11)
+CREATE
+`fetchCatTreeForStore`
+(
+ IN `STORE_ID` INT (11)
)
BEGIN
- DROP TABLE IF EXISTS `tmp_store_cat`;
- CREATE TEMPORARY TABLE `tmp_store_cat`
- (INDEX `idx_cat_id` (`project_category_id`) )
- ENGINE MEMORY
- AS
- SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
- FROM `config_store_category` AS `csc`
- JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
- WHERE `csc`.`store_id` = STORE_ID
- GROUP BY `csc`.`store_category_id`
- ORDER BY `csc`.`order`, `pc`.`title`
- ;
-
- SET @NEW_ORDER := 0;
-
- UPDATE `tmp_store_cat` SET `order` = (@NEW_ORDER := @NEW_ORDER + 10);
-
- SELECT `sct`.`lft`, `sct`.`rgt`, `sct`.`project_category_id` AS `id`, `sct`.`title`, `scpc`.`count_product` AS `product_count`, `sct`.`xdg_type`, `sct`.`name_legacy`, if(`sct`.`rgt`-`sct`.`lft` = 1, 0, 1) AS `has_children`, (SELECT `project_category_id` FROM `stat_cat_tree` AS `sct2` WHERE `sct2`.`lft` < `sct`.`lft` AND `sct2`.`rgt` > `sct`.`rgt` ORDER BY `sct2`.`rgt` - `sct`.`rgt` LIMIT 1) AS `parent_id`
- FROM `tmp_store_cat` AS `cfc`
- JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
- #JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` is null
- JOIN stat_store_prod_count AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` is null
- WHERE cfc.store_id = STORE_ID
- ORDER BY cfc.`order`, sct.lft;
+DROP TABLE IF EXISTS `tmp_store_cat`;
+CREATE TEMPORARY TABLE `tmp_store_cat`
+(
+ INDEX `idx_cat_id` (`project_category_id`)
+)
+ ENGINE MEMORY
+AS
+SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
+FROM `config_store_category` AS `csc`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
+WHERE `csc`.`store_id` = `STORE_ID`
+GROUP BY `csc`.`store_category_id`
+ORDER BY `csc`.`order`, `pc`.`title`
+;
+
+SET @`NEW_ORDER` := 0;
+
+UPDATE `tmp_store_cat`
+SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10);
+
+SELECT `sct`.`lft`,
+ `sct`.`rgt`,
+ `sct`.`project_category_id` AS `id`,
+ `sct`.`title`,
+ `scpc`.`count_product` AS `product_count`,
+ `sct`.`xdg_type`,
+ `sct`.`name_legacy`,
+ if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
+ (SELECT `project_category_id`
+ FROM `stat_cat_tree` AS `sct2`
+ WHERE `sct2`.`lft` < `sct`.`lft`
+ AND `sct2`.`rgt` > `sct`.`rgt`
+ ORDER BY `sct2`.`rgt` - `sct`.`rgt`
+ LIMIT 1) AS `parent_id`
+FROM `tmp_store_cat` AS `cfc`
+ JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ #JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` is null
+ JOIN `stat_store_prod_count` AS `scpc`
+ ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` IS NULL
+WHERE `cfc`.`store_id` = `STORE_ID`
+ORDER BY `cfc`.`order`, `sct`.`lft`;
END$$
DELIMITER ;
diff --git a/sql_code/20190205_stat_cat_store_count.sql b/sql_code/20190205_stat_cat_store_count.sql
index 933b5b3b5..808e5b924 100644
--- a/sql_code/20190205_stat_cat_store_count.sql
+++ b/sql_code/20190205_stat_cat_store_count.sql
@@ -1,255 +1,258 @@
DROP PROCEDURE IF EXISTS `generate_stat_store_prod_count`;
DELIMITER $$
CREATE PROCEDURE `generate_stat_store_prod_count`()
BEGIN
-
-DECLARE v_finished INTEGER DEFAULT 0;
-DECLARE v_store_id varchar(255) DEFAULT "";
-DECLARE v_store_tag_ids varchar(255) DEFAULT "";
-
-declare idx,prev_idx int;
-declare v_id varchar(10);
-
+
+ DECLARE `v_finished` INTEGER DEFAULT 0;
+ DECLARE `v_store_id` varchar(255) DEFAULT "";
+ DECLARE `v_store_tag_ids` varchar(255) DEFAULT "";
+
+ DECLARE `idx`,`prev_idx` int;
+ DECLARE `v_id` varchar(10);
+
-- declare cursor for employee email
-DECLARE store_cursor CURSOR FOR
- SELECT * FROM tmp_stat_store_tagids;
-
+ DECLARE `store_cursor` CURSOR FOR
+ SELECT * FROM `tmp_stat_store_tagids`;
+
-- declare NOT FOUND handler
-DECLARE CONTINUE HANDLER
-FOR NOT FOUND SET v_finished = 1;
-
-
-DROP TABLE IF EXISTS `tmp_stat_store_tagids`;
-CREATE TEMPORARY TABLE `tmp_stat_store_tagids`
-AS
-SELECT
- `cs`.`store_id`,
- GROUP_CONCAT(`ct`.`tag_id`
- ORDER BY `ct`.`tag_id`) AS `tag_ids`
-FROM
- `config_store` `cs`
-JOIN
- `config_store_tag` `ct` ON `ct`.`store_id` = `cs`.`store_id`
-AND `ct`.`is_active` = 1
+ DECLARE CONTINUE HANDLER
+ FOR NOT FOUND SET `v_finished` = 1;
+
+
+ DROP TABLE IF EXISTS `tmp_stat_store_tagids`;
+ CREATE TEMPORARY TABLE `tmp_stat_store_tagids`
+ AS
+ SELECT `cs`.`store_id`,
+ GROUP_CONCAT(`ct`.`tag_id`
+ ORDER BY `ct`.`tag_id`) AS `tag_ids`
+ FROM `config_store` `cs`
+ JOIN
+ `config_store_tag` `ct` ON `ct`.`store_id` = `cs`.`store_id`
+ AND `ct`.`is_active` = 1
#WHERE `cs`.`store_id` = 7
-GROUP BY `cs`.`store_id`;
-
-
-DROP TABLE IF EXISTS `tmp_stat_store_prod_count`;
- CREATE TABLE `tmp_stat_store_prod_count`
- (
- `project_category_id` INT(11) NOT NULL,
- `tag_id` VARCHAR(255) NULL,
- `count_product` INT(11) NULL,
- `stores` VARCHAR(255) NULL,
- INDEX `idx_tag` (`project_category_id`, `tag_id`)
- )
- ENGINE MyISAM
- AS
- SELECT
- sct2.project_category_id,
- NULL as tag_id,
- count(distinct p.project_id) as count_product,
- NULL as stores
- FROM stat_cat_tree as sct1
- JOIN stat_cat_tree as sct2 ON sct1.lft between sct2.lft AND sct2.rgt
- LEFT JOIN stat_projects as p ON p.project_category_id = sct1.project_category_id
- WHERE p.amount_reports is null
- GROUP BY sct2.project_category_id;
-
-
-OPEN store_cursor;
-
-get_store: LOOP
-
- FETCH store_cursor INTO v_store_id, v_store_tag_ids;
-
- IF v_finished = 1 THEN
- LEAVE get_store;
- END IF;
-
- -- build email list
-
-
- SET @sql = '
+ GROUP BY `cs`.`store_id`;
+
+
+ DROP TABLE IF EXISTS `tmp_stat_store_prod_count`;
+ CREATE TABLE `tmp_stat_store_prod_count`
+ (
+ `project_category_id` INT(11) NOT NULL,
+ `tag_id` VARCHAR(255) NULL,
+ `count_product` INT(11) NULL,
+ `stores` VARCHAR(255) NULL,
+ INDEX `idx_tag` (`project_category_id`, `tag_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `sct2`.`project_category_id`,
+ NULL AS `tag_id`,
+ count(DISTINCT `p`.`project_id`) AS `count_product`,
+ NULL AS `stores`
+ FROM `stat_cat_tree` AS `sct1`
+ JOIN `stat_cat_tree` AS `sct2` ON `sct1`.`lft` BETWEEN `sct2`.`lft` AND `sct2`.`rgt`
+ LEFT JOIN `stat_projects` AS `p` ON `p`.`project_category_id` = `sct1`.`project_category_id`
+ WHERE `p`.`amount_reports` IS NULL
+ GROUP BY `sct2`.`project_category_id`;
+
+
+ OPEN `store_cursor`;
+
+ `get_store`:
+ LOOP
+
+ FETCH `store_cursor` INTO `v_store_id`, `v_store_tag_ids`;
+
+ IF `v_finished` = 1 THEN
+ LEAVE `get_store`;
+ END IF;
+
+ -- build email list
+
+
+ SET @`sql` = '
INSERT INTO tmp_stat_store_prod_count
SELECT
sct2.project_category_id,
tg.tag_ids as tag_id,
count(distinct p.project_id) as count_product,
tg.store_id
FROM stat_cat_tree as sct1
JOIN stat_cat_tree as sct2 ON sct1.lft between sct2.lft AND sct2.rgt
JOIN stat_projects as p ON p.project_category_id = sct1.project_category_id
JOIN tmp_stat_store_tagids tg
WHERE p.amount_reports is null
';
- SET @sql = CONCAT(@sql,' AND tg.store_id = ', v_store_id, ' ');
- SET @sql = CONCAT(@sql,' AND (1=1 ');
-
- set idx := locate(',',v_store_tag_ids,1);
-
- if LENGTH(v_store_tag_ids) > 0 then
-
- if idx > 0 then
- set prev_idx := 1;
- WHILE idx > 0 DO
- set v_id := substr(v_store_tag_ids,prev_idx,idx-prev_idx);
- SET @sql = CONCAT(@sql,' AND FIND_IN_SET(', v_id, ', p.tag_ids) ');
- set prev_idx := idx+1;
- set idx := locate(',',v_store_tag_ids,prev_idx);
-
- if idx = 0 then
- set v_id := substr(v_store_tag_ids,prev_idx);
- SET @sql = CONCAT(@sql,' AND FIND_IN_SET(', v_id, ', p.tag_ids) ');
- end if;
-
-
- END WHILE;
- else
-
- SET @sql = CONCAT(@sql,' AND FIND_IN_SET(', v_store_tag_ids, ', p.tag_ids) ');
-
- end if;
- end if;
-
- SET @sql = CONCAT(@sql,') ');
- SET @sql = CONCAT(@sql,'GROUP BY sct2.lft, tg.tag_ids,tg.store_id');
-
- #select @sql;
-
- PREPARE stmt FROM @sql;
- EXECUTE stmt;
- DEALLOCATE PREPARE stmt;
-
- END LOOP get_store;
-
-CLOSE store_cursor;
-
-
- IF EXISTS(SELECT `table_name`
- FROM `INFORMATION_SCHEMA`.`TABLES`
- WHERE `table_schema` = DATABASE()
- AND `table_name` = 'stat_store_prod_count')
+ SET @`sql` = CONCAT(@`sql`, ' AND tg.store_id = ', `v_store_id`, ' ');
+ SET @`sql` = CONCAT(@`sql`, ' AND (1=1 ');
- THEN
+ SET `idx` := locate(',', `v_store_tag_ids`, 1);
- RENAME TABLE
- `stat_store_prod_count` TO `old_stat_store_prod_count`,
- `tmp_stat_store_prod_count` TO `stat_store_prod_count`;
+ IF LENGTH(`v_store_tag_ids`) > 0 THEN
- ELSE
+ IF `idx` > 0 THEN
+ SET `prev_idx` := 1;
+ WHILE `idx` > 0 DO
+ SET `v_id` := substr(`v_store_tag_ids`, `prev_idx`, `idx` - `prev_idx`);
+ SET @`sql` = CONCAT(@`sql`, ' AND FIND_IN_SET(', `v_id`, ', p.tag_ids) ');
+ SET `prev_idx` := `idx` + 1;
+ SET `idx` := locate(',', `v_store_tag_ids`, `prev_idx`);
- RENAME TABLE
- `tmp_stat_store_prod_count` TO `stat_store_prod_count`;
+ IF `idx` = 0 THEN
+ SET `v_id` := substr(`v_store_tag_ids`, `prev_idx`);
+ SET @`sql` = CONCAT(@`sql`, ' AND FIND_IN_SET(', `v_id`, ', p.tag_ids) ');
+ END IF;
+ END WHILE;
+ ELSE
- END IF;
+ SET @`sql` = CONCAT(@`sql`, ' AND FIND_IN_SET(', `v_store_tag_ids`, ', p.tag_ids) ');
+ END IF;
+ END IF;
- DROP TABLE IF EXISTS `old_stat_store_prod_count`;
+ SET @`sql` = CONCAT(@`sql`, ') ');
+ SET @`sql` = CONCAT(@`sql`, 'GROUP BY sct2.lft, tg.tag_ids,tg.store_id');
-END$$
+ #select @sql;
+ PREPARE `stmt` FROM @`sql`;
+ EXECUTE `stmt`;
+ DEALLOCATE PREPARE `stmt`;
+ END LOOP `get_store`;
+ CLOSE `store_cursor`;
-CREATE EVENT `e_generate_stat_store_prod_count`
- ON SCHEDULE
- EVERY 30 MINUTE STARTS '2019-02-05 15:01:03'
- ON COMPLETION NOT PRESERVE
- ENABLE
- COMMENT ''
- DO BEGIN
- CALL generate_stat_store_prod_count();
+ IF EXISTS(SELECT `table_name`
+ FROM `INFORMATION_SCHEMA`.`TABLES`
+ WHERE `table_schema` = DATABASE()
+ AND `table_name` = 'stat_store_prod_count')
+ THEN
+ RENAME TABLE
+ `stat_store_prod_count` TO `old_stat_store_prod_count`,
+ `tmp_stat_store_prod_count` TO `stat_store_prod_count`;
+
+ ELSE
+ RENAME TABLE
+ `tmp_stat_store_prod_count` TO `stat_store_prod_count`;
+
+ END IF;
+
+
+ DROP TABLE IF EXISTS `old_stat_store_prod_count`;
+
END$$
+CREATE EVENT `e_generate_stat_store_prod_count`
+ ON SCHEDULE
+ EVERY 30 MINUTE STARTS '2019-02-05 15:01:03'
+ ON COMPLETION NOT PRESERVE
+ ENABLE
+ COMMENT ''
+ DO
+ BEGIN
+ CALL generate_stat_store_prod_count();
+ END$$
+
CREATE PROCEDURE `fetchCatTreeForStore`(
- IN `STORE_ID` int(11)
+ IN `STORE_ID` int(11)
)
BEGIN
DROP TABLE IF EXISTS `tmp_store_cat`;
CREATE TEMPORARY TABLE `tmp_store_cat`
- (INDEX `idx_cat_id` (`project_category_id`) )
- ENGINE MEMORY
- AS
- SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
- FROM `config_store_category` AS `csc`
- JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
- WHERE `csc`.`store_id` = STORE_ID
- GROUP BY `csc`.`store_category_id`
- ORDER BY `csc`.`order`, `pc`.`title`
- ;
-
- SET @NEW_ORDER := 0;
-
- UPDATE `tmp_store_cat` SET `order` = (@NEW_ORDER := @NEW_ORDER + 10);
-
- SELECT `sct`.`lft`, `sct`.`rgt`, `sct`.`project_category_id` AS `id`, `sct`.`title`, `scpc`.`count_product` AS `product_count`, `sct`.`xdg_type`, `sct`.`name_legacy`, if(`sct`.`rgt`-`sct`.`lft` = 1, 0, 1) AS `has_children`, (SELECT `project_category_id` FROM `stat_cat_tree` AS `sct2` WHERE `sct2`.`lft` < `sct`.`lft` AND `sct2`.`rgt` > `sct`.`rgt` ORDER BY `sct2`.`rgt` - `sct`.`rgt` LIMIT 1) AS `parent_id`
+ (
+ INDEX `idx_cat_id` (`project_category_id`)
+ )
+ ENGINE MEMORY
+ AS
+ SELECT `csc`.`store_id`, `csc`.`project_category_id`, `csc`.`order`, `pc`.`title`, `pc`.`lft`, `pc`.`rgt`
+ FROM `config_store_category` AS `csc`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
+ WHERE `csc`.`store_id` = `STORE_ID`
+ GROUP BY `csc`.`store_category_id`
+ ORDER BY `csc`.`order`, `pc`.`title`;
+
+ SET @`NEW_ORDER` := 0;
+
+ UPDATE `tmp_store_cat` SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10);
+
+ SELECT `sct`.`lft`,
+ `sct`.`rgt`,
+ `sct`.`project_category_id` AS `id`,
+ `sct`.`title`,
+ `scpc`.`count_product` AS `product_count`,
+ `sct`.`xdg_type`,
+ `sct`.`name_legacy`,
+ if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
+ (SELECT `project_category_id`
+ FROM `stat_cat_tree` AS `sct2`
+ WHERE `sct2`.`lft` < `sct`.`lft`
+ AND `sct2`.`rgt` > `sct`.`rgt`
+ ORDER BY `sct2`.`rgt` - `sct`.`rgt`
+ LIMIT 1) AS `parent_id`
FROM `tmp_store_cat` AS `cfc`
- JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
- #JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` is null
- JOIN `stat_store_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` is null
- WHERE cfc.store_id = STORE_ID
- ORDER BY cfc.`order`, sct.lft;
+ JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ #JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` is null
+ JOIN `stat_store_prod_count` AS `scpc`
+ ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` IS NULL
+ WHERE `cfc`.`store_id` = `STORE_ID`
+ ORDER BY `cfc`.`order`, `sct`.`lft`;
END$$
-CREATE PROCEDURE `fetchCatTreeWithTagsForStore`(
- IN `STORE_ID` INT(11),
- IN `TAGS` VARCHAR(255)
-)
+CREATE PROCEDURE `fetchCatTreeWithTagsForStore`(IN `STORE_ID` INT(11),
+ IN `TAGS` VARCHAR(255))
BEGIN
DROP TABLE IF EXISTS `tmp_store_cat_tags`;
CREATE TEMPORARY TABLE `tmp_store_cat_tags`
(
- INDEX `idx_cat_id` (`project_category_id`)
+ INDEX `idx_cat_id` (`project_category_id`)
)
- ENGINE MEMORY
- AS
- SELECT
- `csc`.`store_id`,
- `csc`.`project_category_id`,
- `csc`.`order`,
- `pc`.`title`,
- `pc`.`lft`,
- `pc`.`rgt`
- FROM `config_store_category` AS `csc`
- JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
- WHERE `csc`.`store_id` = STORE_ID
- GROUP BY `csc`.`store_category_id`
- ORDER BY `csc`.`order`, `pc`.`title`;
+ ENGINE MEMORY
+ AS
+ SELECT `csc`.`store_id`,
+ `csc`.`project_category_id`,
+ `csc`.`order`,
+ `pc`.`title`,
+ `pc`.`lft`,
+ `pc`.`rgt`
+ FROM `config_store_category` AS `csc`
+ JOIN `project_category` AS `pc` ON `pc`.`project_category_id` = `csc`.`project_category_id`
+ WHERE `csc`.`store_id` = `STORE_ID`
+ GROUP BY `csc`.`store_category_id`
+ ORDER BY `csc`.`order`, `pc`.`title`;
SET @`NEW_ORDER` := 0;
UPDATE `tmp_store_cat_tags`
SET `order` = (@`NEW_ORDER` := @`NEW_ORDER` + 10);
- SELECT
- `sct`.`lft`,
- `sct`.`rgt`,
- `sct`.`project_category_id` AS `id`,
- `sct`.`title`,
- `scpc`.`count_product` AS `product_count`,
- `sct`.`xdg_type`,
- `sct`.`name_legacy`,
- if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
- (SELECT `project_category_id`
- FROM `stat_cat_tree` AS `sct2`
- WHERE `sct2`.`lft` < `sct`.`lft` AND `sct2`.`rgt` > `sct`.`rgt`
- ORDER BY `sct2`.`rgt` - `sct`.`rgt`
- LIMIT 1) AS `parent_id`
+ SELECT `sct`.`lft`,
+ `sct`.`rgt`,
+ `sct`.`project_category_id` AS `id`,
+ `sct`.`title`,
+ `scpc`.`count_product` AS `product_count`,
+ `sct`.`xdg_type`,
+ `sct`.`name_legacy`,
+ if(`sct`.`rgt` - `sct`.`lft` = 1, 0, 1) AS `has_children`,
+ (SELECT `project_category_id`
+ FROM `stat_cat_tree` AS `sct2`
+ WHERE `sct2`.`lft` < `sct`.`lft`
+ AND `sct2`.`rgt` > `sct`.`rgt`
+ ORDER BY `sct2`.`rgt` - `sct`.`rgt`
+ LIMIT 1) AS `parent_id`
FROM `tmp_store_cat_tags` AS `cfc`
- JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
- #LEFT JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` = TAGS
- JOIN `stat_store_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`stores` = STORE_ID
- WHERE `cfc`.`store_id` = STORE_ID
+ JOIN `stat_cat_tree` AS `sct` ON find_in_set(`cfc`.`project_category_id`, `sct`.`ancestor_id_path`)
+ #LEFT JOIN `stat_cat_prod_count` AS `scpc` ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`tag_id` = TAGS
+ JOIN `stat_store_prod_count` AS `scpc`
+ ON `sct`.`project_category_id` = `scpc`.`project_category_id` AND `scpc`.`stores` = `STORE_ID`
+ WHERE `cfc`.`store_id` = `STORE_ID`
ORDER BY `cfc`.`order`, `sct`.`lft`;
END$$
diff --git a/sql_code/20190212_project_major_updated_at.sql b/sql_code/20190212_project_major_updated_at.sql
index 506152b86..4a51b5445 100644
--- a/sql_code/20190212_project_major_updated_at.sql
+++ b/sql_code/20190212_project_major_updated_at.sql
@@ -1,198 +1,200 @@
-- 1 alter table project add column
SET SQL_SAFE_UPDATES = 0;
-alter table project add column major_updated_at timestamp default now() AFTER changed_at;
-update project set major_updated_at = IFNULL(changed_at, created_at);
+ALTER TABLE `project`
+ ADD COLUMN `major_updated_at` timestamp DEFAULT now() AFTER `changed_at`;
+UPDATE `project`
+SET `major_updated_at` = IFNULL(`changed_at`, `created_at`);
-- 2 create trigger
DELIMITER $$
-DROP TRIGGER IF EXISTS trg_project_major_updated_at$$
+DROP TRIGGER IF EXISTS `trg_project_major_updated_at`$$
USE `root`$$
-CREATE DEFINER='root' TRIGGER `trg_project_major_updated_at` BEFORE UPDATE ON `project` FOR EACH ROW
- BEGIN
- if NEW.changed_at <> OLD.changed_at and DATEDIFF(NEW.changed_at, OLD.major_updated_at)>7 THEN
- SET NEW.major_updated_at = NEW.changed_at;
- END IF;
- END$$
+CREATE DEFINER ='root' TRIGGER `trg_project_major_updated_at`
+ BEFORE UPDATE
+ ON `project`
+ FOR EACH ROW
+BEGIN
+ IF `NEW`.`changed_at` <> `OLD`.`changed_at` AND DATEDIFF(`NEW`.`changed_at`, `OLD`.`major_updated_at`) > 7 THEN
+ SET `NEW`.`major_updated_at` = `NEW`.`changed_at`;
+ END IF;
+END$$
DELIMITER ;
-- 3 alter generate_stat_projects procedure
DELIMITER $$
-drop procedure IF EXISTS generate_stat_project$$
+DROP PROCEDURE IF EXISTS `generate_stat_project`$$
CREATE PROCEDURE `generate_stat_project`()
BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
+ GROUP BY `reports_project`.`project_id`;
+
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `tag_object`.`tag_parent_object_id` AS `project_id`,
+ GROUP_CONCAT(DISTINCT `tag_object`.`tag_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `tag`.`tag_fullname`) AS `package_name_list`
+ FROM `tag_object`
+ JOIN
+ `tag` ON `tag_object`.`tag_id` = `tag`.`tag_id`
+ JOIN
+ `ppload`.`ppload_files` `files` ON `files`.`id` = `tag_object`.`tag_object_id`
+ WHERE `tag_object`.`tag_group_id` = 8
+ AND `tag_object`.`is_deleted` = 0
+ AND `files`.`active` = 1
+ GROUP BY `tag_object`.`tag_parent_object_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- tag_object.tag_parent_object_id as project_id,
- GROUP_CONCAT(DISTINCT tag_object.tag_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT tag.tag_fullname) AS `package_name_list`
- FROM
- tag_object
- JOIN
- tag ON tag_object.tag_id = tag.tag_id
- JOIN
- ppload.ppload_files files ON files.id = tag_object.tag_object_id
- WHERE
- tag_object.tag_group_id = 8
- AND tag_object.is_deleted = 0
- AND files.active = 1
- GROUP BY tag_object.tag_parent_object_id
- ;
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag_name`) AS `tag_names`,
+ GROUP_CONCAT(`tag_id`) AS `tag_ids`,
+ `tag_project_id`
+ FROM (
+ SELECT DISTINCT `tag`.`tag_name`,
+ `tag`.`tag_id`,
+ `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1 #project
+ AND `tgo`.`is_deleted` = 0
+ UNION ALL
+ SELECT DISTINCT `tag`.`tag_name`,
+ `tag`.`tag_ID`,
+ `tgo`.`tag_parent_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `tgo`.`tag_object_id`
+ WHERE `tag_type_id` = 3 #file
+ AND `files`.`active` = 1
+ AND `tgo`.`is_deleted` = 0
+ ) `A`
+ GROUP BY `tag_project_id`
+ ORDER BY `tag_project_id`;
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT
- GROUP_CONCAT(tag_name) AS tag_names,
- GROUP_CONCAT(tag_id) AS tag_ids,
- tag_project_id
- FROM (
- select
- distinct tag.tag_name,
- tag.tag_id,
- tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1 #project
- AND tgo.is_deleted = 0
- UNION ALL
- select
- distinct tag.tag_name,
- tag.tag_ID,
- tgo.tag_parent_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- JOIN ppload.ppload_files files ON files.id = tgo.tag_object_id
- WHERE tag_type_id = 3 #file
- AND files.active = 1
- AND tgo.is_deleted = 0
- ) A
- GROUP BY tag_project_id
- ORDER BY tag_project_id;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_ppload` (`ppload_collection_id`),
+ INDEX `idx_cat` (`project_category_id`),
+ INDEX `idx_member` (`member_id`),
+ INDEX `idx_source_url` (`source_url`(50))
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`project_license_id` AS `project_license_id`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`major_updated_at` AS `major_updated_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`source_url` AS `source_url`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ CAST(`project`.`ppload_collection_id` AS UNSIGNED) AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`ghns_excluded` AS `ghns_excluded`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`,
+ `t`.`tag_ids` AS `tag_ids`,
+ `sdqy`.`amount` AS `count_downloads_quarter`,
+ `project_license`.`title` AS `project_license_title`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `stat_downloads_quarter_year` AS `sdqy` ON `sdqy`.`project_id` = `project`.`project_id`
+ LEFT JOIN `project_license` ON `project_license`.`project_license_id` = `project`.`project_license_id`
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND `project`.`type_id` = 1
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_ppload` (`ppload_collection_id`), INDEX `idx_cat` (`project_category_id`),INDEX `idx_member` (`member_id`),INDEX `idx_source_url` (`source_url`(50)))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`project_license_id` AS `project_license_id`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`major_updated_at` AS `major_updated_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`source_url` AS `source_url`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- CAST(`project`.`ppload_collection_id` AS UNSIGNED) AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`ghns_excluded` AS `ghns_excluded`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.`package_type_id_list` AS `package_types`,
- `tppt`.`package_name_list` AS `package_names`,
- `t`.`tag_names` AS `tags`,
- `t`.`tag_ids` AS `tag_ids`,
- `sdqy`.amount AS count_downloads_quarter,
- `project_license`.title AS project_license_title
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- LEFT JOIN `tmp_project_tags` AS t ON t.`tag_project_id` = project.`project_id`
- LEFT JOIN `stat_downloads_quarter_year` AS sdqy ON sdqy.project_id = project.project_id
- LEFT JOIN `project_license` ON project_license.project_license_id = project.project_license_id
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND `project`.`type_id` = 1
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
-
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
- DROP TABLE IF EXISTS old_stat_projects;
- END$$
+ DROP TABLE IF EXISTS `old_stat_projects`;
+END$$
DELIMITER ;
diff --git a/sql_code/20190213_system_tags_update.sql b/sql_code/20190213_system_tags_update.sql
index 69e8440ad..e1266b7ce 100644
--- a/sql_code/20190213_system_tags_update.sql
+++ b/sql_code/20190213_system_tags_update.sql
@@ -1,175 +1,178 @@
-
-- drop old procedure
-drop procedure generate_tmp_cat_tag_proj;
-
-
-DROP TABLE IF EXISTS stat_cat_tree_hierachie;
-
-create table stat_cat_tree_hierachie
-(
- project_category_id int,
- ancestor_id_path varchar(50),
- catid1 int,
- catid2 int,
- catid3 int,
- catid4 int,
- catid5 int,
- catid6 int,
- created_at timestamp not null default now(),
- PRIMARY KEY (project_category_id),
- INDEX ix_stat_cat_tree_hierachie_1 (catid1),
- INDEX ix_stat_cat_tree_hierachie_2 (catid2),
- INDEX ix_stat_cat_tree_hierachie_3 (catid3),
- INDEX ix_stat_cat_tree_hierachie_4 (catid4),
- INDEX ix_stat_cat_tree_hierachie_5 (catid5),
- INDEX ix_stat_cat_tree_hierachie_6 (catid6)
+DROP PROCEDURE `generate_tmp_cat_tag_proj`;
+
+
+DROP TABLE IF EXISTS `stat_cat_tree_hierachie`;
+
+CREATE TABLE `stat_cat_tree_hierachie`
+(
+ `project_category_id` int,
+ `ancestor_id_path` varchar(50),
+ `catid1` int,
+ `catid2` int,
+ `catid3` int,
+ `catid4` int,
+ `catid5` int,
+ `catid6` int,
+ `created_at` timestamp NOT NULL DEFAULT now(),
+ PRIMARY KEY (`project_category_id`),
+ INDEX `ix_stat_cat_tree_hierachie_1` (`catid1`),
+ INDEX `ix_stat_cat_tree_hierachie_2` (`catid2`),
+ INDEX `ix_stat_cat_tree_hierachie_3` (`catid3`),
+ INDEX `ix_stat_cat_tree_hierachie_4` (`catid4`),
+ INDEX `ix_stat_cat_tree_hierachie_5` (`catid5`),
+ INDEX `ix_stat_cat_tree_hierachie_6` (`catid6`)
);
-truncate table stat_cat_tree_hierachie;
-insert into stat_cat_tree_hierachie
-select
-t.project_category_id,
-t.ancestor_id_path,
-SPLIT_STRING(t.ancestor_id_path, ',', 1) as catid1, -- root no category tags ignore
-SPLIT_STRING(t.ancestor_id_path, ',', 2) as catid2,
-SPLIT_STRING(t.ancestor_id_path, ',', 3) as catid3,
-SPLIT_STRING(t.ancestor_id_path, ',', 4) as catid4,
-SPLIT_STRING(t.ancestor_id_path, ',', 5) as catid5,
-SPLIT_STRING(t.ancestor_id_path, ',', 6) as catid6,
-now() as created_at
-from stat_cat_tree t;
-
-
-DROP TABLE IF EXISTS tmp_project_system_tag;
-
-CREATE TABLE `tmp_project_system_tag` (
- `project_id` INT(11) NOT NULL,
- `project_category_id` INT(11) NOT NULL,
- `tag_id` INT(11) NOT NULL,
- `ancestor_id_path` VARCHAR(50) NULL DEFAULT NULL,
- INDEX(`project_id`, `project_category_id`, `tag_id`)
+TRUNCATE TABLE `stat_cat_tree_hierachie`;
+INSERT INTO `stat_cat_tree_hierachie`
+SELECT `t`.`project_category_id`,
+ `t`.`ancestor_id_path`,
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 1) AS `catid1`, -- root no category tags ignore
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 2) AS `catid2`,
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 3) AS `catid3`,
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 4) AS `catid4`,
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 5) AS `catid5`,
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 6) AS `catid6`,
+ now() AS `created_at`
+FROM `stat_cat_tree` `t`;
+
+
+DROP TABLE IF EXISTS `tmp_project_system_tag`;
+
+CREATE TABLE `tmp_project_system_tag`
+(
+ `project_id` INT(11) NOT NULL,
+ `project_category_id` INT(11) NOT NULL,
+ `tag_id` INT(11) NOT NULL,
+ `ancestor_id_path` VARCHAR(50) NULL DEFAULT NULL,
+ INDEX (`project_id`, `project_category_id`, `tag_id`)
);
-drop procedure IF EXISTS generate_tmp_cat_tag_proj_init;
+DROP PROCEDURE IF EXISTS `generate_tmp_cat_tag_proj_init`;
DELIMITER $$
CREATE PROCEDURE `generate_tmp_cat_tag_proj_init`()
BEGIN
- TRUNCATE table tmp_project_system_tag;
-
- truncate table stat_cat_tree_hierachie;
- insert into stat_cat_tree_hierachie
- select
- t.project_category_id,
- t.ancestor_id_path,
- SPLIT_STRING(t.ancestor_id_path, ',', 1) as catid1, -- root no category tags ignore
- SPLIT_STRING(t.ancestor_id_path, ',', 2) as catid2,
- SPLIT_STRING(t.ancestor_id_path, ',', 3) as catid3,
- SPLIT_STRING(t.ancestor_id_path, ',', 4) as catid4,
- SPLIT_STRING(t.ancestor_id_path, ',', 5) as catid5,
- SPLIT_STRING(t.ancestor_id_path, ',', 6) as catid6,
- now() as created_at
- from stat_cat_tree t;
-
- INSERT INTO tmp_project_system_tag
- select p.project_id, p.project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree_hierachie t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = t.catid2
- WHERE p.`status` = 100
- ;
-
- INSERT INTO tmp_project_system_tag
- select p.project_id, p.project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree_hierachie t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = t.catid3
- WHERE p.`status` = 100
- ;
-
- INSERT INTO tmp_project_system_tag
- select p.project_id, p.project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree_hierachie t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = t.catid4
- WHERE p.`status` = 100
- ;
-
- INSERT INTO tmp_project_system_tag
- select p.project_id, p.project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree_hierachie t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = t.catid5
- WHERE p.`status` = 100
- ;
-
- INSERT INTO tmp_project_system_tag
- select p.project_id, p.project_category_id, c.tag_id, t.ancestor_id_path from project p
- join stat_cat_tree_hierachie t on t.project_category_id = p.project_category_id
- join category_tag c on c.category_id = t.catid6
- WHERE p.`status` = 100
- ;
-
-
- DROP TABLE IF EXISTS tmp_tag_object_to_delete;
- CREATE TEMPORARY TABLE tmp_tag_object_to_delete
- (PRIMARY KEY `primary` (tag_item_id))
- ENGINE MyISAM
- AS
- SELECT
- o.tag_item_id
- FROM
- tag_object o
- LEFT JOIN tmp_project_system_tag t on t.project_id = o.tag_object_id and t.tag_id = o.tag_id
- WHERE
- o.tag_group_id = 6 and o.is_deleted = 0 and t.project_id is null
- ;
-
+ TRUNCATE TABLE `tmp_project_system_tag`;
+
+ TRUNCATE TABLE `stat_cat_tree_hierachie`;
+ INSERT INTO `stat_cat_tree_hierachie`
+ SELECT `t`.`project_category_id`,
+ `t`.`ancestor_id_path`,
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 1) AS `catid1`, -- root no category tags ignore
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 2) AS `catid2`,
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 3) AS `catid3`,
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 4) AS `catid4`,
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 5) AS `catid5`,
+ SPLIT_STRING(`t`.`ancestor_id_path`, ',', 6) AS `catid6`,
+ now() AS `created_at`
+ FROM `stat_cat_tree` `t`;
+
+ INSERT INTO `tmp_project_system_tag`
+ SELECT `p`.`project_id`, `p`.`project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree_hierachie` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = `t`.`catid2`
+ WHERE `p`.`status` = 100;
+
+ INSERT INTO `tmp_project_system_tag`
+ SELECT `p`.`project_id`, `p`.`project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree_hierachie` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = `t`.`catid3`
+ WHERE `p`.`status` = 100;
+
+ INSERT INTO `tmp_project_system_tag`
+ SELECT `p`.`project_id`, `p`.`project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree_hierachie` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = `t`.`catid4`
+ WHERE `p`.`status` = 100;
+
+ INSERT INTO `tmp_project_system_tag`
+ SELECT `p`.`project_id`, `p`.`project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree_hierachie` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = `t`.`catid5`
+ WHERE `p`.`status` = 100;
+
+ INSERT INTO `tmp_project_system_tag`
+ SELECT `p`.`project_id`, `p`.`project_category_id`, `c`.`tag_id`, `t`.`ancestor_id_path`
+ FROM `project` `p`
+ JOIN `stat_cat_tree_hierachie` `t` ON `t`.`project_category_id` = `p`.`project_category_id`
+ JOIN `category_tag` `c` ON `c`.`category_id` = `t`.`catid6`
+ WHERE `p`.`status` = 100;
+
+
+ DROP TABLE IF EXISTS `tmp_tag_object_to_delete`;
+ CREATE TEMPORARY TABLE `tmp_tag_object_to_delete`
+ (
+ PRIMARY KEY `primary` (`tag_item_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `o`.`tag_item_id`
+ FROM `tag_object` `o`
+ LEFT JOIN `tmp_project_system_tag` `t`
+ ON `t`.`project_id` = `o`.`tag_object_id` AND `t`.`tag_id` = `o`.`tag_id`
+ WHERE `o`.`tag_group_id` = 6
+ AND `o`.`is_deleted` = 0
+ AND `t`.`project_id` IS NULL;
+
/*DELETE SYSTEM TAGS -- 12155 TO DELETE*/
- update tag_object set is_deleted = 1 , tag_changed = now()
- where tag_item_id in
- (
- SELECT
- o.tag_item_id
- FROM
- tmp_tag_object_to_delete o
- );
-
-
-
-
-
- DROP TABLE IF EXISTS tmp_tag_object_to_insert;
- CREATE TEMPORARY TABLE tmp_tag_object_to_insert
- /*(INDEX (project_id,project_category_id,tag_id))*/
- ENGINE MyISAM
- AS
- SELECT
- t.*
- FROM
- tmp_project_system_tag t
- LEFT JOIN tag_object o on t.project_id = o.tag_object_id and t.tag_id = o.tag_id and o.tag_group_id = 6
- WHERE
- o.tag_item_id is null
- ;
-
-
- INSERT INTO tag_object
- SELECT null AS tag_item_id, p.tag_id, 1 AS tag_type_id, 6 AS tag_group_id,p.project_id AS tag_object_id,null as tag_parenet_object_id,NOW() AS tag_created, null AS tag_changed, 0 as is_deleted
+ UPDATE `tag_object`
+ SET `is_deleted` = 1,
+ `tag_changed` = now()
+ WHERE `tag_item_id` IN
+ (
+ SELECT `o`.`tag_item_id`
+ FROM `tmp_tag_object_to_delete` `o`
+ );
+
+
+ DROP TABLE IF EXISTS `tmp_tag_object_to_insert`;
+ CREATE TEMPORARY TABLE `tmp_tag_object_to_insert`
+ /*(INDEX (project_id,project_category_id,tag_id))*/
+ ENGINE MyISAM
+ AS
+ SELECT `t`.*
+ FROM `tmp_project_system_tag` `t`
+ LEFT JOIN `tag_object` `o` ON `t`.`project_id` = `o`.`tag_object_id` AND `t`.`tag_id` = `o`.`tag_id` AND
+ `o`.`tag_group_id` = 6
+ WHERE `o`.`tag_item_id` IS NULL;
+
+
+ INSERT INTO `tag_object`
+ SELECT NULL AS `tag_item_id`,
+ `p`.`tag_id`,
+ 1 AS `tag_type_id`,
+ 6 AS `tag_group_id`,
+ `p`.`project_id` AS `tag_object_id`,
+ NULL AS `tag_parenet_object_id`,
+ NOW() AS `tag_created`,
+ NULL AS `tag_changed`,
+ 0 AS `is_deleted`
FROM (
- select DISTINCT * from tmp_tag_object_to_insert
- ) p;
-
-
+ SELECT DISTINCT *
+ FROM `tmp_tag_object_to_insert`
+ ) `p`;
+
+
END;
$$
CREATE EVENT `e_generate_tmp_cat_tag_proj_init`
- ON SCHEDULE
- EVERY 1 DAY STARTS '2019-02-19 17:00:00'
- ON COMPLETION NOT PRESERVE
- ENABLE
- COMMENT ''
- DO BEGIN
- call generate_tmp_cat_tag_proj_init();
-END$$
+ ON SCHEDULE
+ EVERY 1 DAY STARTS '2019-02-19 17:00:00'
+ ON COMPLETION NOT PRESERVE
+ ENABLE
+ COMMENT ''
+ DO
+ BEGIN
+ CALL generate_tmp_cat_tag_proj_init();
+ END$$
DELIMITER ;
diff --git a/sql_code/20190214_store_config_stay_in_context.sql b/sql_code/20190214_store_config_stay_in_context.sql
index 8e180f39d..36e6693f1 100644
--- a/sql_code/20190214_store_config_stay_in_context.sql
+++ b/sql_code/20190214_store_config_stay_in_context.sql
@@ -1,7 +1,7 @@
ALTER TABLE `config_store`
- ADD COLUMN `stay_in_context` INT(1) NULL DEFAULT 0 AFTER `render_view_postfix`;
+ ADD COLUMN `stay_in_context` INT(1) NULL DEFAULT 0 AFTER `render_view_postfix`;
-UPDATE config_store s
-SET s.stay_in_context = 0
-WHERE s.stay_in_context IS NULL;
+UPDATE `config_store` `s`
+SET `s`.`stay_in_context` = 0
+WHERE `s`.`stay_in_context` IS NULL;
diff --git a/sql_code/20190215_update_solr_query_inactive_files_excluded.sql b/sql_code/20190215_update_solr_query_inactive_files_excluded.sql
index 18d1c502c..e4e61e27e 100644
--- a/sql_code/20190215_update_solr_query_inactive_files_excluded.sql
+++ b/sql_code/20190215_update_solr_query_inactive_files_excluded.sql
@@ -1,311 +1,360 @@
-drop PROCEDURE solr_query_fullimport_prepare;
+DROP PROCEDURE `solr_query_fullimport_prepare`;
DELIMITER $$
-CREATE PROCEDURE `solr_query_fullimport_prepare`()
+CREATE PROCEDURE `solr_query_fullimport_prepare`()
BEGIN
-
-
- DROP TABLE IF EXISTS tmp_solr_cat_tree;
- CREATE TEMPORARY TABLE tmp_solr_cat_tree
- (PRIMARY KEY `primary` (project_category_id) )
- AS
- SELECT
- pc.project_category_id,
- pc.title,
- pc.is_active,
- count(pc.lft) AS depth,
- GROUP_CONCAT(pc2.project_category_id ORDER BY pc2.lft) AS ancestor_id_path,
- GROUP_CONCAT(pc2.title ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path
- FROM project_category AS pc, project_category AS pc2
- WHERE (pc.lft BETWEEN pc2.lft AND pc2.rgt)
- GROUP BY pc.lft
- ORDER BY pc.lft;
-
- DROP TABLE IF EXISTS tmp_solr_cat_store;
- CREATE TEMPORARY TABLE tmp_solr_cat_store
- (PRIMARY KEY `primary` (project_category_id) )
- AS
- SELECT
- tct.project_category_id,
- tct.ancestor_id_path,
- tct.title,
- tct.is_active,
- group_concat(store_id) AS stores
- FROM tmp_solr_cat_tree AS tct, config_store_category AS csc
- WHERE FIND_IN_SET(csc.project_category_id, tct.ancestor_id_path) > 0
- GROUP BY tct.project_category_id
- ORDER BY tct.project_category_id;
-
- DROP TABLE IF EXISTS tmp_solr_project_tags;
- CREATE TEMPORARY TABLE tmp_solr_project_tags
- (PRIMARY KEY `primary` (tag_project_id) )
- AS
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- , tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tgo.tag_type_id = 1 and tgo.tag_group_id in (5,6) and tgo.is_deleted = 0
- GROUP BY tgo.tag_object_id;
-
- DROP TABLE IF EXISTS tmp_solr_project_license;
- CREATE TEMPORARY TABLE tmp_solr_project_license
- (PRIMARY KEY `primary` (license_project_id))
+
+
+ DROP TABLE IF EXISTS `tmp_solr_cat_tree`;
+ CREATE TEMPORARY TABLE `tmp_solr_cat_tree`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
+ AS
+ SELECT `pc`.`project_category_id`,
+ `pc`.`title`,
+ `pc`.`is_active`,
+ count(`pc`.`lft`) AS `depth`,
+ GROUP_CONCAT(`pc2`.`project_category_id` ORDER BY `pc2`.`lft`) AS `ancestor_id_path`,
+ GROUP_CONCAT(`pc2`.`title` ORDER BY `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path`
+ FROM `project_category` AS `pc`,
+ `project_category` AS `pc2`
+ WHERE (`pc`.`lft` BETWEEN `pc2`.`lft` AND `pc2`.`rgt`)
+ GROUP BY `pc`.`lft`
+ ORDER BY `pc`.`lft`;
+
+ DROP TABLE IF EXISTS `tmp_solr_cat_store`;
+ CREATE TEMPORARY TABLE `tmp_solr_cat_store`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
+ AS
+ SELECT `tct`.`project_category_id`,
+ `tct`.`ancestor_id_path`,
+ `tct`.`title`,
+ `tct`.`is_active`,
+ group_concat(`store_id`) AS `stores`
+ FROM `tmp_solr_cat_tree` AS `tct`,
+ `config_store_category` AS `csc`
+ WHERE FIND_IN_SET(`csc`.`project_category_id`, `tct`.`ancestor_id_path`) > 0
+ GROUP BY `tct`.`project_category_id`
+ ORDER BY `tct`.`project_category_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ AS
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ , `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tgo`.`tag_type_id` = 1
+ AND `tgo`.`tag_group_id` IN (5, 6)
+ AND `tgo`.`is_deleted` = 0
+ GROUP BY `tgo`.`tag_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_project_license`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_license`
+ (
+ PRIMARY KEY `primary` (`license_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `t`.`tag_object_id` AS `license_project_id`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_name`) AS `license_name_list`
+ FROM `tag_object` `t`
+ INNER JOIN `tag` `ta` ON `ta`.`tag_id` = `t`.`tag_id`
+ WHERE `t`.`tag_type_id` = 1
+ AND `t`.`tag_group_id` = 7
+ AND `t`.`is_deleted` = 0
+ GROUP BY `tag_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_package_types`
+ (
+ PRIMARY KEY `primary` (`package_project_id`)
+ )
ENGINE MyISAM
- AS
- SELECT
- t.tag_object_id as license_project_id,
- GROUP_CONCAT(DISTINCT ta.tag_name) AS `license_name_list`
- FROM tag_object t
- INNER JOIN tag ta on ta.tag_id = t.tag_id
- WHERE t.tag_type_id = 1 and t.tag_group_id = 7 AND t.is_deleted = 0
- group by tag_object_id
- ;
-
- DROP TABLE IF EXISTS tmp_solr_project_package_types;
- CREATE TEMPORARY TABLE tmp_solr_project_package_types
- (PRIMARY KEY `primary` (package_project_id))
- ENGINE MyISAM
- AS
- SELECT
- t.tag_parent_object_id as package_project_id,
- GROUP_CONCAT(DISTINCT ta.tag_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT ta.tag_name) AS `package_name_list`
- FROM tag_object t
- INNER JOIN tag ta on ta.tag_id = t.tag_id
- JOIN ppload.ppload_files files ON files.id = t.tag_object_id AND files.active = 1
- WHERE t.tag_type_id = 3 and t.tag_group_id = 8 AND t.is_deleted = 0
- group by tag_parent_object_id
- ;
-
- DROP TABLE IF EXISTS tmp_solr_project_arch_types;
- CREATE TEMPORARY TABLE tmp_solr_project_arch_types
- (PRIMARY KEY `primary` (arch_project_id))
- ENGINE MyISAM
- AS
- SELECT
- t.tag_parent_object_id as arch_project_id,
- GROUP_CONCAT(DISTINCT ta.tag_id) AS arch_type_id_list,
- GROUP_CONCAT(DISTINCT ta.tag_name) AS `arch_name_list`
- FROM tag_object t
- INNER JOIN tag ta on ta.tag_id = t.tag_id
- JOIN ppload.ppload_files files ON files.id = t.tag_object_id AND files.active = 1
- WHERE t.tag_type_id = 3 and t.tag_group_id = 9 AND t.is_deleted = 0
- group by tag_parent_object_id
- ;
-
- DROP TABLE IF EXISTS tmp_solr_query_fullimport;
- create table tmp_solr_query_fullimport as
-
- SELECT
- project_id,
- project.member_id AS project_member_id,
- project.project_category_id AS project_category_id,
- project.title AS project_title,
- description,
- image_small,
- member.username,
- member.firstname,
- member.lastname,
- tcs.title AS cat_title,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- laplace_score(project.count_likes, project.count_dislikes) AS `laplace_score`,
- DATE_FORMAT(project.created_at, '%Y-%m-%dT%TZ') AS created_at,
- DATE_FORMAT(project.changed_at, '%Y-%m-%dT%TZ') AS changed_at,
- tcs.stores,
- tcs.ancestor_id_path AS `cat_id_ancestor_path`,
- sppt.package_name_list AS `package_names`,
- appt.arch_name_list AS `arch_names`,
- c.license_name_list AS `license_names`,
- t.tag_names AS `tags`
- FROM project
- JOIN member ON member.member_id = project.member_id
- LEFT JOIN tmp_solr_cat_store AS tcs ON project.project_category_id = tcs.project_category_id
- LEFT JOIN tmp_solr_project_package_types AS sppt ON sppt.package_project_id = project.project_id
- LEFT JOIN tmp_solr_project_arch_types AS appt ON appt.arch_project_id = project.project_id
- LEFT JOIN tmp_solr_project_license AS c ON c.license_project_id = project.project_id
- LEFT JOIN tmp_solr_project_tags AS t ON t.tag_project_id = project.project_id
-
- WHERE project.`status` = 100 AND project.`type_id` = 1 AND member.`is_active` = 1 AND tcs.`is_active` = 1;
-
+ AS
+ SELECT `t`.`tag_parent_object_id` AS `package_project_id`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_name`) AS `package_name_list`
+ FROM `tag_object` `t`
+ INNER JOIN `tag` `ta` ON `ta`.`tag_id` = `t`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `t`.`tag_object_id` AND `files`.`active` = 1
+ WHERE `t`.`tag_type_id` = 3
+ AND `t`.`tag_group_id` = 8
+ AND `t`.`is_deleted` = 0
+ GROUP BY `tag_parent_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_project_arch_types`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_arch_types`
+ (
+ PRIMARY KEY `primary` (`arch_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `t`.`tag_parent_object_id` AS `arch_project_id`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_id`) AS `arch_type_id_list`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_name`) AS `arch_name_list`
+ FROM `tag_object` `t`
+ INNER JOIN `tag` `ta` ON `ta`.`tag_id` = `t`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `t`.`tag_object_id` AND `files`.`active` = 1
+ WHERE `t`.`tag_type_id` = 3
+ AND `t`.`tag_group_id` = 9
+ AND `t`.`is_deleted` = 0
+ GROUP BY `tag_parent_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_query_fullimport`;
+ CREATE TABLE `tmp_solr_query_fullimport` AS
+
+ SELECT `project_id`,
+ `project`.`member_id` AS `project_member_id`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`title` AS `project_title`,
+ `description`,
+ `image_small`,
+ `member`.`username`,
+ `member`.`firstname`,
+ `member`.`lastname`,
+ `tcs`.`title` AS `cat_title`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ DATE_FORMAT(`project`.`created_at`, '%Y-%m-%dT%TZ') AS `created_at`,
+ DATE_FORMAT(`project`.`changed_at`, '%Y-%m-%dT%TZ') AS `changed_at`,
+ `tcs`.`stores`,
+ `tcs`.`ancestor_id_path` AS `cat_id_ancestor_path`,
+ `sppt`.`package_name_list` AS `package_names`,
+ `appt`.`arch_name_list` AS `arch_names`,
+ `c`.`license_name_list` AS `license_names`,
+ `t`.`tag_names` AS `tags`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ LEFT JOIN `tmp_solr_cat_store` AS `tcs` ON `project`.`project_category_id` = `tcs`.`project_category_id`
+ LEFT JOIN `tmp_solr_project_package_types` AS `sppt`
+ ON `sppt`.`package_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_solr_project_arch_types` AS `appt` ON `appt`.`arch_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_solr_project_license` AS `c` ON `c`.`license_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_solr_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+
+ WHERE `project`.`status` = 100
+ AND `project`.`type_id` = 1
+ AND `member`.`is_active` = 1
+ AND `tcs`.`is_active` = 1;
+
END$$
DELIMITER ;
-call solr_query_fullimport_prepare();
+CALL solr_query_fullimport_prepare();
-drop PROCEDURE solr_query_delta_import_new;
+DROP PROCEDURE `solr_query_delta_import_new`;
DELIMITER $$
-CREATE PROCEDURE `solr_query_delta_import_new`(IN projectID INT(11))
+CREATE PROCEDURE `solr_query_delta_import_new`(IN `projectID` INT(11))
BEGIN
- DROP TABLE IF EXISTS tmp_cat_tree;
- CREATE TEMPORARY TABLE tmp_cat_tree
- (PRIMARY KEY `primary` (project_category_id) )
- AS
- SELECT
- pc.project_category_id,
- pc.title,
- pc.is_active,
- count(pc.lft) AS depth,
- GROUP_CONCAT(pc2.project_category_id ORDER BY pc2.lft) AS ancestor_id_path,
- GROUP_CONCAT(pc2.title ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path
- FROM project_category AS pc, project_category AS pc2
- WHERE (pc.lft BETWEEN pc2.lft AND pc2.rgt)
- GROUP BY pc.lft
- ORDER BY pc.lft;
-
- DROP TABLE IF EXISTS tmp_solr_cat_store;
- CREATE TEMPORARY TABLE tmp_solr_cat_store
- (PRIMARY KEY `primary` (project_category_id) )
+ DROP TABLE IF EXISTS `tmp_cat_tree`;
+ CREATE TEMPORARY TABLE `tmp_cat_tree`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
+ AS
+ SELECT `pc`.`project_category_id`,
+ `pc`.`title`,
+ `pc`.`is_active`,
+ count(`pc`.`lft`) AS `depth`,
+ GROUP_CONCAT(`pc2`.`project_category_id` ORDER BY `pc2`.`lft`) AS `ancestor_id_path`,
+ GROUP_CONCAT(`pc2`.`title` ORDER BY `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path`
+ FROM `project_category` AS `pc`,
+ `project_category` AS `pc2`
+ WHERE (`pc`.`lft` BETWEEN `pc2`.`lft` AND `pc2`.`rgt`)
+ GROUP BY `pc`.`lft`
+ ORDER BY `pc`.`lft`;
+
+ DROP TABLE IF EXISTS `tmp_solr_cat_store`;
+ CREATE TEMPORARY TABLE `tmp_solr_cat_store`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
AS
- SELECT
- tct.project_category_id,
- tct.ancestor_id_path,
- tct.title,
- tct.is_active,
- group_concat(store_id) AS stores
- FROM tmp_cat_tree AS tct, config_store_category AS csc
- WHERE FIND_IN_SET(csc.project_category_id, tct.ancestor_id_path) > 0
- GROUP BY tct.project_category_id
- ORDER BY tct.project_category_id;
-
- SELECT
- project_id,
- project.member_id AS project_member_id,
- project.project_category_id AS project_category_id,
- project.title AS project_title,
- description,
- image_small,
- member.username,
- member.firstname,
- member.lastname,
- tcs.title AS cat_title,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- laplace_score(project.count_likes, project.count_dislikes) AS `laplace_score`,
- DATE_FORMAT(project.created_at, '%Y-%m-%dT%TZ') AS created_at,
- DATE_FORMAT(project.changed_at, '%Y-%m-%dT%TZ') AS changed_at,
- tcs.stores,
- tcs.ancestor_id_path AS `cat_id_ancestor_path`,
- (
-
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag , ppload.ppload_files files
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id = 8 and tag_object.tag_type_id = 3 and tag_object.is_deleted = 0 and tag_object.tag_parent_object_id = project.project_id
- and tag_object.tag_object_id = files.id and files.active = 1
- ) as package_names ,
- (
-
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag , ppload.ppload_files files
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id = 9 and tag_object.tag_type_id = 3 and tag_object.is_deleted = 0 and tag_object.tag_parent_object_id = project.project_id
- and tag_object.tag_object_id = files.id and files.active = 1
- ) as arch_names,
- (
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id = 7 and tag_object.tag_type_id = 1 and tag_object.is_deleted = 0 and tag_object.tag_object_id = project.project_id
- ) as license_names,
- (
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id in (5,6) and tag_object.tag_type_id = 1 and tag_object.is_deleted = 0 and tag_object.tag_object_id = project.project_id
- ) as tags
- FROM project
- JOIN member ON member.member_id = project.member_id
- LEFT JOIN tmp_solr_cat_store AS tcs ON project.project_category_id = tcs.project_category_id
- WHERE project_id = projectID and project.status=100 and member.is_active=1;
-
+ SELECT `tct`.`project_category_id`,
+ `tct`.`ancestor_id_path`,
+ `tct`.`title`,
+ `tct`.`is_active`,
+ group_concat(`store_id`) AS `stores`
+ FROM `tmp_cat_tree` AS `tct`,
+ `config_store_category` AS `csc`
+ WHERE FIND_IN_SET(`csc`.`project_category_id`, `tct`.`ancestor_id_path`) > 0
+ GROUP BY `tct`.`project_category_id`
+ ORDER BY `tct`.`project_category_id`;
+
+ SELECT `project_id`,
+ `project`.`member_id` AS `project_member_id`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`title` AS `project_title`,
+ `description`,
+ `image_small`,
+ `member`.`username`,
+ `member`.`firstname`,
+ `member`.`lastname`,
+ `tcs`.`title` AS `cat_title`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ DATE_FORMAT(`project`.`created_at`, '%Y-%m-%dT%TZ') AS `created_at`,
+ DATE_FORMAT(`project`.`changed_at`, '%Y-%m-%dT%TZ') AS `changed_at`,
+ `tcs`.`stores`,
+ `tcs`.`ancestor_id_path` AS `cat_id_ancestor_path`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`,
+ `ppload`.`ppload_files` `files`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` = 8
+ AND `tag_object`.`tag_type_id` = 3
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_parent_object_id` = `project`.`project_id`
+ AND `tag_object`.`tag_object_id` = `files`.`id`
+ AND `files`.`active` = 1
+ ) AS `package_names`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`,
+ `ppload`.`ppload_files` `files`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` = 9
+ AND `tag_object`.`tag_type_id` = 3
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_parent_object_id` = `project`.`project_id`
+ AND `tag_object`.`tag_object_id` = `files`.`id`
+ AND `files`.`active` = 1
+ ) AS `arch_names`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` = 7
+ AND `tag_object`.`tag_type_id` = 1
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_object_id` = `project`.`project_id`
+ ) AS `license_names`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` IN (5, 6)
+ AND `tag_object`.`tag_type_id` = 1
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_object_id` = `project`.`project_id`
+ ) AS `tags`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ LEFT JOIN `tmp_solr_cat_store` AS `tcs` ON `project`.`project_category_id` = `tcs`.`project_category_id`
+ WHERE `project_id` = `projectID`
+ AND `project`.`status` = 100
+ AND `member`.`is_active` = 1;
+
END$$
DELIMITER ;
-
-drop PROCEDURE solr_query_import_new;
+
+DROP PROCEDURE `solr_query_import_new`;
DELIMITER $$
CREATE PROCEDURE `solr_query_import_new`()
BEGIN
- select
- project_id,
- project_member_id,
- project_category_id,
- project_title,
- description,
- image_small,
- username,
- firstname,
- lastname,
- cat_title,
- count_likes,
- count_dislikes,
- laplace_score,
- created_at,
- changed_at,
- stores,
- cat_id_ancestor_path,
- package_names,
- arch_names,
- license_names,
- tags
- from tmp_solr_query_fullimport;
+ SELECT `project_id`,
+ `project_member_id`,
+ `project_category_id`,
+ `project_title`,
+ `description`,
+ `image_small`,
+ `username`,
+ `firstname`,
+ `lastname`,
+ `cat_title`,
+ `count_likes`,
+ `count_dislikes`,
+ `laplace_score`,
+ `created_at`,
+ `changed_at`,
+ `stores`,
+ `cat_id_ancestor_path`,
+ `package_names`,
+ `arch_names`,
+ `license_names`,
+ `tags`
+ FROM `tmp_solr_query_fullimport`;
END$$
DELIMITER ;
-drop PROCEDURE solr_query_delta_new;
+DROP PROCEDURE `solr_query_delta_new`;
DELIMITER $$
-CREATE PROCEDURE `solr_query_delta_new`(IN lastIndexed varchar(255))
+CREATE PROCEDURE `solr_query_delta_new`(IN `lastIndexed` varchar(255))
BEGIN
- select distinct project_id
- from
- (
- SELECT project_id
- FROM project
- JOIN member ON member.member_id = project.member_id
- WHERE (project.`status` = 100 AND project.`type_id` = 1 AND member.`is_active` = 1 AND project.changed_at > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) )
- union
- select distinct tag_object_id as project_id
- from tag_object
- where tag_type_id = 1 and (tag_created > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) or tag_changed > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) )
- union select distinct tag_parent_object_id as project_id
- from tag_object
- where tag_type_id in (8,9) and (tag_created > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) or tag_changed > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) )
- union
- select project_id
- from project
- JOIN ppload.ppload_files files ON project.ppload_collection_id= files.collection_id AND files.updated_timestamp > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY))
- group by project_id
- ) t ;
+ SELECT DISTINCT `project_id`
+ FROM (
+ SELECT `project_id`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ WHERE (`project`.`status` = 100 AND `project`.`type_id` = 1 AND `member`.`is_active` = 1 AND
+ `project`.`changed_at` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)))
+ UNION
+ SELECT DISTINCT `tag_object_id` AS `project_id`
+ FROM `tag_object`
+ WHERE `tag_type_id` = 1
+ AND (`tag_created` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)) OR
+ `tag_changed` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)))
+ UNION
+ SELECT DISTINCT `tag_parent_object_id` AS `project_id`
+ FROM `tag_object`
+ WHERE `tag_type_id` IN (8, 9)
+ AND (`tag_created` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)) OR
+ `tag_changed` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)))
+ UNION
+ SELECT `project_id`
+ FROM `project`
+ JOIN `ppload`.`ppload_files` `files`
+ ON `project`.`ppload_collection_id` = `files`.`collection_id` AND
+ `files`.`updated_timestamp` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY))
+ GROUP BY `project_id`
+ ) `t`;
END$$
DELIMITER ;
-
-drop procedure solr_query_deleted_pk_new;
+DROP PROCEDURE `solr_query_deleted_pk_new`;
DELIMITER $$
-CREATE PROCEDURE `solr_query_deleted_pk_new`(IN lastIndexed VARCHAR(255))
+CREATE PROCEDURE `solr_query_deleted_pk_new`(IN `lastIndexed` VARCHAR(255))
BEGIN
- SELECT project_id
- FROM project
- WHERE
- project.`type_id` = 1
- and(
- project.deleted_at > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY))
- OR (project.changed_at > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) AND project.status < 100)
- );
+ SELECT `project_id`
+ FROM `project`
+ WHERE `project`.`type_id` = 1
+ AND (
+ `project`.`deleted_at` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY))
+ OR (`project`.`changed_at` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)) AND
+ `project`.`status` < 100)
+ );
END$$
DELIMITER ;
diff --git a/sql_code/20190219_config_store_tag_group.sql b/sql_code/20190219_config_store_tag_group.sql
index 221c6b4a1..4904e64e5 100644
--- a/sql_code/20190219_config_store_tag_group.sql
+++ b/sql_code/20190219_config_store_tag_group.sql
@@ -1,13 +1,14 @@
-CREATE TABLE `config_store_tag_group` (
- `config_store_taggroup_id` INT(11) NOT NULL AUTO_INCREMENT,
- `store_id` INT(11) NOT NULL,
- `tag_group_id` INT(11) NOT NULL,
- `is_active` INT(1) UNSIGNED NOT NULL DEFAULT '1',
- `created_at` DATETIME NULL DEFAULT NULL,
- `changed_at` DATETIME NULL DEFAULT NULL,
- `deleted_at` DATETIME NULL DEFAULT NULL,
- PRIMARY KEY (`config_store_taggroup_id`)
+CREATE TABLE `config_store_tag_group`
+(
+ `config_store_taggroup_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `store_id` INT(11) NOT NULL,
+ `tag_group_id` INT(11) NOT NULL,
+ `is_active` INT(1) UNSIGNED NOT NULL DEFAULT '1',
+ `created_at` DATETIME NULL DEFAULT NULL,
+ `changed_at` DATETIME NULL DEFAULT NULL,
+ `deleted_at` DATETIME NULL DEFAULT NULL,
+ PRIMARY KEY (`config_store_taggroup_id`)
)
-COLLATE='latin1_swedish_ci'
-ENGINE=InnoDB
+ COLLATE = 'latin1_swedish_ci'
+ ENGINE = InnoDB
;
diff --git a/sql_code/20190314_add_config_store_show_news_and_forum.sql b/sql_code/20190314_add_config_store_show_news_and_forum.sql
index d4f8644cd..cd3ccbc08 100644
--- a/sql_code/20190314_add_config_store_show_news_and_forum.sql
+++ b/sql_code/20190314_add_config_store_show_news_and_forum.sql
@@ -1,3 +1,3 @@
ALTER TABLE `config_store`
- ADD COLUMN `is_show_blog_news` INT(1) NULL DEFAULT '1' AFTER `is_show_git_projects`,
- ADD COLUMN `is_show_forum_news` INT(1) NULL DEFAULT '1' AFTER `is_show_blog_news`;
+ ADD COLUMN `is_show_blog_news` INT(1) NULL DEFAULT '1' AFTER `is_show_git_projects`,
+ ADD COLUMN `is_show_forum_news` INT(1) NULL DEFAULT '1' AFTER `is_show_blog_news`;
diff --git a/sql_code/20190326_project_add_user_category.sql b/sql_code/20190326_project_add_user_category.sql
index dacdd6eca..811081400 100644
--- a/sql_code/20190326_project_add_user_category.sql
+++ b/sql_code/20190326_project_add_user_category.sql
@@ -1,2 +1,2 @@
ALTER TABLE `project`
- ADD COLUMN `user_category` TEXT NULL AFTER `use_gitlab_project_readme`;
+ ADD COLUMN `user_category` TEXT NULL AFTER `use_gitlab_project_readme`;
diff --git a/sql_code/20190327_create_tabe_collection_projects.sql b/sql_code/20190327_create_tabe_collection_projects.sql
index ab41ad82c..88502da5b 100644
--- a/sql_code/20190327_create_tabe_collection_projects.sql
+++ b/sql_code/20190327_create_tabe_collection_projects.sql
@@ -1,14 +1,15 @@
-CREATE TABLE `collection_projects` (
- `collection_project_id` INT(11) NOT NULL AUTO_INCREMENT,
- `collection_id` INT(11) NOT NULL,
- `project_id` INT(11) NOT NULL,
- `order` INT(11) NULL DEFAULT NULL,
- `active` INT(1) UNSIGNED NULL DEFAULT '1',
- `created_at` DATETIME NULL DEFAULT NULL,
- `changed_at` DATETIME NULL DEFAULT NULL,
- `deleted_at` DATETIME NULL DEFAULT NULL,
- PRIMARY KEY (`collection_project_id`)
+CREATE TABLE `collection_projects`
+(
+ `collection_project_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `collection_id` INT(11) NOT NULL,
+ `project_id` INT(11) NOT NULL,
+ `order` INT(11) NULL DEFAULT NULL,
+ `active` INT(1) UNSIGNED NULL DEFAULT '1',
+ `created_at` DATETIME NULL DEFAULT NULL,
+ `changed_at` DATETIME NULL DEFAULT NULL,
+ `deleted_at` DATETIME NULL DEFAULT NULL,
+ PRIMARY KEY (`collection_project_id`)
)
-COLLATE='latin1_swedish_ci'
-ENGINE=InnoDB
+ COLLATE = 'latin1_swedish_ci'
+ ENGINE = InnoDB
;
diff --git a/sql_code/20190411_alter_support_add_type_period.sql b/sql_code/20190411_alter_support_add_type_period.sql
index 219b0dde9..170c57aae 100644
--- a/sql_code/20190411_alter_support_add_type_period.sql
+++ b/sql_code/20190411_alter_support_add_type_period.sql
@@ -1,13 +1,13 @@
ALTER TABLE `support`
- ADD COLUMN `type_id` INT(1) UNSIGNED NULL DEFAULT '0' COMMENT '0 = onetime payment, 1 = subsscription signup, 2 = subsscription payment' AFTER `create_time`,
- ADD COLUMN `period` VARCHAR(50) NULL AFTER `amount`;
+ ADD COLUMN `type_id` INT(1) UNSIGNED NULL DEFAULT '0' COMMENT '0 = onetime payment, 1 = subsscription signup, 2 = subsscription payment' AFTER `create_time`,
+ ADD COLUMN `period` VARCHAR(50) NULL AFTER `amount`;
-UPDATE support p
-SET p.type_id = 0;
+UPDATE `support` `p`
+SET `p`.`type_id` = 0;
ALTER TABLE `support`
- ADD COLUMN `subscription_id` VARCHAR(255) NULL AFTER `type_id`;
+ ADD COLUMN `subscription_id` VARCHAR(255) NULL AFTER `type_id`;
ALTER TABLE `support`
- ADD COLUMN `period_frequency` VARCHAR(50) NULL DEFAULT NULL AFTER `period`;
\ No newline at end of file
+ ADD COLUMN `period_frequency` VARCHAR(50) NULL DEFAULT NULL AFTER `period`;
\ No newline at end of file
diff --git a/sql_code/20190424_cat_tag_group_multiselect.sql b/sql_code/20190424_cat_tag_group_multiselect.sql
index 03f537ae4..14742d496 100644
--- a/sql_code/20190424_cat_tag_group_multiselect.sql
+++ b/sql_code/20190424_cat_tag_group_multiselect.sql
@@ -1,2 +1,2 @@
ALTER TABLE `tag_group`
- ADD COLUMN `is_multi_select` INT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Is this Tag-Group a multiselect Dropdown?' AFTER `group_legacy_name`;
+ ADD COLUMN `is_multi_select` INT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Is this Tag-Group a multiselect Dropdown?' AFTER `group_legacy_name`;
diff --git a/sql_code/20190503_alter_support_add_tie.sql b/sql_code/20190503_alter_support_add_tie.sql
index 84ae5b6a8..89fa12490 100755
--- a/sql_code/20190503_alter_support_add_tie.sql
+++ b/sql_code/20190503_alter_support_add_tie.sql
@@ -1,3 +1,4 @@
+
ALTER TABLE `support`
- ADD COLUMN `tier` double(10,2) COMMENT '0.99, 2,5,10,null' AFTER `amount`;
+ ADD COLUMN `tier` double(10, 2) COMMENT '0.99, 2,5,10,null' AFTER `amount`;
\ No newline at end of file
diff --git a/sql_code/20190503_create_files_downloaded_all.sql b/sql_code/20190503_create_files_downloaded_all.sql
index a53ec7d4a..cf6f5571f 100644
--- a/sql_code/20190503_create_files_downloaded_all.sql
+++ b/sql_code/20190503_create_files_downloaded_all.sql
@@ -1,8 +1,8 @@
-CREATE TABLE ppload.ppload_files_downloaded_all LIKE ppload.ppload_files_downloaded
-;
+
+CREATE TABLE `ppload`.`ppload_files_downloaded_all` LIKE `ppload`.`ppload_files_downloaded`;
ALTER TABLE `ppload_files_downloaded_all`
- ADD COLUMN `source` VARCHAR(39) NULL DEFAULT NULL AFTER `downloaded_ip`;
+ ADD COLUMN `source` VARCHAR(39) NULL DEFAULT NULL AFTER `downloaded_ip`;
ALTER TABLE `ppload_files_downloaded_all`
- ADD COLUMN `link_type` VARCHAR(39) NULL DEFAULT NULL AFTER `source`;
\ No newline at end of file
+ ADD COLUMN `link_type` VARCHAR(39) NULL DEFAULT NULL AFTER `source`;
\ No newline at end of file
diff --git a/sql_code/20190503_stat_files_downloaded.sql b/sql_code/20190503_stat_files_downloaded.sql
index 45c40d9e2..1081a690b 100644
--- a/sql_code/20190503_stat_files_downloaded.sql
+++ b/sql_code/20190503_stat_files_downloaded.sql
@@ -1,37 +1,44 @@
+
+
+DROP PROCEDURE IF EXISTS `generate_stat_files_downloaded`;
+
DELIMITER $$
CREATE PROCEDURE `generate_stat_files_downloaded`()
-LANGUAGE SQL
-NOT DETERMINISTIC
-CONTAINS SQL
-SQL SECURITY DEFINER
-COMMENT ''
+ LANGUAGE SQL
+ NOT DETERMINISTIC
+ CONTAINS SQL
+ SQL SECURITY DEFINER
+ COMMENT ''
BEGIN
- DROP TABLE IF EXISTS ppload.tmp_stat_ppload_files_downloaded;
-
- CREATE TABLE ppload.tmp_stat_ppload_files_downloaded
- (INDEX `idx_coll` (`collection_id`),INDEX `idx_file` (`file_id`))
- ENGINE MyISAM
- AS
- SELECT f.owner_id, f.collection_id, f.file_id, COUNT(1) AS count_dl FROM ppload.ppload_files_downloaded f
- WHERE f.downloaded_timestamp < DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00')
- GROUP BY f.collection_id, f.file_id
- ;
- RENAME TABLE ppload.stat_ppload_files_downloaded TO ppload.old_stat_ppload_files_downloaded, ppload.tmp_stat_ppload_files_downloaded TO ppload.stat_ppload_files_downloaded;
- DROP TABLE IF EXISTS ppload.old_stat_ppload_files_downloaded;
+ DROP TABLE IF EXISTS `ppload`.`tmp_stat_ppload_files_downloaded`;
+
+ CREATE TABLE `ppload`.`tmp_stat_ppload_files_downloaded`
+ (
+ INDEX `idx_coll` (`collection_id`),
+ INDEX `idx_file` (`file_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `f`.`owner_id`, `f`.`collection_id`, `f`.`file_id`, COUNT(1) AS `count_dl`
+ FROM `ppload`.`ppload_files_downloaded` `f`
+ WHERE `f`.`downloaded_timestamp` < DATE_FORMAT(NOW(), '%Y-%m-%d 00:00:00')
+ GROUP BY `f`.`collection_id`, `f`.`file_id`;
+ RENAME TABLE `ppload`.`stat_ppload_files_downloaded` TO `ppload`.`old_stat_ppload_files_downloaded`, `ppload`.`tmp_stat_ppload_files_downloaded` TO `ppload`.`stat_ppload_files_downloaded`;
+ DROP TABLE IF EXISTS `ppload`.`old_stat_ppload_files_downloaded`;
END$$
DELIMITER ;
CREATE EVENT `e_generate_stat_files_downloaded`
- ON SCHEDULE
- EVERY 1 DAY STARTS '2019-05-01 00:00:00'
- ON COMPLETION PRESERVE
- ENABLE
- COMMENT 'Regenerates ppload.stat_ppload_files_downloaded table'
- DO CALL generate_stat_files_downloaded()
+ ON SCHEDULE
+ EVERY 1 DAY STARTS '2019-05-01 00:00:00'
+ ON COMPLETION PRESERVE
+ ENABLE
+ COMMENT 'Regenerates ppload.stat_ppload_files_downloaded table'
+ DO CALL generate_stat_files_downloaded()
;
\ No newline at end of file
diff --git a/sql_code/20190507_project_rating_score.sql b/sql_code/20190507_project_rating_score.sql
index e3fee0a63..3efad84be 100644
--- a/sql_code/20190507_project_rating_score.sql
+++ b/sql_code/20190507_project_rating_score.sql
@@ -1,8 +1,10 @@
ALTER TABLE project_rating
ADD COLUMN score int(2) COMMENT 'vote up = 8 votedown = 3' AFTER user_dislike;
select * from project_rating where user_like >1;
update project_rating set score = 8 where user_like = 1 ;
update project_rating set score = 3 where user_dislike = 1 ;
+
+// out of date. refer 20190514_score.sql
update project_rating set score = round((user_like*8+user_dislike*3+2*5)/(user_like+user_dislike+2),0) where user_like > 1 ;
diff --git a/sql_code/20190508_create_stat_ranking_project.sql b/sql_code/20190508_create_stat_ranking_project.sql
index 9bc5beb6b..c5287669e 100644
--- a/sql_code/20190508_create_stat_ranking_project.sql
+++ b/sql_code/20190508_create_stat_ranking_project.sql
@@ -1,53 +1,54 @@
+
DROP PROCEDURE IF EXISTS `generate_stat_rating_project`;
DELIMITER $$
CREATE PROCEDURE `generate_stat_rating_project`()
- BEGIN
+BEGIN
DROP TABLE IF EXISTS `tmp_stat_rating_project`;
CREATE TABLE `tmp_stat_rating_project`
(
- `project_id` int(11) NOT NULL,
- `likes` int(11) NOT NULL,
- `dislikes` int(11) NOT NULL,
- `votes_total` int(11) NOT NULL,
- `score` int(11) NOT NULL,
- PRIMARY KEY `primary` (`project_id`)
+ `project_id` int(11) NOT NULL,
+ `likes` int(11) NOT NULL,
+ `dislikes` int(11) NOT NULL,
+ `votes_total` int(11) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY `primary` (`project_id`)
)
- AS
- SELECT `pr`.`project_id`,
- sum(`pr`.`user_like`) AS `likes`,
- sum(`pr`.`user_dislike`) AS `dislikes`,
- sum(`pr`.`user_like`) + sum(`pr`.`user_dislike`) AS `votes_total`,
- laplace_score(sum(`pr`.`user_like`), sum(`pr`.`user_dislike`)) AS `score`
- FROM `project_rating` AS `pr`
- WHERE `pr`.`rating_active` = 1
- AND `pr`.`comment_id` = 0
- GROUP BY `pr`.`project_id`;
+ AS
+ SELECT `pr`.`project_id`,
+ sum(`pr`.`user_like`) AS `likes`,
+ sum(`pr`.`user_dislike`) AS `dislikes`,
+ sum(`pr`.`user_like`) + sum(`pr`.`user_dislike`) AS `votes_total`,
+ laplace_score(sum(`pr`.`user_like`), sum(`pr`.`user_dislike`)) AS `score`
+ FROM `project_rating` AS `pr`
+ WHERE `pr`.`rating_active` = 1
+ AND `pr`.`comment_id` = 0
+ GROUP BY `pr`.`project_id`;
IF EXISTS(SELECT `table_name`
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE `table_schema` = DATABASE()
- AND `table_name` = 'stat_rating_project')
+ AND `table_name` = 'stat_rating_project')
THEN
- RENAME TABLE `stat_rating_project` TO `old_stat_rating_project`, `tmp_stat_rating_project` TO `stat_rating_project`;
+ RENAME TABLE `stat_rating_project` TO `old_stat_rating_project`, `tmp_stat_rating_project` TO `stat_rating_project`;
ELSE
- RENAME TABLE `tmp_stat_rating_project` TO `stat_rating_project`;
+ RENAME TABLE `tmp_stat_rating_project` TO `stat_rating_project`;
END IF;
DROP TABLE IF EXISTS `old_stat_rating_project`;
- END$$
+END$$
DELIMITER ;
CREATE DEFINER = CURRENT_USER EVENT `e_generate_stat_rating_project` ON SCHEDULE
- EVERY '5' MINUTE
- STARTS '2019-05-08 05:00:00'
- ON COMPLETION PRESERVE
- ENABLE
- COMMENT 'Regenerates stat_rating_project table'
-DO
- CALL generate_stat_rating_project();
\ No newline at end of file
+ EVERY '5' MINUTE
+ STARTS '2019-05-08 05:00:00'
+ ON COMPLETION PRESERVE
+ ENABLE
+ COMMENT 'Regenerates stat_rating_project table'
+ DO
+ CALL generate_stat_rating_project();
\ No newline at end of file
diff --git a/sql_code/20190508_stat_projects_new_scorecolumn.sql b/sql_code/20190508_stat_projects_new_scorecolumn.sql
index 25825a665..fb83407dd 100644
--- a/sql_code/20190508_stat_projects_new_scorecolumn.sql
+++ b/sql_code/20190508_stat_projects_new_scorecolumn.sql
@@ -1,192 +1,192 @@
+
+
+DROP FUNCTION IF EXISTS `laplace_score_new`;
+
DELIMITER $$
-CREATE FUNCTION `laplace_score_new`(upvotes INT, downvotes INT) RETURNS int(3)
+CREATE FUNCTION `laplace_score_new`(`upvotes` INT, `downvotes` INT) RETURNS int(3)
DETERMINISTIC
BEGIN
- DECLARE score INT(4);
- SET score = round((upvotes*8+downvotes*3+2*5)/(upvotes+downvotes+2),2)*100 ;
- RETURN score;
+ DECLARE `score` INT(4);
+ SET `score` = round((`upvotes` * 8 + `downvotes` * 3 + 2 * 5) / (`upvotes` + `downvotes` + 2), 2) * 100;
+ RETURN `score`;
END$$
DELIMITER ;
-
-
+DROP PROCEDURE IF EXISTS `generate_stat_project`;
DELIMITER $$
CREATE PROCEDURE `generate_stat_project`()
BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
+ GROUP BY `reports_project`.`project_id`;
+
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `tag_object`.`tag_parent_object_id` AS `project_id`,
+ GROUP_CONCAT(DISTINCT `tag_object`.`tag_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `tag`.`tag_fullname`) AS `package_name_list`
+ FROM `tag_object`
+ JOIN
+ `tag` ON `tag_object`.`tag_id` = `tag`.`tag_id`
+ JOIN
+ `ppload`.`ppload_files` `files` ON `files`.`id` = `tag_object`.`tag_object_id`
+ WHERE `tag_object`.`tag_group_id` = 8
+ AND `tag_object`.`is_deleted` = 0
+ AND `files`.`active` = 1
+ GROUP BY `tag_object`.`tag_parent_object_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- tag_object.tag_parent_object_id as project_id,
- GROUP_CONCAT(DISTINCT tag_object.tag_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT tag.tag_fullname) AS `package_name_list`
- FROM
- tag_object
- JOIN
- tag ON tag_object.tag_id = tag.tag_id
- JOIN
- ppload.ppload_files files ON files.id = tag_object.tag_object_id
- WHERE
- tag_object.tag_group_id = 8
- AND tag_object.is_deleted = 0
- AND files.active = 1
- GROUP BY tag_object.tag_parent_object_id
- ;
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag_name`) AS `tag_names`,
+ GROUP_CONCAT(`tag_id`) AS `tag_ids`,
+ `tag_project_id`
+ FROM (
+ SELECT DISTINCT `tag`.`tag_name`,
+ `tag`.`tag_id`,
+ `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1 #project
+ AND `tgo`.`is_deleted` = 0
+ UNION ALL
+ SELECT DISTINCT `tag`.`tag_name`,
+ `tag`.`tag_ID`,
+ `tgo`.`tag_parent_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `tgo`.`tag_object_id`
+ WHERE `tag_type_id` = 3 #file
+ AND `files`.`active` = 1
+ AND `tgo`.`is_deleted` = 0
+ ) `A`
+ GROUP BY `tag_project_id`
+ ORDER BY `tag_project_id`;
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT
- GROUP_CONCAT(tag_name) AS tag_names,
- GROUP_CONCAT(tag_id) AS tag_ids,
- tag_project_id
- FROM (
- select
- distinct tag.tag_name,
- tag.tag_id,
- tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1 #project
- AND tgo.is_deleted = 0
- UNION ALL
- select
- distinct tag.tag_name,
- tag.tag_ID,
- tgo.tag_parent_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- JOIN ppload.ppload_files files ON files.id = tgo.tag_object_id
- WHERE tag_type_id = 3 #file
- AND files.active = 1
- AND tgo.is_deleted = 0
- ) A
- GROUP BY tag_project_id
- ORDER BY tag_project_id;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_ppload` (`ppload_collection_id`),
+ INDEX `idx_cat` (`project_category_id`),
+ INDEX `idx_member` (`member_id`),
+ INDEX `idx_source_url` (`source_url`(50))
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`project_license_id` AS `project_license_id`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`major_updated_at` AS `major_updated_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`source_url` AS `source_url`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ CAST(`project`.`ppload_collection_id` AS UNSIGNED) AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`ghns_excluded` AS `ghns_excluded`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
+ laplace_score_new(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score_new`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`,
+ `t`.`tag_ids` AS `tag_ids`,
+ `sdqy`.`amount` AS `count_downloads_quarter`,
+ `project_license`.`title` AS `project_license_title`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `stat_downloads_quarter_year` AS `sdqy` ON `sdqy`.`project_id` = `project`.`project_id`
+ LEFT JOIN `project_license` ON `project_license`.`project_license_id` = `project`.`project_license_id`
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND (`project`.`type_id` = 1 OR `project`.`type_id` = 3)
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_ppload` (`ppload_collection_id`), INDEX `idx_cat` (`project_category_id`),INDEX `idx_member` (`member_id`),INDEX `idx_source_url` (`source_url`(50)))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`project_license_id` AS `project_license_id`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`major_updated_at` AS `major_updated_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`source_url` AS `source_url`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- CAST(`project`.`ppload_collection_id` AS UNSIGNED) AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`ghns_excluded` AS `ghns_excluded`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- laplace_score(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score`,
- laplace_score_new(`project`.`count_likes`, `project`.`count_dislikes`) AS `laplace_score_new`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.`package_type_id_list` AS `package_types`,
- `tppt`.`package_name_list` AS `package_names`,
- `t`.`tag_names` AS `tags`,
- `t`.`tag_ids` AS `tag_ids`,
- `sdqy`.amount AS count_downloads_quarter,
- `project_license`.title AS project_license_title
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- LEFT JOIN `tmp_project_tags` AS t ON t.`tag_project_id` = project.`project_id`
- LEFT JOIN `stat_downloads_quarter_year` AS sdqy ON sdqy.project_id = project.project_id
- LEFT JOIN `project_license` ON project_license.project_license_id = project.project_license_id
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND (`project`.`type_id` = 1 OR `project`.`type_id` = 3)
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
-
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
- DROP TABLE IF EXISTS old_stat_projects;
- END$$
+ DROP TABLE IF EXISTS `old_stat_projects`;
+END$$
DELIMITER ;
diff --git a/sql_code/20190509_generate_stat_rating_project.sql b/sql_code/20190509_generate_stat_rating_project.sql
index 2b72bd314..0da6668db 100644
--- a/sql_code/20190509_generate_stat_rating_project.sql
+++ b/sql_code/20190509_generate_stat_rating_project.sql
@@ -1,43 +1,50 @@
+
+
+DROP PROCEDURE IF EXISTS `generate_stat_rating_project`;
+
DELIMITER $$
CREATE PROCEDURE `generate_stat_rating_project`()
BEGIN
- DROP TABLE IF EXISTS tmp_stat_rating_project;
- CREATE TABLE tmp_stat_rating_project
+ DROP TABLE IF EXISTS `tmp_stat_rating_project`;
+ CREATE TABLE `tmp_stat_rating_project`
(
- `project_id` int(11) NOT NULL,
- `likes` int(11) NOT NULL,
- `dislikes` int(11) NOT NULL,
- `votes_total` int(11) NOT NULL,
- `score` int(11) NOT NULL,
+ `project_id` int(11) NOT NULL,
+ `likes` int(11) NOT NULL,
+ `dislikes` int(11) NOT NULL,
+ `votes_total` int(11) NOT NULL,
+ `score` int(11) NOT NULL,
`score_with_pling` int(11) NOT NULL,
- PRIMARY KEY `primary` (project_id)
+ PRIMARY KEY `primary` (`project_id`)
)
AS
- SELECT pr.project_id,
- sum(pr.user_like) AS likes,
- sum(pr.user_dislike) AS dislikes,
- sum(pr.user_like) + sum(pr.user_dislike) AS votes_total,
- laplace_score(sum(pr.user_like), sum(pr.user_dislike)) AS score,
- laplace_score_with_plings(sum(pr.user_like), sum(pr.user_dislike)
- ,(select count(1) from project_plings p where p.project_id = pr.project_id and is_deleted = 0)
- ) AS score_with_pling
- FROM project_rating AS pr
- WHERE (pr.rating_active = 1 or (rating_active=0 and user_like>1))
- GROUP BY pr.project_id;
-
- IF EXISTS(SELECT table_name
- FROM INFORMATION_SCHEMA.TABLES
- WHERE table_schema = DATABASE()
- AND table_name = 'stat_rating_project')
+ SELECT `pr`.`project_id`,
+ sum(`pr`.`user_like`) AS `likes`,
+ sum(`pr`.`user_dislike`) AS `dislikes`,
+ sum(`pr`.`user_like`) + sum(`pr`.`user_dislike`) AS `votes_total`,
+ laplace_score(sum(`pr`.`user_like`), sum(`pr`.`user_dislike`)) AS `score`,
+ laplace_score_with_plings(sum(`pr`.`user_like`), sum(`pr`.`user_dislike`)
+ , (SELECT count(1)
+ FROM `project_plings` `p`
+ WHERE `p`.`project_id` = `pr`.`project_id`
+ AND `is_deleted` = 0)
+ ) AS `score_with_pling`
+ FROM `project_rating` AS `pr`
+ WHERE (`pr`.`rating_active` = 1 OR (`rating_active` = 0 AND `user_like` > 1))
+ GROUP BY `pr`.`project_id`;
+
+ IF EXISTS(SELECT `table_name`
+ FROM `INFORMATION_SCHEMA`.`TABLES`
+ WHERE `table_schema` = DATABASE()
+ AND `table_name` = 'stat_rating_project')
THEN
- RENAME TABLE stat_rating_project TO old_stat_rating_project, tmp_stat_rating_project TO stat_rating_project;
+ RENAME TABLE `stat_rating_project` TO `old_stat_rating_project`, `tmp_stat_rating_project` TO `stat_rating_project`;
ELSE
- RENAME TABLE tmp_stat_rating_project TO stat_rating_project;
+ RENAME TABLE `tmp_stat_rating_project` TO `stat_rating_project`;
END IF;
- DROP TABLE IF EXISTS old_stat_rating_project;
+ DROP TABLE IF EXISTS `old_stat_rating_project`;
END$$
DELIMITER ;
\ No newline at end of file
diff --git a/sql_code/20190509_laplace_score_with_plings.sql b/sql_code/20190509_laplace_score_with_plings.sql
index 4910a91f4..c7bb8bbdd 100644
--- a/sql_code/20190509_laplace_score_with_plings.sql
+++ b/sql_code/20190509_laplace_score_with_plings.sql
@@ -1,10 +1,15 @@
+
+
+DROP FUNCTION IF EXISTS `laplace_score_with_plings`;
+
DELIMITER $$
-CREATE FUNCTION `laplace_score_with_plings`(upvotes INT, downvotes INT, plings INT) RETURNS int(3)
+CREATE FUNCTION `laplace_score_with_plings`(`upvotes` INT, `downvotes` INT, `plings` INT) RETURNS int(3)
DETERMINISTIC
BEGIN
- DECLARE score INT(4);
- SET score = round((upvotes*8+downvotes*3+2*5 + plings*11)/(upvotes+downvotes+2+plings),2)*100 ;
- RETURN score;
+ DECLARE `score` INT(4);
+ SET `score` = round((`upvotes` * 8 + `downvotes` * 3 + 2 * 5 + `plings` * 11) /
+ (`upvotes` + `downvotes` + 2 + `plings`), 2) * 100;
+ RETURN `score`;
END$$
DELIMITER ;
diff --git a/sql_code/20190509_stat_projects_update_scorecolumn.sql b/sql_code/20190509_stat_projects_update_scorecolumn.sql
index 4ffb7dffc..509c26e87 100644
--- a/sql_code/20190509_stat_projects_update_scorecolumn.sql
+++ b/sql_code/20190509_stat_projects_update_scorecolumn.sql
@@ -1,180 +1,179 @@
+
+DROP PROCEDURE IF EXISTS `generate_stat_project`;
+
DELIMITER $$
-drop procedure generate_stat_project;
CREATE PROCEDURE `generate_stat_project`()
BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
+ GROUP BY `reports_project`.`project_id`;
+
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `tag_object`.`tag_parent_object_id` AS `project_id`,
+ GROUP_CONCAT(DISTINCT `tag_object`.`tag_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `tag`.`tag_fullname`) AS `package_name_list`
+ FROM `tag_object`
+ JOIN
+ `tag` ON `tag_object`.`tag_id` = `tag`.`tag_id`
+ JOIN
+ `ppload`.`ppload_files` `files` ON `files`.`id` = `tag_object`.`tag_object_id`
+ WHERE `tag_object`.`tag_group_id` = 8
+ AND `tag_object`.`is_deleted` = 0
+ AND `files`.`active` = 1
+ GROUP BY `tag_object`.`tag_parent_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag_name`) AS `tag_names`,
+ GROUP_CONCAT(`tag_id`) AS `tag_ids`,
+ `tag_project_id`
+ FROM (
+ SELECT DISTINCT `tag`.`tag_name`,
+ `tag`.`tag_id`,
+ `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1 #project
+ AND `tgo`.`is_deleted` = 0
+ UNION ALL
+ SELECT DISTINCT `tag`.`tag_name`,
+ `tag`.`tag_ID`,
+ `tgo`.`tag_parent_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `tgo`.`tag_object_id`
+ WHERE `tag_type_id` = 3 #file
+ AND `files`.`active` = 1
+ AND `tgo`.`is_deleted` = 0
+ ) `A`
+ GROUP BY `tag_project_id`
+ ORDER BY `tag_project_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- tag_object.tag_parent_object_id as project_id,
- GROUP_CONCAT(DISTINCT tag_object.tag_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT tag.tag_fullname) AS `package_name_list`
- FROM
- tag_object
- JOIN
- tag ON tag_object.tag_id = tag.tag_id
- JOIN
- ppload.ppload_files files ON files.id = tag_object.tag_object_id
- WHERE
- tag_object.tag_group_id = 8
- AND tag_object.is_deleted = 0
- AND files.active = 1
- GROUP BY tag_object.tag_parent_object_id
- ;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_ppload` (`ppload_collection_id`),
+ INDEX `idx_cat` (`project_category_id`),
+ INDEX `idx_member` (`member_id`),
+ INDEX `idx_source_url` (`source_url`(50))
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`project_license_id` AS `project_license_id`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`major_updated_at` AS `major_updated_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`source_url` AS `source_url`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ CAST(`project`.`ppload_collection_id` AS UNSIGNED) AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`ghns_excluded` AS `ghns_excluded`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ `project`.`count_likes` AS `count_likes`,
+ `project`.`count_dislikes` AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ `stat_rating_project`.`score` AS `laplace_score`,
+ `stat_rating_project`.`score_with_pling` AS `laplace_score_new`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`,
+ `t`.`tag_ids` AS `tag_ids`,
+ `sdqy`.`amount` AS `count_downloads_quarter`,
+ `project_license`.`title` AS `project_license_title`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `stat_downloads_quarter_year` AS `sdqy` ON `sdqy`.`project_id` = `project`.`project_id`
+ LEFT JOIN `project_license` ON `project_license`.`project_license_id` = `project`.`project_license_id`
+ LEFT JOIN `stat_rating_project` ON `stat_rating_project`.`project_id` = `project`.`project_id`
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT
- GROUP_CONCAT(tag_name) AS tag_names,
- GROUP_CONCAT(tag_id) AS tag_ids,
- tag_project_id
- FROM (
- select
- distinct tag.tag_name,
- tag.tag_id,
- tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1 #project
- AND tgo.is_deleted = 0
- UNION ALL
- select
- distinct tag.tag_name,
- tag.tag_ID,
- tgo.tag_parent_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- JOIN ppload.ppload_files files ON files.id = tgo.tag_object_id
- WHERE tag_type_id = 3 #file
- AND files.active = 1
- AND tgo.is_deleted = 0
- ) A
- GROUP BY tag_project_id
- ORDER BY tag_project_id;
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND (`project`.`type_id` = 1 OR `project`.`type_id` = 3)
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_ppload` (`ppload_collection_id`), INDEX `idx_cat` (`project_category_id`),INDEX `idx_member` (`member_id`),INDEX `idx_source_url` (`source_url`(50)))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`project_license_id` AS `project_license_id`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`major_updated_at` AS `major_updated_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`source_url` AS `source_url`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- CAST(`project`.`ppload_collection_id` AS UNSIGNED) AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`ghns_excluded` AS `ghns_excluded`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- `project`.`count_likes` AS `count_likes`,
- `project`.`count_dislikes` AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- `stat_rating_project`.`score` AS `laplace_score`,
- `stat_rating_project`.`score_with_pling` AS `laplace_score_new`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.`package_type_id_list` AS `package_types`,
- `tppt`.`package_name_list` AS `package_names`,
- `t`.`tag_names` AS `tags`,
- `t`.`tag_ids` AS `tag_ids`,
- `sdqy`.amount AS count_downloads_quarter,
- `project_license`.title AS project_license_title
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- LEFT JOIN `tmp_project_tags` AS t ON t.`tag_project_id` = project.`project_id`
- LEFT JOIN `stat_downloads_quarter_year` AS sdqy ON sdqy.project_id = project.project_id
- LEFT JOIN `project_license` ON project_license.project_license_id = project.project_license_id
- LEFT JOIN `stat_rating_project` ON stat_rating_project.project_id = project.project_id
-
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND (`project`.`type_id` = 1 OR `project`.`type_id` = 3)
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
-
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
- DROP TABLE IF EXISTS old_stat_projects;
- END$$
+ DROP TABLE IF EXISTS `old_stat_projects`;
+END$$
DELIMITER ;
diff --git a/sql_code/20190509_v_support.sql b/sql_code/20190509_v_support.sql
index 57606dcc5..19460adf4 100644
--- a/sql_code/20190509_v_support.sql
+++ b/sql_code/20190509_v_support.sql
@@ -1,37 +1,43 @@
-create view v_support as
-SELECT
- member_id
- ,max(active_time) AS active_time_max
- ,min(active_time) AS active_time_min
- , DATE_ADD(max(active_time), INTERVAL 1 YEAR) as valid_till
- ,(DATE_ADD(max(active_time), INTERVAL 1 YEAR) > now()) AS is_valid
- ,0 as is_subscription
- from support
- where status_id = 2 AND type_id = 0
- group by member_id
-
- union
-
- SELECT
- member_id
- ,max(active_time) AS active_time_max
- ,min(active_time) AS active_time_min
- , DATE_ADD(max(active_time), INTERVAL 1 MONTH) as valid_till
- ,(DATE_ADD(max(active_time), INTERVAL 1 MONTH) > now()) AS is_valid
- ,1 as is_subscription
- from support
- where status_id = 2 AND type_id = 2 and period= 'M'
- group by member_id
-
- union
-
- SELECT
- member_id
- ,max(active_time) AS active_time_max
- ,min(active_time) AS active_time_min
- , DATE_ADD(max(active_time), INTERVAL 1 YEAR) as valid_till
- ,(DATE_ADD(max(active_time), INTERVAL 1 YEAR) > now()) AS is_valid
- ,1 as is_subscription
- from support
- where status_id = 2 AND type_id = 2 and period= 'Y'
- group by member_id;
\ No newline at end of file
+
+
+DROP VIEW IF EXISTS `v_support`;
+
+CREATE VIEW `v_support` AS
+ SELECT `member_id`
+ , max(`active_time`) AS `active_time_max`
+ , min(`active_time`) AS `active_time_min`
+ , DATE_ADD(max(`active_time`), INTERVAL 1 YEAR) AS `valid_till`
+ , (DATE_ADD(max(`active_time`), INTERVAL 1 YEAR) > now()) AS `is_valid`
+ , 0 AS `is_subscription`
+ FROM `support`
+ WHERE `status_id` = 2
+ AND `type_id` = 0
+ GROUP BY `member_id`
+
+ UNION
+
+ SELECT `member_id`
+ , max(`active_time`) AS `active_time_max`
+ , min(`active_time`) AS `active_time_min`
+ , DATE_ADD(max(`active_time`), INTERVAL 1 MONTH) AS `valid_till`
+ , (DATE_ADD(max(`active_time`), INTERVAL 1 MONTH) > now()) AS `is_valid`
+ , 1 AS `is_subscription`
+ FROM `support`
+ WHERE `status_id` = 2
+ AND `type_id` = 2
+ AND `period` = 'M'
+ GROUP BY `member_id`
+
+ UNION
+
+ SELECT `member_id`
+ , max(`active_time`) AS `active_time_max`
+ , min(`active_time`) AS `active_time_min`
+ , DATE_ADD(max(`active_time`), INTERVAL 1 YEAR) AS `valid_till`
+ , (DATE_ADD(max(`active_time`), INTERVAL 1 YEAR) > now()) AS `is_valid`
+ , 1 AS `is_subscription`
+ FROM `support`
+ WHERE `status_id` = 2
+ AND `type_id` = 2
+ AND `period` = 'Y'
+ GROUP BY `member_id`;
\ No newline at end of file
diff --git a/sql_code/20190513_stat_projects_updates.sql b/sql_code/20190513_stat_projects_updates.sql
index c6eaf9a9a..4555cb405 100644
--- a/sql_code/20190513_stat_projects_updates.sql
+++ b/sql_code/20190513_stat_projects_updates.sql
@@ -1,180 +1,179 @@
+
+DROP PROCEDURE IF EXISTS `generate_stat_project`;
+
DELIMITER $$
-drop procedure generate_stat_project;
CREATE PROCEDURE `generate_stat_project`()
BEGIN
- DROP TABLE IF EXISTS tmp_reported_projects;
- CREATE TEMPORARY TABLE tmp_reported_projects
- (PRIMARY KEY `primary` (project_id) )
- AS
- SELECT
- `reports_project`.`project_id` AS `project_id`,
- COUNT(`reports_project`.`project_id`) AS `amount_reports`,
- MAX(`reports_project`.`created_at`) AS `latest_report`
- FROM
- `reports_project`
- WHERE
- (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
- GROUP BY `reports_project`.`project_id`
- ;
+ DROP TABLE IF EXISTS `tmp_reported_projects`;
+ CREATE TEMPORARY TABLE `tmp_reported_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ AS
+ SELECT `reports_project`.`project_id` AS `project_id`,
+ COUNT(`reports_project`.`project_id`) AS `amount_reports`,
+ MAX(`reports_project`.`created_at`) AS `latest_report`
+ FROM `reports_project`
+ WHERE (`reports_project`.`is_deleted` = 0 AND `reports_project`.`report_type` = 0)
+ GROUP BY `reports_project`.`project_id`;
+
+ DROP TABLE IF EXISTS `tmp_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_project_package_types`
+ (
+ PRIMARY KEY `primary` (`project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `tag_object`.`tag_parent_object_id` AS `project_id`,
+ GROUP_CONCAT(DISTINCT `tag_object`.`tag_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `tag`.`tag_fullname`) AS `package_name_list`
+ FROM `tag_object`
+ JOIN
+ `tag` ON `tag_object`.`tag_id` = `tag`.`tag_id`
+ JOIN
+ `ppload`.`ppload_files` `files` ON `files`.`id` = `tag_object`.`tag_object_id`
+ WHERE `tag_object`.`tag_group_id` = 8
+ AND `tag_object`.`is_deleted` = 0
+ AND `files`.`active` = 1
+ GROUP BY `tag_object`.`tag_parent_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT GROUP_CONCAT(`tag_name`) AS `tag_names`,
+ GROUP_CONCAT(`tag_id`) AS `tag_ids`,
+ `tag_project_id`
+ FROM (
+ SELECT DISTINCT `tag`.`tag_name`,
+ `tag`.`tag_id`,
+ `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tag_type_id` = 1 #project
+ AND `tgo`.`is_deleted` = 0
+ UNION ALL
+ SELECT DISTINCT `tag`.`tag_name`,
+ `tag`.`tag_ID`,
+ `tgo`.`tag_parent_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `tgo`.`tag_object_id`
+ WHERE `tag_type_id` = 3 #file
+ AND `files`.`active` = 1
+ AND `tgo`.`is_deleted` = 0
+ ) `A`
+ GROUP BY `tag_project_id`
+ ORDER BY `tag_project_id`;
- DROP TABLE IF EXISTS tmp_project_package_types;
- CREATE TEMPORARY TABLE tmp_project_package_types
- (PRIMARY KEY `primary` (project_id))
- ENGINE MyISAM
- AS
- SELECT
- tag_object.tag_parent_object_id as project_id,
- GROUP_CONCAT(DISTINCT tag_object.tag_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT tag.tag_fullname) AS `package_name_list`
- FROM
- tag_object
- JOIN
- tag ON tag_object.tag_id = tag.tag_id
- JOIN
- ppload.ppload_files files ON files.id = tag_object.tag_object_id
- WHERE
- tag_object.tag_group_id = 8
- AND tag_object.is_deleted = 0
- AND files.active = 1
- GROUP BY tag_object.tag_parent_object_id
- ;
+ DROP TABLE IF EXISTS `tmp_stat_projects`;
+ CREATE TABLE `tmp_stat_projects`
+ (
+ PRIMARY KEY `primary` (`project_id`),
+ INDEX `idx_ppload` (`ppload_collection_id`),
+ INDEX `idx_cat` (`project_category_id`),
+ INDEX `idx_member` (`member_id`),
+ INDEX `idx_source_url` (`source_url`(50))
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `project`.`project_id` AS `project_id`,
+ `project`.`member_id` AS `member_id`,
+ `project`.`content_type` AS `content_type`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`hive_category_id` AS `hive_category_id`,
+ `project`.`status` AS `status`,
+ `project`.`uuid` AS `uuid`,
+ `project`.`pid` AS `pid`,
+ `project`.`type_id` AS `type_id`,
+ `project`.`title` AS `title`,
+ `project`.`description` AS `description`,
+ `project`.`version` AS `version`,
+ `project`.`project_license_id` AS `project_license_id`,
+ `project`.`image_big` AS `image_big`,
+ `project`.`image_small` AS `image_small`,
+ `project`.`start_date` AS `start_date`,
+ `project`.`content_url` AS `content_url`,
+ `project`.`created_at` AS `created_at`,
+ `project`.`changed_at` AS `changed_at`,
+ `project`.`major_updated_at` AS `major_updated_at`,
+ `project`.`deleted_at` AS `deleted_at`,
+ `project`.`creator_id` AS `creator_id`,
+ `project`.`facebook_code` AS `facebook_code`,
+ `project`.`source_url` AS `source_url`,
+ `project`.`twitter_code` AS `twitter_code`,
+ `project`.`google_code` AS `google_code`,
+ `project`.`link_1` AS `link_1`,
+ `project`.`embed_code` AS `embed_code`,
+ CAST(`project`.`ppload_collection_id` AS UNSIGNED) AS `ppload_collection_id`,
+ `project`.`validated` AS `validated`,
+ `project`.`validated_at` AS `validated_at`,
+ `project`.`featured` AS `featured`,
+ `project`.`ghns_excluded` AS `ghns_excluded`,
+ `project`.`amount` AS `amount`,
+ `project`.`amount_period` AS `amount_period`,
+ `project`.`claimable` AS `claimable`,
+ `project`.`claimed_by_member` AS `claimed_by_member`,
+ IFNULL(`stat_rating_project`.`likes`, 0) AS `count_likes`,
+ IFNULL(`stat_rating_project`.`dislikes`, 0) AS `count_dislikes`,
+ `project`.`count_comments` AS `count_comments`,
+ `project`.`count_downloads_hive` AS `count_downloads_hive`,
+ `project`.`source_id` AS `source_id`,
+ `project`.`source_pk` AS `source_pk`,
+ `project`.`source_type` AS `source_type`,
+ `project`.`validated` AS `project_validated`,
+ `project`.`uuid` AS `project_uuid`,
+ `project`.`status` AS `project_status`,
+ `project`.`created_at` AS `project_created_at`,
+ `project`.`changed_at` AS `project_changed_at`,
+ IFNULL(`stat_rating_project`.`score`, 50) AS `laplace_score_old`,
+ IFNULL(`stat_rating_project`.`score_with_pling`, 500) AS `laplace_score`,
+ `member`.`type` AS `member_type`,
+ `member`.`member_id` AS `project_member_id`,
+ `member`.`username` AS `username`,
+ `member`.`profile_image_url` AS `profile_image_url`,
+ `member`.`city` AS `city`,
+ `member`.`country` AS `country`,
+ `member`.`created_at` AS `member_created_at`,
+ `member`.`paypal_mail` AS `paypal_mail`,
+ `project_category`.`title` AS `cat_title`,
+ `project_category`.`xdg_type` AS `cat_xdg_type`,
+ `project_category`.`name_legacy` AS `cat_name_legacy`,
+ `project_category`.`show_description` AS `cat_show_description`,
+ `stat_plings`.`amount_received` AS `amount_received`,
+ `stat_plings`.`count_plings` AS `count_plings`,
+ `stat_plings`.`count_plingers` AS `count_plingers`,
+ `stat_plings`.`latest_pling` AS `latest_pling`,
+ `trp`.`amount_reports` AS `amount_reports`,
+ `tppt`.`package_type_id_list` AS `package_types`,
+ `tppt`.`package_name_list` AS `package_names`,
+ `t`.`tag_names` AS `tags`,
+ `t`.`tag_ids` AS `tag_ids`,
+ `sdqy`.`amount` AS `count_downloads_quarter`,
+ `project_license`.`title` AS `project_license_title`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
+ LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_reported_projects` AS `trp` ON `trp`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_package_types` AS `tppt` ON `tppt`.`project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `stat_downloads_quarter_year` AS `sdqy` ON `sdqy`.`project_id` = `project`.`project_id`
+ LEFT JOIN `project_license` ON `project_license`.`project_license_id` = `project`.`project_license_id`
+ LEFT JOIN `stat_rating_project` ON `stat_rating_project`.`project_id` = `project`.`project_id`
- DROP TABLE IF EXISTS tmp_project_tags;
- CREATE TEMPORARY TABLE tmp_project_tags
- (PRIMARY KEY `primary` (tag_project_id))
- ENGINE MyISAM
- AS
- SELECT
- GROUP_CONCAT(tag_name) AS tag_names,
- GROUP_CONCAT(tag_id) AS tag_ids,
- tag_project_id
- FROM (
- select
- distinct tag.tag_name,
- tag.tag_id,
- tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tag_type_id = 1 #project
- AND tgo.is_deleted = 0
- UNION ALL
- select
- distinct tag.tag_name,
- tag.tag_ID,
- tgo.tag_parent_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- JOIN ppload.ppload_files files ON files.id = tgo.tag_object_id
- WHERE tag_type_id = 3 #file
- AND files.active = 1
- AND tgo.is_deleted = 0
- ) A
- GROUP BY tag_project_id
- ORDER BY tag_project_id;
+ WHERE `member`.`is_deleted` = 0
+ AND `member`.`is_active` = 1
+ AND (`project`.`type_id` = 1 OR `project`.`type_id` = 3)
+ AND `project`.`status` = 100
+ AND `project_category`.`is_active` = 1;
- DROP TABLE IF EXISTS tmp_stat_projects;
- CREATE TABLE tmp_stat_projects
- (PRIMARY KEY `primary` (`project_id`), INDEX `idx_ppload` (`ppload_collection_id`), INDEX `idx_cat` (`project_category_id`),INDEX `idx_member` (`member_id`),INDEX `idx_source_url` (`source_url`(50)))
- ENGINE MyISAM
- AS
- SELECT
- `project`.`project_id` AS `project_id`,
- `project`.`member_id` AS `member_id`,
- `project`.`content_type` AS `content_type`,
- `project`.`project_category_id` AS `project_category_id`,
- `project`.`hive_category_id` AS `hive_category_id`,
- `project`.`status` AS `status`,
- `project`.`uuid` AS `uuid`,
- `project`.`pid` AS `pid`,
- `project`.`type_id` AS `type_id`,
- `project`.`title` AS `title`,
- `project`.`description` AS `description`,
- `project`.`version` AS `version`,
- `project`.`project_license_id` AS `project_license_id`,
- `project`.`image_big` AS `image_big`,
- `project`.`image_small` AS `image_small`,
- `project`.`start_date` AS `start_date`,
- `project`.`content_url` AS `content_url`,
- `project`.`created_at` AS `created_at`,
- `project`.`changed_at` AS `changed_at`,
- `project`.`major_updated_at` AS `major_updated_at`,
- `project`.`deleted_at` AS `deleted_at`,
- `project`.`creator_id` AS `creator_id`,
- `project`.`facebook_code` AS `facebook_code`,
- `project`.`source_url` AS `source_url`,
- `project`.`twitter_code` AS `twitter_code`,
- `project`.`google_code` AS `google_code`,
- `project`.`link_1` AS `link_1`,
- `project`.`embed_code` AS `embed_code`,
- CAST(`project`.`ppload_collection_id` AS UNSIGNED) AS `ppload_collection_id`,
- `project`.`validated` AS `validated`,
- `project`.`validated_at` AS `validated_at`,
- `project`.`featured` AS `featured`,
- `project`.`ghns_excluded` AS `ghns_excluded`,
- `project`.`amount` AS `amount`,
- `project`.`amount_period` AS `amount_period`,
- `project`.`claimable` AS `claimable`,
- `project`.`claimed_by_member` AS `claimed_by_member`,
- IFNULL(`stat_rating_project`.`likes`, 0) AS `count_likes`,
- IFNULL(`stat_rating_project`.`dislikes`, 0) AS `count_dislikes`,
- `project`.`count_comments` AS `count_comments`,
- `project`.`count_downloads_hive` AS `count_downloads_hive`,
- `project`.`source_id` AS `source_id`,
- `project`.`source_pk` AS `source_pk`,
- `project`.`source_type` AS `source_type`,
- `project`.`validated` AS `project_validated`,
- `project`.`uuid` AS `project_uuid`,
- `project`.`status` AS `project_status`,
- `project`.`created_at` AS `project_created_at`,
- `project`.`changed_at` AS `project_changed_at`,
- IFNULL(`stat_rating_project`.`score`, 50) AS `laplace_score_old`,
- IFNULL(`stat_rating_project`.`score_with_pling`, 500) AS `laplace_score`,
- `member`.`type` AS `member_type`,
- `member`.`member_id` AS `project_member_id`,
- `member`.`username` AS `username`,
- `member`.`profile_image_url` AS `profile_image_url`,
- `member`.`city` AS `city`,
- `member`.`country` AS `country`,
- `member`.`created_at` AS `member_created_at`,
- `member`.`paypal_mail` AS `paypal_mail`,
- `project_category`.`title` AS `cat_title`,
- `project_category`.`xdg_type` AS `cat_xdg_type`,
- `project_category`.`name_legacy` AS `cat_name_legacy`,
- `project_category`.`show_description` AS `cat_show_description`,
- `stat_plings`.`amount_received` AS `amount_received`,
- `stat_plings`.`count_plings` AS `count_plings`,
- `stat_plings`.`count_plingers` AS `count_plingers`,
- `stat_plings`.`latest_pling` AS `latest_pling`,
- `trp`.`amount_reports` AS `amount_reports`,
- `tppt`.`package_type_id_list` AS `package_types`,
- `tppt`.`package_name_list` AS `package_names`,
- `t`.`tag_names` AS `tags`,
- `t`.`tag_ids` AS `tag_ids`,
- `sdqy`.amount AS count_downloads_quarter,
- `project_license`.title AS project_license_title
- FROM
- `project`
- JOIN `member` ON `member`.`member_id` = `project`.`member_id`
- JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id`
- LEFT JOIN `stat_plings` ON `stat_plings`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_reported_projects` AS trp ON `trp`.`project_id` = `project`.`project_id`
- LEFT JOIN `tmp_project_package_types` AS tppt ON tppt.project_id = `project`.project_id
- LEFT JOIN `tmp_project_tags` AS t ON t.`tag_project_id` = project.`project_id`
- LEFT JOIN `stat_downloads_quarter_year` AS sdqy ON sdqy.project_id = project.project_id
- LEFT JOIN `project_license` ON project_license.project_license_id = project.project_license_id
- LEFT JOIN `stat_rating_project` ON stat_rating_project.project_id = project.project_id
-
- WHERE
- `member`.`is_deleted` = 0
- AND `member`.`is_active` = 1
- AND (`project`.`type_id` = 1 OR `project`.`type_id` = 3)
- AND `project`.`status` = 100
- AND `project_category`.`is_active` = 1
- ;
-
- RENAME TABLE stat_projects TO old_stat_projects, tmp_stat_projects TO stat_projects;
+ RENAME TABLE `stat_projects` TO `old_stat_projects`, `tmp_stat_projects` TO `stat_projects`;
- DROP TABLE IF EXISTS old_stat_projects;
- END$$
+ DROP TABLE IF EXISTS `old_stat_projects`;
+END$$
DELIMITER ;
diff --git a/sql_code/20190514_score.sql b/sql_code/20190514_score.sql
new file mode 100644
index 000000000..515c652e4
--- /dev/null
+++ b/sql_code/20190514_score.sql
@@ -0,0 +1,2 @@
+update project_rating set score = round(((user_like-6)*8+(user_dislike-6)*3+2*5)/(user_like+user_dislike+2-12),2)
+ where user_like >=6 and user_dislike>=6 ;
\ No newline at end of file
diff --git a/sql_code/20190515_media_views.sql b/sql_code/20190515_media_views.sql
index 45a4ae715..d354bf98e 100644
--- a/sql_code/20190515_media_views.sql
+++ b/sql_code/20190515_media_views.sql
@@ -1,44 +1,52 @@
-CREATE TABLE `media_views` (
- `media_view_id` BIGINT(20) NOT NULL,
- `media_view_type_id` INT(1) NOT NULL,
- `project_id` INT(11) NOT NULL,
- `collection_id` INT(11) NOT NULL,
- `file_id` INT(11) NOT NULL,
- `member_id` INT(11) NULL DEFAULT NULL,
- `referer` VARCHAR(255) NULL DEFAULT NULL,
- `start_timestamp` DATETIME NULL DEFAULT NULL,
- `stop_timestamp` DATETIME NULL DEFAULT NULL,
- `ip` VARCHAR(39) NULL DEFAULT NULL,
- `source` VARCHAR(39) NULL DEFAULT NULL,
- PRIMARY KEY (`media_view_id`)
+
+
+CREATE TABLE `media_views`
+(
+ `media_view_id` BIGINT(20) NOT NULL,
+ `media_view_type_id` INT(1) NOT NULL,
+ `project_id` INT(11) NOT NULL,
+ `collection_id` INT(11) NOT NULL,
+ `file_id` INT(11) NOT NULL,
+ `member_id` INT(11) NULL DEFAULT NULL,
+ `referer` VARCHAR(255) NULL DEFAULT NULL,
+ `start_timestamp` DATETIME NULL DEFAULT NULL,
+ `stop_timestamp` DATETIME NULL DEFAULT NULL,
+ `ip` VARCHAR(39) NULL DEFAULT NULL,
+ `source` VARCHAR(39) NULL DEFAULT NULL,
+ PRIMARY KEY (`media_view_id`)
)
-COLLATE='utf8_general_ci'
-ENGINE=InnoDB
+ COLLATE = 'utf8_general_ci'
+ ENGINE = InnoDB
;
ALTER TABLE `media_views`
- ADD INDEX `idx_file` (`collection_id`, `file_id`),
- ADD INDEX `idx_media_type` (`media_view_type_id`);
+ ADD INDEX `idx_file` (`collection_id`, `file_id`),
+ ADD INDEX `idx_media_type` (`media_view_type_id`);
-CREATE TABLE `media_view_type` (
- `media_view_type_id` INT(1) NOT NULL,
- `name` VARCHAR(35) NULL DEFAULT NULL,
- `full_name` VARCHAR(255) NULL DEFAULT NULL,
- `description` VARCHAR(255) NULL DEFAULT NULL,
- PRIMARY KEY (`media_view_type_id`)
+CREATE TABLE `media_view_type`
+(
+ `media_view_type_id` INT(1) NOT NULL,
+ `name` VARCHAR(35) NULL DEFAULT NULL,
+ `full_name` VARCHAR(255) NULL DEFAULT NULL,
+ `description` VARCHAR(255) NULL DEFAULT NULL,
+ PRIMARY KEY (`media_view_type_id`)
)
-COLLATE='utf8_general_ci'
-ENGINE=InnoDB
+ COLLATE = 'utf8_general_ci'
+ ENGINE = InnoDB
;
-INSERT INTO media_view_type (media_view_type_id,NAME,full_name,description) VALUES (1,'video','Video','Video');
-INSERT INTO media_view_type (media_view_type_id,NAME,full_name,description) VALUES (2,'music','Music','Music');
-INSERT INTO media_view_type (media_view_type_id,NAME,full_name,description) VALUES (3,'book','Book','Book');
+INSERT INTO `media_view_type` (`media_view_type_id`, `NAME`, `full_name`, `description`)
+VALUES (1, 'video', 'Video', 'Video');
+INSERT INTO `media_view_type` (`media_view_type_id`, `NAME`, `full_name`, `description`)
+VALUES (2, 'music', 'Music', 'Music');
+INSERT INTO `media_view_type` (`media_view_type_id`, `NAME`, `full_name`, `description`)
+VALUES (3, 'book', 'Book', 'Book');
-SELECT * FROM media_views m
-JOIN media_view_type mp ON mp.media_view_type_id = m.media_view_type_id
+SELECT *
+FROM `media_views` `m`
+ JOIN `media_view_type` `mp` ON `mp`.`media_view_type_id` = `m`.`media_view_type_id`
;
diff --git a/sql_code/20190516_solr_query_import_updates.sql b/sql_code/20190516_solr_query_import_updates.sql
index 37d9de0db..f116e01b3 100644
--- a/sql_code/20190516_solr_query_import_updates.sql
+++ b/sql_code/20190516_solr_query_import_updates.sql
@@ -1,255 +1,306 @@
+
+
DELIMITER $$
-drop PROCEDURE solr_query_fullimport_prepare;
-CREATE PROCEDURE `solr_query_fullimport_prepare`()
+DROP PROCEDURE IF EXISTS `solr_query_fullimport_prepare`;
+CREATE PROCEDURE `solr_query_fullimport_prepare`()
BEGIN
-
-
- DROP TABLE IF EXISTS tmp_solr_cat_tree;
- CREATE TEMPORARY TABLE tmp_solr_cat_tree
- (PRIMARY KEY `primary` (project_category_id) )
- AS
- SELECT
- pc.project_category_id,
- pc.title,
- pc.is_active,
- count(pc.lft) AS depth,
- GROUP_CONCAT(pc2.project_category_id ORDER BY pc2.lft) AS ancestor_id_path,
- GROUP_CONCAT(pc2.title ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path
- FROM project_category AS pc, project_category AS pc2
- WHERE (pc.lft BETWEEN pc2.lft AND pc2.rgt)
- GROUP BY pc.lft
- ORDER BY pc.lft;
-
- DROP TABLE IF EXISTS tmp_solr_cat_store;
- CREATE TEMPORARY TABLE tmp_solr_cat_store
- (PRIMARY KEY `primary` (project_category_id) )
- AS
- SELECT
- tct.project_category_id,
- tct.ancestor_id_path,
- tct.title,
- tct.is_active,
- group_concat(store_id) AS stores
- FROM tmp_solr_cat_tree AS tct, config_store_category AS csc
- WHERE FIND_IN_SET(csc.project_category_id, tct.ancestor_id_path) > 0
- GROUP BY tct.project_category_id
- ORDER BY tct.project_category_id;
-
- DROP TABLE IF EXISTS tmp_solr_project_tags;
- CREATE TEMPORARY TABLE tmp_solr_project_tags
- (PRIMARY KEY `primary` (tag_project_id) )
- AS
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- , tgo.tag_object_id AS tag_project_id
- FROM tag_object AS tgo
- JOIN tag ON tag.tag_id = tgo.tag_id
- WHERE tgo.tag_type_id = 1 and tgo.tag_group_id in (5,6) and tgo.is_deleted = 0
- GROUP BY tgo.tag_object_id;
-
- DROP TABLE IF EXISTS tmp_solr_project_license;
- CREATE TEMPORARY TABLE tmp_solr_project_license
- (PRIMARY KEY `primary` (license_project_id))
+
+ DROP TABLE IF EXISTS `tmp_solr_cat_tree`;
+ CREATE TEMPORARY TABLE `tmp_solr_cat_tree`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
+ AS
+ SELECT `pc`.`project_category_id`,
+ `pc`.`title`,
+ `pc`.`is_active`,
+ count(`pc`.`lft`) AS `depth`,
+ GROUP_CONCAT(`pc2`.`project_category_id` ORDER BY `pc2`.`lft`) AS `ancestor_id_path`,
+ GROUP_CONCAT(`pc2`.`title` ORDER BY `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path`
+ FROM `project_category` AS `pc`,
+ `project_category` AS `pc2`
+ WHERE (`pc`.`lft` BETWEEN `pc2`.`lft` AND `pc2`.`rgt`)
+ GROUP BY `pc`.`lft`
+ ORDER BY `pc`.`lft`;
+
+ DROP TABLE IF EXISTS `tmp_solr_cat_store`;
+ CREATE TEMPORARY TABLE `tmp_solr_cat_store`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
+ AS
+ SELECT `tct`.`project_category_id`,
+ `tct`.`ancestor_id_path`,
+ `tct`.`title`,
+ `tct`.`is_active`,
+ group_concat(`store_id`) AS `stores`
+ FROM `tmp_solr_cat_tree` AS `tct`,
+ `config_store_category` AS `csc`
+ WHERE FIND_IN_SET(`csc`.`project_category_id`, `tct`.`ancestor_id_path`) > 0
+ GROUP BY `tct`.`project_category_id`
+ ORDER BY `tct`.`project_category_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_project_tags`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_tags`
+ (
+ PRIMARY KEY `primary` (`tag_project_id`)
+ )
+ AS
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ , `tgo`.`tag_object_id` AS `tag_project_id`
+ FROM `tag_object` AS `tgo`
+ JOIN `tag` ON `tag`.`tag_id` = `tgo`.`tag_id`
+ WHERE `tgo`.`tag_type_id` = 1
+ AND `tgo`.`tag_group_id` IN (5, 6)
+ AND `tgo`.`is_deleted` = 0
+ GROUP BY `tgo`.`tag_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_project_license`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_license`
+ (
+ PRIMARY KEY `primary` (`license_project_id`)
+ )
ENGINE MyISAM
- AS
- SELECT
- t.tag_object_id as license_project_id,
- GROUP_CONCAT(DISTINCT ta.tag_name) AS `license_name_list`
- FROM tag_object t
- INNER JOIN tag ta on ta.tag_id = t.tag_id
- WHERE t.tag_type_id = 1 and t.tag_group_id = 7 AND t.is_deleted = 0
- group by tag_object_id
- ;
-
- DROP TABLE IF EXISTS tmp_solr_project_package_types;
- CREATE TEMPORARY TABLE tmp_solr_project_package_types
- (PRIMARY KEY `primary` (package_project_id))
- ENGINE MyISAM
- AS
- SELECT
- t.tag_parent_object_id as package_project_id,
- GROUP_CONCAT(DISTINCT ta.tag_id) AS package_type_id_list,
- GROUP_CONCAT(DISTINCT ta.tag_name) AS `package_name_list`
- FROM tag_object t
- INNER JOIN tag ta on ta.tag_id = t.tag_id
- JOIN ppload.ppload_files files ON files.id = t.tag_object_id AND files.active = 1
- WHERE t.tag_type_id = 3 and t.tag_group_id = 8 AND t.is_deleted = 0
- group by tag_parent_object_id
- ;
-
- DROP TABLE IF EXISTS tmp_solr_project_arch_types;
- CREATE TEMPORARY TABLE tmp_solr_project_arch_types
- (PRIMARY KEY `primary` (arch_project_id))
- ENGINE MyISAM
- AS
- SELECT
- t.tag_parent_object_id as arch_project_id,
- GROUP_CONCAT(DISTINCT ta.tag_id) AS arch_type_id_list,
- GROUP_CONCAT(DISTINCT ta.tag_name) AS `arch_name_list`
- FROM tag_object t
- INNER JOIN tag ta on ta.tag_id = t.tag_id
- JOIN ppload.ppload_files files ON files.id = t.tag_object_id AND files.active = 1
- WHERE t.tag_type_id = 3 and t.tag_group_id = 9 AND t.is_deleted = 0
- group by tag_parent_object_id
- ;
-
- DROP TABLE IF EXISTS tmp_solr_query_fullimport;
- create table tmp_solr_query_fullimport as
-
- SELECT
- project.project_id,
- project.member_id AS project_member_id,
- project.project_category_id AS project_category_id,
- project.title AS project_title,
- description,
- image_small,
- member.username,
- member.firstname,
- member.lastname,
- tcs.title AS cat_title,
- IFNULL(r.likes, 0) AS count_likes,
- IFNULL(r.dislikes, 0) AS count_dislikes,
- IFNULL(r.score_with_pling, 500) AS laplace_score,
- DATE_FORMAT(project.created_at, '%Y-%m-%dT%TZ') AS created_at,
- DATE_FORMAT(project.changed_at, '%Y-%m-%dT%TZ') AS changed_at,
- tcs.stores,
- tcs.ancestor_id_path AS `cat_id_ancestor_path`,
- sppt.package_name_list AS `package_names`,
- appt.arch_name_list AS `arch_names`,
- c.license_name_list AS `license_names`,
- t.tag_names AS `tags`
- FROM project
- JOIN member ON member.member_id = project.member_id
- LEFT JOIN tmp_solr_cat_store AS tcs ON project.project_category_id = tcs.project_category_id
- LEFT JOIN tmp_solr_project_package_types AS sppt ON sppt.package_project_id = project.project_id
- LEFT JOIN tmp_solr_project_arch_types AS appt ON appt.arch_project_id = project.project_id
- LEFT JOIN tmp_solr_project_license AS c ON c.license_project_id = project.project_id
- LEFT JOIN tmp_solr_project_tags AS t ON t.tag_project_id = project.project_id
- LEFT JOIN stat_rating_project r ON r.project_id = project.project_id
- WHERE project.`status` = 100 AND project.`type_id` = 1 AND member.`is_active` = 1 AND tcs.`is_active` = 1;
-
+ AS
+ SELECT `t`.`tag_object_id` AS `license_project_id`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_name`) AS `license_name_list`
+ FROM `tag_object` `t`
+ INNER JOIN `tag` `ta` ON `ta`.`tag_id` = `t`.`tag_id`
+ WHERE `t`.`tag_type_id` = 1
+ AND `t`.`tag_group_id` = 7
+ AND `t`.`is_deleted` = 0
+ GROUP BY `tag_object_id`;
-END$$
-DELIMITER ;
+ DROP TABLE IF EXISTS `tmp_solr_project_package_types`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_package_types`
+ (
+ PRIMARY KEY `primary` (`package_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `t`.`tag_parent_object_id` AS `package_project_id`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_id`) AS `package_type_id_list`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_name`) AS `package_name_list`
+ FROM `tag_object` `t`
+ INNER JOIN `tag` `ta` ON `ta`.`tag_id` = `t`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `t`.`tag_object_id` AND `files`.`active` = 1
+ WHERE `t`.`tag_type_id` = 3
+ AND `t`.`tag_group_id` = 8
+ AND `t`.`is_deleted` = 0
+ GROUP BY `tag_parent_object_id`;
+
+ DROP TABLE IF EXISTS `tmp_solr_project_arch_types`;
+ CREATE TEMPORARY TABLE `tmp_solr_project_arch_types`
+ (
+ PRIMARY KEY `primary` (`arch_project_id`)
+ )
+ ENGINE MyISAM
+ AS
+ SELECT `t`.`tag_parent_object_id` AS `arch_project_id`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_id`) AS `arch_type_id_list`,
+ GROUP_CONCAT(DISTINCT `ta`.`tag_name`) AS `arch_name_list`
+ FROM `tag_object` `t`
+ INNER JOIN `tag` `ta` ON `ta`.`tag_id` = `t`.`tag_id`
+ JOIN `ppload`.`ppload_files` `files` ON `files`.`id` = `t`.`tag_object_id` AND `files`.`active` = 1
+ WHERE `t`.`tag_type_id` = 3
+ AND `t`.`tag_group_id` = 9
+ AND `t`.`is_deleted` = 0
+ GROUP BY `tag_parent_object_id`;
+ DROP TABLE IF EXISTS `tmp_solr_query_fullimport`;
+ CREATE TABLE `tmp_solr_query_fullimport` AS
+ SELECT `project`.`project_id`,
+ `project`.`member_id` AS `project_member_id`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`title` AS `project_title`,
+ `description`,
+ `image_small`,
+ `member`.`username`,
+ `member`.`firstname`,
+ `member`.`lastname`,
+ `tcs`.`title` AS `cat_title`,
+ IFNULL(`r`.`likes`, 0) AS `count_likes`,
+ IFNULL(`r`.`dislikes`, 0) AS `count_dislikes`,
+ IFNULL(`r`.`score_with_pling`, 500) AS `laplace_score`,
+ DATE_FORMAT(`project`.`created_at`, '%Y-%m-%dT%TZ') AS `created_at`,
+ DATE_FORMAT(`project`.`changed_at`, '%Y-%m-%dT%TZ') AS `changed_at`,
+ `tcs`.`stores`,
+ `tcs`.`ancestor_id_path` AS `cat_id_ancestor_path`,
+ `sppt`.`package_name_list` AS `package_names`,
+ `appt`.`arch_name_list` AS `arch_names`,
+ `c`.`license_name_list` AS `license_names`,
+ `t`.`tag_names` AS `tags`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ LEFT JOIN `tmp_solr_cat_store` AS `tcs` ON `project`.`project_category_id` = `tcs`.`project_category_id`
+ LEFT JOIN `tmp_solr_project_package_types` AS `sppt`
+ ON `sppt`.`package_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_solr_project_arch_types` AS `appt` ON `appt`.`arch_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_solr_project_license` AS `c` ON `c`.`license_project_id` = `project`.`project_id`
+ LEFT JOIN `tmp_solr_project_tags` AS `t` ON `t`.`tag_project_id` = `project`.`project_id`
+ LEFT JOIN `stat_rating_project` `r` ON `r`.`project_id` = `project`.`project_id`
+ WHERE `project`.`status` = 100
+ AND `project`.`type_id` = 1
+ AND `member`.`is_active` = 1
+ AND `tcs`.`is_active` = 1;
+
+
+END$$
+DELIMITER ;
DELIMITER $$
-drop PROCEDURE solr_query_delta_import_new;
-CREATE PROCEDURE `solr_query_delta_import_new`(IN projectID INT(11))
+DROP PROCEDURE `solr_query_delta_import_new`;
+CREATE PROCEDURE `solr_query_delta_import_new`(IN `projectID` INT(11))
BEGIN
- DROP TABLE IF EXISTS tmp_cat_tree;
- CREATE TEMPORARY TABLE tmp_cat_tree
- (PRIMARY KEY `primary` (project_category_id) )
- AS
- SELECT
- pc.project_category_id,
- pc.title,
- pc.is_active,
- count(pc.lft) AS depth,
- GROUP_CONCAT(pc2.project_category_id ORDER BY pc2.lft) AS ancestor_id_path,
- GROUP_CONCAT(pc2.title ORDER BY pc2.lft SEPARATOR ' | ') AS ancestor_path
- FROM project_category AS pc, project_category AS pc2
- WHERE (pc.lft BETWEEN pc2.lft AND pc2.rgt)
- GROUP BY pc.lft
- ORDER BY pc.lft;
-
- DROP TABLE IF EXISTS tmp_solr_cat_store;
- CREATE TEMPORARY TABLE tmp_solr_cat_store
- (PRIMARY KEY `primary` (project_category_id) )
+ DROP TABLE IF EXISTS `tmp_cat_tree`;
+ CREATE TEMPORARY TABLE `tmp_cat_tree`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
+ AS
+ SELECT `pc`.`project_category_id`,
+ `pc`.`title`,
+ `pc`.`is_active`,
+ count(`pc`.`lft`) AS `depth`,
+ GROUP_CONCAT(`pc2`.`project_category_id` ORDER BY `pc2`.`lft`) AS `ancestor_id_path`,
+ GROUP_CONCAT(`pc2`.`title` ORDER BY `pc2`.`lft` SEPARATOR ' | ') AS `ancestor_path`
+ FROM `project_category` AS `pc`,
+ `project_category` AS `pc2`
+ WHERE (`pc`.`lft` BETWEEN `pc2`.`lft` AND `pc2`.`rgt`)
+ GROUP BY `pc`.`lft`
+ ORDER BY `pc`.`lft`;
+
+ DROP TABLE IF EXISTS `tmp_solr_cat_store`;
+ CREATE TEMPORARY TABLE `tmp_solr_cat_store`
+ (
+ PRIMARY KEY `primary` (`project_category_id`)
+ )
AS
- SELECT
- tct.project_category_id,
- tct.ancestor_id_path,
- tct.title,
- tct.is_active,
- group_concat(store_id) AS stores
- FROM tmp_cat_tree AS tct, config_store_category AS csc
- WHERE FIND_IN_SET(csc.project_category_id, tct.ancestor_id_path) > 0
- GROUP BY tct.project_category_id
- ORDER BY tct.project_category_id;
-
- SELECT
- project.project_id,
- project.member_id AS project_member_id,
- project.project_category_id AS project_category_id,
- project.title AS project_title,
- description,
- image_small,
- member.username,
- member.firstname,
- member.lastname,
- tcs.title AS cat_title,
- IFNULL(r.likes, 0) AS count_likes,
- IFNULL(r.dislikes, 0) AS count_dislikes,
- IFNULL(r.score_with_pling, 500) AS laplace_score,
- DATE_FORMAT(project.created_at, '%Y-%m-%dT%TZ') AS created_at,
- DATE_FORMAT(project.changed_at, '%Y-%m-%dT%TZ') AS changed_at,
- tcs.stores,
- tcs.ancestor_id_path AS `cat_id_ancestor_path`,
- (
-
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag , ppload.ppload_files files
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id = 8 and tag_object.tag_type_id = 3 and tag_object.is_deleted = 0 and tag_object.tag_parent_object_id = project.project_id
- and tag_object.tag_object_id = files.id and files.active = 1
- ) as package_names ,
- (
-
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag , ppload.ppload_files files
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id = 9 and tag_object.tag_type_id = 3 and tag_object.is_deleted = 0 and tag_object.tag_parent_object_id = project.project_id
- and tag_object.tag_object_id = files.id and files.active = 1
- ) as arch_names,
- (
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id = 7 and tag_object.tag_type_id = 1 and tag_object.is_deleted = 0 and tag_object.tag_object_id = project.project_id
- ) as license_names,
- (
- SELECT GROUP_CONCAT(tag.tag_name) AS tag_names
- FROM tag_object , tag
- WHERE tag.tag_id = tag_object.tag_id and tag_object.tag_group_id in (5,6) and tag_object.tag_type_id = 1 and tag_object.is_deleted = 0 and tag_object.tag_object_id = project.project_id
- ) as tags
- FROM project
- JOIN member ON member.member_id = project.member_id
- LEFT JOIN tmp_solr_cat_store AS tcs ON project.project_category_id = tcs.project_category_id
- LEFT JOIN stat_rating_project r ON r.project_id = project.project_id
- WHERE project.project_id = projectID and project.status=100 and member.`is_active` = 1;
-
+ SELECT `tct`.`project_category_id`,
+ `tct`.`ancestor_id_path`,
+ `tct`.`title`,
+ `tct`.`is_active`,
+ group_concat(`store_id`) AS `stores`
+ FROM `tmp_cat_tree` AS `tct`,
+ `config_store_category` AS `csc`
+ WHERE FIND_IN_SET(`csc`.`project_category_id`, `tct`.`ancestor_id_path`) > 0
+ GROUP BY `tct`.`project_category_id`
+ ORDER BY `tct`.`project_category_id`;
+
+ SELECT `project`.`project_id`,
+ `project`.`member_id` AS `project_member_id`,
+ `project`.`project_category_id` AS `project_category_id`,
+ `project`.`title` AS `project_title`,
+ `description`,
+ `image_small`,
+ `member`.`username`,
+ `member`.`firstname`,
+ `member`.`lastname`,
+ `tcs`.`title` AS `cat_title`,
+ IFNULL(`r`.`likes`, 0) AS `count_likes`,
+ IFNULL(`r`.`dislikes`, 0) AS `count_dislikes`,
+ IFNULL(`r`.`score_with_pling`, 500) AS `laplace_score`,
+ DATE_FORMAT(`project`.`created_at`, '%Y-%m-%dT%TZ') AS `created_at`,
+ DATE_FORMAT(`project`.`changed_at`, '%Y-%m-%dT%TZ') AS `changed_at`,
+ `tcs`.`stores`,
+ `tcs`.`ancestor_id_path` AS `cat_id_ancestor_path`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`,
+ `ppload`.`ppload_files` `files`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` = 8
+ AND `tag_object`.`tag_type_id` = 3
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_parent_object_id` = `project`.`project_id`
+ AND `tag_object`.`tag_object_id` = `files`.`id`
+ AND `files`.`active` = 1
+ ) AS `package_names`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`,
+ `ppload`.`ppload_files` `files`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` = 9
+ AND `tag_object`.`tag_type_id` = 3
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_parent_object_id` = `project`.`project_id`
+ AND `tag_object`.`tag_object_id` = `files`.`id`
+ AND `files`.`active` = 1
+ ) AS `arch_names`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` = 7
+ AND `tag_object`.`tag_type_id` = 1
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_object_id` = `project`.`project_id`
+ ) AS `license_names`,
+ (
+ SELECT GROUP_CONCAT(`tag`.`tag_name`) AS `tag_names`
+ FROM `tag_object`,
+ `tag`
+ WHERE `tag`.`tag_id` = `tag_object`.`tag_id`
+ AND `tag_object`.`tag_group_id` IN (5, 6)
+ AND `tag_object`.`tag_type_id` = 1
+ AND `tag_object`.`is_deleted` = 0
+ AND `tag_object`.`tag_object_id` = `project`.`project_id`
+ ) AS `tags`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ LEFT JOIN `tmp_solr_cat_store` AS `tcs` ON `project`.`project_category_id` = `tcs`.`project_category_id`
+ LEFT JOIN `stat_rating_project` `r` ON `r`.`project_id` = `project`.`project_id`
+ WHERE `project`.`project_id` = `projectID`
+ AND `project`.`status` = 100
+ AND `member`.`is_active` = 1;
+
END$$
DELIMITER ;
-
DELIMITER $$
-drop procedure solr_query_delta_new;
-CREATE PROCEDURE `solr_query_delta_new`(IN lastIndexed varchar(255))
+DROP PROCEDURE `solr_query_delta_new`;
+CREATE PROCEDURE `solr_query_delta_new`(IN `lastIndexed` varchar(255))
BEGIN
- select distinct project_id
- from
- (
- SELECT project_id
- FROM project
- JOIN member ON member.member_id = project.member_id
- WHERE (project.`status` = 100 AND project.`type_id` = 1 AND member.`is_active` = 1 AND project.changed_at > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) )
- union
- select distinct tag_object_id as project_id
- from tag_object
- where tag_type_id = 1 and (tag_created > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) or tag_changed > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) )
- union select distinct tag_parent_object_id as project_id
- from tag_object
- where tag_type_id in (8,9) and (tag_created > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) or tag_changed > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY)) )
- union
- select project_id
- from project
- JOIN ppload.ppload_files files ON project.ppload_collection_id= files.collection_id AND files.updated_timestamp > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY))
- group by project_id
- union
- select project_id from project_rating where created_at > timestamp(DATE_SUB(lastIndexed, INTERVAL 1 DAY))
- group by project_id
- ) t ;
+ SELECT DISTINCT `project_id`
+ FROM (
+ SELECT `project_id`
+ FROM `project`
+ JOIN `member` ON `member`.`member_id` = `project`.`member_id`
+ WHERE (`project`.`status` = 100 AND `project`.`type_id` = 1 AND `member`.`is_active` = 1 AND
+ `project`.`changed_at` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)))
+ UNION
+ SELECT DISTINCT `tag_object_id` AS `project_id`
+ FROM `tag_object`
+ WHERE `tag_type_id` = 1
+ AND (`tag_created` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)) OR
+ `tag_changed` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)))
+ UNION
+ SELECT DISTINCT `tag_parent_object_id` AS `project_id`
+ FROM `tag_object`
+ WHERE `tag_type_id` IN (8, 9)
+ AND (`tag_created` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)) OR
+ `tag_changed` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY)))
+ UNION
+ SELECT `project_id`
+ FROM `project`
+ JOIN `ppload`.`ppload_files` `files`
+ ON `project`.`ppload_collection_id` = `files`.`collection_id` AND
+ `files`.`updated_timestamp` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY))
+ GROUP BY `project_id`
+ UNION
+ SELECT `project_id`
+ FROM `project_rating`
+ WHERE `created_at` > timestamp(DATE_SUB(`lastIndexed`, INTERVAL 1 DAY))
+ GROUP BY `project_id`
+ ) `t`;
END$$
DELIMITER ;
\ No newline at end of file
diff --git a/sql_code/20190605_dl_unique.sql b/sql_code/20190605_dl_unique.sql
index b7dfea218..c80f7363f 100644
--- a/sql_code/20190605_dl_unique.sql
+++ b/sql_code/20190605_dl_unique.sql
@@ -1,117 +1,131 @@
+USE ppload;
+
+CREATE TABLE ppload.stat_ppload_files_downloaded_nounique
+(INDEX `idx_coll` (`collection_id`),INDEX `idx_file` (`file_id`))
+ ENGINE MyISAM
+ AS
+ SELECT f.owner_id, f.collection_id, f.file_id, COUNT(1) AS count_dl FROM ppload.ppload_files_downloaded f
+ WHERE f.downloaded_timestamp < '2019-06-01 00:00:00'
+ GROUP BY f.collection_id, f.file_id
+;
+
DROP TABLE IF EXISTS ppload.tmp_stat_ppload_files_downloaded_nounique;
CREATE TABLE ppload.tmp_stat_ppload_files_downloaded_nounique
(INDEX `idx_coll` (`collection_id`),INDEX `idx_file` (`file_id`))
ENGINE MyISAM
AS
SELECT f.owner_id, f.collection_id, f.file_id, COUNT(1) AS count_dl FROM ppload.ppload_files_downloaded f
WHERE f.downloaded_timestamp < '2019-06-01 00:00:00'
GROUP BY f.collection_id, f.file_id
;
RENAME TABLE ppload.stat_ppload_files_downloaded_nounique TO ppload.old_stat_ppload_files_downloaded_nounique;
RENAME TABLE ppload.tmp_stat_ppload_files_downloaded_nounique TO ppload.stat_ppload_files_downloaded_nounique;
DROP TABLE IF EXISTS ppload.old_stat_ppload_files_downloaded_nounique;
CREATE TABLE ppload_files_downloaded_unique LIKE ppload_files_downloaded;
ALTER TABLE `ppload_files_downloaded_unique`
ADD UNIQUE INDEX `uk` (`collection_id`, `file_id`, `downloaded_ip`);
INSERT IGNORE INTO ppload.ppload_files_downloaded_unique
SELECT MAX(f.id) as id, MAX(f.client_id) AS client_id, f.owner_id, f.collection_id, f.file_id,MAX(f.user_id) AS user_id, MIN(f.referer) AS referer, MIN(f.downloaded_timestamp) AS downloaded_timestamp, f.downloaded_ip FROM ppload.ppload_files_downloaded f
WHERE f.downloaded_timestamp >= '2019-05-01 00:00:00'
GROUP BY f.collection_id, f.file_id, f.downloaded_ip
;
-DROP VIEW stat_member_dl_curent_month;
-CREATE VIEW stat_member_dl_curent_month AS
-select date_format(now(),'%Y%m') AS `yearmonth`,`p`.`project_id` AS `project_id`,`p`.`project_category_id` AS `project_category_id`,`d`.`owner_id` AS `member_id`,`m`.`mail` AS `mail`,`m`.`paypal_mail` AS `paypal_mail`,count(`d`.`id`) AS `num_downloads`,`c`.`dl_pling_factor` AS `dl_pling_factor`,((count(`d`.`id`) * `c`.`dl_pling_factor`) / 100) AS `amount`,(case when ((select count(1) AS `sum_plings` from `project_plings` `pp` where ((`pp`.`project_id` = `p`.`project_id`) and (`pp`.`is_deleted` = 0) and (`pp`.`is_active` = 1)) group by `pp`.`project_id`) > 0) then ((select count(1) AS `sum_plings` from `project_plings` `pp` where ((`pp`.`project_id` = `p`.`project_id`) and (`pp`.`is_deleted` = 0) and (`pp`.`is_active` = 1)) group by `pp`.`project_id`) + 1) else 1 end) AS `num_plings`,(case when isnull(`tag`.`tag_item_id`) then 1 else 0 end) AS `is_license_missing`,(case when (((`c`.`source_required` = 1) and (`p`.`source_url` is not null) and (length(`p`.`source_url`) > 0)) or (`c`.`source_required` = 0)) then 0 else 1 end) AS `is_source_missing`,`p`.`pling_excluded` AS `is_pling_excluded`,`m`.`pling_excluded` AS `is_member_pling_excluded`,NULL AS `created_at`,NULL AS `updated_at` from ((((`ppload`.`ppload_files_downloaded_unique` `d` join `member` `m` on(((`m`.`member_id` = `d`.`owner_id`) and (`m`.`is_active` = 1)))) join `tmp_project_for_member_dl_plings` `p` on((`p`.`ppload_collection_id` = `d`.`collection_id`))) join `project_category` `c` on((`c`.`project_category_id` = `p`.`project_category_id`))) left join `tag_object` `tag` on(((`tag`.`tag_type_id` = 1) and (`tag`.`tag_group_id` = 7) and (`tag`.`tag_object_id` = `p`.`project_id`)))) where (`d`.`downloaded_timestamp` >= concat(left(now(),7),'-01 00:00:00')) group by `d`.`owner_id`,`p`.`project_id`
+DROP VIEW pling.stat_member_dl_curent_month;
+CREATE VIEW pling.stat_member_dl_curent_month AS
+select date_format(now(),'%Y%m') AS `yearmonth`,`p`.`project_id` AS `project_id`,`p`.`project_category_id` AS `project_category_id`,`d`.`owner_id` AS `member_id`,`m`.`mail` AS `mail`,`m`.`paypal_mail` AS `paypal_mail`,count(`d`.`id`) AS `num_downloads`,`c`.`dl_pling_factor` AS `dl_pling_factor`,((count(`d`.`id`) * `c`.`dl_pling_factor`) / 100) AS `amount`,(case when ((select count(1) AS `sum_plings` FROM pling.project_plings `pp` where ((`pp`.`project_id` = `p`.`project_id`) and (`pp`.`is_deleted` = 0) and (`pp`.`is_active` = 1)) group by `pp`.`project_id`) > 0) then ((select count(1) AS `sum_plings` from pling.project_plings `pp` where ((`pp`.`project_id` = `p`.`project_id`) and (`pp`.`is_deleted` = 0) and (`pp`.`is_active` = 1)) group by `pp`.`project_id`) + 1) else 1 end) AS `num_plings`,(case when isnull(`tag`.`tag_item_id`) then 1 else 0 end) AS `is_license_missing`,(case when (((`c`.`source_required` = 1) and (`p`.`source_url` is not null) and (length(`p`.`source_url`) > 0)) or (`c`.`source_required` = 0)) then 0 else 1 end) AS `is_source_missing`,`p`.`pling_excluded` AS `is_pling_excluded`,`m`.`pling_excluded` AS `is_member_pling_excluded`,NULL AS `created_at`,NULL AS `updated_at` from ((((`ppload`.`ppload_files_downloaded_unique` `d` join pling.member `m` on(((`m`.`member_id` = `d`.`owner_id`) and (`m`.`is_active` = 1)))) join pling.tmp_project_for_member_dl_plings `p` on((`p`.`ppload_collection_id` = `d`.`collection_id`))) join pling.project_category `c` on((`c`.`project_category_id` = `p`.`project_category_id`))) left join pling.tag_object `tag` on(((`tag`.`tag_type_id` = 1) and (`tag`.`tag_group_id` = 7) and (`tag`.`tag_object_id` = `p`.`project_id`)))) where (`d`.`downloaded_timestamp` >= concat(left(now(),7),'-01 00:00:00')) group by `d`.`owner_id`,`p`.`project_id`
;
-DROP VIEW stat_member_dl_last_month;
-CREATe VIEW stat_member_dl_last_month AS
+DROP VIEW pling.stat_member_dl_last_month;
+CREATe VIEW pling.stat_member_dl_last_month AS
select date_format((now() - interval 1 month),'%Y%m') AS `yearmonth`,`p`.`project_id` AS `project_id`,`p`.`project_category_id` AS `project_category_id`,`d`.`owner_id` AS `member_id`,`m`.`mail` AS `mail`,`m`.`paypal_mail` AS `paypal_mail`,count(`d`.`id`) AS `num_downloads`,`c`.`dl_pling_factor` AS `dl_pling_factor`,((count(`d`.`id`) * `c`.`dl_pling_factor`) / 100) AS `amount`,(case when ((select count(1) AS `sum_plings` from `pling`.`project_plings` `pp` where ((`pp`.`project_id` = `p`.`project_id`) and (`pp`.`is_deleted` = 0) and (`pp`.`is_active` = 1)) group by `pp`.`project_id`) > 0) then ((select count(1) AS `sum_plings` from `pling`.`project_plings` `pp` where ((`pp`.`project_id` = `p`.`project_id`) and (`pp`.`is_deleted` = 0) and (`pp`.`is_active` = 1)) group by `pp`.`project_id`) + 1) else 1 end) AS `num_plings`,(case when isnull(`tag`.`tag_item_id`) then 1 else 0 end) AS `is_license_missing`,(case when (((`c`.`source_required` = 1) and (`p`.`source_url` is not null) and (length(`p`.`source_url`) > 0)) or (`c`.`source_required` = 0)) then 0 else 1 end) AS `is_source_missing`,`p`.`pling_excluded` AS `is_pling_excluded`,`m`.`pling_excluded` AS `is_member_pling_excluded`,NULL AS `created_at`,NULL AS `updated_at` from ((((`ppload`.`ppload_files_downloaded_unique` `d` join `pling`.`member` `m` on(((`m`.`member_id` = `d`.`owner_id`) and (`m`.`is_active` = 1)))) join `pling`.`project` `p` on(((cast(`p`.`ppload_collection_id` as unsigned) = `d`.`collection_id`) and (`p`.`status` = 100)))) join `pling`.`project_category` `c` on((`c`.`project_category_id` = `p`.`project_category_id`))) left join `pling`.`tag_object` `tag` on(((`tag`.`tag_type_id` = 1) and (`tag`.`tag_group_id` = 7) and (`tag`.`tag_object_id` = `p`.`project_id`)))) where ((`d`.`downloaded_timestamp` >= concat(left((now() - interval 1 month),7),'-01 00:00:00')) and (`d`.`downloaded_timestamp` <= concat(left(now(),7),'-01 00:00:00')) and (`p`.`ppload_collection_id` is not null) and (length(`p`.`ppload_collection_id`) > 0) and (not((`p`.`ppload_collection_id` like '!%')))) group by `d`.`owner_id`,`p`.`project_id`
;
-DROP VIEW stat_member_dl_curent_month_nouk;
-CREATE VIEW stat_member_dl_curent_month_nouk AS
-select date_format(now(),'%Y%m') AS `yearmonth`,`p`.`project_id` AS `project_id`,`p`.`project_category_id` AS `project_category_id`,`d`.`owner_id` AS `member_id`,`m`.`mail` AS `mail`,`m`.`paypal_mail` AS `paypal_mail`,count(`d`.`id`) AS `num_downloads`,`c`.`dl_pling_factor` AS `dl_pling_factor`,((count(`d`.`id`) * `c`.`dl_pling_factor`) / 100) AS `amount`,(case when ((select count(1) AS `sum_plings` from `project_plings` `pp` where ((`pp`.`project_id` = `p`.`project_id`) and (`pp`.`is_deleted` = 0) and (`pp`.`is_active` = 1)) group by `pp`.`project_id`) > 0) then ((select count(1) AS `sum_plings` from `project_plings` `pp` where ((`pp`.`project_id` = `p`.`project_id`) and (`pp`.`is_deleted` = 0) and (`pp`.`is_active` = 1)) group by `pp`.`project_id`) + 1) else 1 end) AS `num_plings`,(case when isnull(`tag`.`tag_item_id`) then 1 else 0 end) AS `is_license_missing`,(case when (((`c`.`source_required` = 1) and (`p`.`source_url` is not null) and (length(`p`.`source_url`) > 0)) or (`c`.`source_required` = 0)) then 0 else 1 end) AS `is_source_missing`,`p`.`pling_excluded` AS `is_pling_excluded`,`m`.`pling_excluded` AS `is_member_pling_excluded`,NULL AS `created_at`,NULL AS `updated_at` from ((((`ppload`.`ppload_files_downloaded` `d` join `member` `m` on(((`m`.`member_id` = `d`.`owner_id`) and (`m`.`is_active` = 1)))) join `tmp_project_for_member_dl_plings` `p` on((`p`.`ppload_collection_id` = `d`.`collection_id`))) join `project_category` `c` on((`c`.`project_category_id` = `p`.`project_category_id`))) left join `tag_object` `tag` on(((`tag`.`tag_type_id` = 1) and (`tag`.`tag_group_id` = 7) and (`tag`.`tag_object_id` = `p`.`project_id`))))
+DROP VIEW pling.stat_member_dl_curent_month_nouk;
+CREATE VIEW pling.stat_member_dl_curent_month_nouk AS
+select date_format(now(),'%Y%m') AS `yearmonth`,`p`.`project_id` AS `project_id`,`p`.`project_category_id` AS `project_category_id`,`d`.`owner_id` AS `member_id`,`m`.`mail` AS `mail`,`m`.`paypal_mail` AS `paypal_mail`,count(`d`.`id`) AS `num_downloads`,`c`.`dl_pling_factor` AS `dl_pling_factor`,((count(`d`.`id`) * `c`.`dl_pling_factor`) / 100) AS `amount`,(case when ((select count(1) AS `sum_plings` from pling.project_plings `pp` where ((`pp`.`project_id` = `p`.`project_id`) and (`pp`.`is_deleted` = 0) and (`pp`.`is_active` = 1)) group by `pp`.`project_id`) > 0) then ((select count(1) AS `sum_plings` from pling.project_plings `pp` where ((`pp`.`project_id` = `p`.`project_id`) and (`pp`.`is_deleted` = 0) and (`pp`.`is_active` = 1)) group by `pp`.`project_id`) + 1) else 1 end) AS `num_plings`,(case when isnull(`tag`.`tag_item_id`) then 1 else 0 end) AS `is_license_missing`,(case when (((`c`.`source_required` = 1) and (`p`.`source_url` is not null) and (length(`p`.`source_url`) > 0)) or (`c`.`source_required` = 0)) then 0 else 1 end) AS `is_source_missing`,`p`.`pling_excluded` AS `is_pling_excluded`,`m`.`pling_excluded` AS `is_member_pling_excluded`,NULL AS `created_at`,NULL AS `updated_at` from ((((`ppload`.`ppload_files_downloaded` `d` join pling.member `m` on(((`m`.`member_id` = `d`.`owner_id`) and (`m`.`is_active` = 1)))) join pling.tmp_project_for_member_dl_plings `p` on((`p`.`ppload_collection_id` = `d`.`collection_id`))) join pling.project_category `c` on((`c`.`project_category_id` = `p`.`project_category_id`))) left join pling.tag_object `tag` on(((`tag`.`tag_type_id` = 1) and (`tag`.`tag_group_id` = 7) and (`tag`.`tag_object_id` = `p`.`project_id`))))
WHERE (
`d`.`downloaded_timestamp` >= concat(left(now(),7),'-01 00:00:00')
)
group by `d`.`owner_id`,`p`.`project_id`
;
-CREATE TABLE member_dl_plings_nouk LIKE member_dl_plings;
-
-INSERT LOW_PRIORITY INTO member_dl_plings_nouk
-(SELECT * FROM stat_member_dl_curent_month_nouk);
+CREATE TABLE pling.member_dl_plings_nouk LIKE pling.member_dl_plings;
+INSERT LOW_PRIORITY INTO pling.member_dl_plings_nouk
+(SELECT * FROM pling.stat_member_dl_curent_month_nouk);
+USE pling;
+DROP EVENT `e_update_member_dl_plings_current_month`;
+DELIMITER $$
CREATE EVENT `e_update_member_dl_plings_current_month`
ON SCHEDULE
EVERY 1 DAY STARTS '2018-06-07 01:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT ''
DO BEGIN
#Generate tmp table for active projects
DROP TABLE IF EXISTS tmp_project_for_member_dl_plings;
CREATE TABLE tmp_project_for_member_dl_plings AS
select * from project p where p.ppload_collection_id is not null and p.type_id = 1 and p.`status` = 100;
#ppload_collection_id from char to int
ALTER TABLE `tmp_project_for_member_dl_plings`
CHANGE COLUMN `ppload_collection_id` `ppload_collection_id` INT NULL DEFAULT NULL COLLATE 'utf8_general_ci' AFTER `embed_code`;
#add index
ALTER TABLE `tmp_project_for_member_dl_plings` ADD INDEX `idx_ppload` (`ppload_collection_id`);
ALTER TABLE `tmp_project_for_member_dl_plings` ADD INDEX `idx_pk` (`project_id`);
#fill tmp member_dl_plings table
DROP TABLE IF EXISTS tmp_member_dl_plings;
CREATE TABLE tmp_member_dl_plings LIKE member_dl_plings;
INSERT INTO tmp_member_dl_plings
(SELECT * FROM stat_member_dl_curent_month);
#delete plings from actual month
DELETE FROM member_dl_plings
WHERE yearmonth = (DATE_FORMAT(NOW(),'%Y%m'));
#insert ping for this month from tmp member_dl_plings table
INSERT INTO member_dl_plings
(SELECT * FROM tmp_member_dl_plings);
#remove tmp member_dl_plings table
DROP TABLE tmp_member_dl_plings;
#fill tmp member_dl_plings_nouk table
DROP TABLE IF EXISTS tmp_member_dl_plings_nouk;
CREATE TABLE tmp_member_dl_plings_nouk LIKE member_dl_plings_nouk;
INSERT INTO tmp_member_dl_plings_nouk
(SELECT * FROM stat_member_dl_curent_month_nouk);
#delete plings from actual month
DELETE FROM member_dl_plings_nouk
WHERE yearmonth = (DATE_FORMAT(NOW(),'%Y%m'));
#insert ping for this month from tmp member_dl_plings table
INSERT INTO member_dl_plings_nouk
(SELECT * FROM tmp_member_dl_plings_nouk);
#remove tmp member_dl_plings table
DROP TABLE tmp_member_dl_plings_nouk;
-END
+END$$
+DELIMITER ;
diff --git a/sql_code/20190607_add_fields_to_config_store.sql b/sql_code/20190607_add_fields_to_config_store.sql
index ddc65f35f..244750dbc 100644
--- a/sql_code/20190607_add_fields_to_config_store.sql
+++ b/sql_code/20190607_add_fields_to_config_store.sql
@@ -1,6 +1,9 @@
+USE pling;
+
+
ALTER TABLE `config_store`
ADD COLUMN `is_show_in_menu` INT(1) NULL DEFAULT '0' AFTER `is_show_forum_news`;
ALTER TABLE `config_store`
ADD COLUMN `is_show_real_domain_as_url` INT(1) NULL DEFAULT '0' AFTER `is_show_in_menu`;