<?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"/>'; $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': 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); } }