diff --git a/application/modules/default/controllers/UserController.php b/application/modules/default/controllers/UserController.php
index ff1102893..6a9de622a 100644
--- a/application/modules/default/controllers/UserController.php
+++ b/application/modules/default/controllers/UserController.php
@@ -1,825 +1,829 @@
.
**/
class UserController extends Local_Controller_Action_DomainSwitch
{
protected $_memberId;
protected $_userName;
/** @var Zend_Db_Table_Row */
protected $_memberSettings;
public function init()
{
parent::init();
if ($this->hasParam('user_name')) {
$this->_userName = $this->getParam('user_name');
$this->_userName = urldecode($this->_userName);
$modelMember = new Default_Model_Member();
$this->_memberId = $modelMember->fetchActiveUserByUsername($this->_userName);
} else {
$this->_memberId = (int)$this->getParam('member_id');
}
}
public function indexAction()
{
$this->_helper->viewRenderer('aboutme');
$this->aboutmeAction();
}
public function aboutmeAction()
{
$tableMember = new Default_Model_Member();
$tableProject = new Default_Model_Project();
$earnModel = new Default_Model_StatDownload();
$helperUserRole = new Backend_View_Helper_UserRole();
$pageLimit = 500;
$projectpage = (int)$this->getParam('projectpage', 1);
$this->view->authMember = $this->_authMember;
$this->view->member = $tableMember->fetchMemberData($this->_memberId);
$this->view->headTitle($this->view->member->username . ' - ' . $this->getHeadTitle(), 'SET');
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) {
$datetime = new DateTime();
$datetime->sub(new DateInterval('P1M'));
$month = $datetime->format('Ym');
$amount = $earnModel->getMonthEarn($this->_memberId,$month);
if($amount && $amount['amount'])
{
$this->view->earnInfo = ' Last month I earned $'.number_format($amount['amount'], 2, '.', '').'.';
}else
{
$this->view->earnInfo=' Last month I earned 0.';
}
}else{
$this->view->earnInfo='';
}
// ajax load more products
if ($this->getParam('projectpage', null)) {
$total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null);
$this->view->pageLimit = $pageLimit;
$this->view->projectpage = $projectpage;
$this->view->total_records = $total_records;
// get last project category id
$lastproject = $tableProject->getUserActiveProjects($this->_memberId, 1, (($projectpage - 1) * $pageLimit-1));
foreach ($lastproject as $value) {
$this->view->lastcatid = $value['project_category_id'];
}
$this->view->userProducts =
$tableProject->getUserActiveProjects($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit);
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer('partials/aboutmeProducts');
//$this->forward('showmoreproductsajax', 'user', null, $this->getAllParams());
return;
} else {
$total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null);
$this->view->pageLimit = $pageLimit;
$this->view->projectpage = $projectpage;
$this->view->total_records = $total_records;
//$this->view->userProducts = $tableProject->fetchAllProjectsForMember($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit,true);
$this->view->userProducts =
$tableProject->getUserActiveProjects($this->_memberId, $pageLimit, ($projectpage - 1) * $pageLimit);
$this->view->userFeaturedProducts = $tableProject->fetchAllFeaturedProjectsForMember($this->_memberId);
$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 create ";
if($cnt==1)
{
$userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].' ';
$userinfo = $userinfo.'.';
/* if($isAdmin)
{
$userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].').';
}else{
$userinfo = $userinfo.'.';
}*/
}else if($cnt==2)
{
$userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].' ';
/*if($isAdmin)
{
$userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].')';
}*/
$userinfo = $userinfo.' and '.$userProjectCategories[1]['category1'].' ';
/*if($isAdmin)
{
$userinfo = $userinfo.'('.$userProjectCategories[1]['cnt'].').';
}else{
$userinfo = $userinfo.'.';
}*/
$userinfo = $userinfo.'.';
}else if($cnt==3)
{
$userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].' ';
/*if($isAdmin)
{
$userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].')';
}*/
$userinfo = $userinfo.', '.$userProjectCategories[1]['category1'].' ';
/* if($isAdmin)
{
$userinfo = $userinfo.' ('.$userProjectCategories[1]['cnt'].')';
}*/
$userinfo = $userinfo.' and '.$userProjectCategories[2]['category1'].' ';
/*if($isAdmin)
{
$userinfo = $userinfo.' ('.$userProjectCategories[2]['cnt'].').';
}*/
/*else{
$userinfo = $userinfo.'.';
}*/
$userinfo = $userinfo.'.';
}else if($cnt>3)
{
$userinfo = $userinfo.' '.$userProjectCategories[0]['category1'].' ';
/*if($isAdmin)
{
$userinfo = $userinfo.' ('.$userProjectCategories[0]['cnt'].')';
}*/
$userinfo = $userinfo.', '.$userProjectCategories[1]['category1'].' ';
/*if($isAdmin)
{
$userinfo = $userinfo.' ('.$userProjectCategories[1]['cnt'].')';
}*/
$userinfo = $userinfo.', '.$userProjectCategories[2]['category1'].' ';
/*if($isAdmin)
{
$userinfo = $userinfo.' ('.$userProjectCategories[2]['cnt'].')';
}*/
$userinfo = $userinfo.' and more.';
}
}
return $userinfo;
}
public function avatarAction()
{
$this->_helper->layout->disableLayout();
$size = (int)$this->getParam("size", 200);
$width = (int)$this->getParam("width", ($size / 2));
$this->view->size = (int)$size / 2;
$emailHash = $this->getParam("emailhash", null);
if ($emailHash) {
$memberTable = new Default_Model_Member();
$member = $memberTable->findMemberForMailHash($emailHash);
if ($member) {
$helperImage = new Default_View_Helper_Image();
$imgUrl = $helperImage->Image($member['profile_image_url'], array('width' => $width, 'height' => $width));
$this->view->avatar = $imgUrl;
$this->redirect($imgUrl);
return;
}
}
$this->view->avatar = "";
$helperImage = new Default_View_Helper_Image();
$imgUrl = $helperImage->Image("default-profile.png", array('width' => $width, 'height' => $width));
$this->redirect($imgUrl);
}
public function aboutAction()
{
$modelMember = new Default_Model_Member();
$this->view->member = $modelMember->fetchMember($this->_memberId)->toArray();
$this->view->currentPageOffset = (int)$this->getParam('page');
}
public function showmoreproductsajaxAction()
{
$this->_helper->layout->disableLayout();
$tableProject = new Default_Model_Project();
$pageLimit = 21;
$page = (int)$this->getParam('page', 1);
$total_records = $tableProject->countAllProjectsForMemberCatFilter($this->_memberId, true, null);
$this->view->pageLimit = $pageLimit;
$this->view->page = $page;
$this->view->total_records = $total_records;
$this->view->userProducts =
$tableProject->fetchAllProjectsForMember($this->_memberId, $pageLimit, ($page - 1) * $pageLimit, true);
$this->_helper->viewRenderer('/partials/aboutmeProducts');
}
public function userdataajaxAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
$resultArray = array();
header('Access-Control-Allow-Origin: *');
$this->getResponse()->setHeader('Access-Control-Allow-Origin', '*')->setHeader('Access-Control-Allow-Credentials', 'true')
->setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
->setHeader('Access-Control-Allow-Headers', 'origin, content-type, accept')
;
$userid = $this->getParam('id');
$modelMember = new Default_Model_Member();
$user = $modelMember->find($userid)->current();
if (Zend_Auth::getInstance()->hasIdentity()) {
$auth = Zend_Auth::getInstance();
$user = $auth->getStorage()->read();
$resultArray['member_id'] = $user->member_id;
$resultArray['username'] = $user->username;
$resultArray['mail'] = $user->mail;
$resultArray['avatar'] = $user->profile_image_url;
} else if (null != $userid && null != $user) {
$resultArray['member_id'] = $user['member_id'];
$resultArray['username'] = $user['username'];
$resultArray['mail'] = $user['mail'];
$resultArray['avatar'] = $user['profile_image_url'];
} else {
$resultArray['member_id'] = null;
$resultArray['username'] = null;
$resultArray['mail'] = null;
$resultArray['avatar'] = null;
}
$resultAll = array();
$resultAll['status'] = "success";
$resultAll['data'] = $resultArray;
$this->_helper->json($resultAll);
}
public function followsAction()
{
$this->redirect($this->_helper->url('follows', 'member', null, $this->getAllParams()));
}
public function followAction()
{
$this->_helper->layout->disableLayout();
$this->view->authMember = $this->_authMember;
$this->view->member_id = $this->_memberId;
if ($this->_memberId == $this->_authMember->member_id) {
return;
}
$memberFollowTable = new Default_Model_DbTable_MemberFollower();
$newVals = array('member_id' => $this->_memberId, 'follower_id' => (int)$this->_authMember->member_id);
$where = $memberFollowTable->select()->where('member_id = ?', $this->_memberId)
->where('follower_id = ?', $this->_authMember->member_id, 'INTEGER')
;
$result = $memberFollowTable->fetchRow($where);
if (null === $result) {
$memberFollowTable->createRow($newVals)->save();
}
}
public function unfollowAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer('follow');
$memberFollowTable = new Default_Model_DbTable_MemberFollower();
$memberFollowTable->delete('member_id=' . $this->_memberId . ' AND follower_id=' . $this->_authMember->member_id);
$this->view->authMember = $this->_authMember;
$this->view->member_id = $this->_memberId;
}
public function newsAction()
{
$this->productsAction();
$this->render('products');
}
public function productsAction()
{
$pageLimit = 25;
$page = (int)$this->getParam('page', 1);
//create ppload download hash: secret + collection_id + expire-timestamp
$salt = PPLOAD_DOWNLOAD_SECRET;
$timestamp = time() + 3600; // one hour valid
$hash = md5($salt . $timestamp); // order isn't important at all... just do the same when verifying
$this->view->download_hash = $hash;
$this->view->download_timestamp = $timestamp;
$this->view->member_id = null;
if (null != $this->_authMember && null != $this->_authMember->member_id) {
$this->view->member_id = $this->_authMember->member_id;
}
$modelProject = new Default_Model_Project();
$userProjects = $modelProject->fetchAllProjectsForMember($this->_authMember->member_id, $pageLimit, ($page - 1) * $pageLimit);
$paginator = Local_Paginator::factory($userProjects);
$paginator->setItemCountPerPage($pageLimit);
$paginator->setCurrentPageNumber($page);
$paginator->setTotalItemCount($modelProject->countAllProjectsForMember($this->_authMember->member_id));
$this->view->products = $paginator;
$modelMember = new Default_Model_Member();
$this->view->member = $modelMember->fetchMemberData($this->_authMember->member_id);
}
public function 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
+ $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;
}
}
/**
* @return Default_Form_Settings
* @throws Zend_Form_Exception
*/
private function formPassword()
{
$form = new Default_Form_Settings();
$form->setMethod("POST")->setAttrib("id", "settingsPasswordForm")->setAction('/member/' . $this->_memberId . '/changepass');
$passOld = $form->createElement('password', 'passwordOld')->setLabel('Enter old Password:')->setRequired(true)
->removeDecorator('HtmlTag')->addValidator(new Local_Validate_OldPasswordConfirm())->setDecorators(array(
'ViewHelper',
'Label',
'Errors',
array(
'ViewScript',
array(
'viewScript' => 'settings/viewscripts/flatui_input.phtml',
'placement' => false
)
)
))
;
$pass1 = $form->createElement('password', 'password1')->setLabel('Enter new Password:')->setRequired(true)
->addValidator(new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING))->removeDecorator('HtmlTag')
->setDecorators(array(
'ViewHelper',
'Label',
'Errors',
array(
'ViewScript',
array(
'viewScript' => 'settings/viewscripts/flatui_input.phtml',
'placement' => false
)
)
))
;
$pass2 = $form->createElement('password', 'password2')->setLabel('Re-enter new Password:')->setRequired(true)
->addValidator(new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING))->removeDecorator('HtmlTag')
->setDecorators(array(
'ViewHelper',
'Label',
'Errors',
array(
'ViewScript',
array(
'viewScript' => 'settings/viewscripts/flatui_input.phtml',
'placement' => false
)
)
))
;
$passValid = new Local_Validate_PasswordConfirm($pass2->getValue());
$pass1->addValidator($passValid);
$form->addElement($passOld)->addElement($pass1)->addElement($pass2);
return $form;
}
private function fetchMemberId()
{
if (false === Zend_Auth::getInstance()->hasIdentity()) {
return null;
}
$auth = Zend_Auth::getInstance()->getIdentity();
if ($this->_userName == $auth->username) {
return $auth->member_id;
}
if (Default_Model_DbTable_Member::ROLE_ID_ADMIN == $auth->roleId) {
return $this->_memberId;
}
}
}
\ No newline at end of file
diff --git a/application/modules/default/views/scripts/partials/header/template_react.phtml b/application/modules/default/views/scripts/partials/header/template_react.phtml
index f2d76cdfd..2792774ac 100755
--- a/application/modules/default/views/scripts/partials/header/template_react.phtml
+++ b/application/modules/default/views/scripts/partials/header/template_react.phtml
@@ -1,247 +1,247 @@
.
**/
$helperBuildBaseUrl = new Default_View_Helper_BuildBaseUrl();
//$baseurl = Zend_Registry::get('config')->settings->client->default->baseurl;
$baseurl = $helperBuildBaseUrl->buildBaserUrl();
$sname = Zend_Registry::get('store_host');
$store_config = Zend_Registry::get('store_config');
$getAuthUser = new Default_View_Helper_GetAuthUser();
$helperBuildMemberUrl = new Default_View_Helper_BuildMemberUrl();
$helperImage = new Default_View_Helper_Image();
$auth = Zend_Auth::getInstance();
$member = $getAuthUser->getAuthUser();
$serverUrl = $this->serverUrl();
$store_order = $store_config->order;
$store_name = $store_config->name;
$is_show_title = $store_config->is_show_title;
$last_char_store_order = substr($store_order, -1);
$helperFetchCategory = new Default_View_Helper_CatTitle();
$cat_title = $helperFetchCategory->catTitle($this->cat_id);
$cat_title_length = strlen($cat_title);
//check logo-width:
$logoWidth = (int)$this->template['header-logo']['width'];
$cat_title_left = $logoWidth+60;
$tabs_left = (int)$this->template['header-nav-tabs']['absolute-left'];
$tabs_left += $cat_title_length*10;
$filter = new Local_Filter_Url_Encrypt();
//$thisurl = $helperBuildBaseUrl->buildBaserUrl();
$thisurl = "/";
if(isset($_GET['url'])) {
$thisurl = $_GET['url'];
}
$url_logout = "/logout?redirect=".$filter->filter($thisurl);
?>
render('partials/header/metaheader_react.phtml');
?>
hasIdentity() && empty($member->username)) {
$helperEncryptUrl = new Default_View_Helper_EncryptUrl();
$redirectString = '/redirect/' . $helperEncryptUrl->EncryptUrl(Zend_Controller_Front::getInstance()->getRequest()->getScheme() . '://' . Zend_Controller_Front::getInstance()->getRequest()->getHttpHost().$_SERVER["REQUEST_URI"]);
?>
hasIdentity() && !empty($member->username)) { ?>
inlineScript()->appendScript(
' $(document).ready(function(){
MenuHover.setup();
Popuppanel.setup();
LoginContainer.update();
PlingsRedirect.setup();
});
');
diff --git a/application/modules/default/views/scripts/user/partials/userHeader.phtml b/application/modules/default/views/scripts/user/partials/userHeader.phtml
index d026d09ea..bafbba9ac 100644
--- a/application/modules/default/views/scripts/user/partials/userHeader.phtml
+++ b/application/modules/default/views/scripts/user/partials/userHeader.phtml
@@ -1,111 +1,111 @@
.
**/
$helperMember = new Default_View_Helper_BuildMemberUrl();
$helperBase = new Default_View_Helper_BuildBaseUrl();
?>
\ No newline at end of file
diff --git a/application/modules/default/views/scripts/user/payout.phtml b/application/modules/default/views/scripts/user/payout.phtml
new file mode 100644
index 000000000..42bdd8d27
--- /dev/null
+++ b/application/modules/default/views/scripts/user/payout.phtml
@@ -0,0 +1,279 @@
+.
+ **/
+
+$this->tab = 'payout';
+$this->countDownloadsOverall = 0;
+
+$currentDate = date("Ym",time());
+$currentYear = date("Y",time());
+
+$modelDownload = new Default_Model_StatDownload();
+$downloadYears = $modelDownload->getUserDownloadYears($this->member->member_id);
+#$this->countDownloadsOverall = count($this->downloads);
+?>
+
+
+
+ render('user/partials/userHeader_top.phtml'); ?>
+
+
+
+
+
+ render('user/partials/userHeader.phtml'); ?>
+
+
+
= $this->translate('Payout') ?>
+ view_member;
+ if($member->pling_excluded == 1) {
+ echo "This account has been excluded from receiving plings, due to various misuses. ";
+ }
+ ?>
+
+
+
+
+
+ view_member;
+ if($member->paypal_valid_status > 100) {
+ $status = $this->paypal_valid_status;
+ if($status->color == 'red') {
+ echo ''.$status->description.'
';
+ }
+ if($status->color == 'yellow') {
+ echo ''.$status->description.'
';
+ }
+ if($status->color == 'blue') {
+ echo ''.$status->description.'
';
+ }
+ if($status->color == 'green') {
+ echo ''.$status->description.'
';
+ }
+ }
+ ?>
+
+
+ pling_excluded == 0 || (Zend_Auth::getInstance()->hasIdentity() AND Zend_Auth::getInstance()->getIdentity()->roleName == 'admin')) {
+ echo "";
+ ?>
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/httpdocs/theme/react/app-header/app.js b/httpdocs/theme/react/app-header/app.js
index f2c71e032..2fef4bf77 100644
--- a/httpdocs/theme/react/app-header/app.js
+++ b/httpdocs/theme/react/app-header/app.js
@@ -1,407 +1,407 @@
class SiteHeader extends React.Component {
constructor(props){
super(props);
this.state = {
baseUrl:window.json_baseurl,
searchBaseUrl:window.json_searchbaseurl,
cat_title:window.json_cat_title,
hasIdentity:window.json_hasIdentity,
is_show_title:window.json_is_show_title,
redirectString:window.json_redirectString,
serverUrl:window.json_serverUrl,
serverUri:window.json_serverUri,
store:{
sName:window.json_sname,
name:window.json_store_name,
order:window.json_store_order,
last_char_store_order:window.last_char_store_order,
},
user:window.json_member,
logo:window.json_logoWidth,
cat_title_left:window.json_cat_title_left,
tabs_left:window.tabs_left,
template:window.json_template,
status:"",
url_logout:window.json_logouturl
};
this.updateDimensions = this.updateDimensions.bind(this);
}
componentWillMount() {
this.updateDimensions();
}
componentDidMount() {
window.addEventListener("resize", this.updateDimensions);
window.addEventListener("orientationchange",this.updateDimensions);
}
updateDimensions(){
const width = window.innerWidth;
let device;
if (width >= 910){
device = "large";
} else if (width < 910 && width >= 610){
device = "mid";
} else if (width < 610){
device = "tablet";
}
this.setState({device:device});
}
render(){
let userMenuDisplay, loginMenuDisplay, siteHeaderTopRightCssClass;
if (this.state.user){
userMenuDisplay = (
);
siteHeaderTopRightCssClass = "w-user";
} else {
loginMenuDisplay = (
);
}
let logoLink = this.state.serverUrl;
if (this.state.serverUri.indexOf('/s/') > -1){
logoLink += "/s/" + this.state.store.name;
}
let siteHeaderStoreNameDisplay;
if (this.state.is_show_title === "1"){
siteHeaderStoreNameDisplay = (
);
}
let HeaderDisplay;
if (this.state.device !== "tablet"){
HeaderDisplay = (
);
} else {
HeaderDisplay = (
)
}
let templateHeaderStyle;
if (this.state.template){
templateHeaderStyle = {
"backgroundImage":this.state.template.header['background-image'],
"backgroundColor":this.state.template.header['background-color'],
"height":this.state.template.header['height']
}
}
return (
)
}
}
class SiteHeaderSearchForm extends React.Component {
constructor(props){
super(props);
this.state = {
searchText:''
};
this.onSearchTextChange = this.onSearchTextChange.bind(this);
this.onSearchFormSubmit = this.onSearchFormSubmit.bind(this);
}
onSearchTextChange(e){
this.setState({searchText:e.target.value});
}
onSearchFormSubmit(e){
e.preventDefault();
window.location.href = this.props.searchBaseUrl + this.state.searchText;
}
render(){
return (
)
}
}
class SiteHeaderLoginMenu extends React.Component {
constructor(props){
super(props);
this.state = {};
}
render(){
let registerButtonCssClass,
loginButtonCssClass;
if (window.location.href.indexOf('/register') > -1){
registerButtonCssClass = "active";
}
if (window.location.href.indexOf('/login') > -1){
loginButtonCssClass = "active";
}
const menuItemCssClass = {
"borderColor":this.props.template['header-nav-tabs']['border-color'],
"backgroundColor":this.props.template['header-nav-tabs']['background-color']
}
//Register
return (
)
}
}
class SiteHeaderUserMenu extends React.Component {
constructor(props){
super(props);
this.state = {};
this.handleClick = this.handleClick.bind(this);
}
componentWillMount() {
document.addEventListener('mousedown',this.handleClick, false);
}
componentWillUnmount() {
document.removeEventListener('mousedown',this.handleClick, false);
}
handleClick(e){
let dropdownClass = "";
if (this.node.contains(e.target)){
if (this.state.dropdownClass === "open"){
if (e.target.className === "profile-menu-toggle" ||
e.target.className === "profile-menu-image" ||
e.target.className === "profile-menu-username"){
dropdownClass = "";
} else {
dropdownClass = "open";
}
} else {
dropdownClass = "open";
}
}
this.setState({dropdownClass:dropdownClass});
}
render(){
return (
)
}
}
class MobileSiteHeader extends React.Component {
constructor(props){
super(props);
this.state = {
status:"switch"
};
this.showMobileUserMenu = this.showMobileUserMenu.bind(this);
this.showMobileSearchForm = this.showMobileSearchForm.bind(this);
this.showMobileSwitchMenu = this.showMobileSwitchMenu.bind(this);
}
showMobileUserMenu(){
this.setState({status:"user"});
}
showMobileSearchForm(){
this.setState({status:"search"});
}
showMobileSwitchMenu(){
this.setState({status:"switch"});
}
render(){
const menuItemCssClass = {
"borderColor":this.props.template['header-nav-tabs']['border-color'],
"backgroundColor":this.props.template['header-nav-tabs']['background-color']
}
const closeMenuElementDisplay = (
);
let mobileMenuDisplay;
if (this.state.status === "switch"){
mobileMenuDisplay = (
);
} else if (this.state.status === "user"){
mobileMenuDisplay = (
)
} else if (this.state.status === "search"){
mobileMenuDisplay = (
)
}
let logoElementCssClass = this.props.store.name;
if (this.state.status !== "switch"){
logoElementCssClass += " mini-version";
}
return(
);
}
}
class MobileUserContainer extends React.Component {
constructor(props){
super(props);
this.state = {};
}
render(){
let userDisplay;
if (this.props.user){
userDisplay = (
);
} else {
userDisplay = (
);
}
return (
{userDisplay}
)
}
}
ReactDOM.render(
,
document.getElementById('site-header-container')
);
diff --git a/httpdocs/theme/react/header.js b/httpdocs/theme/react/header.js
index 685550898..fcf8a9751 100644
--- a/httpdocs/theme/react/header.js
+++ b/httpdocs/theme/react/header.js
@@ -1,567 +1,567 @@
"use strict";
window.appHelpers = function () {
function getEnv(domain) {
var env;
var lastDotSplit = this.splitByLastDot(domain);
if (lastDotSplit.indexOf('/') > -1) {
lastDotSplit = lastDotSplit.split('/')[0];
}
if (lastDotSplit === 'com' || lastDotSplit === 'org') {
env = 'live';
} else {
env = 'test';
}
return env;
}
function splitByLastDot(text) {
var index = text.lastIndexOf('.');
return text.slice(index + 1);
}
return {
getEnv: getEnv,
splitByLastDot: splitByLastDot
};
}();
"use strict";
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var SiteHeader =
/*#__PURE__*/
function (_React$Component) {
_inherits(SiteHeader, _React$Component);
function SiteHeader(props) {
var _this;
_classCallCheck(this, SiteHeader);
_this = _possibleConstructorReturn(this, _getPrototypeOf(SiteHeader).call(this, props));
_this.state = {
baseUrl: window.json_baseurl,
searchBaseUrl: window.json_searchbaseurl,
cat_title: window.json_cat_title,
hasIdentity: window.json_hasIdentity,
is_show_title: window.json_is_show_title,
redirectString: window.json_redirectString,
serverUrl: window.json_serverUrl,
serverUri: window.json_serverUri,
store: {
sName: window.json_sname,
name: window.json_store_name,
order: window.json_store_order,
last_char_store_order: window.last_char_store_order
},
user: window.json_member,
logo: window.json_logoWidth,
cat_title_left: window.json_cat_title_left,
tabs_left: window.tabs_left,
template: window.json_template,
status: "",
url_logout: window.json_logouturl
};
_this.updateDimensions = _this.updateDimensions.bind(_assertThisInitialized(_this));
return _this;
}
_createClass(SiteHeader, [{
key: "componentWillMount",
value: function componentWillMount() {
this.updateDimensions();
}
}, {
key: "componentDidMount",
value: function componentDidMount() {
window.addEventListener("resize", this.updateDimensions);
window.addEventListener("orientationchange", this.updateDimensions);
}
}, {
key: "updateDimensions",
value: function updateDimensions() {
var width = window.innerWidth;
var device;
if (width >= 910) {
device = "large";
} else if (width < 910 && width >= 610) {
device = "mid";
} else if (width < 610) {
device = "tablet";
}
this.setState({
device: device
});
}
}, {
key: "render",
value: function render() {
var userMenuDisplay, loginMenuDisplay, siteHeaderTopRightCssClass;
if (this.state.user) {
userMenuDisplay = React.createElement(SiteHeaderUserMenu, {
serverUrl: this.state.serverUrl,
baseUrl: this.state.baseUrl,
user: this.state.user
});
siteHeaderTopRightCssClass = "w-user";
} else {
loginMenuDisplay = React.createElement(SiteHeaderLoginMenu, {
baseUrl: this.state.baseUrl,
redirectString: this.state.redirectString,
template: this.state.template
});
}
var logoLink = this.state.serverUrl;
if (this.state.serverUri.indexOf('/s/') > -1) {
logoLink += "/s/" + this.state.store.name;
}
var siteHeaderStoreNameDisplay;
if (this.state.is_show_title === "1") {
siteHeaderStoreNameDisplay = React.createElement("div", {
id: "site-header-store-name-container"
}, React.createElement("a", {
href: logoLink
}, this.state.store.name));
}
var HeaderDisplay;
if (this.state.device !== "tablet") {
HeaderDisplay = React.createElement("section", {
id: "site-header-wrapper",
style: {
"paddingLeft": this.state.template['header-logo']['width']
}
}, React.createElement("div", {
id: "siter-header-left"
}, React.createElement("div", {
id: "site-header-logo-container",
style: this.state.template['header-logo']
}, React.createElement("a", {
href: logoLink
}, React.createElement("img", {
src: this.state.template['header-logo']['image-src']
}))), siteHeaderStoreNameDisplay), React.createElement("div", {
id: "site-header-right"
}, React.createElement("div", {
id: "site-header-right-top",
className: siteHeaderTopRightCssClass
}, React.createElement(SiteHeaderSearchForm, {
baseUrl: this.state.baseUrl,
searchBaseUrl: this.state.searchBaseUrl
}), userMenuDisplay), React.createElement("div", {
id: "site-header-right-bottom"
}, loginMenuDisplay)));
} else {
HeaderDisplay = React.createElement(MobileSiteHeader, {
logoLink: logoLink,
template: this.state.template,
user: this.state.user,
baseUrl: this.state.baseUrl,
searchBaseUrl: this.state.searchBaseUrl,
serverUrl: this.state.serverUrl,
store: this.state.store,
redirectString: this.state.redirectString
});
}
var templateHeaderStyle;
if (this.state.template) {
templateHeaderStyle = {
"backgroundImage": this.state.template.header['background-image'],
"backgroundColor": this.state.template.header['background-color'],
"height": this.state.template.header['height']
};
}
return React.createElement("section", {
id: "site-header",
style: templateHeaderStyle
}, HeaderDisplay);
}
}]);
return SiteHeader;
}(React.Component);
var SiteHeaderSearchForm =
/*#__PURE__*/
function (_React$Component2) {
_inherits(SiteHeaderSearchForm, _React$Component2);
function SiteHeaderSearchForm(props) {
var _this2;
_classCallCheck(this, SiteHeaderSearchForm);
_this2 = _possibleConstructorReturn(this, _getPrototypeOf(SiteHeaderSearchForm).call(this, props));
_this2.state = {
searchText: ''
};
_this2.onSearchTextChange = _this2.onSearchTextChange.bind(_assertThisInitialized(_this2));
_this2.onSearchFormSubmit = _this2.onSearchFormSubmit.bind(_assertThisInitialized(_this2));
return _this2;
}
_createClass(SiteHeaderSearchForm, [{
key: "onSearchTextChange",
value: function onSearchTextChange(e) {
this.setState({
searchText: e.target.value
});
}
}, {
key: "onSearchFormSubmit",
value: function onSearchFormSubmit(e) {
e.preventDefault();
window.location.href = this.props.searchBaseUrl + this.state.searchText;
}
}, {
key: "render",
value: function render() {
return React.createElement("div", {
id: "site-header-search-form"
}, React.createElement("form", {
id: "search-form",
onSubmit: this.onSearchFormSubmit
}, React.createElement("input", {
onChange: this.onSearchTextChange,
value: this.state.searchText,
type: "text",
name: "projectSearchText"
}), React.createElement("a", {
onClick: this.onSearchFormSubmit
})));
}
}]);
return SiteHeaderSearchForm;
}(React.Component);
var SiteHeaderLoginMenu =
/*#__PURE__*/
function (_React$Component3) {
_inherits(SiteHeaderLoginMenu, _React$Component3);
function SiteHeaderLoginMenu(props) {
var _this3;
_classCallCheck(this, SiteHeaderLoginMenu);
_this3 = _possibleConstructorReturn(this, _getPrototypeOf(SiteHeaderLoginMenu).call(this, props));
_this3.state = {};
return _this3;
}
_createClass(SiteHeaderLoginMenu, [{
key: "render",
value: function render() {
var registerButtonCssClass, loginButtonCssClass;
if (window.location.href.indexOf('/register') > -1) {
registerButtonCssClass = "active";
}
if (window.location.href.indexOf('/login') > -1) {
loginButtonCssClass = "active";
}
var menuItemCssClass = {
"borderColor": this.props.template['header-nav-tabs']['border-color'],
"backgroundColor": this.props.template['header-nav-tabs']['background-color'] //Register
};
return React.createElement("div", {
id: "site-header-login-menu"
}, React.createElement("ul", null, React.createElement("li", {
style: menuItemCssClass,
className: loginButtonCssClass
}, React.createElement("a", {
href: this.props.baseUrl + "/login" + this.props.redirectString
}, "Sign in"))));
}
}]);
return SiteHeaderLoginMenu;
}(React.Component);
var SiteHeaderUserMenu =
/*#__PURE__*/
function (_React$Component4) {
_inherits(SiteHeaderUserMenu, _React$Component4);
function SiteHeaderUserMenu(props) {
var _this4;
_classCallCheck(this, SiteHeaderUserMenu);
_this4 = _possibleConstructorReturn(this, _getPrototypeOf(SiteHeaderUserMenu).call(this, props));
_this4.state = {};
_this4.handleClick = _this4.handleClick.bind(_assertThisInitialized(_this4));
return _this4;
}
_createClass(SiteHeaderUserMenu, [{
key: "componentWillMount",
value: function componentWillMount() {
document.addEventListener('mousedown', this.handleClick, false);
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
document.removeEventListener('mousedown', this.handleClick, false);
}
}, {
key: "handleClick",
value: function handleClick(e) {
var dropdownClass = "";
if (this.node.contains(e.target)) {
if (this.state.dropdownClass === "open") {
if (e.target.className === "profile-menu-toggle" || e.target.className === "profile-menu-image" || e.target.className === "profile-menu-username") {
dropdownClass = "";
} else {
dropdownClass = "open";
}
} else {
dropdownClass = "open";
}
}
this.setState({
dropdownClass: dropdownClass
});
}
}, {
key: "render",
value: function render() {
var _this5 = this;
return React.createElement("ul", {
id: "site-header-user-menu-container"
}, React.createElement("li", {
ref: function ref(node) {
return _this5.node = node;
},
id: "user-menu-toggle",
className: this.state.dropdownClass
}, React.createElement("a", {
className: "profile-menu-toggle"
}, React.createElement("img", {
className: "profile-menu-image",
src: window.json_member_avatar
}), React.createElement("span", {
className: "profile-menu-username"
}, this.props.user.username)), React.createElement("ul", {
id: "user-profile-menu"
}, React.createElement("div", {
className: "dropdown-header"
}), React.createElement("li", null, React.createElement("a", {
href: window.json_baseurl + "product/add"
}, "Add Product")), React.createElement("li", null, React.createElement("a", {
href: window.json_baseurl + "u/" + this.props.user.username + "/products"
}, "Products")), React.createElement("li", null, React.createElement("a", {
- href: window.json_baseurl + "u/" + this.props.user.username + "/plings"
- }, "Plings")), React.createElement("li", null, React.createElement("a", {
+ href: window.json_baseurl + "u/" + this.props.user.username + "/payout"
+ }, "Payout")), React.createElement("li", null, React.createElement("a", {
href: window.json_baseurl + "settings"
}, "Settings")), React.createElement("li", null, React.createElement("a", {
href: window.json_logouturl
}, "Logout")))));
}
}]);
return SiteHeaderUserMenu;
}(React.Component);
var MobileSiteHeader =
/*#__PURE__*/
function (_React$Component5) {
_inherits(MobileSiteHeader, _React$Component5);
function MobileSiteHeader(props) {
var _this6;
_classCallCheck(this, MobileSiteHeader);
_this6 = _possibleConstructorReturn(this, _getPrototypeOf(MobileSiteHeader).call(this, props));
_this6.state = {
status: "switch"
};
_this6.showMobileUserMenu = _this6.showMobileUserMenu.bind(_assertThisInitialized(_this6));
_this6.showMobileSearchForm = _this6.showMobileSearchForm.bind(_assertThisInitialized(_this6));
_this6.showMobileSwitchMenu = _this6.showMobileSwitchMenu.bind(_assertThisInitialized(_this6));
return _this6;
}
_createClass(MobileSiteHeader, [{
key: "showMobileUserMenu",
value: function showMobileUserMenu() {
this.setState({
status: "user"
});
}
}, {
key: "showMobileSearchForm",
value: function showMobileSearchForm() {
this.setState({
status: "search"
});
}
}, {
key: "showMobileSwitchMenu",
value: function showMobileSwitchMenu() {
this.setState({
status: "switch"
});
}
}, {
key: "render",
value: function render() {
var menuItemCssClass = {
"borderColor": this.props.template['header-nav-tabs']['border-color'],
"backgroundColor": this.props.template['header-nav-tabs']['background-color']
};
var closeMenuElementDisplay = React.createElement("a", {
className: "menu-item",
onClick: this.showMobileSwitchMenu
}, React.createElement("span", {
className: "glyphicon glyphicon-remove"
}));
var mobileMenuDisplay;
if (this.state.status === "switch") {
mobileMenuDisplay = React.createElement("div", {
id: "switch-menu"
}, React.createElement("a", {
className: "menu-item",
onClick: this.showMobileSearchForm,
id: "user-menu-switch"
}, React.createElement("span", {
className: "glyphicon glyphicon-search"
})), React.createElement("a", {
className: "menu-item",
onClick: this.showMobileUserMenu,
id: "search-menu-switch"
}, React.createElement("span", {
className: "glyphicon glyphicon-option-horizontal"
})));
} else if (this.state.status === "user") {
mobileMenuDisplay = React.createElement("div", {
id: "mobile-user-menu"
}, React.createElement("div", {
className: "menu-content-wrapper"
}, React.createElement(MobileUserContainer, {
user: this.props.user,
baseUrl: this.props.baseUrl,
serverUrl: this.state.serverUrl,
template: this.props.template,
redirectString: this.props.redirectString
})), closeMenuElementDisplay);
} else if (this.state.status === "search") {
mobileMenuDisplay = React.createElement("div", {
id: "mobile-search-menu"
}, React.createElement("div", {
className: "menu-content-wrapper"
}, React.createElement(SiteHeaderSearchForm, {
baseUrl: this.props.baseUrl,
searchBaseUrl: this.props.searchBaseUrl
})), closeMenuElementDisplay);
}
var logoElementCssClass = this.props.store.name;
if (this.state.status !== "switch") {
logoElementCssClass += " mini-version";
}
return React.createElement("section", {
id: "mobile-site-header"
}, React.createElement("div", {
id: "mobile-site-header-logo",
className: logoElementCssClass
}, React.createElement("a", {
href: this.props.logoLink
}, React.createElement("img", {
src: this.props.template['header-logo']['image-src']
}))), React.createElement("div", {
id: "mobile-site-header-menus-container"
}, mobileMenuDisplay));
}
}]);
return MobileSiteHeader;
}(React.Component);
var MobileUserContainer =
/*#__PURE__*/
function (_React$Component6) {
_inherits(MobileUserContainer, _React$Component6);
function MobileUserContainer(props) {
var _this7;
_classCallCheck(this, MobileUserContainer);
_this7 = _possibleConstructorReturn(this, _getPrototypeOf(MobileUserContainer).call(this, props));
_this7.state = {};
return _this7;
}
_createClass(MobileUserContainer, [{
key: "render",
value: function render() {
var userDisplay;
if (this.props.user) {
userDisplay = React.createElement(SiteHeaderUserMenu, {
serverUrl: this.state.serverUrl,
baseUrl: this.state.baseUrl,
user: this.props.user
});
} else {
userDisplay = React.createElement(SiteHeaderLoginMenu, {
user: this.props.user,
baseUrl: this.props.baseUrl,
template: this.props.template,
redirectString: this.props.redirectString
});
}
return React.createElement("div", {
id: "mobile-user-container"
}, userDisplay);
}
}]);
return MobileUserContainer;
}(React.Component);
ReactDOM.render(React.createElement(SiteHeader, null), document.getElementById('site-header-container'));
diff --git a/httpdocs/theme/react/src/metaheader.js b/httpdocs/theme/react/src/metaheader.js
index e469d7249..92af53ad6 100644
--- a/httpdocs/theme/react/src/metaheader.js
+++ b/httpdocs/theme/react/src/metaheader.js
@@ -1,1773 +1,1773 @@
//import '@babel/polyfill';
import "core-js/shim";
import "regenerator-runtime/runtime";
import '@webcomponents/custom-elements'
import React from 'react';
import ReactDOM from 'react-dom';
// Use this object for config data instead of window.domains,
// window.baseUrl, window.etc... so don't set variables in global scope.
// Please see initConfig()
let config = {};
async function initConfig(target,url_afterlogin) {
// API https://www.opendesktop.org/home/metamenujs should send
// JSON data with CORS.
// Please see config-dummy.php.
// Also this API call sends cookie of www.opendesktop.org/cc
// by fetch() with option "credentials: 'include'", so
// www.opendesktop.org/cc possible detect user session.
// Can we consider if include user information into JSON data of
// API response instead of cookie set each external site?
let url = `https://www.opendesktop.org/home/metamenubundlejs?target=${target}`;
if (location.hostname.endsWith('cc')) {
url = `https://www.opendesktop.cc/home/metamenubundlejs?target=${target}`;
}
else if (location.hostname.endsWith('localhost')) {
url = `http://localhost:${location.port}/config-dummy.php`;
}
else if (location.hostname.endsWith('pling.local')) {
url = `http://pling.local/home/metamenubundlejs?target=${target}`;
}
if(url_afterlogin)
{
url = url+`&url=${url_afterlogin}`;
}
try {
const response = await fetch(url, {
mode: 'cors',
credentials: 'include'
});
if (!response.ok) {
throw new Error('Network response error');
}
config = await response.json();
return true;
}
catch (error) {
console.error(error);
return false;
}
}
window.appHelpers = function () {
function generateMenuGroupsArray(domains) {
let menuGroups = [];
domains.forEach(function (domain, index) {
if (menuGroups.indexOf(domain.menugroup) === -1) {
menuGroups.push(domain.menugroup);
}
});
return menuGroups;
}
function getDeviceFromWidth(width) {
let device;
if (width >= 910) {
device = "large";
} else if (width < 910 && width >= 610) {
device = "mid";
} else if (width < 610) {
device = "tablet";
}
return device;
}
function generatePopupLinks() {
let pLink = {};
pLink.plingListUrl = "/#plingList", pLink.ocsapiContentUrl = "/#ocsapiContent", pLink.aboutContentUrl = "/#aboutContent", pLink.linkTarget = "_blank";
if (window.location.hostname.indexOf('opendesktop') === -1 || window.location.hostname === "git.opendesktop.org" || window.location.hostname === "git.opendesktop.cc" || window.location.hostname === "forum.opendesktop.org" || window.location.hostname === "forum.opendesktop.cc" || window.location.hostname === "my.opendesktop.org" || window.location.hostname === "my.opendesktop.cc") {
pLink.plingListUrl = "/plings";
pLink.ocsapiContentUrl = "/partials/ocsapicontent.phtml";
pLink.aboutContentUrl = "/partials/about.phtml";
pLink.linkTarget = "";
}
return pLink;
}
function getPopupUrl(key, isExternal, baseUrl) {
let url = baseUrl;
return url;
}
return {
generateMenuGroupsArray,
getDeviceFromWidth,
generatePopupLinks,
getPopupUrl
};
}();
class MetaHeader extends React.Component {
constructor(props){
super(props);
this.state = {
domains:config.domains,
baseUrl:config.baseUrl,
blogUrl:config.blogUrl,
forumUrl:config.forumUrl,
loginUrl:config.loginUrl,
logoutUrl:config.logoutUrl,
gitlabUrl:config.gitlabUrl,
sName:config.sName,
isExternal:config.isExternal,
user:config.user,
showModal:false,
modalUrl:'',
metamenuTheme:config.metamenuTheme,
isAdmin:config.json_isAdmin
};
this.initMetaHeader = this.initMetaHeader.bind(this);
this.updateDimensions = this.updateDimensions.bind(this);
this.onSwitchStyle = this.onSwitchStyle.bind(this);
//this.getUser = this.getUser.bind(this);
}
componentWillMount() {
this.updateDimensions();
}
componentDidMount() {
this.initMetaHeader();
//this.initMetamenuTheme();
}
componentWillUnmount(){
window.removeEventListener("resize", this.updateDimensions);
window.removeEventListener("orientationchange",this.updateDimensions);
}
initMetaHeader(){
window.addEventListener("resize", this.updateDimensions);
window.addEventListener("orientationchange",this.updateDimensions);
//this.getUser();
}
fetchMetaheaderThemeSettings(){
let url = 'https://www.opendesktop.org/membersetting/getsettings';
if (location.hostname.endsWith('cc') || location.hostname.endsWith('local')) {
url = 'https://www.opendesktop.cc/membersetting/getsettings';
}
fetch(url,{
mode: 'cors',
credentials: 'include'
})
.then(response => response.json())
.then(data => {
const results = data.results;
if(results.length>0)
{
const theme = results.filter(r => r.member_setting_item_id == 1);
if(theme.length>0 && theme[0].value==1)
{
this.setState({metamenuTheme:'metamenu-theme-dark'});
}
}
});
}
// change metamenu class
onSwitchStyle(evt){
let url = 'https://www.opendesktop.org/membersetting/setsettings/itemid/1/itemvalue/';
if (location.hostname.endsWith('cc') || location.hostname.endsWith('local')) {
url = 'https://www.opendesktop.cc/membersetting/setsettings/itemid/1/itemvalue/';
}
url = url +(evt.target.checked?'1':'0');
const isChecked = evt.target.checked;
fetch(url,{
mode: 'cors',
credentials: 'include'
})
.then(response => response.json())
.then(data => {
this.setState({metamenuTheme:`${isChecked?'metamenu-theme-dark':''}`});
});
}
getUser(){
const decodedCookie = decodeURIComponent(document.cookie);
let ocs_data = decodedCookie.split('ocs_data=')[1];
if (ocs_data){
if (ocs_data.indexOf(';') > -1){ ocs_data = ocs_data.split(';')[0]; }
const user = JSON.parse(ocs_data);
this.setState({user:user});
}
}
updateDimensions(){
const width = window.innerWidth;
let device;
if (width >= 1015){
device = "large";
} else if (width < 1015 && width >= 730){
device = "mid";
} else if (width < 730){
device = "tablet";
}
this.setState({device:device});
}
render(){
let domainsMenuDisplay;
if (this.state.device === "tablet"){
domainsMenuDisplay = (
)
} else {
domainsMenuDisplay = (
)
}
const metamenuCls = `metamenu ${this.state.metamenuTheme}`;
let paraChecked = false;
if(this.state.metamenuTheme){
paraChecked=true;
}
return (
)
}
}
class DomainsMenu extends React.Component {
constructor(props){
super(props);
this.state = {
};
}
render(){
let moreMenuItemDisplay, adminsDropDownMenuDisplay, myOpendesktopMenuDisplay;
if (this.props.device !== "large"){
moreMenuItemDisplay = (
)
}
return (
openDesktop.org :
{moreMenuItemDisplay}
)
}
}
class DomainsDropDownMenu extends React.Component {
constructor(props){
super(props);
this.state = {};
this.handleClick = this.handleClick.bind(this);
}
componentDidMount() {
let menuGroups = [];
this.props.domains.forEach(function(domain,index){
if (menuGroups.indexOf(domain.menugroup) === -1){
menuGroups.push(domain.menugroup);
}
});
this.setState({menuGroups:menuGroups});
}
componentWillMount() {
document.addEventListener('mousedown',this.handleClick, false);
}
componentWillUnmount() {
document.removeEventListener('mousedown',this.handleClick, false);
}
handleClick(e){
let dropdownClass = "";
if (this.node.contains(e.target)){
if (this.state.dropdownClass === "open"){
if (e.target.className === "domains-menu-link-item"){
dropdownClass = "";
} else {
dropdownClass = "open";
}
} else {
dropdownClass = "open";
}
}
this.setState({dropdownClass:dropdownClass});
}
render(){
let menuGroupsDisplayLeft, menuGroupsDisplayRight;
if (this.state.menuGroups){
menuGroupsDisplayLeft = this.state.menuGroups.slice(0,2).map((mg,i) => (
));
menuGroupsDisplayRight = this.state.menuGroups.slice(2).map((mg,i) => (
));
}
return (
this.node = node} id="domains-dropdown-menu" className={this.state.dropdownClass}>
Store Listings
);
}
}
class DiscussionBoardsDropDownMenu extends React.Component {
constructor(props){
super(props);
this.state = {};
this.handleClick = this.handleClick.bind(this);
}
componentWillMount() {
document.addEventListener('mousedown',this.handleClick, false);
}
componentWillUnmount() {
document.removeEventListener('mousedown',this.handleClick, false);
}
handleClick(e){
let dropdownClass = "";
if (this.node.contains(e.target)){
if (this.state.dropdownClass === "open"){
if (e.target.className === "discussion-menu-link-item"){
dropdownClass = "";
} else {
dropdownClass = "open";
}
} else {
dropdownClass = "open";
}
}
this.setState({dropdownClass:dropdownClass});
}
render(){
return (
this.node = node} id="discussion-boards" className={this.state.dropdownClass}>
Discussion Boards
);
}
}
class DevelopmentDropDownMenu extends React.Component {
constructor(props){
super(props);
this.state = {};
this.state = {
gitlabLink:config.gitlabUrl+"/dashboard/issues?assignee_id="
};
this.handleClick = this.handleClick.bind(this);
}
componentWillMount() {
document.addEventListener('mousedown',this.handleClick, false);
}
componentWillUnmount() {
document.removeEventListener('mousedown',this.handleClick, false);
}
componentDidMount() {
/*const self = this;
const xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
const res = JSON.parse(this.response);
const gitlabLink = self.state.gitlabLink + res[0].id;
self.setState({gitlabLink:gitlabLink,loading:false});
}
};
xhttp.open("GET", config.gitlabUrl+"/api/v4/users?username="+this.props.user.username, true);
xhttp.send();*/
}
handleClick(e){
let dropdownClass = "";
if (this.node.contains(e.target)){
if (this.state.dropdownClass === "open"){
if (e.target.className === "admins-menu-link-item"){
dropdownClass = "";
} else {
dropdownClass = "open";
}
} else {
dropdownClass = "open";
}
}
this.setState({dropdownClass:dropdownClass});
}
render(){
let issuesMenuItem;
if (this.props.isAdmin){
issuesMenuItem = (
Issues
)
}
let gitfaqLinkItem;
if (config.isExternal === false){
gitfaqLinkItem = (Git FAQ );
} else {
gitfaqLinkItem = (Git FAQ );
}
return (
this.node = node} id="admins-dropdown-menu" className={this.state.dropdownClass}>
Development
Projects
{issuesMenuItem}
{gitfaqLinkItem}
)
}
}
class MoreDropDownMenu extends React.Component {
constructor(props){
super(props);
this.state = {};
this.handleClick = this.handleClick.bind(this);
}
componentWillMount() {
document.addEventListener('mousedown',this.handleClick, false);
}
componentWillUnmount() {
document.removeEventListener('mousedown',this.handleClick, false);
}
handleClick(e){
let dropdownClass = "";
if (this.node.contains(e.target)){
if (this.state.dropdownClass === "open"){
if (e.target.className === "more-menu-link-item"){
dropdownClass = "";
} else {
dropdownClass = "open";
}
} else {
dropdownClass = "open";
}
}
this.setState({dropdownClass:dropdownClass});
}
render(){
let faqLinkItem, apiLinkItem, aboutLinkItem;
if (config.isExternal === false){
faqLinkItem = (FAQ );
apiLinkItem = (API );
aboutLinkItem = (About );
} else {
faqLinkItem = (FAQ );
apiLinkItem = (API );
aboutLinkItem = (About );
}
return(
this.node = node} id="more-dropdown-menu" className={this.state.dropdownClass}>
More
)
}
}
class DomainsMenuGroup extends React.Component {
constructor(props){
super(props);
this.state = {};
this.filterDomainsByMenuGroup = this.filterDomainsByMenuGroup.bind(this);
}
filterDomainsByMenuGroup(domain){
if (domain.menugroup === this.props.menuGroup){
return domain;
}
}
render(){
const domainsDisplay = this.props.domains.filter(this.filterDomainsByMenuGroup).map((domain,index) => {
let domainPrefix = "";
if (domain.menuhref.indexOf('https://') === -1 && domain.menuhref.indexOf('http://') === -1){
domainPrefix += "http://";
}
return (
{domain.name}
);
});
return (
{this.props.menuGroup}
)
}
}
function SwitchItem(props){
return(
)
}
class UserMenu extends React.Component {
constructor(props){
super(props);
this.state = {};
}
render(){
let userDropdownDisplay, userAppsContextDisplay, developmentAppMenuDisplay;
if (this.props.user && this.props.user.member_id){
userDropdownDisplay = (
);
userAppsContextDisplay = (
);
developmentAppMenuDisplay = (
);
} else {
userDropdownDisplay = (
Login
)
}
let userMenuContainerDisplay;
if (this.props.device === "large"){
let faqLinkItem, apiLinkItem, aboutLinkItem;
if (config.isExternal === false){
faqLinkItem = (FAQ );
apiLinkItem = (API );
aboutLinkItem = (About );
} else {
faqLinkItem = (FAQ );
apiLinkItem = (API );
aboutLinkItem = (About );
}
let switchItem;
if (this.props.user && this.props.user.member_id && this.props.isAdmin){
switchItem =( );
}
userMenuContainerDisplay = (
);
} else {
userMenuContainerDisplay = (
);
}
return (
)
}
}
class UserContextMenuContainer extends React.Component {
constructor(props){
super(props);
this.state = {
gitlabLink:props.gitlabUrl+"/dashboard/issues?assignee_id="
};
this.handleClick = this.handleClick.bind(this);
}
componentWillMount() {
document.addEventListener('mousedown',this.handleClick, false);
}
componentWillUnmount() {
document.removeEventListener('mousedown',this.handleClick, false);
}
componentDidMount() {
const self = this;
const xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
const res = JSON.parse(this.response);
const gitlabLink = self.state.gitlabLink + res[0].id;
//const gitlabLink = self.state.gitlabLink;
self.setState({gitlabLink:gitlabLink,loading:false});
}
};
xhttp.open("GET", config.gitlabUrl+"/api/v4/users?username="+this.props.user.username, true);
xhttp.send();
}
handleClick(e){
let dropdownClass = "";
if (this.node.contains(e.target)){
if (this.state.dropdownClass === "open"){
if (e.target.className === "th-icon" || e.target.className === "btn btn-default dropdown-toggle"){
dropdownClass = "";
} else {
dropdownClass = "open";
}
} else {
dropdownClass = "open";
}
}
this.setState({dropdownClass:dropdownClass});
}
render(){
/*
// BU CODE
*/
const urlEnding = config.baseUrl.split('opendesktop.')[1];
let contextMenuDisplay;
if (this.props.isAdmin){
contextMenuDisplay = (
);
} else {
contextMenuDisplay = (
);
}
return (
this.node = node} id="user-context-menu-container">
{contextMenuDisplay}
)
}
}
class DevelopmentAppMenu extends React.Component {
constructor(props){
super(props);
this.state = {};
this.handleClick = this.handleClick.bind(this);
}
componentWillMount() {
document.addEventListener('mousedown',this.handleClick, false);
}
componentWillUnmount() {
document.removeEventListener('mousedown',this.handleClick, false);
}
componentDidMount() {
}
handleClick(e){
let dropdownClass = "";
if (this.node.contains(e.target)){
if (this.state.dropdownClass === "open"){
if (e.target.className === "th-icon" || e.target.className === "btn btn-default dropdown-toggle"){
dropdownClass = "";
} else {
dropdownClass = "open";
}
} else {
dropdownClass = "open";
}
}
this.setState({dropdownClass:dropdownClass});
}
render(){
return (
this.node = node} id="development-app-menu-container">
)
}
}
class UserLoginMenuContainerVersionTwo extends React.Component {
constructor(props){
super(props);
this.state = {};
this.handleClick = this.handleClick.bind(this);
}
componentWillMount() {
document.addEventListener('mousedown',this.handleClick, false);
}
componentWillUnmount() {
document.removeEventListener('mousedown',this.handleClick, false);
}
handleClick(e){
let dropdownClass = "";
if (this.node.contains(e.target)){
if (this.state.dropdownClass === "open"){
if (e.target.className === "th-icon" || e.target.className === "btn btn-default dropdown-toggle"){
dropdownClass = "";
} else {
dropdownClass = "open";
}
} else {
dropdownClass = "open";
}
}
this.setState({dropdownClass:dropdownClass},function(){
if (dropdownClass === "open"){
$('body').addClass('drawer-open');
} else {
$('body').removeClass('drawer-open');
}
});
}
render(){
return (
)
}
}
class UserLoginMenuContainer extends React.Component {
constructor(props){
super(props);
this.state = {};
this.handleClick = this.handleClick.bind(this);
}
componentWillMount() {
document.addEventListener('mousedown',this.handleClick, false);
}
componentWillUnmount() {
document.removeEventListener('mousedown',this.handleClick, false);
}
handleClick(e){
let dropdownClass = "";
if (this.node.contains(e.target)){
if (this.state.dropdownClass === "open"){
if (e.target.className === "th-icon" || e.target.className === "btn btn-default dropdown-toggle"){
dropdownClass = "";
} else {
dropdownClass = "open";
}
} else {
dropdownClass = "open";
}
}
this.setState({dropdownClass:dropdownClass});
}
render(){
return (
)
}
}
class UserTabs extends React.Component {
constructor(props){
super(props);
this.state = {
currentTab:'comments',
searchPhrase:''
};
this.onTabMenuItemClick = this.onTabMenuItemClick.bind(this);
this.onUserSearchInputChange = this.onUserSearchInputChange.bind(this);
this.getUsersAutocompleteList = this.getUsersAutocompleteList.bind(this);
this.selectUserFromAutocompleteList = this.selectUserFromAutocompleteList.bind(this);
}
onTabMenuItemClick(val){
this.setState({currentTab:val});
}
onUserSearchInputChange(e){
const searchPhrase = e.target.value;
this.setState({searchPhrase:e.target.value},function(){
let showUserList;
if (searchPhrase.length > 2){
showUserList = true;
} else {
showUserList = false;
}
this.setState({showUserList:showUserList,selectedUser:''},function(){
this.getUsersAutocompleteList(searchPhrase);
});
});
}
getUsersAutocompleteList(searchPhrase){
const self = this;
const xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
const res = JSON.parse(this.response);
self.setState({usersList:res,showUserList:true});
}
};
xhttp.open("GET", "https://www.opendesktop.cc/home/searchmember?username="+searchPhrase, true);
xhttp.send();
}
selectUserFromAutocompleteList(user){
this.setState({selectedUser:user,searchPhrase:user.username,showUserList:false});
}
render(){
let usersAutocompleteList;
if (this.state.usersList && this.state.showUserList){
const users = this.state.usersList.map((u,index) => (
this.selectUserFromAutocompleteList(u)} key={index}>
{u.username}
));
usersAutocompleteList = (
);
}
let tabContentDisplay;
if (this.state.currentTab === 'comments'){
tabContentDisplay = (
);
} else if (this.state.currentTab === 'search'){
if (this.state.selectedUser){
tabContentDisplay = (
);
} else {
tabContentDisplay = (
search user
);
}
}
return(
);
}
}
class UserCommentsTab extends React.Component {
constructor(props){
super(props);
this.state = {
loading:true
};
this.getUserOdComments = this.getUserOdComments.bind(this);
this.getUserForumComments = this.getUserForumComments.bind(this);
}
componentDidMount() {
this.setState({odComments:[],forumComments:[],loading:true},function(){
this.getUserOdComments();
});
}
getUserOdComments(){
const user = this.props.user;
const self = this;
const xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
const res = JSON.parse(this.response);
self.setState({odComments:res.commentsOpendeskop,loading:false},function(){
self.getUserForumComments();
});
}
};
xhttp.open("GET", "home/memberjson?member_id="+user.member_id, true);
xhttp.send();
}
getUserForumComments(){
const user = this.props.user;
const self = this;
const xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
const res = JSON.parse(this.response);
self.setState({forumComments:res.user_actions,loading:false});
}
};
xhttp.open("GET", "https://forum.opendesktop.cc/user_actions.json?offset=0&username=" + user.username + "&filter=5", true);
xhttp.send();
}
render(){
let contentDisplay;
if (!this.state.loading){
let odCommentsDisplay, forumCommentsDisplay;
if (this.state.odComments.length > 0){
odCommentsDisplay = (
);
}
if (this.state.forumComments.length > 0){
forumCommentsDisplay = (
);
}
contentDisplay = (
{odCommentsDisplay}
{forumCommentsDisplay}
)
} else {
contentDisplay = (
loading
);
}
return(
)
}
}
class UserSearchTab extends React.Component {
constructor(props){
super(props);
this.state = {
loading:true
};
this.getUserOdComments = this.getUserOdComments.bind(this);
this.getUserForumComments = this.getUserForumComments.bind(this);
}
componentDidMount() {
this.setState({odComments:[],forumComments:[],loading:true},function(){
this.getUserOdComments();
});
}
getUserOdComments(){
const user = this.props.user;
const self = this;
const xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
const res = JSON.parse(this.response);
self.setState({odComments:res.commentsOpendeskop,loading:false},function(){
self.getUserForumComments();
});
} else {
console.log('what happends here');
console.log(this);
}
};
xhttp.open("GET", "home/memberjson?member_id="+user.member_id, true);
xhttp.send();
}
getUserForumComments(){
const user = this.props.user;
const self = this;
const xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
console.log('this ');
if (this.readyState == 4 && this.status == 200) {
const res = JSON.parse(this.response);
self.setState({forumComments:res.user_actions,loading:false});
}
};
xhttp.open("GET", "https://forum.opendesktop.cc/user_actions.json?offset=0&username=" + user.username + "&filter=5", true);
xhttp.send();
}
render(){
let contentDisplay;
if (!this.state.loading){
let odCommentsDisplay, forumCommentsDisplay;
if (this.state.odComments.length > 0){
odCommentsDisplay = (
);
}
if (this.state.forumComments.length > 0){
forumCommentsDisplay = (
);
}
contentDisplay = (
{odCommentsDisplay}
{forumCommentsDisplay}
)
} else {
contentDisplay = (
loading
);
}
return(
)
}
}
class UserCommentsTabThreadsContainer extends React.Component {
constructor(props){
super(props);
this.state = {};
}
componentDidMount() {
let siteInfo;
if (this.props.type === 'od'){
siteInfo = {
address:'openDesktop.org',
url:'https://www.opendesktop.org'
}
} else if (this.props.type === 'forum'){
siteInfo = {
address:'forum',
url:'https://forum.opendesktop.org'
}
}
let threads = [];
this.props.comments.forEach(function(c,index){
if (threads.indexOf(c.title) === -1){
const thread = {
title:c.title,
id:c.project_id
}
threads.push(thread)
}
});
this.setState({siteInfo:siteInfo,comments:this.props.comments,threads:threads});
}
render(){
const t = this.state.siteInfo;
const comments = this.state.comments;
const user = this.props.user;
let headerDisplay, threadsDisplay, threadCommentsDisplay;
if (this.state.threads){
threadsDisplay = this.state.threads.map((tr,index) => (
));
headerDisplay = (
);
}
return (
{headerDisplay}
{threadCommentsDisplay}
)
}
}
class UserCommentsTabThread extends React.Component {
constructor(props){
super(props);
this.state = {};
this.filterCommentsByThread = this.filterCommentsByThread.bind(this);
}
filterCommentsByThread(comment){
if (comment.title === this.props.thread.title){
return comment;
}
}
render(){
let commentsDisplay;
if (this.props.comments){
const user = this.props.user;
commentsDisplay = this.props.comments.filter(this.filterCommentsByThread).map((c,index) => (
));
}
return (
);
}
}
class UserCommentsTabThreadCommentItem extends React.Component {
constructor(props){
super(props);
this.state = {};
}
render(){
const c = this.props.comment;
const user = this.props.user;
let repliedUsernameDisplay;
if (c.p_comment_member_id){
repliedUsernameDisplay = ( {c.p_username}
)
}
let userImage = user.avatar;
if (this.props.uType === 'search'){
userImage = user.profile_image_url;
}
return (
)
}
}
/** MOBILE SPECIFIC **/
class MobileLeftMenu extends React.Component {
constructor(props){
super(props);
this.state = {
overlayClass:""
};
this.toggleLeftSideOverlay = this.toggleLeftSideOverlay.bind(this);
this.handleClick = this.handleClick.bind(this);
}
componentWillMount() {
window.addEventListener('mousedown',this.handleClick, false);
window.addEventListener('touchend', this.handleClick, false);
}
componentWillUnmount() {
window.removeEventListener('mousedown',this.handleClick, false);
window.addEventListener('touchend', this.handleClick, false);
}
toggleLeftSideOverlay(){
let overlayClass = "open";
if (this.state.overlayClass === "open") {
overlayClass = "";
}
this.setState({overlayClass:overlayClass});
}
handleClick(e){
let overlayClass = "";
if (this.node.contains(e.target)){
if (this.state.overlayClass === "open"){
if (e.target.id === "left-side-overlay" || e.target.id === "menu-toggle-item"){
overlayClass = "";
} else {
overlayClass = "open";
}
} else {
overlayClass = "open";
}
}
const self = this;
setTimeout(function () {
console.log('time out');
self.setState({overlayClass:overlayClass});
}, 200);
}
render(){
return (
this.node = node} id="metaheader-left-mobile" className={this.state.overlayClass}>
);
}
}
class MobileLeftSidePanel extends React.Component {
constructor(props){
super(props);
this.state = {};
}
componentDidMount() {
let menuGroups = [];
this.props.domains.forEach(function(domain,index){
if (menuGroups.indexOf(domain.menugroup) === -1){
menuGroups.push(domain.menugroup);
}
});
this.setState({menuGroups:menuGroups});
}
render(){
let panelMenuGroupsDisplay;
if (this.state.menuGroups){
panelMenuGroupsDisplay = this.state.menuGroups.map((mg,i) => (
));
}
let faqLinkItem, apiLinkItem, aboutLinkItem;
if (config.isExternal === false){
faqLinkItem = (FAQ );
apiLinkItem = (API );
aboutLinkItem = (About );
} else {
faqLinkItem = (FAQ );
apiLinkItem = (API );
aboutLinkItem = (About );
}
return (
)
}
}
customElements.define('opendesktop-metaheader', class extends HTMLElement {
constructor() {
super();
this.buildComponent();
}
async buildComponent() {
const stylesheetElement = document.createElement('link');
stylesheetElement.rel = 'stylesheet';
stylesheetElement.href = 'https://www.opendesktop.org/theme/react/assets/css/metaheader.css';
if (location.hostname.endsWith('cc')) {
stylesheetElement.href = 'https://www.opendesktop.cc/theme/react/assets/css/metaheader.css';
}
else if (location.hostname.endsWith('localhost')) {
stylesheetElement.href = 'https://www.opendesktop.cc/theme/react/assets/css/metaheader.css';
}else if (location.hostname.endsWith('local')) {
stylesheetElement.href = '/theme/react/assets/css/metaheader.css';
}
else{
stylesheetElement.href = 'https://www.opendesktop.org/theme/react/assets/css/metaheader.css';
}
this.appendChild(stylesheetElement);
await initConfig(this.getAttribute('config-target'),window.location.href);
const metaheaderElement = document.createElement('div');
metaheaderElement.id = 'metaheader';
ReactDOM.render(React.createElement(MetaHeader, null), metaheaderElement);
// Component must be capsule within Shadow DOM, and don't hack
// context/scope of external sites.
/*
this.attachShadow({mode: 'open'});
this.shadowRoot.appendChild(stylesheetElement);
this.shadowRoot.appendChild(metaheaderElement);
*/
// However, make this as Light DOM for now, because current
// implementation is not real component design yet.
// Need solve event handling, scoped CSS.
this.appendChild(metaheaderElement);
}
});
diff --git a/httpdocs/theme/react/src/metaheader/DevelopmentAppMenu.js b/httpdocs/theme/react/src/metaheader/DevelopmentAppMenu.js
index 8353820f0..2500e3d87 100644
--- a/httpdocs/theme/react/src/metaheader/DevelopmentAppMenu.js
+++ b/httpdocs/theme/react/src/metaheader/DevelopmentAppMenu.js
@@ -1,118 +1,118 @@
import React from 'react';
class DevelopmentAppMenu extends React.Component {
constructor(props){
super(props);
this.state = {
gitlabLink:this.props.gitlabUrl+"/dashboard/issues?assignee_id="
};
this.handleClick = this.handleClick.bind(this);
}
componentWillMount() {
//document.addEventListener('mousedown',this.handleClick, false);
document.addEventListener('click',this.handleClick, false);
}
componentWillUnmount() {
document.removeEventListener('click',this.handleClick, false);
}
componentDidMount() {
const self = this;
const xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
const res = JSON.parse(this.response);
const gitlabLink = self.state.gitlabLink + res[0].id;
self.setState({gitlabLink:gitlabLink,loading:false});
}
};
xhttp.open("GET", this.props.gitlabUrl+"/api/v4/users?username="+this.props.user.username, true);
xhttp.send();
}
handleClick(e){
let dropdownClass = "";
if (this.node.contains(e.target)){
if(e.target.className === "btn btn-default dropdown-toggle"
|| e.target.className === "th-icon")
{
// only btn click open dropdown
if (this.state.dropdownClass === "open"){
dropdownClass = "";
}else{
dropdownClass = "open";
}
}else{
dropdownClass = "";
}
// if (this.state.dropdownClass === "open"){
// if (e.target.className === "th-icon" || e.target.className === "btn btn-default dropdown-toggle"){
// dropdownClass = "";
// } else {
// dropdownClass = "open";
// }
// } else {
// dropdownClass = "open";
// }
}
this.setState({dropdownClass:dropdownClass});
}
render(){
const urlEnding = this.props.baseUrl.split('opendesktop.')[1];
return (
this.node = node} id="development-app-menu-container">
)
}
}
export default DevelopmentAppMenu;