udt does not sort numbers correctly

Talk about writing modules and plugins for CMS Made Simple, or about specific core functionality. This board is for PHP programmers that are contributing to CMSMS not for site developers
Post Reply
ie8
New Member
New Member
Posts: 4
Joined: Tue Oct 18, 2011 8:14 pm

udt does not sort numbers correctly

Post by ie8 »

using cmsms 1.9.4.3
this cmsms content management system made simple
udt user defined term

has one column that sorts numbers
it sorts incorrectly by the first number and not the entire number
90
8000707
6
567


Code: Select all

global $gCms;
$feusers =& $gCms->modules['FrontEndUsers']['object'];
$comp_dir =& $gCms->modules['CompanyDirectory']['object'];
$download = true;
$db =& $gCms->GetDb();
debug_display($_POST);

$from = time();
switch($_POST['expiration'])
{
	case 'custom':
		$to = strtotime($_POST['custom_expiration']);
		if ( $date < time() ){ $from = $to;$to = time();}
		break;
	default:
		$to = strtotime('+ '.$_POST['expiration'].' days');
		break;
}
echo strftime('%D',$from).'---'.strftime('%D',$to);

if ( empty($_POST['status']) || $_POST['status'] == 'approved' || $_POST['status'] == 'tapproved')
{
	$query = "SELECT * FROM ".cms_db_prefix()."module_compdir_companies";
	$fquery = 'SELECT A.id,A.name,B.value FROM '.cms_db_prefix().'module_compdir_fielddefs A LEFT JOIN '.cms_db_prefix().'module_compdir_fieldvals B ON A.id = B.fielddef_id WHERE B.company_id = ?';

	$dbresult = $db->Execute($query);
	$csv_output = '';
	$delim = '|';
	$csv_lines = array();
	$option_type = array();
	$option_size = array();
	$i = 0;
	while($dbresult && $row=$dbresult->FetchRow())
	{	
		if ($_POST['master'] == 'true')
		{
			$members = array(array( 'userid' => $feusers->GetUserID($row['contact_email'] ) ));
		}
		else
		{
			$members = $feusers->GetUsersByProperties('company_id',$row['id']);
		}
		$categories = $db->GetArray("SELECT category_id FROM ".cms_db_prefix()."module_compdir_company_categories WHERE company_id = ?",array($row['id']));
		$cat_names = array();
		foreach($categories as $onecat)
		{
			switch ($onecat['category_id'])
			{
				case ('1'):	$cat_names[] = "Agency"; 		break;
				case ('2'):	$cat_names[] = "Consultant";		break;
				case ('3'):	$cat_names[] = "Service Provider";	break;
				case ('4'):	$cat_names[] = "TrainingClients"; 	break;
				case ('5'):	$cat_names[] = "Conference"; 	break;
			}
		}
		$company_type = implode(', ', $cat_names);
		if (!empty($company_type) ) $option_type[str_replace(array(',',' '),'', $company_type)] = $company_type;
		if(!empty($_POST['type']) && str_replace(array(',',' '),'', $company_type) != $_POST['type'] )  continue;
		$tmp1 = $db->GetArray($fquery,array($row['id']));
		$company_fields = $comp_dir->array_to_hash( $tmp1, 'name' );
		
		if (!empty($company_fields['Size office']['value']) ) $option_size[str_replace(array(',',' ','-'),'', $company_fields['Size office']['value'])] = $company_fields['Size office']['value'];
		if(!empty($_POST['size']) && str_replace(array(',',' ','-'),'', $company_fields['Size office']['value']) != $_POST['size'] )  continue;

		if ($_POST['payment'] == 'check'  ) continue;
		if ($_POST['payment'] == 'cc' && $company_fields['Amount Charged']['value'] == 'manually' ) continue;


		foreach($members as $onemember)
		{
			if ($_POST['status'] == 'approved' && $feusers->MemberOfGroup($onemember['userid'], '27') ) continue;
			if ($_POST['status'] == 'tapproved' && !$feusers->MemberOfGroup($onemember['userid'], '27')  ) continue;

			$user = $feusers->GetUserInfo($onemember['userid']);
			if( !empty($_POST['expiration']) )
			{
				if( strtotime($user[1]['expires']) < $from  || strtotime($user[1]['expires']) > $to ) continue;
			}
			if ($_POST['master'] == 'false' && strtoupper(trim($row['contact_email'])) == strtoupper(trim($user[1]['username']))) continue;

				//if ( $feusers->IsAccountExpired($onemember['userid']) ) continue;
			if ( isset($csv_lines[$onemember['userid']]) ) $csv_lines[$onemember['userid']] = array();

			$properties = $feusers->GetUserProperties($onemember['userid']);
			$props = $comp_dir->array_to_hash($properties, 'title');
			
			if(!empty($_POST['companyname']) && stripos($row['company_name'], $_POST['companyname']) === false )  continue;
			if(!empty($_POST['firstname']) && stripos($props['first_name']['data'], $_POST['firstname']) === false )  continue;
			if(!empty($_POST['lastname']) && stripos($props['last_name']['data'], $_POST['lastname']) === false )  continue;
			if(!empty($_POST['city']) && stripos($props['city']['data'], $_POST['city']) === false )  continue;

			switch ($company_fields['Payment Method']['value'])
			{
				case 'monthly':
					$new_renewal = mktime(date("H",$company_fields['RenewalDate']['value']),date("i",$company_fields['RenewalDate']['value']),date("s",$company_fields['RenewalDate']['value']),date("n",$company_fields['RenewalDate']['value'])+1,date("j",$company_fields['RenewalDate']['value']),date("Y",$company_fields['RenewalDate']['value']) );
					break;
				case 'quarterly':
					$new_renewal = mktime(date("H",$company_fields['RenewalDate']['value']),date("i",$company_fields['RenewalDate']['value']),date("s",$company_fields['RenewalDate']['value']),date("n",$company_fields['RenewalDate']['value'])+3,date("j",$company_fields['RenewalDate']['value']),date("Y",$company_fields['RenewalDate']['value']) );
					break;
				case 'annually':
				case 'check':
					$new_renewal = mktime(date("H",$company_fields['RenewalDate']['value']),date("i",$company_fields['RenewalDate']['value']),date("s",$company_fields['RenewalDate']['value']),date("n",$company_fields['RenewalDate']['value']),date("j",$company_fields['RenewalDate']['value']),date("Y",$company_fields['RenewalDate']['value'])+1 );
					break;
			}

			$csv_lines[$onemember['userid']][] = $onemember['userid'];
			$csv_lines[$onemember['userid']][] = $user[1]['username'];
			$csv_lines[$onemember['userid']][] = $row['company_name'];
			$csv_lines[$onemember['userid']][] =  $props['phone']['data'];
			$csv_lines[$onemember['userid']][] =  $props['last_name']['data'];
			$csv_lines[$onemember['userid']][] = $props['first_name']['data'];
			//$csv_lines[$onemember['userid']][] = $row['address'];
			$csv_lines[$onemember['userid']][] = $company_fields['Company City']['value'];
			$csv_lines[$onemember['userid']][] = $company_fields['Company State']['value'];
			//$csv_lines[$onemember['userid']][] = $company_fields['Country']['value'];
			//$csv_lines[$onemember['userid']][] = $company_fields['Zip']['value'];
			(strtoupper(trim($row['contact_email'])) == strtoupper(trim($user[1]['username'])))?$csv_lines[$onemember['userid']][] ='Master':$csv_lines[$onemember['userid']][] = '';
			($feusers->MemberOfGroup($onemember['userid'], '27') )?$csv_lines[$onemember['userid']][] ='T Approved':$csv_lines[$onemember['userid']][] = 'A Approved';
			//$csv_lines[$onemember['userid']][] = $props['title_input']['data'];
			//$csv_lines[$onemember['userid']][] = $props['phone']['data'];
			$csv_lines[$onemember['userid']][] = strftime('%F',strtotime($user[1]['expires']));
			$csv_lines[$onemember['userid']][] = $company_fields['Payment Method']['value'];
			$csv_lines[$onemember['userid']][] = $company_fields['Amount Charged']['value'];
			$csv_lines[$onemember['userid']][] = '';	//$company_fields['ExpireNotify']['value'];
			//$csv_lines[$onemember['userid']][] = $company_fields['Sub_Card']['value'];
			$csv_lines[$onemember['userid']][] = (empty($new_renewal))?'':strftime('%F',$new_renewal );
			$csv_lines[$onemember['userid']][] = strftime('%F',strtotime($user[1]['createdate']));
			$csv_lines[$onemember['userid']][] = $company_fields['Size office']['value'];
			$csv_lines[$onemember['userid']][] = $company_type;

		}
		
	}
}
if ( (empty($_POST['status']) || !($_POST['status'] == 'approved' || $_POST['status'] == 'tapproved') )  && (empty($_POST['type']) || $_POST['type'] == 'Agency') )
{
	$pending_users = $feusers->GetFullUsersInGroup('6');
	foreach($pending_users as $userid => $one_user)
	{
		if ($_POST['payment'] == 'check'  ) continue;
		if ( ($_POST['status'] == 'started' ||  $_POST['status'] == 'tstarted') && !$feusers->MemberOfGroup($userid, '15') ) continue;
		if ( ($_POST['status'] == 'billing' ||  $_POST['status'] == 'tbilling') && $feusers->MemberOfGroup($userid, '15') ) continue;
		if ( ($_POST['status'] == 'billing' ||  $_POST['status'] == 'started') &&  $feusers->MemberOfGroup($userid, '27') ) continue;
		if ( ($_POST['status'] == 'tbilling' ||  $_POST['status'] == 'tstarted')&&  !$feusers->MemberOfGroup($userid, '27') ) continue;

		if ($_POST['master'] == 'false' && ($feusers->MemberOfGroup($userid, '3') ||  $feusers->MemberOfGroup($userid, '27')) ) continue;
		if ($_POST['master'] == 'true' && !($feusers->MemberOfGroup($userid, '3') ||  $feusers->MemberOfGroup($userid, '27')) ) continue;
		if( !empty($_POST['expiration']) )
		{
			if( strtotime($one_user['expires']) < $from  || strtotime($one_user['expires']) > $to ) continue;  
			
		}
		$props = $comp_dir->array_to_hash($one_user['props'], 'title');
		if(!empty($_POST['companyname']) && stripos($props['Company_Name']['data'], $_POST['companyname']) === false )  continue;
		if(!empty($_POST['firstname']) && stripos($props['first_name']['data'], $_POST['firstname']) === false )  continue;
		if(!empty($_POST['lastname']) && stripos($props['last_name']['data'], $_POST['lastname']) === false )  continue;
		if(!empty($_POST['city']) && stripos($props['city']['data'], $_POST['city']) === false )  continue;

		if(!empty($_POST['size']) && str_replace(array(',',' ','-'),'', $props['Agency_Size_Office']['data']) != $_POST['size'] )  continue;

		if ( isset($csv_lines[$userid]) ) $csv_lines[$userid] = array();
		
		$csv_lines[$userid][] = $userid;
		$csv_lines[$userid][] = $one_user['username'];
		$csv_lines[$userid][] = $props['Company_Name']['data'];
		$csv_lines[$userid][] =  $props['phone']['data'];
		$csv_lines[$userid][] =  $props['last_name']['data'];
		$csv_lines[$userid][]= $props['first_name']['data'];
		$csv_lines[$userid][] = $props['city']['data'];
		$csv_lines[$userid][] = $props['state']['data'];
		($feusers->MemberOfGroup($userid, '3') ||  $feusers->MemberOfGroup($userid, '27'))?$csv_lines[$userid][]='Master':$csv_lines[$userid][] = '';
		($feusers->MemberOfGroup($userid, '27') )?$type ='T ':$type = 'A ';
		($feusers->MemberOfGroup($userid, '15') )?$csv_lines[$userid][]=$type.'Started':$csv_lines[$userid][]=$type.'Billing';
		$csv_lines[$userid][] = strftime('%F',strtotime($one_user['expires']));
		$csv_lines[$userid][] = $props['payment_term']['data'];
		$csv_lines[$userid][] = $props['amount_charged']['data'];
		$csv_lines[$userid][]= '';	
		$csv_lines[$userid][] = '';
		$csv_lines[$userid][] = strftime('%F',strtotime($one_user['createdate']));
		$csv_lines[$userid][] = $props['Agency_Size_Office']['data'];
		$csv_lines[$userid][] = 'Agency';
	}
}
	
