Jump to content

Recommended Posts

Posted

Last Location in Badge

Tested on phpvms 2.1 (940)

IT DOESN'T WILL WORK IF YOU DIDN'T SEND PIREP!

core\common\PilotData.class.php

1. After (LINE 956)

$pilot = self::getPilotData($pilotid);

add this code 

$last_location = PIREPData::getLastReports($pilotid, 1, PIREP_ACCEPTED);

2. After  (LINE 974)

$output[] = 'Total Hours: ' . $totalhours;

add this code

$output[] = 'Last Location: ' . $last_location->arricao;

Download: 

PilotData.class.php

Should look like this:


1.

      $pilot = self::getPilotData($pilotid);
       $last_location = PIREPData::getLastReports($pilotid, 1, PIREP_ACCEPTED); 
      $pilotcode = self::getPilotCode($pilot->code, $pilot->pilotid);



2.

        $output[] = $pilotcode.' '. $pilot->firstname.' '.$pilot->lastname;
        $output[] = $pilot->rank.', '.$pilot->hub;
        $output[] = 'Total Flights: ' . $pilot->totalflights;
        $output[] = 'Total Hours: ' . $totalhours;
       $output[] = 'Last Location: ' . $last_location->arricao;


post-424-127185988855_thumb.png

  • Like 1
  • 3 weeks later...
  • 4 weeks later...
Posted

Sorry guys,

But it does't seem to wanna work for me using v2.1.934

Has the codeing changed ?

Any suggestions would be most appreciative.

Thanks in advance.

Adam

Posted

Sorry guys,

But it does't seem to wanna work for me using v2.1.934

Has the codeing changed ?

Any suggestions would be most appreciative.

Thanks in advance.

Adam

Same with me aswell, all it says is: Last Location.

I have done lots of flights

Posted

I am using fivedev hosting and it still isnt working.

Code:

<?php
/**
* phpVMS - Virtual Airline Administration Software
* Copyright (c) 2008 Nabeel Shahzad
* For more information, visit www.phpvms.net
*	Forums: http://www.phpvms.net/forum
*	Documentation: http://www.phpvms.net/docs
*
* phpVMS is licenced under the following license:
*   Creative Commons Attribution Non-commercial Share Alike (by-nc-sa)
*   View license.txt in the root, or visit http://creativecommons.org/licenses/by-nc-sa/3.0/
*
* @author Nabeel Shahzad
* @copyright Copyright (c) 2008, Nabeel Shahzad
* @link http://www.phpvms.net
* @license http://creativecommons.org/licenses/by-nc-sa/3.0/
*/

