| <?php | |
| /******************************************************************************* | |
| * Copyright (c) 2014, 2015 Eclipse Foundation and others. | |
| * All rights reserved. This program and the accompanying materials | |
| * are made available under the terms of the Eclipse Public License v1.0 | |
| * which accompanies this distribution, and is available at | |
| * http://www.eclipse.org/legal/epl-v10.html | |
| * | |
| * Contributors: | |
| * Christopher Guindon (Eclipse Foundation) - initial API and implementation | |
| *******************************************************************************/ | |
| require_once(realpath(dirname(__FILE__) . "/../../system/app.class.php")); | |
| class Membership { | |
| protected $App; | |
| /** | |
| * The member's id | |
| * @var string | |
| * */ | |
| protected $id = NULL; | |
| public $members = array(); | |
| /** | |
| * Member's profile info | |
| * @var array | |
| * */ | |
| public $profile = array(); | |
| private $current_name = NULL; | |
| /** | |
| * Result of the member id verification | |
| * @var bool | |
| * */ | |
| private $is_a_valid_member_id = NULL; | |
| /** | |
| * Member's current name | |
| * @var string | |
| * */ | |
| private $member_name = ""; | |
| function __construct(){ | |
| $this->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 <multitype:, multitype:string , boolean, multitype:unknown , multitype:multitype:string NULL >|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'] .= '<a href="/membership/showMember.php?member_id=' . $row['id'] .'" title="' . $row['name'] . '">'; | |
| } | |
| if (strpos($row['website'], 'http') === FALSE) { | |
| $row['website'] = 'http://'.$row['website']; | |
| } | |
| if (filter_var($row['website'], FILTER_VALIDATE_URL)) { | |
| $row['large_logo_website_link'] = '<a href="' . $row['website'] .'" title="' . $row['name'] . '" target="_blank">'; | |
| } | |
| $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'] .= '<img src="' . $large_logo_src . '" title="' . $row['name'] . '" class="img-responsive padding-bottom-25"/>'; | |
| } | |
| else{ | |
| $row['large_logo_website_link'] = '<h1>' . $row['name']. '</h1>'; | |
| } | |
| $row['large_logo_src'] = $large_logo_src; | |
| $row['small_logo_link'] .= '<img src="' . $small_logo_src . '" title="' . $row['name'] . '" class="img-responsive center-block"/>'; | |
| $row['large_logo_link'] .= '<img src="' . $large_logo_src . '" title="' . $row['name'] . '" class="img-responsive center-block"/>'; | |
| if (!empty($row['id'])) { | |
| $row['title_link'] .= '</a>'; | |
| $row['small_logo_link'] .= '</a>'; | |
| $row['large_logo_link'] .= '</a>'; | |
| } | |
| if (filter_var($row['website'], FILTER_VALIDATE_URL)) { | |
| $row['large_logo_website_link'] .= '</a>'; | |
| } | |
| 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); | |
| } | |
| } |