diff --git a/application/modules/backend/views/scripts/index/index.phtml b/application/modules/backend/views/scripts/index/index.phtml index 4e7a37ea3..5ab8221c5 100644 --- a/application/modules/backend/views/scripts/index/index.phtml +++ b/application/modules/backend/views/scripts/index/index.phtml @@ -1,168 +1,174 @@ . **/ $modelCategory = new Default_Model_ProjectCategory(); $this->categories = $modelCategory->fetchTreeForView(22); $jsonTree = json_encode($this->categories); ?> partial('yui.phtml'); ?>
#number of months back
Begin:" /> End:" />
"/>
" />
+
+
TEST
+
+
diff --git a/application/modules/default/controllers/UserController.php b/application/modules/default/controllers/UserController.php index 83a6635e3..80b54f01b 100644 --- a/application/modules/default/controllers/UserController.php +++ b/application/modules/default/controllers/UserController.php @@ -1,794 +1,796 @@ . **/ class UserController extends Local_Controller_Action_DomainSwitch { protected $_memberId; protected $_userName; /** @var Zend_Db_Table_Row */ protected $_memberSettings; public function init() { parent::init(); if ($this->hasParam('user_name')) { $this->_userName = $this->getParam('user_name'); $this->_userName = urldecode($this->_userName); $modelMember = new Default_Model_Member(); $this->_memberId = $modelMember->fetchActiveUserByUsername($this->_userName); } else { $this->_memberId = (int)$this->getParam('member_id'); } } public function indexAction() { $this->_helper->viewRenderer('aboutme'); $this->aboutmeAction(); } public function aboutmeAction() { $tableMember = new Default_Model_Member(); $tableProject = new Default_Model_Project(); $earnModel = new Default_Model_StatDownload(); $helperUserRole = new Backend_View_Helper_UserRole(); $pageLimit = 500; $projectpage = (int)$this->getParam('projectpage', 1); $this->view->authMember = $this->_authMember; //$this->view->member = $tableMember->find($this->_memberId)->current(); $this->view->member = $tableMember->fetchMemberData($this->_memberId); if (null == $this->view->member) { $this->redirect("/"); } if ($this->view->member->is_deleted == 1 or $this->view->member->is_active == 0) { $this->redirect("/"); } $this->view->mainProject = $this->view->member->findDependentRowset($tableProject, 'MainProject')->current(); $this->view->userProjectCategories = $tableProject->getUserCreatingCategorys($this->_memberId); $this->view->aboutmeUserInfo = $this->getAboutmeUserInfo($this->_memberId,$this->view->member->username); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { - - $amount = $earnModel->getMonthEarn($this->_memberId,201812); + $datetime = new DateTime(); + $datetime->sub(new DateInterval('P1M')); + $month = $datetime->format('Ym'); + $amount = $earnModel->getMonthEarn($this->_memberId,$month); if($amount && $amount['amount']) { $this->view->earnInfo = ' Last month I earned $'.$amount['amount'].'.'; }else { $this->view->earnInfo=' Last month I earned 0.'; } }else{ $this->view->earnInfo=''; } // ajax load more products if ($this->getParam('projectpage', null)) { $total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null); $this->view->pageLimit = $pageLimit; $this->view->projectpage = $projectpage; $this->view->total_records = $total_records; // get last project category id $lastproject = $tableProject->getUserActiveProjects($this->_memberId, 1, (($projectpage - 1) * $pageLimit-1)); foreach ($lastproject as $value) { $this->view->lastcatid = $value['project_category_id']; } $this->view->userProducts = $tableProject->getUserActiveProjects($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit); $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('partials/aboutmeProducts'); //$this->forward('showmoreproductsajax', 'user', null, $this->getAllParams()); return; } else { $total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null); $this->view->pageLimit = $pageLimit; $this->view->projectpage = $projectpage; $this->view->total_records = $total_records; //$this->view->userProducts = $tableProject->fetchAllProjectsForMember($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit,true); $this->view->userProducts = $tableProject->getUserActiveProjects($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit); $this->view->userFeaturedProducts = $tableProject->fetchAllFeaturedProjectsForMember($this->_memberId); $paginationComments = $tableMember->fetchComments($this->_memberId); if ($paginationComments) { $offset = (int)$this->getParam('page'); $paginationComments->setItemCountPerPage(50); $paginationComments->setCurrentPageNumber($offset); $this->view->comments = $paginationComments; } // favs Currently no paging... $this->view->paramLikePageId = (int)$this->getParam('likepage'); $model = new Default_Model_DbTable_ProjectFollower(); $offset = $this->view->paramLikePageId; $list = $model->fetchLikesForMember($this->_memberId); $list->setItemCountPerPage(1000); $list->setCurrentPageNumber($offset); $this->view->likes = $list; // plings Currently no paging... $plingmodel = new Default_Model_ProjectPlings(); $offset = null; $plist = $plingmodel->fetchPlingsForMember($this->_memberId); $plist->setItemCountPerPage(1000); $plist->setCurrentPageNumber($offset); $this->view->plings = $plist; // plings Currently no paging... $plingmodel = new Default_Model_ProjectPlings(); $offset = null; $pslist = $plingmodel->fetchPlingsForSupporter($this->_memberId); $pslist->setItemCountPerPage(1000); $pslist->setCurrentPageNumber($offset); $this->view->supportersplings = $pslist; // rated $ratemodel = new Default_Model_DbTable_ProjectRating(); $this->view->rated = $ratemodel->getRatedForMember($this->_memberId); $stat = array(); $stat['cntProducts'] = $total_records; if ($this->view->userFeaturedProducts) { $cnt = 0; foreach ($this->view->userFeaturedProducts as $tmp) { $cnt++; } $stat['cntFProducts'] = $cnt; } else { $stat['cntFProducts'] = 0; } $stat['cntComments'] = $paginationComments->getTotalItemCount(); $tblFollower = new Default_Model_DbTable_ProjectFollower(); $stat['cntLikesHeGave'] = $tblFollower->countLikesHeGave($this->_memberId); $stat['cntLikesHeGot'] = $tblFollower->countLikesHeGot($this->_memberId); $tblPling = new Default_Model_DbTable_ProjectPlings(); $stat['cntPlingsHeGave'] = $tblPling->countPlingsHeGave($this->_memberId); $stat['cntPlingsHeGot'] = $tblPling->countPlingsHeGot($this->_memberId); $donationinfo = $tableMember->fetchSupporterDonationInfo($this->_memberId); if ($donationinfo) { $stat['donationIssupporter'] = $donationinfo['issupporter']; $stat['donationMax'] = $donationinfo['active_time_max']; $stat['donationMin'] = $donationinfo['active_time_min']; $stat['donationCnt'] = $donationinfo['cnt']; } // $cntmb = $tableMember->fetchCntSupporters($this->_memberId); // $stat['cntSupporters'] = $cntmb; $stat['userLastActiveTime'] = $tableMember->fetchLastActiveTime($this->_memberId); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $stat['cntDuplicateSourceurl'] = $tableProject->getCountProjectsDuplicateSourceurl($this->_memberId); } $this->view->stat = $stat; } } public function getAboutmeUserInfo($member_id,$username) { $tableProject = new Default_Model_Project(); $userProjectCategories = $tableProject->getUserCreatingCategorys($member_id); $cnt = sizeof($userProjectCategories ); $userinfo=''; $isAdmin = false; $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName){ $isAdmin= true; } if($cnt>0) { $userinfo = "Hi, I am ".$username." and I'm creating "; if($cnt==1) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; if($isAdmin) { $userinfo = $userinfo.'['.$userProjectCategories[0]['cnt'].'].'; } }else if($cnt==2) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; if($isAdmin) { $userinfo = $userinfo.'['.$userProjectCategories[0]['cnt'].']'; } $userinfo = $userinfo.' and '.$userProjectCategories[1]['category1'].''; if($isAdmin) { $userinfo = $userinfo.'['.$userProjectCategories[1]['cnt'].'].'; } }else if($cnt==3) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; if($isAdmin) { $userinfo = $userinfo.'['.$userProjectCategories[0]['cnt'].']'; } $userinfo = $userinfo.', '.$userProjectCategories[1]['category1'].''; if($isAdmin) { $userinfo = $userinfo.'['.$userProjectCategories[1]['cnt'].']'; } $userinfo = $userinfo.' and '.$userProjectCategories[2]['category1'].''; if($isAdmin) { $userinfo = $userinfo.'['.$userProjectCategories[2]['cnt'].'].'; } }else if($cnt>3) { $userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].''; if($isAdmin) { $userinfo = $userinfo.'['.$userProjectCategories[0]['cnt'].']'; } $userinfo = $userinfo.', '.$userProjectCategories[1]['category1'].''; if($isAdmin) { $userinfo = $userinfo.'['.$userProjectCategories[1]['cnt'].']'; } $userinfo = $userinfo.', '.$userProjectCategories[2]['category1'].''; if($isAdmin) { $userinfo = $userinfo.'['.$userProjectCategories[2]['cnt'].']'; } $userinfo = $userinfo.' and more.'; } } return $userinfo; } public function avatarAction() { $this->_helper->layout->disableLayout(); $size = (int)$this->getParam("size", 200); $width = (int)$this->getParam("width", ($size / 2)); $this->view->size = (int)$size / 2; $emailHash = $this->getParam("emailhash", null); if ($emailHash) { $memberTable = new Default_Model_Member(); $member = $memberTable->findMemberForMailHash($emailHash); if ($member) { $helperImage = new Default_View_Helper_Image(); $imgUrl = $helperImage->Image($member['profile_image_url'], array('width' => $width, 'height' => $width)); $this->view->avatar = $imgUrl; $this->redirect($imgUrl); return; } } $this->view->avatar = ""; $helperImage = new Default_View_Helper_Image(); $imgUrl = $helperImage->Image("default-profile.png", array('width' => $width, 'height' => $width)); $this->redirect($imgUrl); } public function aboutAction() { $modelMember = new Default_Model_Member(); $this->view->member = $modelMember->fetchMember($this->_memberId)->toArray(); $this->view->currentPageOffset = (int)$this->getParam('page'); } public function showmoreproductsajaxAction() { $this->_helper->layout->disableLayout(); $tableProject = new Default_Model_Project(); $pageLimit = 21; $page = (int)$this->getParam('page', 1); $total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null); $this->view->pageLimit = $pageLimit; $this->view->page = $page; $this->view->total_records = $total_records; $this->view->userProducts = $tableProject->fetchAllProjectsForMember($this->_memberId, $pageLimit, ($page - 1) * $pageLimit, true); $this->_helper->viewRenderer('/partials/aboutmeProducts'); } public function userdataajaxAction() { $this->_helper->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); $resultArray = array(); header('Access-Control-Allow-Origin: *'); $this->getResponse()->setHeader('Access-Control-Allow-Origin', '*')->setHeader('Access-Control-Allow-Credentials', 'true') ->setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS') ->setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept') ; $userid = $this->getParam('id'); $modelMember = new Default_Model_Member(); $user = $modelMember->find($userid)->current(); if (Zend_Auth::getInstance()->hasIdentity()) { $auth = Zend_Auth::getInstance(); $user = $auth->getStorage()->read(); $resultArray['member_id'] = $user->member_id; $resultArray['username'] = $user->username; $resultArray['mail'] = $user->mail; $resultArray['avatar'] = $user->profile_image_url; } else if (null != $userid && null != $user) { $resultArray['member_id'] = $user['member_id']; $resultArray['username'] = $user['username']; $resultArray['mail'] = $user['mail']; $resultArray['avatar'] = $user['profile_image_url']; } else { $resultArray['member_id'] = null; $resultArray['username'] = null; $resultArray['mail'] = null; $resultArray['avatar'] = null; } $resultAll = array(); $resultAll['status'] = "success"; $resultAll['data'] = $resultArray; $this->_helper->json($resultAll); } public function followsAction() { $this->redirect($this->_helper->url('follows', 'member', null, $this->getAllParams())); } public function followAction() { $this->_helper->layout->disableLayout(); $this->view->authMember = $this->_authMember; $this->view->member_id = $this->_memberId; if ($this->_memberId == $this->_authMember->member_id) { return; } $memberFollowTable = new Default_Model_DbTable_MemberFollower(); $newVals = array('member_id' => $this->_memberId, 'follower_id' => (int)$this->_authMember->member_id); $where = $memberFollowTable->select()->where('member_id = ?', $this->_memberId) ->where('follower_id = ?', $this->_authMember->member_id, 'INTEGER') ; $result = $memberFollowTable->fetchRow($where); if (null === $result) { $memberFollowTable->createRow($newVals)->save(); } } public function unfollowAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('follow'); $memberFollowTable = new Default_Model_DbTable_MemberFollower(); $memberFollowTable->delete('member_id=' . $this->_memberId . ' AND follower_id=' . $this->_authMember->member_id); $this->view->authMember = $this->_authMember; $this->view->member_id = $this->_memberId; } public function newsAction() { $this->productsAction(); $this->render('products'); } public function productsAction() { $pageLimit = 25; $page = (int)$this->getParam('page', 1); //create ppload download hash: secret + collection_id + expire-timestamp $salt = PPLOAD_DOWNLOAD_SECRET; $timestamp = time() + 3600; // one hour valid $hash = md5($salt . $timestamp); // order isn't important at all... just do the same when verifying $this->view->download_hash = $hash; $this->view->download_timestamp = $timestamp; $this->view->member_id = null; if (null != $this->_authMember && null != $this->_authMember->member_id) { $this->view->member_id = $this->_authMember->member_id; } $modelProject = new Default_Model_Project(); $userProjects = $modelProject->fetchAllProjectsForMember($this->_authMember->member_id, $pageLimit, ($page - 1) * $pageLimit); $paginator = Local_Paginator::factory($userProjects); $paginator->setItemCountPerPage($pageLimit); $paginator->setCurrentPageNumber($page); $paginator->setTotalItemCount($modelProject->countAllProjectsForMember($this->_authMember->member_id)); $this->view->products = $paginator; $modelMember = new Default_Model_Member(); $this->view->member = $modelMember->fetchMemberData($this->_authMember->member_id); } public function activitiesAction() { $modelInfo = new Default_Model_Info(); $this->view->member = $this->_authMember; $this->view->comments = $modelInfo->getLastCommentsForUsersProjects($this->_authMember->member_id); $this->view->votes = $modelInfo->getLastVotesForUsersProjects($this->_authMember->member_id); $this->view->donations = $modelInfo->getLastDonationsForUsersProjects($this->_authMember->member_id); } public function settingsAction() { $this->_helper->layout()->setLayout('settings'); } public function reportAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer('product/add'); $this->forward('report', 'product', null, $this->getAllParams()); } public function paymentsAction() { $this->view->headScript()->setFile(''); $this->view->headLink()->setStylesheet(''); $member_id = $this->_authMember->member_id; $this->view->member = $this->_authMember; $tableMember = new Default_Model_Member(); $this->view->hits = $tableMember->fetchPlingedProjects($member_id); } public function incomeAction() { $this->view->member = $this->_authMember; $tableMember = new Default_Model_Member(); $modelPlings = new Default_Model_Pling(); $this->view->donations = $modelPlings->fetchRecentDonationsForUser($this->_authMember->member_id); } public function tooltipAction() { $this->_helper->layout->disableLayout(); $info = new Default_Model_Info(); $data = $info->getTooptipForMember($this->_memberId); $this->_helper->json(array('status' => 'ok', 'data' => $data)); } public function shareAction() { $this->_helper->layout->disableLayout(); $modelProduct = new Default_Model_Member(); $memberInfo = $modelProduct->fetchMemberData($this->_memberId); $form = new Default_Form_ProjectShare(); $form->setAction('/member/' . $this->_memberId . '/share/'); // $helperBaseUrl = new Default_View_Helper_BaseUrl(); // $helperServerUrl = new Zend_View_Helper_ServerUrl(); $helpMemberUrl = new Default_View_Helper_BuildMemberUrl(); $this->view->permaLink = $helpMemberUrl->buildMemberUrl($memberInfo->username); // $this->view->permaLink = $helperServerUrl->serverUrl() . $helperBaseUrl->baseUrl() . '/member/' . $this->_memberId . '/'; if ($this->_request->isGet()) { $this->view->form = $form; $this->renderScript('product/share.phtml'); return; } if (false === $form->isValid($_POST)) { // form not valid $this->view->form = $form; $dummy = $this->view->render('product/share.phtml'); $this->_helper->json(array('status' => 'ok', 'message' => $dummy)); return; } $values = $form->getValues(); if (empty($memberInfo->firstname) and empty($memberInfo->lastname)) { $username = $memberInfo->username; } else { $username = $memberInfo->firstname . ' ' . $memberInfo->lastname; } $shareMail = new Default_Plugin_SendMail('tpl_social_mail_user'); $shareMail->setTemplateVar('sender', $values['sender_mail']); $shareMail->setTemplateVar('username', $username); $shareMail->setTemplateVar('permalink', $this->view->permaLink); $shareMail->setTemplateVar('permalinktext', 'View user\'s page'); $shareMail->setReceiverMail($values['mail']); $shareMail->send(); $this->_helper->json(array('status' => 'ok', 'redirect' => $this->view->permaLink)); } public function plingsAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } } public function plingsoldAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } } public function plingsajaxAction() { $this->_helper->layout->disableLayout(); $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } $year = null; if($this->hasParam('year')) { $year = $this->getParam('year'); } $this->view->year = $year; $this->_helper->viewRenderer('/plingsajax'); } public function plingsmonthajaxAction() { $this->_helper->layout->disableLayout(); $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); $paypalValidStatusTable = new Default_Model_DbTable_PaypalValidStatus(); $paypalValidStatus = $paypalValidStatusTable->find($this->view->view_member->paypal_valid_status)->current(); $this->view->paypal_valid_status = $paypalValidStatus; //backdoor for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } $yearmonth = null; if($this->hasParam('yearmonth')) { $yearmonth = $this->getParam('yearmonth'); } $this->view->yearmonth = $yearmonth; $this->_helper->viewRenderer('/plingsmonthajax'); } public function downloadhistoryAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); //backdore for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } if ($this->view->member) { $this->view->paramPageId = (int)$this->getParam('page'); //TODO do really sql paging instead of Zend_Paginator $dhistory = new Default_Model_DbTable_MemberDownloadHistory(); $offset = $this->view->paramPageId; $list = $dhistory->getDownloadhistory($this->view->member->member_id); $list->setItemCountPerPage(250); $list->setCurrentPageNumber($offset); $this->view->downloadhistory = $list; } else { $this->view->downloadhistory = array(); } } public function likesAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); //backdore for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } if ($this->view->member) { $this->view->paramPageId = (int)$this->getParam('page'); $model = new Default_Model_DbTable_ProjectFollower(); $offset = $this->view->paramPageId; $list = $model->fetchLikesForMember($this->view->member->member_id); $list->setItemCountPerPage(250); $list->setCurrentPageNumber($offset); $this->view->likes = $list; } else { $this->view->likes = array(); } } public function payoutAction() { $tableMember = new Default_Model_Member(); $this->view->view_member = $tableMember->fetchMemberData($this->_memberId); //backdore for admins $helperUserRole = new Backend_View_Helper_UserRole(); $userRoleName = $helperUserRole->userRole(); if (Default_Model_DbTable_MemberRole::ROLE_NAME_ADMIN == $userRoleName) { $this->view->member = $this->view->view_member; } else { $this->view->member = $this->_authMember; } } /** * @return Default_Form_Settings * @throws Zend_Form_Exception */ private function formPassword() { $form = new Default_Form_Settings(); $form->setMethod("POST")->setAttrib("id", "settingsPasswordForm")->setAction('/member/' . $this->_memberId . '/changepass'); $passOld = $form->createElement('password', 'passwordOld')->setLabel('Enter old Password:')->setRequired(true) ->removeDecorator('HtmlTag')->addValidator(new Local_Validate_OldPasswordConfirm())->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $pass1 = $form->createElement('password', 'password1')->setLabel('Enter new Password:')->setRequired(true) ->addValidator(new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING))->removeDecorator('HtmlTag') ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $pass2 = $form->createElement('password', 'password2')->setLabel('Re-enter new Password:')->setRequired(true) ->addValidator(new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING))->removeDecorator('HtmlTag') ->setDecorators(array( 'ViewHelper', 'Label', 'Errors', array( 'ViewScript', array( 'viewScript' => 'settings/viewscripts/flatui_input.phtml', 'placement' => false ) ) )) ; $passValid = new Local_Validate_PasswordConfirm($pass2->getValue()); $pass1->addValidator($passValid); $form->addElement($passOld)->addElement($pass1)->addElement($pass2); return $form; } } \ No newline at end of file diff --git a/application/modules/statistics/models/Data.php b/application/modules/statistics/models/Data.php index 6681b12bf..5658b54d9 100644 --- a/application/modules/statistics/models/Data.php +++ b/application/modules/statistics/models/Data.php @@ -1,583 +1,594 @@ . * * Created: 31.07.2017 */ class Statistics_Model_Data { const DEFAULT_STORE_ID = 22; //opendesktop /** @var Zend_Db_Adapter_Pdo_Abstract */ protected $_db; public function __construct($options) { if (isset($options['db'])) { $this->initDbAdapter($options['db']); } else { throw new Exception('configuration parameter for database connection needed'); } } private function initDbAdapter($db) { $adapter = $db['adapter']; $params = $db['params']; //$default = (int)(isset($params['isDefaultTableAdapter']) && $params['isDefaultTableAdapter'] // || isset($params['default']) && $params['default']); unset($params['adapter'], $params['default'], $params['isDefaultTableAdapter']); $adapter = Zend_Db::factory($adapter, $params); $this->_db = $adapter; } public function getNewmemberstats(){ $sql = "SELECT DATE(`created_at`) as memberdate , count(*) as daycount FROM dwh.ods_member_v group by memberdate order by memberdate desc limit 30"; $result = $this->_db->fetchAll($sql); return $result; } public function getNewprojectstats(){ $sql = "SELECT DATE(`created_at`) as projectdate , count(*) as daycount FROM dwh.ods_project_v where status>=40 group by projectdate order by projectdate desc limit 30"; $result = $this->_db->fetchAll($sql); return $result; } + + public function getNewprojectWeeklystats(){ + $sql = "SELECT YEARWEEK(`created_at`) as yyyykw , count(*) as amount + FROM project + where status=100 and type_id = 1 + group by yyyykw + order by yyyykw + desc limit 60"; + $result = $this->_db->fetchAll($sql); + return $result; + } public function getPayout($yyyymm){ $sql = "SELECT * , (select username from member m where m.member_id = p.member_id) username FROM dwh.member_payout p where yearmonth = :yyyymm order by amount desc"; $result = $this->_db->fetchAll($sql, array("yyyymm"=>$yyyymm)); return $result; } public function getPayoutMemberPerCategory($yyyymm,$catid){ $modelProjectCategories = new Default_Model_DbTable_ProjectCategory(); $ids = $modelProjectCategories->fetchChildIds($catid); array_push($ids, $catid); $idstring = implode(',', $ids); $sql = " select * from ( select member_id ,(select username from member m where m.member_id = v.member_id) username ,round(sum(probably_payout_amount)) as amount from member_dl_plings_v as v where project_category_id IN (".$idstring.") and v.yearmonth= :yyyymm group by v.member_id order by amount desc ) tmp where amount>0 "; $result = $this->_db->fetchAll($sql, array("yyyymm"=>$yyyymm)); return $result; } public function getNewcomer($yyyymm){ $yyyymm_vor = $this->getLastYearMonth($yyyymm); $sql = "SELECT member_id , (select username from member m where m.member_id = member_payout.member_id) as username , paypal_mail,round(amount,2) as amount FROM member_payout WHERE yearmonth =:yyyymm and member_id not in (select member_id from member_payout where yearmonth =:yyyymm_vor) order by amount desc "; $result = $this->_db->fetchAll($sql, array("yyyymm"=>$yyyymm, "yyyymm_vor"=>$yyyymm_vor)); return $result; } public function getNewloser($yyyymm){ $yyyymm_vor = $this->getLastYearMonth($yyyymm); $sql = "SELECT member_id , (select username from member m where m.member_id = member_payout.member_id) as username , paypal_mail,round(amount,2) as amount FROM member_payout WHERE yearmonth =:yyyymm_vor and member_id not in (select member_id from member_payout where yearmonth =:yyyymm) order by amount desc "; $result = $this->_db->fetchAll($sql, array("yyyymm"=>$yyyymm, "yyyymm_vor"=>$yyyymm_vor)); return $result; } public function getMonthDiff($yyyymm){ $yyyymm_vor = $this->getLastYearMonth($yyyymm); $sql = " select akt.member_id , (select username from member m where m.member_id = akt.member_id) as username , akt.amount as am_akt , let.amount as am_let , round(akt.amount-let.amount) as am_diff , akt.yearmonth ym_akt , let.yearmonth ym_let from (select member_id, amount,yearmonth from member_payout where yearmonth = :yyyymm) akt, (select member_id, amount,yearmonth from member_payout where yearmonth = :yyyymm_vor) let where akt.member_id = let.member_id order by am_diff desc "; $result = $this->_db->fetchAll($sql, array("yyyymm"=>$yyyymm, "yyyymm_vor"=>$yyyymm_vor)); return $result; } /* public function getDownloadsDaily($numofmonthback){ $sql = " select SUBSTR(d.date_yyyymmdd,1,6) as symbol ,SUBSTR(d.date_yyyymmdd,7,8)*1 as date ,d.count as price from dwh.files_downloads_daily as d where STR_TO_DATE(date_yyyymmdd,'%Y%m%d' ) >= (DATE_FORMAT(CURDATE(), '%Y-%m-01')- INTERVAL :numofmonthback MONTH) and STR_TO_DATE(date_yyyymmdd,'%Y%m%d' )< CURDATE() order by date_yyyymmdd asc "; $result = $this->_db->fetchAll($sql,array("numofmonthback"=>$numofmonthback)); return $result; } */ public function getDownloadsDaily($numofmonthback){ $sql = " select SUBSTR(d.date_yyyymmdd,1,6) as symbol ,SUBSTR(d.date_yyyymmdd,7,8)*1 as date ,d.count as price from dwh.files_downloads_daily as d where STR_TO_DATE(date_yyyymmdd,'%Y%m%d' ) >= (DATE_FORMAT(CURDATE(), '%Y-%m-01')- INTERVAL :numofmonthback MONTH) and STR_TO_DATE(date_yyyymmdd,'%Y%m%d' )< CURDATE() union select concat(SUBSTR(d.date_yyyymmdd,1,6),' payout') as symbol ,SUBSTR(d.date_yyyymmdd,7,8)*1 as date ,d.count as price from dwh.payout_daily as d where STR_TO_DATE(date_yyyymmdd,'%Y%m%d' ) >= (DATE_FORMAT(CURDATE(), '%Y-%m-01')- INTERVAL :numofmonthback MONTH) and STR_TO_DATE(date_yyyymmdd,'%Y%m%d' )< CURDATE() "; $result = $this->_db->fetchAll($sql,array("numofmonthback"=>$numofmonthback)); return $result; } public function getDownloadsUndPayoutsDaily($yyyymm){ $sql = " select concat(SUBSTR(d.date_yyyymmdd,1,6),' downloads') as symbol ,SUBSTR(d.date_yyyymmdd,7,8)*1 as date ,d.count as price from dwh.files_downloads_daily as d where SUBSTR(d.date_yyyymmdd,1,6)=:yyyymm union select concat(SUBSTR(d.date_yyyymmdd,1,6),' payouts') as symbol ,SUBSTR(d.date_yyyymmdd,7,8)*1 as date ,d.count as price from dwh.payout_daily as d where SUBSTR(d.date_yyyymmdd,1,6)=:yyyymm "; $result = $this->_db->fetchAll($sql,array("yyyymm"=>$yyyymm)); return $result; } /** ,(select count(1) from dwh.files_downloads dd where dd.project_id = d.project_id and dd.downloaded_timestamp between :date_start and :date_end and dd.referer like 'https://www.google%') as cntGoogle */ public function getTopDownloadsPerDate($date){ $date_start =$date.' 00:00:00'; $date_end =$date.' 23:59:59'; $sql = " select d.project_id , count(1) as cnt ,(select p.title from project p where p.project_id = d.project_id) as ptitle ,(select p.created_at from project p where p.project_id = d.project_id) as pcreated_at ,(select c.title from category c, project p where p.project_id = d.project_id and p.project_category_id=c.project_category_id) as ctitle ,(select username from member m , project p where m.member_id = p.member_id and p.project_id = d.project_id) as username from dwh.files_downloads d where d.downloaded_timestamp between :date_start and :date_end group by d.project_id order by cnt desc limit 50 "; $result = $this->_db->fetchAll($sql,array("date_start"=>$date_start,"date_end"=>$date_end)); return $result; } public function getTopDownloadsPerMonth($month,$catid){ $sd = $month.'-01'; $date_start =date('Y-m-01', strtotime($sd)).' 00:00:00'; $date_end =date('Y-m-t', strtotime($sd)).' 23:59:59'; if($catid==0) { // $sql = " // select d.project_id // , count(1) as cnt // ,(select p.title from project p where p.project_id = d.project_id) as ptitle // ,(select p.created_at from project p where p.project_id = d.project_id) as pcreated_at // ,(select c.title from category c where d.project_category_id=c.project_category_id) as ctitle // ,(select username from member m where m.member_id = d.member_id) as username // from dwh.files_downloads d // where d.yyyymm = :month // group by d.project_id,project_category_id,member_id // order by cnt desc // limit 50 // "; $sql = "select d.project_id , sum(d.count) as cnt ,p.title as ptitle ,p.created_at as pcreated_at ,(select c.title from category c where d.project_category_id=c.project_category_id) as ctitle ,(select username from member m where m.member_id = p.member_id) as username from dwh.files_downloads_project_daily d join project p on d.project_id = p.project_id where d.yyyymm = :month group by d.project_id,d.project_category_id,p.member_id order by cnt desc limit 50"; }else { $modelProjectCategories = new Default_Model_DbTable_ProjectCategory(); $ids = $modelProjectCategories->fetchChildIds($catid); array_push($ids, $catid); $idstring = implode(',', $ids); // $sql = ' // select d.project_id // , count(1) as cnt // ,(select p.title from project p where p.project_id = d.project_id) as ptitle // ,(select p.created_at from project p where p.project_id = d.project_id) as pcreated_at // ,(select c.title from category c where d.project_category_id=c.project_category_id) as ctitle // ,(select username from member m where m.member_id = d.member_id) as username // from dwh.files_downloads d // where d.yyyymm = :month // and d.project_category_id in ('.$idstring.') // group by d.project_id,project_category_id,member_id // order by cnt desc // limit 50 // '; $sql = 'select d.project_id , sum(d.count) as cnt ,p.title as ptitle ,p.created_at as pcreated_at ,(select c.title from category c where d.project_category_id=c.project_category_id) as ctitle ,(select username from member m where m.member_id = p.member_id) as username from dwh.files_downloads_project_daily d join project p on d.project_id = p.project_id where d.yyyymm = :month and d.project_category_id in ('.$idstring.') group by d.project_id,d.project_category_id,p.member_id order by cnt desc limit 50'; } $result = $this->_db->fetchAll($sql,array("month"=>$month)); return $result; } public function getProductMonthly($project_id) { $sql = " select yyyymm as yearmonth ,sum(count) as amount from dwh.files_downloads_project_daily where project_id = :project_id group by yyyymm limit 100 "; $result = $this->_db->fetchAll($sql,array("project_id"=>$project_id)); return $result; } public function getProductDayly($project_id) { $sql = " select yyyymmdd as yearmonth,count as amount from dwh.files_downloads_project_daily where project_id = :project_id order by yyyymmdd desc limit 1000 "; $result = $this->_db->fetchAll($sql,array("project_id"=>$project_id)); return array_reverse($result); } public function getDownloadsDomainStati($begin, $end){ $date_start =$begin.' 00:00:00'; $date_end =$end.' 23:59:59'; $sql = " select count(1) as cnt ,d.referer_domain ,is_from_own_domain from dwh.files_downloads d where d.downloaded_timestamp between :date_start and :date_end group by d.referer_domain,is_from_own_domain order by is_from_own_domain desc, cnt desc "; $result = $this->_db->fetchAll($sql,array("date_start"=>$date_start,"date_end"=>$date_end)); return $result; } public function getPayoutCategoryMonthly($yyyymm){ $sql = " select * from ( select project_category_id ,(select title from category as c where c.project_category_id = v.project_category_id) as title ,round(sum(probably_payout_amount)) as amount ,sum(v.num_downloads) as num_downloads from member_dl_plings_v as v where yearmonth =:yyyymm group by v.project_category_id order by amount desc ) tmp where amount>0 "; $result = $this->_db->fetchAll($sql, array("yyyymm"=>$yyyymm)); return $result; } private function getPayoutCategorySingle($catid) { $modelProjectCategories = new Default_Model_DbTable_ProjectCategory(); $ids = $modelProjectCategories->fetchChildIds($catid); array_push($ids, $catid); $idstring = implode(',', $ids); // Zend_Registry::get('logger')->info(__METHOD__ . ' - ===================================' ); // Zend_Registry::get('logger')->info(__METHOD__ . ' - ' . $idstring); $sql = " select * from ( select yearmonth ,(select title from category as c where c.project_category_id = ".$catid.") as symbol ,round(sum(probably_payout_amount)) as amount from member_dl_plings_v as v where project_category_id IN (".$idstring.") group by v.yearmonth order by yearmonth asc ) tmp where amount>0 "; $result = $this->_db->fetchAll($sql); return $result; } public function getPayoutCategory_($catid){ if($catid==0) { $pids = array(152, 233,158, 148,491,445,295); $sql = " select * from ( select 'All' as symbol ,yearmonth ,round(sum(probably_payout_amount)) as amount from member_dl_plings_v as v group by v.yearmonth order by yearmonth asc ) tmp where amount>0 "; $result = $this->_db->fetchAll($sql); foreach ($pids as $catid) { $t = self::getPayoutCategorySingle($catid); $result = array_merge($result, $t); } } else { $result = self::getPayoutCategorySingle($catid); } return $result; } public function getPayoutCategory($catid){ if($catid==0) { // $pids = array(152, 233,158,404, 148,491,445,295); $modelCategoryStore = new Default_Model_DbTable_ConfigStoreCategory(); $pids = $modelCategoryStore->fetchCatIdsForStore(self::DEFAULT_STORE_ID); $sql = " select * from ( select 'All' as symbol ,yearmonth ,round(sum(probably_payout_amount)) as amount from member_dl_plings_v as v group by v.yearmonth order by yearmonth asc ) tmp where amount>0 "; $result = $this->_db->fetchAll($sql); foreach ($pids as $c) { $tmp = self::getPayoutCategorySingle($c); foreach ($result as &$row) { $row['amount'.$c] = 0; foreach ($tmp as $t) { if($t['yearmonth']==$row['yearmonth']) { $row['amount'.$c] = $t['amount']; break; } } } } } else { $result = self::getPayoutCategorySingle($catid); $modelCategoriesTable = new Default_Model_DbTable_ProjectCategory(); $pids = $modelCategoriesTable->fetchImmediateChildrenIds($catid); foreach ($pids as $c) { $tmp = self::getPayoutCategorySingle($c); foreach ($result as &$row) { $row['amount'.$c] = 0; foreach ($tmp as $t) { if($t['yearmonth']==$row['yearmonth']) { $row['amount'.$c] = $t['amount']; break; } } } } } return $result; } public function _getPayoutCategory($catid){ if($catid==0) { $pids = array(152, 233,158,404, 148,491,445,295); $sql = " select * from ( select 'All' as symbol ,yearmonth ,round(sum(probably_payout_amount)) as amount from member_dl_plings_v as v group by v.yearmonth order by yearmonth asc ) tmp where amount>0 "; $result = $this->_db->fetchAll($sql); foreach ($pids as $c) { $tmp = self::getPayoutCategorySingle($c); foreach ($result as &$row) { $row['amount'.$c] = 0; foreach ($tmp as $t) { if($t['yearmonth']==$row['yearmonth']) { $row['amount'.$c] = $t['amount']; break; } } } } } else { $result = self::getPayoutCategorySingle($catid); } return $result; } public function getLastYearMonth($yyyymm){ $aktdate = strval($yyyymm).'01'; $fmt = 'Ymd'; $d = DateTime::createFromFormat($fmt, $aktdate); $d->modify( 'last day of previous month' ); return $d->format( 'Ym' ); } public function getPayoutyear(){ $sql = "select round(sum(amount)) amount,yearmonth from dwh.member_payout group by yearmonth order by yearmonth"; $result = $this->_db->fetchAll($sql); return $result; } public function getPayoutOfMember($member_id){ //$sql = "select yearmonth, amount from dwh.member_payout where member_id = :member_id order by yearmonth asc"; $sql = "select yearmonth, amount from dwh.member_payout where member_id = :member_id order by yearmonth asc"; $result = $this->_db->fetchAll($sql, array("member_id"=>$member_id)); return $result; } public function getProject($project_id) { $sql = "SELECT * FROM ods_project_v WHERE project_id = :projectId"; $result = $this->_db->fetchAll($sql, array('projectId' => $project_id)); return $result; } public function getProjects($limit = 50) { $limit = (int)$limit; $sql = "SELECT * FROM ods_project_v LIMIT {$limit}"; $result = $this->_db->fetchAll($sql); return $result; } public function getMember($member_id) { $sql = "SELECT * FROM ods_member_v WHERE member_id = :memberId"; $result = $this->_db->fetchAll($sql, array('memberId' => (int)$member_id)); return $result; } public function getMembers($limit = 50) { $sql = "SELECT * FROM ods_member_v"; $sql = $this->_db->limit($sql, (int)$limit); $result = $this->_db->fetchAll($sql); return $result; } } \ No newline at end of file diff --git a/httpdocs/theme/backend/css/backend/stati.css b/httpdocs/theme/backend/css/backend/stati.css index b862e5197..bdf4ce40e 100644 --- a/httpdocs/theme/backend/css/backend/stati.css +++ b/httpdocs/theme/backend/css/backend/stati.css @@ -1,368 +1,374 @@ .pling-nav-tabs a{ cursor: pointer; } .spinning { animation: spin 1s infinite linear; -webkit-animation: spin2 1s infinite linear; float:left; margin-top:5px; margin-right:5px; } @keyframes spin { from { transform: scale(1) rotate(0deg); } to { transform: scale(1) rotate(360deg); } } @-webkit-keyframes spin2 { from { -webkit-transform: rotate(0deg); } to { -webkit-transform: rotate(360deg); } } .chart { width: 700px; height: 450px; margin-bottom: 10px; } .chart_title { display: block; font-size: 1.2em; font-weight: bold; margin-bottom: 0.4em; } #tabContainer { width: 720px; } /* path { stroke: #fff; } path:hover { opacity:0.9; } rect:hover { fill:blue; } .axis { font: 10px sans-serif; } .legend tr{ border-bottom:1px solid grey; } .legend tr:first-child{ border-top:1px solid grey; } .axis path, .axis line { fill: none; stroke: #000; shape-rendering: crispEdges; } .x.axis path { display: none; } .legend{ margin-bottom:76px; display:inline-block; border-collapse: collapse; border-spacing: 0px; } .legend td{ padding:4px 5px; vertical-align:bottom; } .legendFreq, .legendPerc{ align:right; width:50px; } .axis path, .axis line { fill: none; stroke: #000; shape-rendering: crispEdges; } .bar { fill: steelblue; } .bar:hover { fill: blue ; } .x.axis path { display: none; } */ + + +.bar { fill: steelblue; } + + + .d3-tip { line-height: 1; font-weight: bold; padding: 12px; background: rgba(0, 0, 0, 0.8); color: #fff; border-radius: 2px; } /* Creates a small triangle extender for the tooltip */ .d3-tip:after { box-sizing: border-box; display: inline; font-size: 10px; width: 100%; line-height: 1; color: rgba(0, 0, 0, 0.8); content: "\25BC"; position: absolute; text-align: center; } /* Style northward tooltips differently */ .d3-tip.n:after { margin: -1px 0 0 0; top: 100%; left: 0; } #d3bar-member { display: block; } #d3bar-project { display: block; } .d3linepath text { font: 10px sans-serif; } .d3linepath .axis path, .d3linepath .axis line { fill: none; stroke: #000; shape-rendering: crispEdges; } .d3linepath .line { fill: none; stroke-width: 1.5px; } .d3linepath .label { text-anchor: middle; } .d3linepath .label rect { fill: #ECECEC; } .d3linepath .label-key { font-weight: bold; } table.tablestati { display: block; background-color: #ccc; margin-top: 40px; float: left; margin-left: 20px; } table.tablestati thead td { font-weight: bold; background-color: #fff; } table.tablestati td { padding: 1px; margin: 1px; } table.tablestati td.number { text-align: right; width: 80px; padding-right: 10px; } .d3linepath path { stroke: steelblue; stroke-width: 2; } .d3linepath .axis path, .d3linepath .axis line { stroke: grey; stroke-width: 1; shape-rendering: crispEdges; } .d3linepath .legend { font-size: 16px; font-weight: bold; text-anchor: middle; } #category-tree-container{ max-height: 750px; overflow-y: auto; } #category-tree-container .product-counter{ padding-left: 20px; color:#1879B6; font-size: smaller; } #category-tree-container ul{ list-style: none; } #category-tree-container ul li span.submenu-toggle { float: left; padding-right: 10px; font-weight: bold; display: block; min-width: 25px;min-height: 15px; cursor: default; } /*multiline.css*/ .chart-wrapper { max-width: 950px; min-width: 804px; margin: 0 auto; background-color: #FAF7F7; } .chart-wrapper .inner-wrapper { position: relative; padding-bottom: 50%; width: 100%; } .chart-wrapper .outer-box { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } .chart-wrapper .inner-box { width: 100%; height: 100%; } .chart-wrapper text { font-family: sans-serif; font-size: 11px; } .chart-wrapper p { font-size: 16px; margin-top:5px; margin-bottom: 40px; } .chart-wrapper .axis path, .chart-wrapper .axis line { fill: none; stroke: #1F1F2E; stroke-opacity: 0.7; shape-rendering: crispEdges; } .chart-wrapper .axis path { stroke-width: 2px; } .chart-wrapper .line { fill: none; stroke: steelblue; stroke-width: 5px; } .chart-wrapper .legend { min-width: 200px; display: flex; justify-content: flex-start; flex-wrap: wrap; font-size: 16px; padding: 10px 40px; } .chart-wrapper .legend > div { margin: 0px 25px 10px 0px; flex-grow: 0; } .chart-wrapper .legend p { display:inline; font-size: 0.8em; font-family: sans-serif; font-weight: 600; } .chart-wrapper .legend .series-marker { height: 1em; width: 1em; border-radius: 35%; background-color: crimson; display: inline-block; margin-right: 4px; margin-bottom: -0.16rem; } .chart-wrapper .overlay { fill: none; pointer-events: all; } .chart-wrapper .focus circle { fill: crimson; stroke: crimson; stroke-width: 2px; fill-opacity: 15%; } .chart-wrapper .focus rect { fill: lightblue; opacity: 0.4; border-radius: 2px; } .chart-wrapper .focus.line { stroke: steelblue; stroke-dasharray: 2,5; stroke-width: 2; opacity: 0.5; } @media (max-width:500px){ .chart-wrapper .line {stroke-width: 3px;} .chart-wrapper .legend {font-size: 14px;} } /*payout monthly line chart*/ /* .payoutCategoryLineChart path{ stroke: steelblue; stroke-width: 2; fill: none; } .payoutCategoryLineChart .axis path, .payoutCategoryLineChart .axis line { fill: none; stroke: grey; stroke-width: 1; shape-rendering: crispEdges; } .payoutCategoryLineChart .legend { font-size: 16px; font-weight: bold; text-anchor: middle; } .payoutCategoryLineChart .overlay { fill: none; pointer-events: all; } .payoutCategoryLineChart .focus circle { fill: #F1F3F3; stroke: #6F257F; stroke-width: 5px; } .payoutCategoryLineChart .hover-line { stroke: #6F257F; stroke-width: 2px; stroke-dasharray: 3,3; } */ \ No newline at end of file diff --git a/httpdocs/theme/backend/js/backend_stati.js b/httpdocs/theme/backend/js/backend_stati.js index 2828191ad..46969fe8b 100644 --- a/httpdocs/theme/backend/js/backend_stati.js +++ b/httpdocs/theme/backend/js/backend_stati.js @@ -1,313 +1,317 @@ /** * ocs-webserver * * Copyright 2016 by pling GmbH. * * This file is part of ocs-webserver. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . **/ $(document).ready(function () { var parseTime = d3.timeParse("%Y%m"); window.selectedCatid = 0; window.selectedTab = ''; window.selectedMonth; var indicator = ''; function createMonthFilter(selectid, triggerEvent) { let html = ''; return html; } function createMonthFilterWithCurrent(selectid, triggerEvent) { let html = ''; return html; } $.ajaxSetup({ // Disable caching of AJAX responses // Used when debugging cache: false }); $.getScript("/theme/flatui/js/stati/newUserProject.js"); $(".newuserprojectTab").click(function () { $.getScript("/theme/flatui/js/stati/newUserProject.js"); }); $(".downloadsdailyTab").click(function () { $('#downloadsdailyTabContainer').empty(); $.getScript("/theme/flatui/js/stati/downloadsdaily.js"); }); + $(".newproductsweeklyTab").click(function () { + $('#newproductsweekly').empty(); + $.getScript("/theme/flatui/js/stati/newproductsweekly.js"); + }); $('#numofmonthback').change(function () { $.getScript("/theme/flatui/js/stati/downloadsdaily.js"); }); $('button.filterDownloadsDomainDate').click(function () { loadDownloadsDomain(); }); function loadDownloadsDomain() { $('#downloadsDomainTabContainer').empty(); let dateBegin = $("#filterDownloadsDomainDateBegin").val(); let dateEnd = $("#filterDownloadsDomainDateEnd").val(); $.getJSON("/backend/index/getdownloadsdomain?dateBegin=" + dateBegin + "&dateEnd=" + dateEnd, function (response) { let data = response.results; let table = ""; $.each(data, function (index, value) { table = table + '' + '' + '' + '' + ''; }); table = table + "
CNTDomainIS_OWN?
' + value.cnt + '' + value.referer_domain + '' + value.is_from_own_domain + '
"; $('#downloadsDomainTabContainer').append(table); }); } $(".downloadsDomainTab").click(function () { loadDownloadsDomain(); }); // topdownloadsperdate $('button.filterTopDownloadsDate').click(function () { loadTopdownloadsperday(); }); $('button.filterTopDownloadsDateClear').click(function () { $('#topDownloadsPerDayTabContainer').empty(); }); function loadTopdownloadsperday() { let date = $("#filterTopDownloadsDate").val(); $.getJSON("/backend/index/gettopdownloadsperdate?date=" + date, function (response) { let data = response.results; let table = ""; $.each(data, function (index, value) { table = table + '' + '' + '' + '' + '' + '' + '' + ''; }); table = table + "
" + date + "
ProjectIDUsernameCNTTitleCategorycreated_at
' + value.project_id + '' + value.username + '' + value.cnt + '' + value.ptitle + '' + value.ctitle + '' + value.pcreated_at + '
"; $('#topDownloadsPerDayTabContainer').append(table); }); } function loadTopdownloadspermonth() { console.log(window.selectedMonth); $('#topDownloadsPerMonthTabContainer').empty(); $('#topDownloadsPerMonthTabContainer').append(indicator); $.getJSON("/backend/index/gettopdownloadspermonth?month=" + window.selectedMonth+'&catid='+window.selectedCatid, function ( response) { let data = response.results; let table = ""; $.each(data, function (index, value) { table = table + '' + '' + '' + '' + '' + '' + '' + ''; }); table = table + "
" + window.selectedMonth+'_'+window.selectedCatTitle + "
ProjectIDUsernameCNTTitleCategorycreated_at
' + value.project_id + '' + value.username + '' + value.cnt + '' + value.ptitle + '' + value.ctitle + '' + value.pcreated_at + '
"; $('#topDownloadsPerMonthTabContainer').empty(); $('#topDownloadsPerMonthTabContainer').append(table); $('.loadTopdownloadspermonthDetail').on('click',function(){ console.log($(this).attr("data-pid")); var project_id = $(this).attr("data-pid"); loadTopdownloadspermonth_daily(project_id); }); }); } function loadTopdownloadspermonth_daily(project_id){ $('#topDownloadsPerMonthTabContainer').append('
').append('
'); window.project_id = project_id; $.getScript("/theme/flatui/js/stati/productMonthly.js"); $.getScript("/theme/flatui/js/stati/productDayly.js"); } $(".topDownloadsPerDayTab").click(function () { $('#topDownloadsPerDayTabContainer').empty(); loadTopdownloadsperday(); }); $('#payoutTab').prepend(createMonthFilter('selectmonth')); $('#selectmonth').change(function () { $.getScript("/theme/flatui/js/stati/memberPayout.js"); }); $(".payoutTab").click(function () { $('#detailContainer').empty(); $.getScript("/theme/flatui/js/stati/payoutyear.js"); $.getScript("/theme/flatui/js/stati/memberPayout.js"); }); // payout Category Monthly tab begin $('#payoutCategoryMonthlyTab').prepend(createMonthFilter('selectmonthCategoryMonthly')); $(".payoutCategoryMonthlyTab").click(function () { $.getScript("/theme/flatui/js/stati/payoutCategoryMonthly.js"); }); $('#selectmonthCategoryMonthly').change(function () { $('.payoutCategoryMonthlyTab').trigger('click'); }); // payout Category Monthly tab end $('#payoutNewcomerTab').prepend(createMonthFilter('selectmonthNewcomer')); $('#selectmonthNewcomer').change(function () { $(".payoutNewcomerTab").trigger('click'); }); $(".payoutNewcomerTab").click(function () { $('#payoutNewcomerTabContainer').empty(); let yyyymm = $("#selectmonthNewcomer option:selected").text(); $.getJSON("/backend/index/newcomer?yyyymm=" + yyyymm, function (response) { let data = response.results; let table = ""; $.each(data, function (index, value) { table = table + ''; }); table = table + "
' + value.member_id + '' + value.username + '' + value.paypal_mail + '' + value.amount + '
"; $('#payoutNewcomerTabContainer').html(table); }); }); $('#payoutNewloserTab').prepend(createMonthFilter('selectmonthNewloser')); $('#selectmonthNewloser').change(function () { $(".payoutNewloserTab").trigger('click'); }); $(".payoutNewloserTab").click(function () { $('#payoutNewloserTabContainer').empty(); let yyyymm = $("#selectmonthNewloser option:selected").text(); $.getJSON("/backend/index/newloser?yyyymm=" + yyyymm, function (response) { let data = response.results; let table = ""; $.each(data, function (index, value) { table = table + ''; }); table = table + "
' + value.member_id + '' + value.username + '' + value.paypal_mail + '' + value.amount + '
"; $('#payoutNewloserTabContainer').html(table); }); }); $('#payoutMonthDiffTab').prepend(createMonthFilter('selectmonthMonthDiff')); $('#selectmonthMonthDiff').change(function () { $(".payoutMonthDiffTab").trigger('click'); }); $(".payoutMonthDiffTab").click(function () { $('#payoutMonthDiffTabContainer').empty(); let yyyymm = $("#selectmonthMonthDiff option:selected").text(); $.getJSON("/backend/index/monthdiff?yyyymm=" + yyyymm, function (response) { let data = response.results; let table = ""; table = table + ''; $.each(data, function (index, value) { table = table + '' + '' + '' ; }); table = table + "
MemberUsernameDiffmonthamountlast monthamount
' + value.member_id + '' + value.username + '' + value.am_diff + '' + value.ym_akt + '' + value.am_akt + '' + value.ym_let + '' + value.am_let + '
"; $('#payoutMonthDiffTabContainer').html(table); }); }); $('#filterTopDownloadsMonth').MonthPicker({ StartYear: 2018, ShowIcon: true,MonthFormat:'yymm',OnAfterChooseMonth: function() { window.selectedMonth = $(this).val(); } }); $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { var target = $(e.target).attr("href"); console.log(target); if('#topDownloadsPerMonthTab' == target || '#payoutCategoryTab' ==target) { var cattree = $('#category-tree-container'); $(target).find('.filter').append(cattree); } window.selectedTab = target; window.selectedCatid = 0; window.selectedCatTitle = ''; }); $('body').on('click', '#category-tree a', function (event) { event.preventDefault(); event.stopPropagation(); var start = this.href.indexOf("cat"); var catid; var title; if(start<0) { catid = 0; title = 'All'; }else { catid = this.href.substring(start+4, (this.href.length-1)); title = $(this).text(); } window.selectedCatid = catid; window.selectedCatTitle = title; if(window.selectedTab=='#payoutCategoryTab') { if($('#payoutCategoryLineChart').find('#payoutCategoryLineChart'+catid).length==0) { $('#payoutCategoryLineChart').append('
loading ...
'); $.getScript("/theme/flatui/js/stati/payoutCategory.js"); } } if(window.selectedTab=='#topDownloadsPerMonthTab') { window.selectedMonth = $('#filterTopDownloadsMonth').val(); loadTopdownloadspermonth(); } }); $('#clearChartPanel').on('click',function(){ $("#payoutCategoryLineChart").empty(); }); }); \ No newline at end of file diff --git a/httpdocs/theme/flatui/js/stati/newproductsweekly.js b/httpdocs/theme/flatui/js/stati/newproductsweekly.js new file mode 100755 index 000000000..1b293c610 --- /dev/null +++ b/httpdocs/theme/flatui/js/stati/newproductsweekly.js @@ -0,0 +1,68 @@ +!(function (d3) { + + + var margin = {top: 20, right: 20, bottom: 80, left: 40}, + width = 1240 - margin.left - margin.right, + height = 500 - margin.top - margin.bottom; + + // set the ranges + var x = d3.scaleBand() + .range([0, width]) + .padding(0.1); + var y = d3.scaleLinear() + .range([height, 0]); + + // append the svg object to the body of the page + // append a 'group' element to 'svg' + // moves the 'group' element to the top left margin + var svg = d3.select("#newproductsweekly").append("svg") + .attr("width", width + margin.left + margin.right) + .attr("height", height + margin.top + margin.bottom) + .append("g") + .attr("transform", + "translate(" + margin.left + "," + margin.top + ")"); + + // get the data + d3.json("/backend/index/newproductsweekly", function(error, data) { + + if (error) throw error; + data = data.results; + // format the data + data.forEach(function(d) { + + d.amount = +d.amount; + }); + + // Scale the range of the data in the domains + x.domain(data.map(function(d) { return d.yyyykw; })); + y.domain([0, d3.max(data, function(d) { return d.amount; })]); + + // append the rectangles for the bar chart + svg.selectAll(".bar") + .data(data) + .enter().append("rect") + .attr("class", "bar") + .attr("x", function(d) { return x(d.yyyykw); }) + .attr("width", x.bandwidth()) + .attr("y", function(d) { return y(d.amount); }) + .attr("height", function(d) { return height - y(d.amount); }); + + // add the x Axis + svg.append("g") + .attr("transform", "translate(0," + height + ")") + .call(d3.axisBottom(x)) +.selectAll("text") + .attr("y", 0) + .attr("x", 9) + .attr("dy", ".35em") + .attr("transform", "rotate(90)") + .style("text-anchor", "start"); + + + // add the y Axis + svg.append("g") + .call(d3.axisLeft(y)); + + }); + +})(d3); \ No newline at end of file