class PilotData extends CodonData
{

public static $pilot_data = array();


/**
 * Find any pilots based on the parameters passed in
 *
 * @param array $params All the parameters
 * @param int $limit Number of results to return
 * @param int $start Record to start from
 * @return array Returns all the pilots requested
 *
 */
public static function findPilots($params, $limit='', $start = '')
{
	$sql = "SELECT p.*, r.`rankimage`, r.`payrate`
			FROM ".TABLE_PREFIX."pilots p
			LEFT JOIN ".TABLE_PREFIX."ranks r ON r.rank=p.rank ";

	/* Build the select "WHERE" based on the columns passed, this is a generic function */
	$sql .= DB::build_where($params);

	// Order matters
	if(Config::Get('PILOT_ORDER_BY') != '')
	{
		$sql .= ' ORDER BY '.Config::Get('PILOT_ORDER_BY');
	}

	if(strlen($limit) != 0)
	{
		$sql .= ' LIMIT '.$limit;
	}

	if(strlen($start) != 0)
	{
		$sql .= ' OFFSET '. $start;
	}

	$ret = DB::get_results($sql);
	return $ret;
}

/**
 * Get all the pilots, or the pilots who's last names start
 * with the letter
 */
public static function getAllPilots($letter='')
{
	$params = array();

	if(!empty($letter))
	{
		$params['lastname'] = $letter.'%';
	}

	return self::findPilots($params);
}

/**
 * Get all the detailed pilot's information
 */
public static function getAllPilotsDetailed($limit=20, $start='')
{
	return self::findPilots(array(), $limit, $start);
}

/**
 * Get a pilot's avatar
 */
public static function getPilotAvatar($pilotid)
{
	if(is_numeric($pilotid))
	{
		$pilot = self::getPilotData($pilotid);
		$last_location = PIREPData::getLastReports($pilotid, 1, PIREP_ACCEPTED);
		$pilotid = self::getPilotCode($pilot->code, $pilot->pilotid);
	}

	$link = AVATAR_PATH.'/'.$pilotid.'.png';

	if(!file_exists(SITE_ROOT.'/'.$link))
	{
		return SITE_URL.'/lib/images/noavatar.png';
	}

	return SITE_URL.'/'.$link;
}

/**
 * Get all the pilots on a certain hub
 */
public static function getAllPilotsByHub($hub)
{
	return self::findPilots(array('p.hub'=>$hub));
}

/**
 * Return the pilot's code (ie DVA1031), using
 * the code and their DB ID
 */
public static function getPilotCode($code, $pilotid)
{
	# Make sure values are entered
	if(Config::Get('PILOTID_LENGTH') == '')
		Config::Set('PILOTID_LENGTH', 4);

	if(Config::Get('PILOTID_OFFSET') == '')
		Config::Set('PILOTID_OFFSET', 0);

	$pilotid = $pilotid + Config::Get('PILOTID_OFFSET');
	return $code . str_pad($pilotid, Config::Get('PILOTID_LENGTH'), '0', STR_PAD_LEFT);
}

/**
 * The the basic pilot information
 * Quasi 'cached' in case it's called multiple times
 * for the same pilot in one script
 */
public static function getPilotData($pilotid)
{	
	$pilot = self::findPilots(array('p.pilotid' => $pilotid), 1);

	if(!$pilot)
	{
		return false;
	}

	return $pilot[0];
}

/**
 * Get a pilot's information by email
 */
public static function getPilotByEmail($email)
{
	$pilot = self::findPilots(array('p.email'=>$email));
	if(!$pilot)
	{
		return false;
	}

	return $pilot[0];
}


/**
 * Parse a pilot ID from a passed ID
 *
 * @param int $pilotid Pass the ID string
 * @return int Returns the integer database ID
 *
 */
public static function getProperPilotID($pilotid)
{
	return self::parsePilotID($pilotid);
}

/**
 * Parse a pilot ID from a passed ID
 *
 * @param int $pilotid Pass the ID string
 * @return int Returns the integer database ID
 *
 */
public static function parsePilotID($pilotid)
{
	if(!is_numeric($pilotid))
	{
		$airlines = OperationsData::getAllAirlines();
		foreach($airlines as $a)
		{
			$a->code = strtoupper($a->code);

			if(strpos($pilotid, $a->code) === false)
			{
				continue;
			}


			$pilotid = intval(str_ireplace($a->code, '', $pilotid));
			$pilotid = $pilotid - Config::Get('PILOTID_OFFSET');
		}
	}

	return $pilotid;
}

/**
 * Get the list of all the pending pilots
 */
public static function getPendingPilots($count='')
{
	$params = array(
		'p.confirmed' => PILOT_PENDING
	);

	return self::findPilots($params, $count);
}

public static function getLatestPilots($count=10)
{
	$sql = 'SELECT * FROM '.TABLE_PREFIX.'pilots
			ORDER BY `pilotid` DESC
			LIMIT '.$count;

	return DB::get_results($sql);
}

/**
 * Change a pilot's name. This is separate because this is an
 *  admin-only operation (strictly speaking), and isn't included
 *  in a normal change of a pilot's profile (whereas SaveProfile
 *  only changes minute information
 */

public static function changeName($pilotid, $firstname, $lastname)
{
	# Non-blank
	if(empty($pilotid) || empty($firstname) || empty($lastname))
	{
		return false;
	}

	$params = array(
		'firstname' => $firstname,
		'lastname' => $lastname,
	);

	return self::updateProfile($pilotid, $params);
}

public static function changePilotID($old_pilotid, $new_pilotid)
{
	$pilot_exists = self::getPilotData($new_pilotid);
	if(is_object($pilot_exists))
	{
		return false;
	}

	DB::query('SET foreign_key_checks = 0;');
	// List of all the tables which need to update
	$table_list = array(
		'groupmembers',
		'pilots',
		'adminlog',
		'awardsgranted',
		'acarsdata',
		'sessions',
		'pireps',
		'pirepcomments',
		'fieldvalues',
		'bids',
	);

	foreach($table_list as $table)
	{
		$sql = 'UPDATE `'.TABLE_PREFIX.$table.'`
				SET `pilotid`='.$new_pilotid.'
				WHERE `pilotid`='.$old_pilotid;

		DB::query($sql);
		//DB::debug();
	}

	return true;
}

public static function changePilotRank($pilotid, $rankid)
{
	$rank = RanksData::getRankInfo($rankid);
	$rank_level = RanksData::getRankLevel($rankid);
	if(!$rank)
	{
		return false;
	}

	$data = array(
		'rankid' => $rank->rankid, 
		'rank' => $rank->rank,
		'ranklevel' => $rank_level,
	);

	return self::updateProfile($pilotid, $data);
}

/**
 * Save any changes to a pilot's profile, calls updateProfile()
 * 
 * @deprecated Use updateProfile() instead!!
 * 
 */
/*public static function saveProfile($params)
{
	$pilotid = $params['pilotid'];
	unset($params['pilotid']);

	return self::updateProfile($pilotid, $params);
}*/


/**
 * Update a pilot, $params is an array of column_name=>value
 *
 * @param mixed $pilotid This is a description
 * @param mixed $params This is a description
 * @return mixed This is the return value description
 *
 */
public static function updateProfile($pilotid, $params)
{
	/*$params = array(			
		'pilotid' => '',
		'code' => '',
		'email' => '',
		'location' => '',
		'hub' => '',
		'bgimage' => '',
		'retired' => false,
	);*/


	if(!is_array($params))
	{
		return false;
	}

	/* Cleanup any specific parameters */	
	if(isset($params['location']))
	{	
		$params['location'] = strtoupper($params['location']);
	}

	if(isset($params['retired']))
	{
		if(is_bool($params['retired']))
		{
			//$params['retired'] = intval($params['retired']);

			# The above doesn't work for false =\
			if($params['retired'] == true)
				$params['retired'] = 1;
			else
				$params['retired'] = 0;
		}
	}

	if(isset($params['pilotid']))
	{
		unset($params['pilotid']);
	}

	$sql = "UPDATE ".TABLE_PREFIX."pilots SET ";
	$sql .= DB::build_update($params);
	$sql .= " WHERE `pilotid`={$pilotid}";

	$res = DB::query($sql);

	if(DB::errno() != 0)
	{
		return false;
	}

	return true;
}

public static function updatePilotRankLevels()
{
	$all_pilots = self::findPilots(array());

	foreach($all_pilots as $pilot)
	{
		$rank_level = RanksData::getRankLevel($pilot->rankid);
		self::updateProfile($pilot->pilotid, array('ranklevel'=>$rank_level));
	}
}

public static function setPilotRetired($pilotid, $retired)
{
	if($retired === true || $retired == '1')
	{
		$retired = 1;
	}
	else
	{
		$retired = 0;
	}

	return self::updateProfile($pilotid, array('retired'=>$retired));
}


/**
 * Returns an array with a list of background images available
 *
 * @return array The background images list
 *
 */
public static function getBackgroundImages()
{
	$list = array();
	$files = scandir(SITE_ROOT.'/lib/signatures/background');

	foreach($files as $file)
	{   
		if($file == '.' || $file == '..') continue;

		if(strstr($file, '.png') !== false)
			$list[] = $file;
	}

	return $list;
}

/**
 * Save avatars
 */
public static function saveAvatar($code, $pilotid, $_FILES)
{
	# Check the proper file size
	#  Ignored for now since there is a resize
	/*if ($_FILES['avatar']['size'] > Config::Get('AVATAR_FILE_SIZE'))
	{
		return false;
	}*/

	if(!$_FILES['avatar']['type'])
		return false;

	# Create the image so we can convert it to PNG
	if($_FILES['avatar']['type'] == 'image/gif')
	{
		$img = imagecreatefromgif($_FILES['file']['tmp_name']);
	}
	elseif($_FILES['avatar']['type'] == 'image/jpeg' 
			|| $_FILES['avatar']['type'] == 'image/pjpeg')
	{
		$img = imagecreatefromjpeg($_FILES['avatar']['tmp_name']);
	}
	elseif($_FILES['avatar']['type'] == 'image/png')
	{
		$img = imagecreatefrompng($_FILES['avatar']['tmp_name']);
	}

	# Resize it
	$height = imagesy($img);
	$width = imagesx($img);

	$new_width = Config::Get('AVATAR_MAX_WIDTH');
	$new_height = floor( $height * ( Config::Get('AVATAR_MAX_HEIGHT') / $width ) );

	$avatarimg = imagecreatetruecolor($new_width, $new_height);
	imagecopyresized($avatarimg, $img, 0,0,0,0,$new_width, $new_height, $width, $height);

	# Output the file, to /lib/avatar/pilotcode.png
	$pilotCode = self::getPilotCode($code, $pilotid);
	imagepng($avatarimg, SITE_ROOT.AVATAR_PATH.'/'.$pilotCode.'.png');
	imagedestroy($img);
}

/**
 * Accept the pilot (allow them into the system)
 */
public static function AcceptPilot($pilotid)
{
	return self::updateProfile($pilotid, array('confirmed'=>PILOT_ACCEPTED, 'retired'=>'0'));
}

/**
 * Reject a pilot
 */
  	public static function RejectPilot($pilotid)
{
	return self::DeletePilot($pilotid);
}


/**
 * Completely delete a pilot	
 *
 * @param int $pilotid Pilot ID
 * @return mixed This is the return value description
 *
 */
public static function deletePilot($pilotid)
{
	$sql = array();
	unset(self::$pilot_data[$pilotid]);

	$sql[] = 'DELETE FROM '.TABLE_PREFIX.'acarsdata WHERE pilotid='.$pilotid;
	$sql[] = 'DELETE FROM '.TABLE_PREFIX.'bids WHERE pilotid='.$pilotid;
	$sql[] = 'DELETE FROM '.TABLE_PREFIX.'pireps WHERE pilotid='.$pilotid;
	$sql[] = 'DELETE FROM '.TABLE_PREFIX.'pilots WHERE pilotid='.$pilotid;

	# These SHOULD delete on cascade, but incase they don't
	$sql[] = 'DELETE FROM '.TABLE_PREFIX.'fieldvalues WHERE pilotid='.$pilotid;
	$sql[] = 'DELETE FROM '.TABLE_PREFIX.'groupmembers WHERE pilotid='.$pilotid;
	$sql[] = 'DELETE FROM '.TABLE_PREFIX.'pirepcomments WHERE pilotid='.$pilotid;

	foreach($sql as $query)
	{
		$res = DB::query($query);
	}

	if(DB::errno() != 0)
		return false;

	return true;
}

/**
 * Update the login time
 */
public static function updateLogin($pilotid)
{
	return self::updateProfile($pilotid, array(
			'lastlogin'=>'NOW()', 
			'lastip' => $_SERVER['REMOTE_ADDR'],
		)
	);
}

public static function getPilotHours($pilotid)
{
	$sql = 'SELECT `flighttime` FROM '.TABLE_PREFIX.'pireps
			WHERE `accepted`='.PIREP_ACCEPTED.'
				AND `pilotid`='.$pilotid;

	$pireps = DB::get_results($sql);

	if(!$pireps)
		return '0.0';

	$total = 0;	
	foreach($pireps as $report)
	{
		$total = Util::AddTime($total, $report->flighttime);
	}

	return $total;	
}

/**
 * Get the total number of hours for a pilot, add them up
 *
 * @param int $pilotid The pilot ID
 * @return int Total hours for pilot
 *
 */
public static function updateFlightHours($pilotid)
{				
	$total = self::getPilotHours($pilotid);
	$ret = self::updateProfile($pilotid, array('totalhours'=>$total));
	return $total;
}

/**
 * Update a pilot's flight data, ie after a pirep
 *
 * @param int $pilotid Pilot ID
 * @param int $flighttime Number of hours.minutes to increment by
 * @param int $numflights Number of flights (default 1)
 * @return bool Success
 *
 */
public static function updateFlightData($pilotid, $flighttime, $numflights=1)
{	

	# Update the flighttime
	$pilotdata = PilotData::getPilotData($pilotid);		
	$flighttime = Util::AddTime($pilotdata->totalhours, $flighttime);

	if($numflights == '')
		$numflights = 1;

	$params = array(
		'totalhours' => $flighttime,
		'totalflights' => ($pilotdata->totalflights + $numflights),
	);

	return self::updateProfile($pilotid, $params);
}

public static function updatePilotStats($pilotid)
{
	$pireps = PIREPData::findPIREPS(array('p.pilotid'=>$pilotid));

	$totalpireps = 0;
	$totalhours = 0;

	if(is_array($pireps))
	{
		foreach($pireps as $p)
		{
			if($p->accepted != PIREP_ACCEPTED)
			{
				continue;
			}

			$totalpireps++;
			$totalhours = Util::AddTime($p->flighttime, $totalhours);
		}
	}


	$params = array(
		'totalhours'=>$totalhours,
		'totalflights'=>$totalpireps,
	);

	return self::updateProfile($pilotid, $params);
}


/**
 * Update the last PIREP date for a pilot
 *
 * @param int $pilotid Pilot ID
 * @return bool Success
 *
 */
public static function updateLastPIREPDate($pilotid)
{
	return self::updateProfile($pilotid, array('lastpirep'=>'NOW()'));
}

/**
 * Don't update the pilot's flight data, but just replace it
 * 	with the values given
 *
 * $data = array(
		'pilotid' => '',
		'flighttime' => '',
		'numflights' => '',
		'totalpay' => '',
		'transferhours' => '',
	);
 *
 * @param int $pilotid Pilot ID
 * @param int $flighttime Number of flight hours
 * @param int $numflights Number of flights
 * @param int $totalpay The total amount of money they have
 * @return bool Success
 *
 */
public static function replaceFlightData($params)
{
	/*$data = array(
		'pilotid' => '',
		'flighttime' => '',
		'numflights' => '',
		'totalpay' => '',
		'transferhours' => '',
	);*/

	$pilotid = $data['pilotid'];
	unset($data['pilotid']);

	return self::updateProfile($pilotid, $params);
}

public static function resetPilotPay($pilotid)
{
	$total = 0;

	self::updateProfile($pilotid, array('totalpay'=>0));

	$sql = "SELECT `pirepid`, `flighttime`, `pilotpay`
			FROM ".TABLE_PREFIX."pireps
			WHERE `pilotid`={$pilotid}";

	$results = DB::get_results($sql);

	if(!$results)
	{
		return $total;
	}

	foreach($results as $row)
	{
		$payupdate = self::getPilotPay($row->flighttime, $row->pilotpay);
		$total += $payupdate;
	}

	self::updateProfile($pilotid, array('totalpay'=>$total));

	return $total;
}

/**
 * Update a pilot's pay. Pass the pilot ID, and the number of
 * hours they are being paid for
 *
 * @param int $pilotid The pilot ID
 * @param int $flighthours Number of hours to pay the pilot for
 * @return bool Success
 *
 */
public static function updatePilotPay($pilotid, $flighthours)
{
	$sql = 'SELECT payrate 
				FROM '.TABLE_PREFIX.'ranks r, '.TABLE_PREFIX.'pilots p 
				WHERE p.rank=r.rank 
					AND p.pilotid='.$pilotid;

	$payrate = DB::get_row($sql);

	$payupdate = self::getPilotPay($flighthours, $payrate->payrate);

	$sql = 'UPDATE '.TABLE_PREFIX.'pilots 
				SET totalpay=totalpay+'.$payupdate.'
				WHERE pilotid='.$pilotid;

	DB::query($sql);

	if(DB::errno() != 0)
		return false;

	return true;	
}

/**
 * Get the total pay for a flight at a certain rate, 
 *	for a certain number of hours
 *
 * @param float $hours Number of hours in Hours.Minutes format
 * @param float $rate Hourly rate
 * @return float Returns the total
 *
 */
public static function getPilotPay($hours, $rate)
{
	/* Hours are in hours.minutes
		convert to minutes */
	$peices = explode('.', $hours);
	$minutes = ($peices[0] * 60) + $peices[1];
	$payupdate = $minutes * ($rate/60);

	return $payupdate;
}


/**
 * Find and set any pilots as retired
 *
 * @return mixed This is the return value description
 *
 */
public static function findRetiredPilots()
{
	$days = Config::Get('PILOT_INACTIVE_TIME');

	if($days == '')
		$days = 90;

	$sql = "SELECT * FROM ".TABLE_PREFIX."pilots
			WHERE DATE_SUB(CURDATE(), INTERVAL  {$days} DAY) > `lastlogin`  
				AND `totalflights` = 0 AND `lastlogin` != 0
				AND `retired` = 0";

	$results = DB::get_results($sql);

	$sql = "SELECT * FROM ".TABLE_PREFIX."pilots
			WHERE DATE_SUB(CURDATE(), INTERVAL  {$days} DAY) > `lastpirep` 
				AND `totalflights` > 0 AND `lastpirep` != 0
				AND `retired` = 0";

	$results2 = DB::get_results($sql);

	// messy but two queries, merge them both
	if(!is_array($results) && !is_array($results2))
	{
		return false;
	}
	else
	{
		if(is_array($results) && is_array($results2))
		{
			$results = array_merge($results, $results2);
		}

		if(!is_array($results) && is_array($results2))
		{
			$results = $results2;
		}
	}

	if(!$results)
	{
		return false;
	}

	foreach($results as $row)
	{
		// Set them retired
		self::updateProfile($row->pilotid, array('retired'=>1));

		Template::Set('pilot', $row);
		$pilot_retired_template = Template::Get('email_pilot_retired.tpl', true, true, true);

		Util::SendEmail($row->email, Lang::get('email.pilot.retired.subject'), $pilot_retired_template);
	}
}


/**
 * This saves all of the custom fields attributed to pilot
 * Pass an associated array (fieldname NOT title) to value
 *
 * @param int $pilotid Pilot ID
 * @param array $list fieldname=>fieldvalue associated array
 * @return bool Success value
 *
 */
public static function SaveFields($pilotid, $list)
{
	$allfields = RegistrationData::getCustomFields(true);

	if(!$allfields)
		return true;

	foreach($allfields as $field)
	{
		$sql = 'SELECT id FROM '.TABLE_PREFIX.'fieldvalues 
					WHERE fieldid='.$field->fieldid.' 
						AND pilotid='.$pilotid;

		$res = DB::get_row($sql);

		$fieldname =str_replace(' ', '_', $field->fieldname);

		if(!isset($list[$fieldname]))
			continue;

		$value = $list[$fieldname];

		// if it exists
		if($res)
		{
			$sql = 'UPDATE '.TABLE_PREFIX.'fieldvalues
						SET value="'.$value.'" 
						WHERE fieldid='.$field->fieldid.' AND pilotid='.$pilotid;
		}
		else
		{
			$sql = "INSERT INTO ".TABLE_PREFIX."fieldvalues
					(fieldid, pilotid, value) VALUES ($field->fieldid, $pilotid, '$value')";
		}

		DB::query($sql);
	}

	return true;
}

/**
 * Get all of the custom fields and values for a pilot
 *
 * @param int $pilotid The pilot ID
 * @param bool $inclprivate TRUE to also include private fields (default false)
 * @return array Returns all of the fields (names and values)
 *
 */
public static function getFieldData($pilotid, $inclprivate=false)
{
	$sql = 'SELECT f.fieldid, f.title, f.type, f.fieldname, f.value as fieldvalues, v.value, f.public
				FROM '.TABLE_PREFIX.'customfields f
				LEFT JOIN '.TABLE_PREFIX.'fieldvalues v
					ON f.fieldid=v.fieldid
					AND v.pilotid='.$pilotid;

	if($inclprivate == false)
		$sql .= ' WHERE f.public=1 ';

	return DB::get_results($sql);
}


/**
 * Get the value of a "custom field" for a pilot
 *
 * @param int $pilotid The pilot ID
 * @param string $title Full title of field, as enter "VATSIM ID"
 * @return string Returns the value of that field
 *
 */
public static function getFieldValue($pilotid, $title)
{
	$sql = "SELECT f.fieldid, v.value 
				FROM ".TABLE_PREFIX."customfields f, ".TABLE_PREFIX."fieldvalues v 
				WHERE f.fieldid=v.fieldid 
					AND f.title='$title' 
					AND v.pilotid=$pilotid";

	$res = DB::get_row($sql);
	return $res->value;
}


/**
 * Get all of the groups a pilot is a member of
 *
 * @param int $pilotid The pilot ID
 * @return array Groups the pilot is in (groupid and groupname)
 *
 */
public static function getPilotGroups($pilotid)
{
	$pilotid = DB::escape($pilotid);

	$sql = 'SELECT g.groupid, g.name
				FROM ' . TABLE_PREFIX . 'groupmembers u,'.TABLE_PREFIX.'groups g
				WHERE u.pilotid='.$pilotid.' AND g.groupid=u.groupid';

	$ret = DB::get_results($sql);

	return $ret;
}

/**
 * This generates the forum signature of a pilot which
 *  can be used wherever. It's dynamic, and adjusts it's
 *  size, etc based on the background image.
 * 
 * Each image is output into the /lib/signatures directory,
 *  and is named by the pilot code+number (ie, VMA0001.png)
 * 
 * This is called whenever a PIREP is accepted by an admin,
 *  as not to burden a server with image generation
 * 
 * Also requires GD to be installed on the server
 * 
 * @param int The pilot ID for which to generate a signature for
 * @return bool Success
 */	 
public function generateSignature($pilotid)
{
	$pilot = self::getPilotData($pilotid);
	$pilotcode = self::getPilotCode($pilot->code, $pilot->pilotid);

	if(Config::Get('TRANSFER_HOURS_IN_RANKS') === true)
	{
		$totalhours = $pilot->totalhours + $pilot->transferhours;
	}
	else
	{
		$totalhours = $pilot->totalhours;
	}

	# Configure what we want to show on each line
	$output = array();
	$output[] = $pilotcode.' '. $pilot->firstname.' '.$pilot->lastname;
	$output[] = $pilot->rank.', '.$pilot->hub;
	$output[] = 'Total Flights: ' . $pilot->totalflights;
	$output[] = 'Total Hours: ' . $totalhours;

	if(Config::Get('SIGNATURE_SHOW_EARNINGS') == true)
	{
		$output[] = 'Total Earnings: ' . $pilot->totalpay;
		$output[] = 'Last Location: ' . $last_location->arricao;
	}

	# Load up our image
	# Get the background image the pilot selected
	if(empty($pilot->bgimage))
		$bgimage = SITE_ROOT.'/lib/signatures/background/background.png';
	else
		$bgimage = SITE_ROOT.'/lib/signatures/background/'.$pilot->bgimage;

	if(!file_exists($bgimage))
	{
		# Doesn't exist so use the default
		$bgimage = SITE_ROOT.'/lib/signatures/background/background.png';

		if(!file_exists($bgimage))
		{
			return false;
		}
	}

	$img = @imagecreatefrompng($bgimage);
	if(!$img)
	{
		$img = imagecreatetruecolor(300, 50);
	}

	$height = imagesy($img);
	$width = imagesx($img);

	$txtcolor = str_replace('#', '',  Config::Get('SIGNATURE_TEXT_COLOR'));
	$color = sscanf($txtcolor, '%2x%2x%2x');
	$textcolor = imagecolorallocate($img, $color[0], $color[1], $color[2]);
	$font = 3; // Set the font-size

	$xoffset = Config::Get('SIGNATURE_X_OFFSET'); # How many pixels, from left, to start
	$yoffset = Config::Get('SIGNATURE_Y_OFFSET'); # How many pixels, from top, to start

	$font = Config::Get('SIGNATURE_FONT_PATH');
	$font_size = Config::Get('SIGNATURE_FONT_SIZE');

	if(function_exists('imageantialias'))
	{
		imageantialias($img, true);
	}


	/* Font stuff */

	if(!function_exists('imagettftext'))
	{
		Config::Set('SIGNATURE_USE_CUSTOM_FONT', false);
	}

	# The line height of each item to fit nicely, dynamic

	if(Config::Get('SIGNATURE_USE_CUSTOM_FONT') == false)
	{
		$stepsize = imagefontheight($font);
		$fontwidth = imagefontwidth($font);
	}
	else
	{
		// get the font width and step size
		$bb = imagettfbbox  ( $font_size, 0, $font, 'A');

		$stepsize = $bb[3] - $bb[5] + Config::Get('SIGNATURE_FONT_PADDING');
		$fontwidth = $bb[2] - $bb[0];
	}


	$currline = $yoffset;
	$total = count($output);
	for($i=0;$i<$total;$i++)
	{		
		if(Config::Get('SIGNATURE_USE_CUSTOM_FONT') == false)
		{	
			imagestring($img, $font, $xoffset, $currline, $output[$i], $textcolor);	
		}
		else
		{
			// Use TTF
			$tmp = imagettftext($img, $font_size, 0, $xoffset, $currline, $textcolor, $font, $output[$i]);

			// Flag is placed at the end of of the first line, so have that bounding box there
			if($i==0)
			{
				$flag_bb = $tmp;
			}
		}

		$currline+=$stepsize;
	}

	# Add the country flag, line it up with the first line, which is the
	#	pilot code/name
	$country = strtolower($pilot->location);
	if(file_exists(SITE_ROOT.'/lib/images/countries/'.$country.'.png'))
	{
		$flagimg = imagecreatefrompng(SITE_ROOT.'/lib/images/countries/'.$country.'.png');

		if(Config::Get('SIGNATURE_USE_CUSTOM_FONT') == false)
		{	
			$ret = imagecopy($img, $flagimg, strlen($output[0])*$fontwidth, 
						($yoffset+($stepsize/2)-5.5), 0, 0, 16, 11);
		}
		else
		{
			# figure out where it would go 
			$ret = imagecopy($img, $flagimg, $flag_bb[4]+5, $flag_bb[5]+2, 0, 0, 16, 11);
		}
	}

	# Add the Rank image
	if(Config::Get('SIGNATURE_SHOW_RANK_IMAGE') == true && $pilot->rankimage!=''
			&& file_exists($pilot->rankimage))
	{
		$ext = substr($pilot->rankimage, strlen($pilot->rankimage)-3, 3);

		# Get the rank image type, just jpg, gif or png
		if($ext == 'png')
			$rankimg = @imagecreatefrompng($pilot->rankimage);
		elseif($ext == 'gif')
			$rankimg = @imagecreatefromgif($pilot->rankimage);
		else	
			$rankimg = @imagecreatefromjpg($pilot->rankimage);

		if(!$rankimg) { echo '';}
		else 
		{		
			$r_width = imagesx($rankimg);
			$r_height = imagesy($rankimg);

			imagecopy($img, $rankimg, $width-$r_width-$xoffset, $yoffset, 0, 0, $r_width, $r_height);
		}
	}	

	if(Config::Get('SIGNATURE_SHOW_COPYRIGHT') == true)
	{
		#
		#  DO NOT remove this, as per the phpVMS license
		$font = 1;
		$text = 'powered by phpvms, '. SITE_NAME.' ';
		imagestring($img, $font, $width-(strlen($text)*imagefontwidth($font)), 
					$height-imagefontheight($font), $text, $textcolor);
	}

	imagepng($img, SITE_ROOT.SIGNATURE_PATH.'/'.$pilotcode.'.png', 1);
	imagedestroy($img);
}
}

Posted

Just curious, can you post the code I used and the code you used?

I am sure I copied and pasted correctly!

at the first post I've send a corrected PilotData.class.php 

Posted

if you using free hosting, generating a signature is not working correctly, so we recommend that you use a paid hosting!

Have paid the same host for the past 5 years, its working now that you corrected the code.

Thanks very much!

  • 1 month later...
Posted

Hello, has all

I don't not arrive to insert the picture of the ranks of the pilots in the signature , exist you him a means to achieve insertion of the picture of the ranks.

Thank you for your help

Dom

  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...