| <?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(){ |
| global $App; |
| $this->App = $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', |
| ), |
| 'solutions' => array( |
| 'content_class' => 'tab-pane', |
| 'level' => 'solutions', |
| 'list_class' => '', |
| 'members' => array(), |
| 'img' => '/membership/images/type/solutions-members.png', |
| 'title' => 'Solutions Members', |
| ), |
| 'associate' => array( |
| 'content_class' => 'tab-pane', |
| 'level' => 'associate', |
| 'list_class' => '', |
| 'members' => array(), |
| 'img' => '/membership/images/type/associate-members.png', |
| 'title' => 'Associate 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')"; |
| |
| 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 = $this->_mb_convert_encoding($row); |
| $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 = '/membership/images/eclipse-mp-member-144x69.png'; |
| if (!empty($row['small_logo'])) { |
| $small_logo_src = 'data:' . $row['small_mime'] . ';base64,' . base64_encode($row['small_logo']); |
| } |
| |
| $large_logo_src = '/membership/images/eclipse-mp-member-144x69.png'; |
| 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['small_logo_link'] .= '<img src="' . $small_logo_src . '" title="' . $row['name'] . '" class="img-responsive"/>'; |
| $row['large_logo_link'] .= '<img src="' . $large_logo_src . '" title="' . $row['name'] . '" class="img-responsive"/>'; |
| |
| 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': |
| $this->members['solutions']['members'][] = $row; |
| break; |
| case 'AS': |
| $this->members['associate']['members'][] = $row; |
| break; |
| case 'ENTRP': |
| $this->members['enterprise']['members'][] = $row; |
| break; |
| case 'SD' || '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 = $this->_mb_convert_encoding($row); |
| $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 = $this->_mb_convert_encoding($row); |
| $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 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)) { |
| $row = $this->_mb_convert_encoding($row); |
| $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; |
| } |
| |
| /** |
| * Fix db encoding problems |
| * |
| * @param unknown $row |
| * @return unknown |
| */ |
| private function _mb_convert_encoding($row){ |
| foreach($row as $key => &$r) { |
| if ($key != 'large_logo' && $key != 'small_logo') { |
| $r = mb_convert_encoding($r, 'Windows-1252', 'UTF-8'); |
| } |
| } |
| return $row; |
| } |
| |
| /** |
| * 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); |
| } |
| } |