File indexing completed on 2025-05-04 05:29:12
0001 <?php 0002 0003 /** 0004 * ocs-webserver 0005 * 0006 * Copyright 2016 by pling GmbH. 0007 * 0008 * This file is part of ocs-webserver. 0009 * 0010 * This program is free software: you can redistribute it and/or modify 0011 * it under the terms of the GNU Affero General Public License as 0012 * published by the Free Software Foundation, either version 3 of the 0013 * License, or (at your option) any later version. 0014 * 0015 * This program is distributed in the hope that it will be useful, 0016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0018 * GNU Affero General Public License for more details. 0019 * 0020 * You should have received a copy of the GNU Affero General Public License 0021 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0022 **/ 0023 0024 use YoHang88\LetterAvatar\LetterAvatar; 0025 0026 class Default_Model_Member extends Default_Model_DbTable_Member 0027 { 0028 const CASE_INSENSITIVE = 1; 0029 0030 /** 0031 * @param int $count 0032 * @param string $orderBy 0033 * @param string $dir 0034 * 0035 * @return Zend_Db_Table_Rowset 0036 * @throws Zend_Exception 0037 */ 0038 public function fetchNewActiveMembers($count = 100, $orderBy = 'created_at', $dir = 'DESC') 0039 { 0040 if (empty($count)) { 0041 return $this->generateRowSet($this->createRow()); 0042 } 0043 0044 $allowedDirection = array('desc' => true, 'asc' => true); 0045 if (false == isset($allowedDirection[strtolower($dir)])) { 0046 $dir = null; 0047 } 0048 0049 /** @var Zend_Cache_Core $cache */ 0050 $cache = Zend_Registry::get('cache'); 0051 $cacheName = __FUNCTION__ . md5($count . $orderBy . $dir); 0052 $members = $cache->load($cacheName); 0053 0054 if ($members) { 0055 return $members; 0056 } else { 0057 0058 $sql = ' 0059 SELECT count(*) AS `total_count` 0060 FROM `member` 0061 WHERE `is_active` = :activeVal 0062 AND `type` = :typeVal 0063 AND `profile_image_url` <> :defaultImgUrl 0064 AND `profile_image_url` LIKE :likeImgUrl 0065 '; 0066 0067 $resultCnt = $this->_db->fetchRow($sql, array( 0068 'activeVal' => Default_Model_Member::MEMBER_ACTIVE, 0069 'typeVal' => Default_Model_Member::MEMBER_TYPE_PERSON, 0070 'defaultImgUrl' => 'hive/user-pics/nopic.png', 0071 'likeImgUrl' => 'hive/user-bigpics/0/%' 0072 )); 0073 0074 $totalcnt = $resultCnt['total_count']; 0075 0076 if ($totalcnt > $count) { 0077 $offset = ' offset ' . rand(0, $totalcnt - $count); 0078 } else { 0079 $offset = ''; 0080 } 0081 0082 $sql = ' 0083 SELECT * 0084 FROM `member` 0085 WHERE `is_active` = :activeVal 0086 AND `type` = :typeVal 0087 AND `profile_image_url` <> :defaultImgUrl 0088 AND `profile_image_url` LIKE :likeImgUrl 0089 '; 0090 //$sql .= ' ORDER BY ' . $this->_db->quoteIdentifier($orderBy) . ' ' . $dir; 0091 0092 $sql .= ' LIMIT ' . $this->_db->quote($count, Zend_Db::INT_TYPE); 0093 $sql .= $offset; 0094 0095 $resultMembers = $this->getAdapter()->query($sql, array( 0096 'activeVal' => Default_Model_Member::MEMBER_ACTIVE, 0097 'typeVal' => Default_Model_Member::MEMBER_TYPE_PERSON, 0098 'defaultImgUrl' => 'hive/user-pics/nopic.png', 0099 'likeImgUrl' => 'hive/user-bigpics/0/%' 0100 ))->fetchAll(); 0101 0102 $resultSet = $this->generateRowSet($resultMembers); 0103 0104 $cache->save($resultSet, $cacheName, array(), 14400); 0105 0106 return $resultSet; 0107 } 0108 } 0109 0110 /** 0111 * @param $data 0112 * 0113 * @return Zend_Db_Table_Rowset 0114 */ 0115 protected function generateRowSet($data) 0116 { 0117 $classRowSet = $this->getRowsetClass(); 0118 0119 $returnRowSet = new $classRowSet(array( 0120 'table' => $this, 0121 'rowClass' => $this->getRowClass(), 0122 'stored' => true, 0123 'data' => $data 0124 )); 0125 0126 return $returnRowSet; 0127 } 0128 0129 /** 0130 * @return array 0131 * @deprecated 0132 */ 0133 public function getMembersForSelectList() 0134 { 0135 $selectArr = 0136 $this->_db->fetchAll("SELECT `member_id`,`username`,`firstname`, `lastname` FROM {$this->_name} WHERE is_active=1 AND is_deleted=0 ORDER BY username"); 0137 0138 $arrayModified = array(); 0139 0140 $arrayModified[0] = "Benutzer wählen"; 0141 foreach ($selectArr as $item) { 0142 $tmpStr = ($item['firstname']) ? $item['firstname'] : ""; 0143 $tmpStr .= ($item['lastname']) ? ", " . $item['lastname'] : ""; 0144 $tmpStr = ($tmpStr != "") ? " (" . $tmpStr . ")" : ""; 0145 0146 $arrayModified[$item['member_id']] = stripslashes($item['username'] . $tmpStr); 0147 } 0148 0149 return $arrayModified; 0150 } 0151 0152 /** 0153 * @param int $member_id 0154 * 0155 * @param $verification_value 0156 * 0157 * @return boolean returns true if successful 0158 * @throws Zend_Db_Statement_Exception 0159 */ 0160 public function activateMemberFromVerification($member_id, $verification_value) 0161 { 0162 $sql = " 0163 UPDATE `member` 0164 STRAIGHT_JOIN `member_email` ON `member`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_checked` IS NULL AND `member`.`is_deleted` = 0 AND `member_email`.`email_deleted` = 0 0165 SET `member`.`mail_checked` = 1, `member`.`is_active` = 1, `member`.`changed_at` = NOW(), `member_email`.`email_checked` = NOW() 0166 WHERE `member`.`member_id` = :memberId AND `member_email`.`email_verification_value` = :verificationValue; 0167 "; 0168 $stmnt = $this->_db->query($sql, array('memberId' => $member_id, 'verificationValue' => $verification_value)); 0169 0170 return $stmnt->rowCount() > 0 ? true : false; 0171 } 0172 0173 /** 0174 * @param int $member_id 0175 * 0176 * @throws Zend_Exception 0177 */ 0178 public function setDeleted($member_id) 0179 { 0180 $updateValues = array( 0181 'is_active' => 0, 0182 'is_deleted' => 1, 0183 'deleted_at' => new Zend_Db_Expr('Now()'), 0184 ); 0185 $this->update($updateValues, $this->_db->quoteInto('member_id=?', $member_id, 'INTEGER')); 0186 0187 $memberLog = new Default_Model_MemberDeactivationLog(); 0188 $memberLog->logMemberAsDeleted($member_id); 0189 0190 0191 $this->setMemberProjectsDeleted($member_id); 0192 $this->setMemberCommentsDeleted($member_id); 0193 $this->setMemberRatingsDeleted($member_id); 0194 $this->setMemberReportingsDeleted($member_id); 0195 $this->setMemberEmailsDeleted($member_id); 0196 //$this->setMemberPlingsDeleted($member_id); 0197 //$this->removeMemberProjectsFromSearch($member_id); 0198 $this->setDeletedInMaterializedView($member_id); 0199 $this->setDeletedInSubSystems($member_id); 0200 } 0201 0202 //User ist mind. 1 jahr alt, user ist supporter, user hat minimum 20 kommentare 0203 0204 private function setMemberProjectsDeleted($member_id) 0205 { 0206 $modelProject = new Default_Model_Project(); 0207 $modelProject->setAllProjectsForMemberDeleted($member_id); 0208 } 0209 0210 private function setMemberCommentsDeleted($member_id) 0211 { 0212 $modelComments = new Default_Model_ProjectComments(); 0213 $modelComments->setAllCommentsForUserDeleted($member_id); 0214 } 0215 0216 private function setMemberRatingsDeleted($member_id) 0217 { 0218 $modelRatings = new Default_Model_DbTable_ProjectRating(); 0219 $affectedRows = $modelRatings->setDeletedByMemberId($member_id); 0220 if (false === empty($affectedRows)) { 0221 $modelProject = new Default_Model_DbTable_Project(); 0222 $modelProject->deleteLikes($affectedRows); 0223 } 0224 } 0225 0226 private function setMemberReportingsDeleted($member_id) 0227 { 0228 $modelReportsProject = new Default_Model_DbTable_ReportProducts(); 0229 $modelReportsProject->setDeleteByMember($member_id); 0230 $modelReportsComments = new Default_Model_DbTable_ReportComments(); 0231 $modelReportsComments->setDeleteByMember($member_id); 0232 } 0233 0234 private function setMemberEmailsDeleted($member_id) 0235 { 0236 $modelEmail = new Default_Model_DbTable_MemberEmail(); 0237 $modelEmail->setDeletedByMember($member_id); 0238 } 0239 0240 private function setDeletedInMaterializedView($member_id) 0241 { 0242 $sql = "UPDATE `stat_projects` SET `status` = :new_status WHERE `member_id` = :member_id"; 0243 0244 $this->_db->query($sql, 0245 array('new_status' => Default_Model_DbTable_Project::PROJECT_DELETED, 'member_id' => $member_id)) 0246 ->execute(); 0247 } 0248 0249 private function setDeletedInSubSystems($member_id) 0250 { 0251 try { 0252 $id_server = new Default_Model_Ocs_OAuth(); 0253 $id_server->deleteUser($member_id); 0254 Zend_Registry::get('logger')->debug(__METHOD__ . ' - oauth : ' . implode(PHP_EOL . " - ", 0255 $id_server->getMessages())); 0256 } catch (Exception $e) { 0257 Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); 0258 } 0259 try { 0260 $ldap_server = new Default_Model_Ocs_Ldap(); 0261 $ldap_server->deleteUser($member_id); 0262 Zend_Registry::get('logger')->debug(__METHOD__ . ' - ldap : ' . implode(PHP_EOL . " - ", 0263 $ldap_server->getMessages())); 0264 } catch (Exception $e) { 0265 Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); 0266 } 0267 try { 0268 $openCode = new Default_Model_Ocs_Gitlab(); 0269 $openCode->blockUser($member_id); 0270 $openCode->blockUserProjects($member_id); 0271 Zend_Registry::get('logger')->debug(__METHOD__ . ' - opencode : ' . implode(PHP_EOL . " - ", 0272 $openCode->getMessages())); 0273 } catch (Exception $e) { 0274 Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); 0275 } 0276 try { 0277 $forum = new Default_Model_Ocs_Forum(); 0278 $forum->blockUser($member_id); 0279 $forum->blockUserPosts($member_id); 0280 Zend_Registry::get('logger')->debug(__METHOD__ . ' - forum : ' . implode(PHP_EOL . " - ", 0281 $forum->getMessages())); 0282 } catch (Exception $e) { 0283 Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); 0284 } 0285 } 0286 0287 public function validDeleteMemberFromSpam($member_id) 0288 { 0289 $sql = 'SELECT 0290 `m`.`created_at` 0291 , (`m`.`created_at`+ INTERVAL 12 MONTH < NOW()) `is_old` 0292 ,(SELECT count(1) FROM `comments` `c` WHERE `c`.`comment_member_id` = `m`.`member_id` AND `comment_active` = 1) `comments` 0293 ,(SELECT (DATE_ADD(max(`active_time`), INTERVAL 1 YEAR) > now()) FROM `support` `s` WHERE `s`.`status_id` = 2 AND `s`.`member_id` =`m`.`member_id`) `is_supporter` 0294 FROM `member` `m` WHERE `member_id` = :member_id'; 0295 $result = $this->_db->fetchRow($sql, array( 0296 'member_id' => $member_id, 0297 )); 0298 if ($result['is_supporter'] && $result['is_supporter'] == 1) { 0299 return false; 0300 } 0301 if ($result['is_old'] == 1 || $result['comments'] > 20) { 0302 return false; 0303 } 0304 0305 return true; 0306 } 0307 0308 /** 0309 * @param int $member_id 0310 * 0311 * @throws Zend_Db_Exception 0312 */ 0313 public function setActivated($member_id) 0314 { 0315 $updateValues = array( 0316 'is_active' => 1, 0317 'is_deleted' => 0, 0318 'changed_at' => new Zend_Db_Expr('Now()'), 0319 'deleted_at' => null 0320 ); 0321 0322 $this->update($updateValues, $this->_db->quoteInto('member_id=?', $member_id, 'INTEGER')); 0323 0324 $memberLog = new Default_Model_MemberDeactivationLog(); 0325 $memberLog->removeLogMemberAsDeleted($member_id); 0326 0327 $this->setMemberProjectsActivated($member_id); 0328 $this->setMemberCommentsActivated($member_id); 0329 $this->setMemberEmailsActivated($member_id); 0330 0331 $this->setActivatedInSubsystems($member_id); 0332 0333 //$this->setMemberPlingsActivated($member_id); 0334 } 0335 0336 private function setMemberProjectsActivated($member_id) 0337 { 0338 $modelProject = new Default_Model_Project(); 0339 $modelProject->setAllProjectsForMemberActivated($member_id); 0340 } 0341 0342 private function setMemberCommentsActivated($member_id) 0343 { 0344 $modelComment = new Default_Model_ProjectComments(); 0345 $modelComment->setAllCommentsForUserActivated($member_id); 0346 } 0347 0348 private function setMemberEmailsActivated($member_id) 0349 { 0350 $modelEmail = new Default_Model_DbTable_MemberEmail(); 0351 $modelEmail->setActivatedByMember($member_id); 0352 } 0353 0354 private function setActivatedInSubsystems($member_id) 0355 { 0356 try { 0357 $id_server = new Default_Model_Ocs_OAuth(); 0358 $id_server->updateUser($member_id); 0359 Zend_Registry::get('logger')->debug(__METHOD__ . ' - oauth : ' . print_r($id_server->getMessages(), true)); 0360 } catch (Exception $e) { 0361 Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); 0362 } 0363 try { 0364 $ldap_server = new Default_Model_Ocs_Ldap(); 0365 $ldap_server->createUser($member_id); 0366 Zend_Registry::get('logger')->debug(__METHOD__ . ' - ldap : ' . implode(PHP_EOL . " - ", 0367 $ldap_server->getMessages())); 0368 } catch (Exception $e) { 0369 Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); 0370 } 0371 try { 0372 $openCode = new Default_Model_Ocs_Gitlab(); 0373 $openCode->unblockUser($member_id); 0374 $openCode->unblockUserProjects($member_id); 0375 Zend_Registry::get('logger')->debug(__METHOD__ . ' - opencode : ' . implode(PHP_EOL . " - ", 0376 $openCode->getMessages())); 0377 } catch (Exception $e) { 0378 Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); 0379 } 0380 try { 0381 $forum = new Default_Model_Ocs_Forum(); 0382 $forum->unblockUser($member_id); 0383 $forum->unblockUserPosts($member_id); 0384 Zend_Registry::get('logger')->debug(__METHOD__ . ' - forum : ' . implode(PHP_EOL." - ", $forum->getMessages())); 0385 } catch (Exception $e) { 0386 Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString()); 0387 } 0388 } 0389 0390 /** 0391 * @param int $member_id 0392 * 0393 * @param bool $onlyNotDeleted 0394 * 0395 * @return Zend_Db_Table_Row 0396 * @throws Zend_Db_Statement_Exception 0397 */ 0398 public function fetchMemberData($member_id, $onlyNotDeleted = true) 0399 { 0400 if (null === $member_id) { 0401 return null; 0402 } 0403 0404 $sql = ' 0405 SELECT `m`.*, `member_email`.`email_address` AS `mail`, IF(ISNULL(`member_email`.`email_checked`),0,1) AS `mail_checked`, `member_email`.`email_address`, `mei`.`external_id`, `mei`.`gitlab_user_id` 0406 FROM `member` AS `m` 0407 JOIN `member_email` ON `m`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_primary` = 1 0408 LEFT JOIN `member_external_id` AS `mei` ON `mei`.`member_id` = `m`.`member_id` 0409 WHERE 0410 (`m`.`member_id` = :memberId) 0411 '; 0412 0413 if ($onlyNotDeleted) { 0414 $sql .= " AND (m.is_deleted = " . self::MEMBER_NOT_DELETED . ")"; 0415 } 0416 0417 $result = $this->getAdapter()->query($sql, array('memberId' => $member_id))->fetch(); 0418 0419 $classRow = $this->getRowClass(); 0420 0421 return new $classRow(array('table' => $this, 'stored' => true, 'data' => $result)); 0422 } 0423 0424 /** 0425 * @param $member_id 0426 * @param bool $onlyActive 0427 * 0428 * @return null|Zend_Db_Table_Row_Abstract 0429 * @throws Zend_Db_Statement_Exception 0430 */ 0431 public function fetchMember($member_id, $onlyActive = true) 0432 { 0433 if (empty($member_id)) { 0434 return null; 0435 } 0436 0437 $sql = " 0438 SELECT `m`.*, `member_email`.`email_address` AS `mail`, IF(ISNULL(`member_email`.`email_checked`),0,1) AS `mail_checked`, `member_email`.`email_address`, `mei`.`external_id` 0439 FROM `member` AS `m` 0440 JOIN `member_email` ON `m`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_primary` = 1 0441 LEFT JOIN `member_external_id` AS `mei` ON `mei`.`member_id` = `m`.`member_id` 0442 WHERE `m`.`member_id` = :memberId"; 0443 0444 if ($onlyActive) { 0445 $sql .= " AND `m`.`is_deleted` = " . self::MEMBER_NOT_DELETED . " AND `m`.`is_active` = " . self::MEMBER_ACTIVE; 0446 } 0447 0448 $stmnt = $this->_db->query($sql, array('memberId' => $member_id)); 0449 0450 if ($stmnt->rowCount() == 0) { 0451 return null; 0452 } 0453 0454 return $this->generateRowClass($stmnt->fetch()); 0455 } 0456 0457 /** 0458 * @param string $user_name 0459 * 0460 * @return Zend_Db_Table_Row 0461 */ 0462 public function fetchMemberFromHiveUserName($user_name) 0463 { 0464 $sql = " 0465 SELECT * 0466 FROM `member` 0467 WHERE `source_id` = :sourceId 0468 AND `username` = :userName 0469 "; 0470 0471 return $this->_db->fetchRow($sql, 0472 array('sourceId' => Default_Model_Member::SOURCE_HIVE, 'userName' => $user_name)); 0473 } 0474 0475 /** 0476 * @param string $user_name 0477 * 0478 * @return Zend_Db_Table_Row 0479 */ 0480 public function fetchMemberFromHiveUserId($user_id) 0481 { 0482 $sql = " 0483 SELECT * 0484 FROM `member` 0485 WHERE `source_id` = :sourceId 0486 AND `source_pk` = :userId 0487 "; 0488 0489 return $this->_db->fetchRow($sql, array('sourceId' => Default_Model_Member::SOURCE_HIVE, 'userId' => $user_id)); 0490 } 0491 0492 /** 0493 * @param int $member_id 0494 * @param int $limit 0495 * 0496 * @return Zend_Db_Table_Rowset 0497 */ 0498 public function fetchFollowedMembers($member_id, $limit = null) 0499 { 0500 $sql = " 0501 SELECT member_follower.member_id, 0502 member_follower.follower_id, 0503 member.* 0504 FROM member_follower 0505 LEFT JOIN member ON member_follower.member_id = member.member_id 0506 WHERE member_follower.follower_id = :followerId 0507 AND member.is_active = :activeVal 0508 GROUP BY member_follower.member_id 0509 ORDER BY max(member_follower.member_follower_id) DESC 0510 "; 0511 0512 if (null != $limit) { 0513 $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); 0514 } 0515 0516 $result = $this->_db->fetchAll($sql, array('followerId' => $member_id, 'activeVal' => self::MEMBER_ACTIVE)); 0517 0518 return $this->generateRowSet($result); 0519 } 0520 0521 /** 0522 * @param int $member_id 0523 * @param null $limit 0524 * 0525 * @return Zend_Db_Table_Rowset_Abstract 0526 */ 0527 public function fetchFollowedProjects($member_id, $limit = null) 0528 { 0529 $sql = " 0530 SELECT `project_follower`.`project_id`, 0531 `project`.`title`, 0532 `project`.`image_small` 0533 FROM `project_follower` 0534 JOIN `project` ON `project_follower`.`project_id` = `project`.`project_id` 0535 WHERE `project_follower`.`member_id` = :member_id 0536 AND `project`.`status` = :project_status 0537 AND `project`.`type_id` = 1 0538 ORDER BY `project_follower`.`project_follower_id` DESC 0539 "; 0540 0541 if (null != $limit) { 0542 $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); 0543 } 0544 0545 $result = 0546 $this->_db->fetchAll($sql, 0547 array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE)); 0548 0549 return $this->generateRowSet($result); 0550 } 0551 0552 public function fetchPlingedProjects($member_id, $limit = null) 0553 { 0554 $sql = " 0555 SELECT project_category.title AS catTitle, 0556 project.*, 0557 member.*, 0558 plings.* 0559 FROM plings 0560 LEFT JOIN project ON plings.project_id = project.project_id 0561 LEFT JOIN project_category ON project.project_category_id = project_category.project_category_id 0562 LEFT JOIN member ON project.member_id = member.member_id 0563 WHERE plings.member_id = :member_id 0564 AND plings.status_id = 2 0565 AND project.status = :project_status 0566 AND project.type_id = 1 0567 ORDER BY plings.create_time DESC 0568 "; 0569 0570 if (null != $limit) { 0571 $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); 0572 } 0573 0574 $result = 0575 $this->_db->fetchAll($sql, 0576 array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE)); 0577 0578 return $this->generateRowSet($result); 0579 } 0580 0581 public function fetchProjectsSupported($member_id, $limit = null) 0582 { 0583 $sql = " 0584 SELECT `project_category`.`title` AS `catTitle`, 0585 `project`.`project_id`, 0586 `project`.`title`, 0587 `project`.`image_small`, 0588 `plings`.`member_id`, 0589 `plings`.`amount`, 0590 `plings`.`create_time`, 0591 `member`.`profile_image_url`, 0592 `member`.`username` 0593 0594 FROM `plings` 0595 JOIN `project` ON `plings`.`project_id` = `project`.`project_id` 0596 JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id` 0597 JOIN `member` ON `plings`.`member_id` = `member`.`member_id` 0598 WHERE `project`.`member_id` = :member_id 0599 AND `plings`.`status_id` = 2 0600 AND `project`.`status` = :project_status 0601 AND `project`.`type_id` = 1 0602 ORDER BY `plings`.`create_time` DESC 0603 "; 0604 0605 if (null != $limit) { 0606 $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); 0607 } 0608 0609 $result = 0610 $this->_db->fetchAll($sql, 0611 array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE)); 0612 0613 return $this->generateRowSet($result); 0614 } 0615 0616 /** 0617 * @param $userData 0618 * 0619 * @return array 0620 * @throws Exception 0621 */ 0622 public function createNewUser($userData) 0623 { 0624 $uuidMember = Local_Tools_UUID::generateUUID(); 0625 0626 if (false == isset($userData['password'])) { 0627 throw new Exception(__METHOD__ . ' - user password is not set.'); 0628 } 0629 $userData['password'] = Local_Auth_Adapter_Ocs::getEncryptedPassword($userData['password'],Default_Model_DbTable_Member::SOURCE_LOCAL); 0630 if (false == isset($userData['roleId'])) { 0631 $userData['roleId'] = self::ROLE_ID_DEFAULT; 0632 } 0633 if ((false == isset($userData['avatar'])) OR (false == isset($userData['profile_image_url']))) { 0634 $imageFilename = $this->generateIdentIcon($userData, $uuidMember); 0635 $userData['avatar'] = $imageFilename; 0636 $userData['profile_image_url'] = IMAGES_MEDIA_SERVER . '/cache/200x200-2/img/' . $imageFilename; 0637 } 0638 if (false == isset($userData['uuid'])) { 0639 $userData['uuid'] = $uuidMember; 0640 } 0641 if (false == isset($userData['mail_checked'])) { 0642 $userData['mail_checked'] = 0; 0643 } 0644 0645 //email is allways lower case 0646 $userData['mail'] = strtolower(trim($userData['mail'])); 0647 0648 $newUser = $this->storeNewUser($userData)->toArray(); 0649 0650 $memberMail = $this->createPrimaryMailAddress($newUser); 0651 $externalId = $this->createExternalId($newUser['member_id']); 0652 0653 $newUser['verificationVal'] = $memberMail->email_verification_value; 0654 $newUser['externalId'] = $externalId; 0655 0656 return $newUser; 0657 } 0658 0659 /** 0660 * @param $userData 0661 * @param $uuidMember 0662 * 0663 * @return string 0664 * @throws Exception 0665 */ 0666 protected function generateIdentIcon($userData, $uuidMember) 0667 { 0668 require_once 'vendor/autoload.php'; 0669 // $name = substr($userData['username'],0,1).' '.substr($userData['username'],1); 0670 $name = $userData['username'] . ' '; 0671 $avatar = new LetterAvatar($name, 'square', 400); 0672 $tmpImagePath = IMAGES_UPLOAD_PATH . 'tmp/' . $uuidMember . '.png'; 0673 $avatar->saveAs($tmpImagePath, LetterAvatar::MIME_TYPE_PNG); 0674 $imageService = new Default_Model_DbTable_Image(); 0675 $imageFilename = $imageService->saveImageOnMediaServer($tmpImagePath); 0676 0677 return $imageFilename; 0678 } 0679 0680 /** 0681 * @param array $userData 0682 * 0683 * @return Zend_Db_Table_Row_Abstract 0684 */ 0685 public function storeNewUser($userData) 0686 { 0687 $newUserData = $this->createRow($userData); 0688 $newUserData->save(); 0689 0690 //create a user specified main project in project table 0691 $projectId = $this->createPersonalProject($newUserData->toArray()); 0692 0693 //and save the id in member table 0694 $newUserData->main_project_id = $projectId; 0695 $newUserData->save(); 0696 0697 return $newUserData; 0698 } 0699 0700 /** 0701 * @param array $userData 0702 * 0703 * @return mixed $projectId 0704 */ 0705 protected function createPersonalProject($userData) 0706 { 0707 $tableProject = new Default_Model_Project(); 0708 /** @var Default_Model_DbRow_Project $newPersonalProject */ 0709 $newPersonalProject = $tableProject->createRow($userData); 0710 $newPersonalProject->uuid = Local_Tools_UUID::generateUUID(); 0711 $newPersonalProject->project_category_id = $newPersonalProject::CATEGORY_DEFAULT_PROJECT; 0712 $newPersonalProject->status = $newPersonalProject::STATUS_PROJECT_ACTIVE; 0713 $newPersonalProject->image_big = $newPersonalProject::DEFAULT_AVATAR_IMAGE; 0714 $newPersonalProject->image_small = $newPersonalProject::DEFAULT_AVATAR_IMAGE; 0715 $newPersonalProject->creator_id = $userData['member_id']; 0716 $newPersonalProject->title = $newPersonalProject::PERSONAL_PROJECT_TITLE; 0717 $projectId = $newPersonalProject->save(); 0718 0719 return $projectId; 0720 } 0721 0722 /** 0723 * @param array $newUser 0724 * @return Zend_Db_Table_Row_Abstract 0725 * @throws Zend_Db_Statement_Exception 0726 * @throws Zend_Db_Table_Exception 0727 * @throws Zend_Exception 0728 */ 0729 private function createPrimaryMailAddress($newUser) 0730 { 0731 $modelEmail = new Default_Model_MemberEmail(); 0732 $userMail = $modelEmail->saveEmailAsPrimary($newUser['member_id'], $newUser['mail'], $newUser['mail_checked']); 0733 0734 return $userMail; 0735 } 0736 0737 /** 0738 * @param int $member_id 0739 * 0740 * @return string 0741 */ 0742 private function createExternalId($member_id) 0743 { 0744 $modelExternalId = new Default_Model_DbTable_MemberExternalId(); 0745 $externalId = $modelExternalId->createExternalId($member_id); 0746 0747 return $externalId; 0748 } 0749 0750 public function fetchTotalMembersCount() 0751 { 0752 $sql = " 0753 SELECT 0754 count(1) AS `total_member_count` 0755 FROM 0756 `member` 0757 "; 0758 0759 $result = $this->_db->fetchRow($sql); 0760 0761 return $result['total_member_count']; 0762 } 0763 0764 public function fetchTotalMembersInStoreCount() 0765 { 0766 $sql = " 0767 SELECT 0768 count(1) AS `total_member_count` 0769 FROM 0770 `member` 0771 "; 0772 0773 $result = $this->_db->fetchRow($sql); 0774 0775 return $result['total_member_count']; 0776 } 0777 0778 /** 0779 * @param string $email 0780 * 0781 * @return null|Zend_Db_Table_Row_Abstract 0782 * @deprecated 0783 */ 0784 public function fetchCheckedActiveLocalMemberByEmail($email) 0785 { 0786 $sel = $this->select()->where('mail=?', $email)->where('is_deleted = ?', 0787 Default_Model_DbTable_Member::MEMBER_NOT_DELETED) 0788 ->where('is_active = ?', Default_Model_DbTable_Member::MEMBER_ACTIVE) 0789 ->where('mail_checked = ?', Default_Model_DbTable_Member::MEMBER_MAIL_CHECKED) 0790 ->where('login_method = ?', Default_Model_DbTable_Member::MEMBER_LOGIN_LOCAL); 0791 0792 return $this->fetchRow($sel); 0793 } 0794 0795 public function fetchEarnings($member_id, $limit = null) 0796 { 0797 $sql = " 0798 SELECT `project_category`.`title` AS `catTitle`, 0799 `project`.*, 0800 `member`.*, 0801 `plings`.* 0802 FROM `plings` 0803 JOIN `project` ON `plings`.`project_id` = `project`.`project_id` 0804 JOIN `project_category` ON `project`.`project_category_id` = `project_category`.`project_category_id` 0805 JOIN `member` ON `project`.`member_id` = `member`.`member_id` 0806 WHERE `plings`.`status_id` = 2 0807 AND `project`.`status` = :status 0808 AND `project`.`type_id` = 1 0809 AND `project`.`member_id` = :memberId 0810 ORDER BY `plings`.`create_time` DESC 0811 "; 0812 0813 if (null != $limit) { 0814 $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); 0815 } 0816 0817 $result = $this->_db->fetchAll($sql, 0818 array('memberId' => $member_id, 'status' => Default_Model_Project::PROJECT_ACTIVE)); 0819 0820 return $this->generateRowSet($result); 0821 } 0822 0823 /** 0824 * Finds an active user by given username or email ($identity) 0825 * Returns an empty rowset when no user found. 0826 * 0827 * @param string $identity could be the username or users mail address 0828 * @param bool $withLoginLocal 0829 * 0830 * @return Zend_Db_Table_Row_Abstract 0831 */ 0832 public function findActiveMemberByIdentity($identity, $withLoginLocal = false) 0833 { 0834 $sqlName = "SELECT * FROM `member` WHERE `is_active` = :active AND `is_deleted` = :deleted AND `username` = :identity"; 0835 $sqlMail = "SELECT * FROM `member` WHERE `is_active` = :active AND `is_deleted` = :deleted AND `mail` = :identity"; 0836 if ($withLoginLocal) { 0837 $sqlName .= " AND login_method = '" . self::MEMBER_LOGIN_LOCAL . "'"; 0838 $sqlMail .= " AND login_method = '" . self::MEMBER_LOGIN_LOCAL . "'"; 0839 } 0840 0841 // test identity as username 0842 $resultName = $this->getAdapter()->fetchRow($sqlName, 0843 array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity)); 0844 if ((false !== $resultName) AND (count($resultName) > 0)) { 0845 return $this->generateRowClass($resultName); 0846 } 0847 0848 // test identity as mail 0849 $resultMail = $this->getAdapter()->fetchRow($sqlMail, 0850 array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity)); 0851 if ((false !== $resultMail) AND (count($resultMail) > 0)) { 0852 return $this->generateRowClass($resultMail); 0853 } 0854 0855 return $this->createRow(); 0856 } 0857 0858 /** 0859 * @param string $username 0860 * @return mixed 0861 */ 0862 public function findActiveMemberByName($username) 0863 { 0864 $username = strtolower($username); 0865 $sql = ' 0866 select m.member_id,m.username,profile_image_url 0867 from member m 0868 where m.is_active=1 and m.is_deleted = 0 and LOWER(m.username) like "' . $username . '%" 0869 limit 10 0870 '; 0871 $result = $this->getAdapter()->fetchAll($sql); 0872 0873 return $result; 0874 } 0875 0876 /** 0877 * @param string $hash 0878 * @param bool $only_active 0879 * 0880 * @return array | false 0881 */ 0882 public function findMemberForMailHash($hash, $only_active = true) 0883 { 0884 $sql = " 0885 SELECT `m`.* 0886 FROM `member_email` AS `me` 0887 JOIN `member` AS `m` ON `m`.`member_id` = `me`.`email_member_id` 0888 WHERE `me`.`email_hash` = :email_hash 0889 "; 0890 0891 if ($only_active) { 0892 $sql .= " `m`.`is_active` = 1 AND `m`.`is_deleted` = 0"; 0893 } 0894 0895 $member = $this->getAdapter()->fetchRow($sql, array('email_hash' => $hash)); 0896 0897 if (empty($member)) { 0898 return false; 0899 } 0900 0901 return $member; 0902 } 0903 0904 /** 0905 * @param Zend_Db_Table_Row_Abstract $memberData 0906 * 0907 * @return bool 0908 */ 0909 public function isHiveUser($memberData) 0910 { 0911 if (empty($memberData)) { 0912 return false; 0913 } 0914 //20180801 ronald: If a hive user change his password, he gets the ocs password type and we do 0915 //have to check against the old hive password style 0916 //if ($memberData->source_id == self::SOURCE_HIVE) { 0917 // return true; 0918 //} 0919 if ($memberData->password_type == self::PASSWORD_TYPE_HIVE) { 0920 return true; 0921 } 0922 0923 return false; 0924 } 0925 0926 public function fetchActiveHiveUserByUsername($username) 0927 { 0928 $sql = 'SELECT * FROM member WHERE username = :username AND is_active = 1 AND member.source_id = 1 AND member.is_deleted = 0'; 0929 0930 $result = $this->getAdapter()->query($sql, array('username' => $username))->fetch(); 0931 0932 return $result; 0933 } 0934 0935 /** 0936 * @param $username 0937 * @return int|null 0938 * @throws Zend_Db_Statement_Exception 0939 */ 0940 public function fetchActiveUserByUsername($username) 0941 { 0942 $sql = 'SELECT DISTINCT `member`.`member_id` 0943 FROM `member` 0944 WHERE LOWER(`username`) = :username 0945 AND `is_active` = 1 0946 AND `member`.`is_deleted` = 0'; 0947 0948 $result = $this->getAdapter()->query($sql, array('username' => strtolower($username)))->fetchAll(); 0949 0950 if ($result && count($result) > 0) { 0951 $member_id = (int)$result[0]['member_id']; 0952 0953 return $member_id; 0954 } 0955 0956 return null; 0957 } 0958 0959 public function fetchCommentsCount($member_id) 0960 { 0961 $sql = " 0962 SELECT 0963 count(1) AS count 0964 FROM 0965 comments 0966 where comment_target_id <> 0 and comment_member_id = :member_id and comment_active = :comment_status 0967 "; 0968 $result = $this->_db->fetchRow($sql, array( 0969 'member_id' => $member_id, 0970 'comment_status' => Default_Model_DbTable_Comments::COMMENT_ACTIVE 0971 )); 0972 0973 return $result['count']; 0974 } 0975 0976 /** 0977 * @param $member_id 0978 * @param null $limit 0979 * 0980 * @return Zend_Paginator 0981 * @throws Zend_Paginator_Exception 0982 */ 0983 public function fetchComments($member_id, $limit = null) 0984 { 0985 $result = $this->fetchCommentsList($member_id, $limit); 0986 if (count($result) > 0) { 0987 return new Zend_Paginator(new Zend_Paginator_Adapter_Array($result)); 0988 } else { 0989 return new Zend_Paginator(new Zend_Paginator_Adapter_Array(array())); 0990 } 0991 } 0992 0993 /** 0994 * @param $member_id 0995 * @param null $limit 0996 * 0997 * @return Zend_Paginator 0998 * @throws Zend_Paginator_Exception 0999 */ 1000 public function fetchCommentsList($member_id, $limit = null) 1001 { 1002 $sql = ' 1003 SELECT 1004 `comment_id` 1005 ,`comment_text` 1006 ,`member`.`member_id` 1007 ,`member`.`profile_image_url` 1008 ,`comment_created_at` 1009 ,`stat_projects`.`username` 1010 ,`stat_projects`.`project_member_id` 1011 ,`comment_target_id` 1012 ,`stat_projects`.`title` 1013 ,`stat_projects`.`project_id` 1014 ,`stat_projects`.`laplace_score` 1015 ,`stat_projects`.`count_likes` 1016 ,`stat_projects`.`count_dislikes` 1017 ,`stat_projects`.`image_small` 1018 ,`stat_projects`.`version` 1019 ,`stat_projects`.`cat_title` 1020 ,`stat_projects`.`count_comments` 1021 ,`stat_projects`.`changed_at` 1022 ,`stat_projects`.`created_at` 1023 FROM `comments` 1024 INNER JOIN `member` ON `comments`.`comment_member_id` = `member`.`member_id` 1025 INNER JOIN `stat_projects` ON `comments`.`comment_target_id` = `stat_projects`.`project_id` AND `comments`.`comment_type` = 0 1026 WHERE `comments`.`comment_active` = :comment_status 1027 AND `stat_projects`.`status` = :project_status 1028 AND `comments`.`comment_member_id` = :member_id 1029 ORDER BY `comments`.`comment_created_at` DESC 1030 '; 1031 1032 if (isset($limit)) { 1033 $sql .= ' limit ' . (int)$limit; 1034 } 1035 $result = $this->_db->fetchAll($sql, array( 1036 'member_id' => $member_id, 1037 'project_status' => Default_Model_DbTable_Project::PROJECT_ACTIVE, 1038 'comment_status' => Default_Model_DbTable_Comments::COMMENT_ACTIVE 1039 )); 1040 1041 return $result; 1042 } 1043 1044 public function fetchCntSupporters($member_id) 1045 { 1046 $sql = ' 1047 SELECT DISTINCT `plings`.`member_id` FROM `plings` 1048 JOIN `project` ON `plings`.`project_id` = `project`.`project_id` 1049 JOIN `member` ON `project`.`member_id` = `member`.`member_id` 1050 WHERE `plings`.`status_id` = 2 1051 AND `project`.`status` = :project_status 1052 AND `project`.`type_id` = 1 1053 AND `project`.`member_id` = :member_id 1054 '; 1055 $result = 1056 $this->_db->fetchAll($sql, 1057 array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE)); 1058 1059 return count($result); 1060 } 1061 1062 public function fetchSupporterDonationInfo($member_id) 1063 { 1064 /*$sql = 'SELECT max(active_time) AS active_time_max 1065 ,min(active_time) AS active_time_min 1066 ,(DATE_ADD(max(active_time), INTERVAL 1 YEAR) > now()) AS issupporter 1067 ,count(1) AS cnt from support where status_id = 2 AND type_id = 0 AND member_id = :member_id ';*/ 1068 $sql = " 1069 select 1070 member_id, 1071 max(valid_till) as active_time_max, 1072 min(active_time_min) as active_time_min, 1073 max(is_valid) as issupporter, 1074 count(1) AS cnt 1075 from v_support 1076 where member_id = :member_id 1077 "; 1078 $result = $this->getAdapter()->fetchRow($sql, array('member_id' => $member_id)); 1079 1080 return $result; 1081 } 1082 1083 public function fetchSupporterSubscriptionInfo($member_id) 1084 { 1085 $sql = 'SELECT create_time,amount,period,period_frequency from support where status_id = 2 AND type_id = 1 1086 AND member_id = :member_id 1087 ORDER BY create_time desc 1088 LIMIT 1'; 1089 $result = $this->getAdapter()->fetchRow($sql, array('member_id' => $member_id)); 1090 1091 return $result; 1092 } 1093 1094 public function fetchSupporterSectionNr($member_id) 1095 { 1096 $sql ="select count(distinct c.name) sections from 1097 section_support s, support t , section c 1098 where s.support_id = t.id and s.section_id = c.section_id 1099 and t.member_id = :member_id and t.status_id>=2 1100 and s.is_active = 1 1101 "; 1102 $result = $this->getAdapter()->fetchRow($sql, array('member_id' => $member_id)); 1103 return $result['sections']; 1104 1105 } 1106 public function fetchSupporterSectionInfo($member_id) 1107 { 1108 $sql = "select GROUP_CONCAT(distinct c.name) sections from 1109 section_support s, support t , section c 1110 where s.support_id = t.id and s.section_id = c.section_id 1111 and t.member_id = :member_id and t.status_id>=2 1112 and s.is_active = 1 1113 order by c.order"; 1114 $result = $this->getAdapter()->fetchRow($sql, array('member_id' => $member_id)); 1115 return $result; 1116 } 1117 1118 public function fetchLastActiveTime($member_id) 1119 { 1120 $sql_page_views = 1121 "SELECT `created_at` AS `lastactive` FROM `stat_page_views` WHERE `member_id` = :member_id ORDER BY `created_at` DESC LIMIT 1"; 1122 $sql_activities = "SELECT `time` AS lastactive FROM activity_log WHERE member_id = :member_id ORDER BY `time` DESC LIMIT 1"; 1123 1124 $result_page_views = $this->getAdapter()->fetchRow($sql_page_views, array('member_id' => $member_id)); 1125 $result_activities = $this->getAdapter()->fetchRow($sql_activities, array('member_id' => $member_id)); 1126 1127 if (count($result_page_views) > 0 AND count($result_activities) > 0) { 1128 return $result_page_views['lastactive'] > $result_activities['lastactive'] ? $result_page_views['lastactive'] 1129 : $result_activities['lastactive']; 1130 } 1131 if (count($result_page_views) > count($result_activities)) { 1132 return $result_page_views['lastactive']; 1133 } 1134 if (count($result_activities) > count($result_page_views)) { 1135 return $result_activities['lastactive']; 1136 } 1137 1138 return null; 1139 } 1140 1141 /** 1142 * @param int $member_id 1143 * 1144 * @return array 1145 */ 1146 public function fetchContributedProjectsByCat($member_id) 1147 { 1148 $projects = $this->fetchSupportedProjects($member_id); 1149 $catArray = array(); 1150 if (count($projects) == 0) { 1151 return $catArray; 1152 } 1153 1154 foreach ($projects as $pro) { 1155 $catArray[$pro->catTitle] = array(); 1156 } 1157 1158 $helperProductUrl = new Default_View_Helper_BuildProductUrl(); 1159 foreach ($projects as $pro) { 1160 $projArr = array(); 1161 $projArr['id'] = $pro->project_id; 1162 $projArr['name'] = $pro->title; 1163 $projArr['image'] = $pro->image_small; 1164 $projArr['url'] = $helperProductUrl->buildProductUrl($pro->project_id, '', null, true); 1165 $projArr['sumAmount'] = $pro->sumAmount; 1166 array_push($catArray[$pro->catTitle], $projArr); 1167 } 1168 1169 return $catArray; 1170 } 1171 1172 /** 1173 * @param int $member_id 1174 * @param null $limit 1175 * 1176 * @return Zend_Db_Table_Rowset_Abstract 1177 */ 1178 public function fetchSupportedProjects($member_id, $limit = null) 1179 { 1180 $sql = " 1181 SELECT plings.project_id, 1182 project.title, 1183 project.image_small, 1184 project_category.title AS catTitle, 1185 (SELECT SUM(amount) FROM plings WHERE plings.project_id=project.project_id AND plings.status_id=2) AS sumAmount 1186 FROM plings 1187 JOIN project ON plings.project_id = project.project_id 1188 JOIN project_category ON project.project_category_id = project_category.project_category_id 1189 WHERE plings.status_id IN (2,3,4) 1190 AND plings.member_id = :member_id 1191 AND project.status = :project_status 1192 AND project.type_id = 1 1193 GROUP BY plings.project_id 1194 ORDER BY sumAmount DESC 1195 "; 1196 1197 if (null != $limit) { 1198 $sql .= $this->_db->quoteInto(" limit ?", $limit, 'INTEGER'); 1199 } 1200 1201 $result = 1202 $this->_db->fetchAll($sql, 1203 array('member_id' => $member_id, 'project_status' => Default_Model_Project::PROJECT_ACTIVE)); 1204 1205 return $this->generateRowSet($result); 1206 } 1207 1208 /** 1209 * @param string $value 1210 * @param int $test_case_sensitive 1211 * @param array $omitMember 1212 * @param bool $onlyActive 1213 * 1214 * @return array return an array of rows 1215 */ 1216 public function findUsername($value, $test_case_sensitive = self::CASE_INSENSITIVE, $omitMember = array(), $onlyActive = false) 1217 { 1218 $sql = " 1219 SELECT * 1220 FROM `member` 1221 "; 1222 if ($test_case_sensitive == self::CASE_INSENSITIVE) { 1223 $sql .= "WHERE LCASE(member.username) = LCASE(:username)"; 1224 } else { 1225 $sql .= "WHERE member.username = :username"; 1226 } 1227 1228 if (count($omitMember) > 0) { 1229 $sql .= " AND member.member_id NOT IN (" . implode(',', $omitMember) . ")"; 1230 } 1231 1232 if ($onlyActive) { 1233 $sql .= " AND member.is_active = 1 and member.is_deleted = 0"; 1234 } 1235 1236 return $this->_db->fetchAll($sql, array('username' => $value)); 1237 } 1238 1239 /** 1240 * @param string $login 1241 * 1242 * @return int 1243 */ 1244 public function generateUniqueUsername($login) 1245 { 1246 $sql = "SELECT COUNT(*) AS `counter` FROM `member` WHERE `username` REGEXP CONCAT(:user_name,'[_0-9]*$')"; 1247 $result = $this->_db->fetchRow($sql, array('user_name' => $login)); 1248 1249 return $login . '_' . $result['counter']; 1250 } 1251 1252 /** 1253 * @param int $member_id 1254 * @param string $email 1255 * 1256 * @return bool 1257 * @throws Zend_Db_Statement_Exception 1258 */ 1259 public function setActive($member_id, $email) 1260 { 1261 $sql = " 1262 UPDATE `member` 1263 STRAIGHT_JOIN `member_email` ON `member`.`member_id` = `member_email`.`email_member_id` AND `member_email`.`email_checked` IS NULL AND `member`.`is_deleted` = 0 AND `member_email`.`email_deleted` = 0 1264 SET `member`.`mail_checked` = 1, `member`.`is_active` = 1, `member`.`changed_at` = NOW(), `member_email`.`email_checked` = NOW() 1265 WHERE `member`.`member_id` = :memberId AND `member_email`.`email_address` = :mailAddress; 1266 "; 1267 $stmnt = $this->_db->query($sql, array('memberId' => $member_id, 'mailAddress' => $email)); 1268 1269 return $stmnt->rowCount() > 0 ? true : false; 1270 } 1271 1272 /** 1273 * @param string $identity 1274 * 1275 * @return Zend_Db_Table_Row_Abstract 1276 */ 1277 public function findActiveMemberByMail($identity) 1278 { 1279 $sqlMail = " 1280 SELECT `m`.*, `me`.`email_address` AS `mail`, IF(ISNULL(`me`.`email_checked`),0,1) AS `mail_checked` 1281 FROM `member` AS `m` 1282 JOIN `member_email` AS `me` ON `me`.`email_member_id` = `m`.`member_id` AND `me`.`email_primary` = 1 1283 WHERE `is_active` = :active AND `is_deleted` = :deleted AND `me`.`email_address` = :identity 1284 "; 1285 1286 // test identity as mail 1287 $resultMail = $this->getAdapter()->fetchRow($sqlMail, 1288 array('active' => self::MEMBER_ACTIVE, 'deleted' => self::MEMBER_NOT_DELETED, 'identity' => $identity)); 1289 if ((false !== $resultMail) AND (count($resultMail) > 0)) { 1290 return $this->generateRowClass($resultMail); 1291 } 1292 1293 return $this->createRow(); 1294 } 1295 1296 public function getMembersAvatarOldAutogenerated($orderby = 'member_id desc', $limit = null, $offset = null) 1297 { 1298 $sql = " 1299 SELECT * FROM `tmp_member_avatar_unknow` 1300 "; 1301 1302 1303 if (isset($orderby)) { 1304 $sql = $sql . ' order by ' . $orderby; 1305 } 1306 1307 if (isset($limit)) { 1308 $sql .= ' limit ' . (int)$limit; 1309 } 1310 1311 if (isset($offset)) { 1312 $sql .= ' offset ' . (int)$offset; 1313 } 1314 1315 $resultSet = $this->_db->fetchAll($sql); 1316 1317 return $resultSet; 1318 } 1319 1320 public function getMembersAvatarOldAutogeneratedTotalCount() 1321 { 1322 $sql = " 1323 select count(1) as cnt 1324 from tmp_member_avatar_unknow 1325 "; 1326 $result = $this->getAdapter()->query($sql, array())->fetchAll(); 1327 1328 return $result[0]['cnt']; 1329 } 1330 1331 public function updateAvatarTypeId($member_id, $type_id) 1332 { 1333 $sql = " 1334 update member set avatar_type_id = :type_id where member_id = :member_id 1335 "; 1336 $this->getAdapter()->query($sql, array('type_id' => $type_id, 'member_id' => $member_id)); 1337 } 1338 1339 /** 1340 * @param $userData 1341 * @param $uuidMember 1342 * 1343 * @return string 1344 * @throws Exception 1345 */ 1346 protected function generateIdentIcon_old($userData, $uuidMember) 1347 { 1348 $identIcon = new Local_Tools_Identicon(); 1349 $tmpImagePath = IMAGES_UPLOAD_PATH . 'tmp/' . $uuidMember . '.png'; 1350 imagepng($identIcon->renderIdentIcon(sha1($userData['mail']), 1100), $tmpImagePath); 1351 1352 $imageService = new Default_Model_DbTable_Image(); 1353 $imageFilename = $imageService->saveImageOnMediaServer($tmpImagePath); 1354 1355 return $imageFilename; 1356 } 1357 1358 /** 1359 * @param int $member_id 1360 * 1361 * @throws Exception 1362 * @deprecated since we're using solr server for searching 1363 */ 1364 private function removeMemberProjectsFromSearch($member_id) 1365 { 1366 $modelProject = new Default_Model_Project(); 1367 $memberProjects = $modelProject->fetchAllProjectsForMember($member_id); 1368 $modelSearch = new Default_Model_Search_Lucene(); 1369 foreach ($memberProjects as $memberProject) { 1370 $product = array(); 1371 $product['project_id'] = $memberProject->project_id; 1372 $product['project_category_id'] = $memberProject->project_category_id; 1373 $modelSearch->deleteDocument($product); 1374 } 1375 } 1376 1377 public static function cleanAuthMemberForJson(array $authMember) 1378 { 1379 if (empty($authMember)) { 1380 return $authMember; 1381 } 1382 1383 $unwantedKeys = array( 1384 'mail' => 0, 1385 'firstname' => 0, 1386 'lastname' => 0, 1387 'street' => 0, 1388 'zip' => 0, 1389 'phone' => 0, 1390 'paypal_mail' => 0, 1391 'gravatar_email' => 0, 1392 'source_pk' => 0, 1393 'source_id' => 0, 1394 'password_old' => 0, 1395 'password_type_old' => 0, 1396 'username_old' => 0, 1397 'mail_old' => 0 1398 ); 1399 1400 $authMember = array_diff_key($authMember, $unwantedKeys); 1401 1402 return $authMember; 1403 } 1404 }