App = new App(); $this->members = array( 'strategic' => array( 'content_class' => 'tab-pane active', 'level' => 'strategic', 'list_class' => 'active', 'members' => array(), 'img' => '/membership/images/type/strategic-members.png', 'title' => 'Strategic Members', ), 'enterprise' => array( 'level' => 'enterprise', 'content_class' => 'tab-pane', 'list_class' => '', 'members' => array(), 'img' => '/membership/images/type/enterprise-members.png', 'title' => 'Enterprise Members', ), 'contributing' => array( 'content_class' => 'tab-pane', 'level' => 'contributing', 'list_class' => '', 'members' => array(), 'img' => '/membership/images/type/contributing-members.png', 'title' => 'Contributing Members', ), 'associate' => array( 'content_class' => 'tab-pane', 'level' => 'associate', 'list_class' => '', 'members' => array(), 'img' => '/membership/images/type/associate-members.png', 'title' => 'Associate Members', ), 'committer' => array( 'content_class' => 'tab-pane', 'level' => 'committer', 'list_class' => '', 'members' => array(), 'img' => '/membership/images/type/committer-members.png', 'title' => 'Committer Members', ) ); } /** * Set member id * * @param string $id * @return boolean */ function setId($id = NULL) { $options = array( 'options' => array('min_range' => 0) ); if (filter_var($id, FILTER_VALIDATE_INT, $options) !== FALSE) { $this->id = $id; return TRUE; } return FALSE; } /** * Fetch membership profile(s). * * If $this->id is set, it will return the profile for a specific member. * * @return Ambigous |boolean|multitype: */ public function fetchProfile() { $sql = "SELECT ORG.member_type, ORG.organization_id as id, ORG.name1 as name, ORGI.short_description as body, ORGI.long_description as full_text, ORG.member_type as type, ORGI.company_url IS NULL AS COMPLETE, ORGI.company_url AS website, ORGI.small_logo as small_logo, ORGI.large_logo as large_logo, ORGI.small_mime as small_mime, ORGI.large_mime as large_mime FROM organizations as ORG LEFT JOIN OrganizationInformation as ORGI on ORGI.OrganizationID = ORG.organization_id WHERE ORG.member_type in ('SD', 'SC', 'AP', 'AS', 'ENTRP', 'OHAP') and ORG.organization_id NOT IN (1322, 1324, 1325, 1328)"; if (!is_null($this->id)) { $sql .= " and ORG.organization_id = " . $this->App->returnQuotedString($this->App->sqlSanitize($this->id)); } $sql .= "ORDER BY ORG.name1"; $rs = $this->App->eclipse_sql($sql); while ($row = mysql_fetch_assoc($rs)) { $row['name'] = $this->App->checkPlain($row['name']); $row['body'] = stripcslashes($row['body']); $row['full_text'] = stripcslashes($row['full_text']); $row['title_link'] = ""; $row['small_logo_link'] = ""; $row['large_logo_link'] = ""; $row['large_logo_website_link'] = ""; if (!empty($row['id'])) { $row['small_logo_link'] = $row['large_logo_link'] = $row['title_link'] .= ''; } if (strpos($row['website'], 'http') === FALSE) { $row['website'] = 'http://'.$row['website']; } if (filter_var($row['website'], FILTER_VALIDATE_URL)) { $row['large_logo_website_link'] = ''; } $row['title_link'] .= $row['name']; $small_logo_src = ''; $large_logo_src = ''; switch($row['member_type']) { case 'AP': case 'OHAP': $small_logo_src = '/membership/images/type/contributing-members.png'; $large_logo_src = '/membership/images/type/contributing-members.png'; break; case 'AS': $small_logo_src = '/membership/images/type/associate-members.png'; $large_logo_src = '/membership/images/type/associate-members.png'; break; case 'SD': case 'SC': $small_logo_src = '/membership/images/type/strategic-members.png'; $large_logo_src = '/membership/images/type/strategic-members.png'; break; } if (!empty($row['small_logo'])) { $small_logo_src = 'data:' . $row['small_mime'] . ';base64,' . base64_encode($row['small_logo']); } $row['small_logo_src'] = $small_logo_src; if (!empty($row['large_logo'])) { $large_logo_src = 'data:' . $row['large_mime'] . ';base64,' . base64_encode($row['large_logo']); $row['large_logo_website_link'] .= ''; } else{ $row['large_logo_website_link'] = '

' . $row['name']. '

'; } $row['large_logo_src'] = $large_logo_src; $row['small_logo_link'] .= ''; $row['large_logo_link'] .= ''; if (!empty($row['id'])) { $row['title_link'] .= '
'; $row['small_logo_link'] .= ''; $row['large_logo_link'] .= ''; } if (filter_var($row['website'], FILTER_VALIDATE_URL)) { $row['large_logo_website_link'] .= ''; } switch($row['member_type']) { case 'AP': case 'OHAP': $this->members['contributing']['members'][] = $row; break; case 'AS': $this->members['associate']['members'][] = $row; break; case 'ENTRP': $this->members['enterprise']['members'][] = $row; break; case 'SD': case 'SC': $this->members['strategic']['members'][] = $row; break; } } if (!is_null($this->id)) { foreach($this->members as $level){ if (!empty($level['members'])) { $member = $level['members'][0]; unset($level['members']); $this->profile = array_merge($level, $member); $this->profile['mp_listings'] = $this->fetchMarketplaceListings(); $this->profile['mp_training'] = $this->fetchMarketplaceTrainingListings(); $this->profile['products'] = $this->fetchMemberProducts(); $this->profile['projects'] = $this->fetchMemberProjects(); return $this->profile; } } return FALSE; } return $this->members; } /** * Fetch Marketplace listing * * @return boolean|multitype:unknown */ function fetchMarketplaceListings() { if (is_null($this->profile)) { return FALSE; } $sql = " SELECT N.title, CTR.field_companyname_value as name, N.nid, CASE MAX(CAST(fv.field_version_value as INTEGER)) WHEN fv.field_version_value IS NULL THEN '' ELSE fv.field_version_value END as version, B.body_value as teaser FROM field_data_field_companyname as CTR INNER JOIN node as N on CTR.entity_id = N.nid LEFT JOIN field_data_field_resource_listing_release as fr on fr.entity_id = N.nid and fr.revision_id = N.vid LEFT JOIN field_revision_field_version as fv on fv.entity_id = fr.field_resource_listing_release_value and fv.revision_id = fr.field_resource_listing_release_revision_id INNER JOIN field_data_body as B on B.entity_id = N.nid and B.revision_id = N.vid WHERE N.status = 1 and CTR.field_companyname_value = "; $sql .= $this->App->returnQuotedString($this->App->sqlSanitize($this->profile['name'])); $sql .= " group by N.nid"; $result = $this->App->marketplace_sql($sql); $return = array(); while ($row = mysql_fetch_assoc($result)) { $row['teaser'] = $this->_ellipsis($row['teaser']); $return[] = $row; } return $return; } /** * Fetch Marketplace Training Listings * * @return multitype:|multitype:unknown */ function fetchMarketplaceTrainingListings(){ $return = array(); if (is_null($this->profile)) { return $return; } $sql = " SELECT N.title, N.nid, B.body_value as teaser, TU.field_trainingurl_value as training_url, TD.field_trainingdesc_value as training, CU.field_consultingurl_value as consulting_url, CTT.field_consultingdesc_value as consulting FROM node as N LEFT JOIN field_data_body as B on B.entity_id = N.nid and B.revision_id = N.vid LEFT JOIN field_data_field_trainingurl as TU on TU.entity_id = N.nid and TU.revision_id = N.vid LEFT JOIN field_data_field_trainingdesc as TD on TD.entity_id = N.nid and TD.revision_id = N.vid LEFT JOIN field_data_field_consultingurl as CU on CU.entity_id = N.nid and CU.revision_id = N.vid LEFT JOIN field_data_field_consultingdesc as CTT on CTT.entity_id = N.nid and CTT.revision_id = N.vid WHERE N.status = 1 AND N.type = 'training' AND N.title ="; $sql .= $this->App->returnQuotedString($this->App->sqlSanitize($this->profile['name'])); $result = $this->App->marketplace_sql($sql); while ($row = mysql_fetch_assoc($result)) { $row['teaser'] = empty($row['teaser']) ? '' : $this->_ellipsis($row['teaser']); $row['training'] = empty($row['training']) ? '' : $this->_ellipsis($row['training']); $row['consulting'] = empty($row['consulting']) ? '' : $this->_ellipsis($row['consulting']); $return[] = $row; } return $return; } /** * Fetch membership logo * * @return array */ public function fetchMemberLogo() { $unaccepted_ids = array(1322, 1324, 1325, 1328); if (empty($this->id) || in_array((int)$this->id, $unaccepted_ids)) { return array(); } $sql = "SELECT ORG.organization_id as id, ORGI.small_logo as small_logo, ORGI.large_logo as large_logo, ORGI.small_mime as small_mime, ORGI.large_mime as large_mime FROM organizations as ORG LEFT JOIN OrganizationInformation as ORGI on ORGI.OrganizationID = ORG.organization_id WHERE ORG.member_type in ('SD', 'SC', 'AP', 'AS', 'ENTRP', 'OHAP') and ORG.organization_id = " . $this->App->returnQuotedString($this->App->sqlSanitize($this->id)); $rs = $this->App->eclipse_sql($sql); while ($row = mysql_fetch_assoc($rs)) { $this->profile['logo_information'] = $row; } return $this->profile; } /** * Fetch Member products * * @return multitype:|multitype:unknown */ function fetchMemberProducts() { $return = array(); if (is_null($this->profile)) { return $return; } $sql = "SELECT ProductID as id, name as name, description as teaser, product_url as url FROM OrganizationProducts WHERE OrganizationID = "; $sql .= $this->App->returnQuotedString($this->App->sqlSanitize($this->profile['id'])); $sql .= " ORDER by ProductID"; $result = $this->App->eclipse_sql($sql); while ($row = mysql_fetch_assoc($result)) { $return[] = $row; } return $return; } /** * Fetch Member projects * @return multitype:|multitype:multitype:string NULL */ function fetchMemberProjects() { $sql = "select distinct project from ProjectCompanyActivity where orgId="; $sql .= $this->App->returnQuotedString($this->App->sqlSanitize($this->profile['id'])); $result = $this->App->dashboard_sql($sql); $data = array(); while ($row = mysql_fetch_assoc($result)) { if (preg_match('/^locationtech\.(.*)$/', $row['project'])) { $data['locationtech']['url'] = 'https://www.locationtech.org'; } elseif (preg_match('/^polarsys\.(.*)$/',$row['project'])) { $data['polarsys']['url'] = 'https://www.polarsys.org'; } else { $data['eclipse']['url'] = 'https://projects.eclipse.org'; } } $return = array(); if (!empty($data)) { foreach($data as &$forge) { if ($json = file_get_contents($forge['url'] . '/json/member/' . $this->profile['id'])){ $forge = array_merge(json_decode($json, TRUE), $forge); } else{ continue; } if (!empty($forge['projects'])) { foreach ($forge['projects'] as $project_id => $project){ $return[] = array( 'id' => $project_id, 'url' => $forge['url'] . '/projects/' . $project_id, 'name' => $project['name'], ); } } } } return $return; } /** * Getting the member's current name * @param string * */ public function getMemberName(){ if (is_null($this->current_name)) { $profile = $this->fetchProfile(); $this->setMemberName($profile['name']); } return $this->current_name; } /** * Find out if the member id is valid * @return bool * */ public function getIsAvalidMemberId(){ // If the id is null, verify it. if (!$this->is_a_valid_member_id) { $this->_verifyMemberId(); } return $this->is_a_valid_member_id; } /** * Setting the member's current name * @param string * */ protected function setMemberName($_val){ $this->current_name = $_val; } /** * Add elipsis to a string * * @param string $string * @return string */ private function _ellipsis($string = "") { return substr(strip_tags(html_entity_decode($string)), 0, 250) . "..."; } /** * Find out if the member id is valid * @param bool * */ private function _setIsAvalidMemberId($_val){ $this->is_a_valid_member_id = FALSE; if (is_bool($_val) === TRUE){ $this->is_a_valid_member_id = $_val; } } /** * Verify if the member id i valid * If not, an error message will be printed on the page * @param boolean * */ private function _verifyMemberId(){ // Select all the member ids from the database $sql = "SELECT org.organization_id as id FROM organizations as org"; $result = $this->App->eclipse_sql($sql); // Find out if the current member id is part of the results $_id_array = array(); while ($row = mysql_fetch_assoc($result)) { if($row['id'] == $this->id){ $_id_array[] = $row['id']; } } // IF there are no member ID found and the user CAN'T edit the page if (empty($_id_array)) { return $this->_setIsAvalidMemberId(FALSE); } return $this->_setIsAvalidMemberId(TRUE); } }