$csv_header = array("UserID","Email Address","Company","Work Phone","Last Name","First Name","City","State","Master","Status","Member Expiration","Payment Method","Billing Amount","CC Expiry","Check Due","Member Since","Office Size","Company Type");
	

if ($_GET['showtemplate'] != 'false')
{
	echo $feusers->ProcessTemplateFromData('{JQueryTools action=incjs exclude="fancybox,form,lightbox"}');
	echo '<__script__ type="text/javascript">jQuery(document).ready(function($) { jQuery(".cms_sortable").tablesorter({widthFixed: true, widgets: ["zebra"]}); });</__script>';

	if ($download)
	{
//		echo '<center><a href="'.$_SERVER['SCRIPT_URI'].'?showtemplate=false" style="text-decoration:none;"><button type="button">Download File</button></a></center>';
	}
	echo '<form method="post">';
	echo '<label for="master">Master/Non-Master: </label><select name="master"><option value="">Select One</option><option value="true" '.(($_POST['master'] == 'true')?'selected':'').'>Master</option><option value="false" '.(($_POST['master'] == 'false')?'selected':'').'>Non-Master</option></select><br />';
	echo '<label for="status">Status: </label><select name="status"><option value="">Select One</option><option value="approved" '.(($_POST['status'] == 'approved')?'selected':'').'>Approved</option><option value="billing" '.(($_POST['status'] == 'billing')?'selected':'').'>Billing</option><option value="started" '.(($_POST['status'] == 'started')?'selected':'').'>Started</option><option value="tapproved" '.(($_POST['status'] == 'tapproved')?'selected':'').'>T Approved</option><option value="tbilling" '.(($_POST['status'] == 'tbilling')?'selected':'').'>T Billing</option><option value="tstarted" '.(($_POST['status'] == 'tstarted')?'selected':'').'>T Started</option></select><br />';
	echo '<label for="payment">Payment Method: </label><select name="payment"><option value="">Select One</option><option value="cc" '.(($_POST['payment'] == 'cc')?'selected':'').'>Credit Card</option><option value="check" '.(($_POST['payment'] == 'check')?'selected':'').'>Check</option></select><br />';
	echo '<label for="expiration">Member Expiration: </label><select name="expiration"><option value="">Select One</option><option value="60" '.(($_POST['expiration'] == '62')?'selected':'').'>Next two months</option><option value="31" '.(($_POST['expiration'] == '30')?'selected':'').'>Next month</option><option value="7" '.(($_POST['expiration'] == '7')?'selected':'').'>Next week</option><option value="custom" '.(($_POST['expiration'] == 'custom')?'selected':'').'>Custom date range</option></select><br /><label for="custom_expiration">Expiration Date: </label><input name="custom_expiration" value="'.$_POST['custom_date'].'"/><br />';
	echo '<label for="type">Company Type: </label><select name="type"><option value="">Select One</option>';
	foreach( $option_type as $typename => $onetype )
	{
		echo '<option value="'.$typename.'" '.(($_POST['type'] == $typename)?'selected':'').'>'.$onetype.'</option>';
	}
	echo '</select><br />';
	echo '<label for="size">Company Size: </label><select name="size"><option value="">Select One</option>';
	foreach( $option_size as $sizename => $onesize )
	{
		echo '<option value="'.$sizename.'" '.(($_POST['type'] == $sizename)?'selected':'').'>'.$onesize.'</option>';
	}
	echo '</select><br />';
	echo '<label for="companyname">Company Name: </label><input name="companyname" value="'.$_POST['companyname'].'"/><br />';
	echo '<label for="firstname">First Name: </label><input name="firstname" value="'.$_POST['firstname'].'"/><br />';
	echo '<label for="lastname">Last Name: </label><input name="lastname" value="'.$_POST['lastname'].'"/><br />';
	echo '<label for="city">City: </label><input name="city" value="'.$_POST['city'].'"/><br />';

	echo '<input type="submit" value="Filter" name="filter" /><a href="http://www.mirren.org/members-list/"><button>Clear</button></a></form>';
	echo '<table class="cms_sortable tablesorter" BORDER=1 CELLPADDING=3><thead><tr><th style="color:#ffffff;">'.implode('</th><th style="color:#ffffff;">', $csv_header).'</th></tr></thead><tbody>';
	foreach($csv_lines as  $one_row)
	{
			$i++;

		echo '<tr><td NOWRAP>'.implode('</td><td NOWRAP>', $one_row).'</td></tr>';
	}
	echo '</tbody></table>';
}
else
{

	//Then force the output normally and exit so we don't get a footer
	header("Content-disposition: attachment; filename=members_list." . date("Y-m-d") . ".csv");
	header("Content-type: text/csv");
	print '"'.implode('"'.$delim.'"', $csv_header)."\"\n";
	foreach($csv_lines as $one_row)
	{
		print '"'.implode('"'.$delim.'"', $one_row)."\"\n";
	}
	exit;
}
echo $i;
spcherub
Power Poster
Power Poster
Posts: 402
Joined: Fri Jun 06, 2008 5:54 pm

Re: udt does not sort numbers correctly

Post by spcherub »

That's a lot of code with very little background - so it hard for someone to offer help.

It looks like a UDT that gets data from two separate modules and joins them together in some way meaningful to you. It is possible that the sorting of the data is being done using the default sort criteria which ignores the numeric values. You need to locate the part of the code that sorts the output array and make sure to change it to sort numerically. Also looking closer I see the sorting is happening in Javascript, so make sure you are setting the sort criteria for the required column to numeric instead of plain ASCII.

Hope that helps.
-S
Post Reply

Return to “Developers Discussion”