blob: 90384bf00e5bec9f44493b735b15c0a76d172b46 [file] [log] [blame]
<?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,
if(V.field_version_value IS NULL ,'',V.field_version_value) 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_version as V on V.entity_id = N.nid and V.revision_id = N.vid
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']));
$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,
TD.field_trainingdesc_value as training,
CTT.field_consultingdesc_value as consulting
FROM node as N
INNER JOIN field_data_body as B on B.entity_id = N.nid and B.revision_id = N.vid
INNER JOIN field_data_field_trainingdesc as TD on TD.entity_id = N.nid and TD.revision_id = N.vid
INNER 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'] = $this->_ellipsis($row['teaser']);
$row['training'] = $this->_ellipsis($row['training']);
$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);
}
}