2018-05-05 13:35:10 +00:00
< ? php
2022-03-03 03:49:35 +00:00
/*--------------------------------------------------------------------------------------------------------| www . vdm . io |------/
__ __ _ _____ _ _ __ __ _ _ _
\ \ / / | | | __ \ | | | | | \ / | | | | | | |
\ \ / / _ _ ___ | | _ | | | | _____ _____ | | ___ _ __ _ __ ___ ___ _ __ | | _ | \ / | ___ | | _ | | __ ___ __ | |
\ \ / / _ ` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| ' _ \ / _ \ / _ ` |
\ / ( _ | \__ \ | _ | | __ | | __ / \ V / __ / | ( _ ) | | _ ) | | | | | | __ / | | | | _ | | | | __ / | _ | | | | ( _ ) | ( _ | |
\ / \__ , _ | ___ / \__ | | _____ / \___ | \_ / \___ | _ | \___ /| . __ /| _ | | _ | | _ | \___ | _ | | _ | \__ | | _ | | _ | \___ | \__ | _ | | _ | \___ / \__ , _ |
| |
| _ |
/-------------------------------------------------------------------------------------------------------------------------------/
@ version 1.0 . 11
@ build 2 nd March , 2022
@ created 24 th February , 2016
@ package Support Groups
@ subpackage ajax . php
@ author Llewellyn van der Merwe < http :// www . vdm . io >
@ copyright Copyright ( C ) 2015. All Rights Reserved
@ license GNU / GPL Version 2 or later - http :// www . gnu . org / licenses / gpl - 2.0 . html
Support Groups
/-----------------------------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined ( '_JEXEC' ) or die ( 'Restricted access' );
use Joomla\Utilities\ArrayHelper ;
/**
* Supportgroups Ajax Model
*/
class SupportgroupsModelAjax extends JModelList
{
protected $app_params ;
public function __construct ()
{
parent :: __construct ();
// get params
$this -> app_params = JComponentHelper :: getParams ( 'com_supportgroups' );
2018-05-05 13:35:10 +00:00
}
// Used in map
/**
* The Language Strings for Types
* @ var array
*/
protected $langType ;
/**
* The Type
* @ var string
*/
protected $type ;
/**
* The markers for the map
* @ var boolean
*/
public $markers = false ;
/**
* The Map Marker Image URLs
* @ var string
*/
public $markerImages ;
/**
* The Info Window Content in Map
* @ var string
*/
public $windowContent ;
/**
* The Map Details Blocks
* @ var array
*/
protected $mapDetailsBlock = array ();
/**
* Cluster Switch
* @ var boolean
*/
public $cluster = false ;
/**
* Get the Item Data For Type
*
* @ return string Formatted html string
*/
public function getItemData ( & $id , & $type , & $requestView )
{
switch ( $type )
{
case 'country' :
$this -> country = $id ;
break ;
case 'region' :
$this -> region = $id ;
break ;
case 'facility' :
$this -> facility = $id ;
break ;
case 'area' :
$this -> area = $id ;
break ;
case 'group' :
$this -> group = $id ;
break ;
case 'groups' :
$input = array ( 'facility' => 'int' , 'area' => 'int' , 'region' => 'int' , 'country' => 'int' );
$where = array ( 'facility' => 'facility' , 'area' => 'area' , 'region' => 'region' , 'country' => 'country' );
$filtering = JFactory :: getApplication () -> input -> getArray ( $input );
foreach ( $filtering as $key => $filter )
{
if ( $filter )
{
$this -> $where [ $key ] = ( int ) $filter ;
}
}
break ;
}
// set the type
$this -> type = ( string ) $type ;
// insure the set of language tags are loaded
$this -> langType = array (
'totals' => JText :: _ ( 'COM_SUPPORTGROUPS_TOTALS' ),
'country' => JText :: _ ( 'COM_SUPPORTGROUPS_COUNTRY' ),
'region' => JText :: _ ( 'COM_SUPPORTGROUPS_REGION' ),
'facility' => JText :: _ ( 'COM_SUPPORTGROUPS_FACILITY' ),
'area' => JText :: _ ( 'COM_SUPPORTGROUPS_AREA' ),
'group' => JText :: _ ( 'COM_SUPPORTGROUPS_GROUP' ));
// set the request view
$this -> requestView = $requestView ;
// return the data as HTML
return $this -> getData ( $id );
}
/**
* Get Data
*
* @ return string Formatted html string
*/
protected function getData ( & $id )
{
// get group
$groups = $this -> getItems ( $id );
if ( isset ( $groups ) && SupportgroupsHelper :: checkArray ( $groups ))
{
return $this -> getDisplay ( $groups , $id );
}
return false ;
}
/**
* Get display of data
*
* @ return string Formatted html string
*/
protected function getDisplay ( & $groups , & $id )
{
// init the Display builder
$display = array ();
$displaying = false ;
// set some totals language
$langKeys = array (
'members' => '<b>' . JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_MEMBERS' ) . '</b>' ,
'children' => '<b>' . JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_CHILDREN' ) . '</b>' ,
'on_art' => '<b>' . JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_ON_ART' ) . '</b>' ,
'male' => JText :: _ ( 'COM_SUPPORTGROUPS_MALE' ),
'female' => JText :: _ ( 'COM_SUPPORTGROUPS_FEMALE' ),
'male_children' => JText :: _ ( 'COM_SUPPORTGROUPS_MALE_CHILDREN' ),
'female_children' => JText :: _ ( 'COM_SUPPORTGROUPS_FEMALE_CHILDREN' ),
'male_art' => JText :: _ ( 'COM_SUPPORTGROUPS_MALE_ON_ART' ),
'female_art' => JText :: _ ( 'COM_SUPPORTGROUPS_FEMALE_ON_ART' )
);
// sum the total groups
$totalGroups = count ( $groups );
// house cleaning per type
switch ( $this -> type )
{
case 'totals' :
case 'country' :
case 'region' :
case 'facility' :
case 'area' :
// change layout if table
if ( $this -> requestView == 'table' && 'totals' == $this -> type )
{
// set the group total
$display [ 'totals' ][ JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_GROUPS' )] = $totalGroups ;
}
else
{
// set the group total
$display [ 'totals' ][] = '<b>' . JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_GROUPS' ) . '</b> <i class="uk-icon-angle-double-right uk-text-muted"></i> ' . $totalGroups ;
}
// set the totals
$totals = $this -> getTotals ( $id );
if ( $totals )
{
foreach ( $langKeys as $key => $lang )
{
if ( isset ( $totals -> $key ))
{
// change layout if table
if ( $this -> requestView == 'table' && 'totals' == $this -> type )
{
$display [ 'totals' ][ $lang ] = $totals -> $key ;
}
else
{
$display [ 'totals' ][] = $lang . ' <i class="uk-icon-angle-double-right uk-text-muted"></i> ' . $totals -> $key ;
}
}
}
if ( 'totals' == $this -> type )
{
// check if a map page message has been set
$totalMessage = $this -> app_params -> get ( 'total_message' , '<h2>' . JText :: _ ( 'COM_SUPPORTGROUPS_GLOBAL_TOTALS_OF_ALL_GROUPS' ) . '</h2>' );
$display [ 'details' ] = $totalMessage ;
}
}
// set groups & some details
foreach ( $groups as $nr => & $item )
{
// only add distance to facility
$distance = '' ;
if ( 'facility' == $this -> type )
{
$from = explode ( ',' , str_replace ( array ( '(' , ')' ), '' , $item -> marker ));
$to = explode ( ',' , str_replace ( array ( '(' , ')' ), '' , $item -> facility_marker ));
if ( isset ( $from [ 0 ]) && isset ( $from [ 1 ]) && isset ( $to [ 0 ]) && isset ( $to [ 1 ]))
{
$actualDistance = $this -> getDistance ( $from [ 0 ], $from [ 1 ], $to [ 0 ], $to [ 1 ]);
$facilityType = ( isset ( $item -> facility_type )) ? $item -> facility_type : JText :: _ ( 'COM_SUPPORTGROUPS_FACILITY' );
$distance = '<br /><i style="color: ' . $item -> area_color . ';" class="uk-icon-taxi"></i> '
. JText :: _ ( 'COM_SUPPORTGROUPS_THIS_GROUP_IS' ) . ' <b>' . $actualDistance
. 'km</b> ' . JText :: sprintf ( 'COM_SUPPORTGROUPS_FROM_S' , strtolower ( $facilityType )) . '.' ;
}
}
if ( 'country' != $this -> type && 'totals' != $this -> type )
{
// we want to sort the groups by distance if it is a facility group
if ( 'facility' == $this -> type )
{
$display [ 'groups' ][ $nr ] = array ();
// build the groups array
$display [ 'groups' ][ $nr ][ 'string' ] = '<i style="color: ' . $item -> area_color
. ';" class="uk-icon-map-marker"></i> ' . $item -> name . ' <i style="color: ' . $item -> area_color
. ';" class="uk-icon-phone"></i> ' . $item -> phone . ' <i style="color: ' . $item -> area_color
. ';" class="uk-icon-users"></i> ' . $item -> members . $distance ;
// add the sort key
if ( isset ( $actualDistance ))
{
// add the sort key
$display [ 'groups' ][ $nr ][ 'order' ] = $actualDistance ;
}
else
{
$display [ 'groups' ][ $nr ][ 'order' ] = ( int ) $item -> members ;
}
}
else
{
// build the groups array
$display [ 'groups' ][] = '<i style="color: ' . $item -> area_color
. ';" class="uk-icon-map-marker"></i> ' . $item -> name . ' <i style="color: ' . $item -> area_color
. ';" class="uk-icon-phone"></i> ' . $item -> phone . ' <i style="color: ' . $item -> area_color
. ';" class="uk-icon-users"></i> ' . $item -> members ;
}
}
// some details that we need to only set once (never for totals)
if ( 'totals' != $this -> type && ! isset ( $display [ 'details' ]))
{
$display [ 'details' ] = $this -> setDetailDisplay ( $item );
}
}
break ;
case 'group' :
$display [ 'details' ] = $this -> setDetailDisplay ( $groups [ 0 ]);
break ;
case 'groups' :
return $this -> getMapData ( $groups );
break ;
}
// only set details if details display was build
if ( isset ( $display [ 'details' ]))
{
$displaying .= $display [ 'details' ] ;
}
// only set totals Un ordered list if total display was build
if ( isset ( $display [ 'totals' ]) && SupportgroupsHelper :: checkArray ( $display [ 'totals' ]))
{
// change layout if table
if ( $this -> requestView == 'table' && 'totals' == $this -> type )
{
$tableStart = '<table class="uk-table uk-table-hover uk-table-condensed"><caption>' . $display [ 'details' ] . '</caption>' ;
$tableHead = '<thead><tr>' ;
$tableBody = '<tbody><tr>' ;
// set the totals layout for table view
foreach ( $display [ 'totals' ] as $lang => $vTotal )
{
$tableHead .= '<th>' . $lang . '</th>' ;
$tableBody .= '<td>' . $vTotal . '</td>' ;
}
$tableHead .= '</tr></thead>' ;
$tableBody .= '</tr></tbody>' ;
$tableEnd = '</table>' ;
// set to display
$displaying = $tableStart . $tableHead . $tableBody . $tableEnd ;
}
else
{
$displaying .= '<ul class="uk-list uk-list-striped"><li>' . implode ( '</li><li>' , $display [ 'totals' ]) . '</li></ul>' ;
}
}
// only set groups Un ordered list if group display was build
if ( isset ( $display [ 'groups' ]) && SupportgroupsHelper :: checkArray ( $display [ 'groups' ]))
{
$displaying .= $this -> setGroupsDisplay ( $display [ 'groups' ], $groups [ 0 ], $totalGroups );
}
// return display if it has been set
if ( $displaying && SupportgroupsHelper :: checkString ( $displaying ))
{
if ( $this -> requestView != 'table' )
{
// set nav menu
switch ( $this -> type )
{
case 'facility' :
$displaying = '<div class="' . $this -> type . '-menu"><button type="button" class="uk-button uk-button-success uk-button-small uk-width-1-1" onclick="goTo(backType+\'_\'+backTo+\'_nav\');"><i class="uk-icon-arrow-left"></i> ' . JText :: _ ( 'COM_SUPPORTGROUPS_BACK_TO_GROUP' ) . '</button></div>' . $displaying ;
break ;
case 'country' :
case 'region' :
case 'area' :
$displaying = '<div class="' . $this -> type . '-menu"><button type="button" class="uk-button uk-button-success uk-button-small uk-width-1-1" onclick="setMapData(backTo,backType);"><i class="uk-icon-arrow-left"></i> ' . JText :: _ ( 'COM_SUPPORTGROUPS_BACK_TO_GROUP' ) . '</button></div>' . $displaying ;
break ;
case 'group' :
$displaying = '<button type="button" class="uk-button uk-button-success uk-button-small uk-width-1-1" onclick="setMapData(mainBackTo,mainBackType);resetMap();"><i class="uk-icon-arrow-left"></i> ' . JText :: _ ( 'COM_SUPPORTGROUPS_BACK_TO_START' ) . '</button>' . $displaying ;
break ;
}
}
return array ( 'html' => $displaying );
}
return false ;
}
/**
* set Details Display
*
* @ params object $item The group item
*
* @ return string The details in html
*
*/
protected function setDetailDisplay ( & $item )
{
// set the facility marker if needed
$facility_marker = false ;
// check if the facility has an marker set
if ( isset ( $item -> facility_marker ) && ( strpos ( $item -> facility_marker , ')' ) !== false ))
{
$facility_marker = ( string ) str_replace ( array ( '(' , ')' ), '' , $item -> facility_marker );
}
if ( 'group' == $this -> type )
{
// reset display builder
$display = array ();
// details settings
$setDetails = array (
'phone' => array ( 'icon' => 'phone' , 'lang' => JText :: _ ( 'COM_SUPPORTGROUPS_PHONE' ), 'onclick' => false ),
'area_name' => array ( 'icon' => 'map-marker' , 'lang' => JText :: _ ( 'COM_SUPPORTGROUPS_AREA' ), 'onclick' => 'area' ),
'region_name' => array ( 'icon' => 'map-signs' , 'lang' => JText :: _ ( 'COM_SUPPORTGROUPS_REGION' ), 'onclick' => 'region' ),
'facility_name' => array ( 'icon' => 'medkit' , 'lang' => JText :: _ ( 'COM_SUPPORTGROUPS_FACILITY' ), 'onclick' => 'facility' ),
'country_name' => array ( 'icon' => 'flag' , 'lang' => JText :: _ ( 'COM_SUPPORTGROUPS_COUNTRY' ), 'onclick' => 'country' )
);
// check for details
$details = '' ;
if ( isset ( $item -> details ) && SupportgroupsHelper :: checkString ( $item -> details ) && $this -> requestView != 'table' )
{
$randomKey = SupportgroupsHelper :: randomkey ( 8 );
$details = '<button class="uk-button uk-button-primary uk-width-1-1 uk-margin-small-bottom uk-button-mini" data-uk-modal="{target:\'#' . $randomKey . '\'}">'
. JText :: _ ( 'COM_SUPPORTGROUPS_MORE_DETAILS' ) . '</button>'
. '<div id="' . $randomKey . '" class="uk-modal">'
. '<div class="uk-modal-dialog">'
. '<a class="uk-modal-close uk-close"></a>'
. '<button type="button" onclick="printMe(\'' . JFactory :: getConfig () -> get ( 'sitename' ) . '\', \'' . $randomKey . '_print\')" class="uk-button uk-button-primary uk-button-mini uk-align-center"><i class="uk-icon-print"></i> ' . JText :: _ ( 'COM_SUPPORTGROUPS_PRINT_PREVIEW' ) . '</button>'
. '<div id="' . $randomKey . '_print"><div class="uk-modal-header"><h1>' . $item -> name . ' - ' . JText :: _ ( 'COM_SUPPORTGROUPS_DETAILS' ) . '</h1></div>'
. '<div class="uk-overflow-container">'
. $item -> details
. '</div></div></div></div>' ;
}
// set Additional Info
$details .= $this -> setAdditionalInfo ( $item );
foreach ( $setDetails as $key => $set )
{
// add goTo function
if ( 'facility_name' == $key && $facility_marker && $this -> requestView != 'table' )
{
$theOnclick = 'goTo(\'facility_' . $item -> facility_id . '_nav\');' ;
}
elseif ( $set [ 'onclick' ])
{
// set Map Data Action
$theOnclick = 'setMapData(' . $item -> { $set [ 'onclick' ] . '_id' } . ',\'' . $set [ 'onclick' ] . '\');' ;
}
else
{
// no goTo Action
$theOnclick = '' ;
}
// update lang for facility if needed
if ( 'facility_name' == $key && isset ( $item -> facility_type ))
{
$set [ 'lang' ] = $item -> facility_type ;
}
// update lang for area if needed
if ( 'area_name' == $key && isset ( $item -> area_type ))
{
$set [ 'lang' ] = $item -> area_type ;
}
// don't add these onlclick if table view
if ( $this -> requestView == 'table' )
{
$onclick = '' ; $onclicka = '' ;
}
else
{
// only set the onclick event if needed
$onclick = ( $set [ 'onclick' ]) ? '<a href="javascript:void(0)" onclick="' . $theOnclick . '">' : '' ;
$onclicka = ( $set [ 'onclick' ]) ? '</a>' : '' ;
}
// now load the display array
$display [] = '<i style="color: ' . $item -> area_color . ';" class="uk-icon-' . $set [ 'icon' ] . '"></i> '
. $set [ 'lang' ] . ' <i class="uk-icon-angle-double-right uk-text-muted"></i> <b class="uk-text-bold">' . $onclick . $item -> $key . $onclicka . '</b>' ;
}
if ( $this -> requestView == 'table' )
{
return '<h2 style="color: ' . $item -> area_color
. ';">' . $item -> name
. '</h2><ul class="uk-list uk-list-striped"><li>' . implode ( '</li><li>' , $display ) . '</li></ul>' ;
}
return '<h2><a style="color: ' . $item -> area_color
. ';" href="javascript:void(0)" onclick="goTo('
. '\'group_' . $item -> id . '_nav\')" data-uk-tooltip title="' . JText :: _ ( 'COM_SUPPORTGROUPS_GO_TO_GROUP_ON_MAP' ) . '">' . $item -> name
. '</a></h2>' . $details . '<ul class="uk-list uk-list-striped"><li>' . implode ( '</li><li>' , $display ) . '</li></ul>' ;
}
// add facility type to name
if ( $this -> requestView != 'group' && isset ( $item -> facility_name ) && isset ( $item -> facility_type ))
{
$item -> facility_name = $item -> facility_name . ' - ' . $item -> facility_type ;
}
// add are type to name
if ( $this -> requestView != 'group' && isset ( $item -> area_name ) && isset ( $item -> area_type ))
{
$item -> area_name = $item -> area_name . ' - ' . $item -> area_type ;
}
// reset display builder
$display = '' ;
// icon settings
$setIcons = array (
'area' => 'map-marker' ,
'region' => 'map-signs' ,
'facility' => 'medkit' ,
'country' => 'flag' );
// setup som lan globals
$this -> facilityType = ( isset ( $item -> facility_type )) ? $item -> facility_type : JText :: _ ( 'COM_SUPPORTGROUPS_FACILITY' );
$this -> areaType = ( isset ( $item -> area_type )) ? $item -> area_type : JText :: _ ( 'COM_SUPPORTGROUPS_AREA' );
// setup facility Notice
$facilityNotice = ( 'facility' == $this -> type ) ? '<p>' . JText :: sprintf ( 'COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESSING_THIS_S_REPORT_THE_FOLLOWING' , strtolower ( $this -> facilityType )) . '.</p>' : '' ;
$goToFacility = JText :: sprintf ( 'COM_SUPPORTGROUPS_GO_TO_S_ON_MAP' , strtolower ( $this -> facilityType ));
// add goTo function for facility
if ( 'facility' == $this -> type && $facility_marker && $this -> requestView != 'table' )
{
$display = '<h2><a href="javascript:void(0)" style="color: ' . $item -> area_color . ';" onclick="goTo('
. '\'facility_' . $item -> facility_id . '_nav\')" data-uk-tooltip title="' . $goToFacility
. '"><i class="uk-icon-' . $setIcons [ $this -> type ] . '"></i> ' . $item -> { $this -> type . '_name' } . '</a></h2>' ;
}
// add facility type to name
elseif ( 'facility' == $this -> type && isset ( $item -> facility_type ))
{
$display = '<h2><a href="javascript:void(0)" style="color: ' . $item -> area_color . ';" '
. ' data-uk-tooltip title="' . $goToFacility
. '"><i class="uk-icon-' . $setIcons [ $this -> type ] . '"></i> ' . $item -> { $this -> type . '_name' } . '</a></h2>' ;
}
// add area type to name
elseif ( 'area' == $this -> type )
{
// no goTo Action
$display = '<h2 style="color: ' . $item -> area_color . ';" data-uk-tooltip title="' . $this -> areaType
. '"><i class="uk-icon-' . $setIcons [ $this -> type ] . '"></i> ' . $item -> { $this -> type . '_name' } . '</h2>' ;
}
else
{
// no goTo Action
$display = '<h2 style="color: ' . $item -> area_color . ';" data-uk-tooltip title="' . $this -> langType [ $this -> type ]
. '"><i class="uk-icon-' . $setIcons [ $this -> type ] . '"></i> ' . $item -> { $this -> type . '_name' } . '</h2>' ;
}
// check for phone
if ( isset ( $item -> { $this -> type . '_phone' }) && SupportgroupsHelper :: checkString ( $item -> { $this -> type . '_phone' }))
{
$display .= '<i style="color: ' . $item -> area_color . ';" class="uk-icon-phone"></i> '
. JText :: _ ( 'COM_SUPPORTGROUPS_PHONE' ) . ' <i class="uk-icon-angle-double-right uk-text-muted"></i> <b class="uk-text-bold">' . $item -> { $this -> type . '_phone' } . '</b>' ;
}
// check for details
if ( isset ( $item -> { $this -> type . '_details' }) && SupportgroupsHelper :: checkString ( $item -> { $this -> type . '_details' }) && $this -> requestView != 'table' )
{
$randomKey = SupportgroupsHelper :: randomkey ( 8 );
$display .= '<button class="uk-button uk-button-primary uk-width-1-1 uk-margin-small-bottom uk-button-mini" data-uk-modal="{target:\'#' . $randomKey . '\'}">'
. JText :: _ ( 'COM_SUPPORTGROUPS_MORE_DETAILS' ) . '</button>'
. '<div id="' . $randomKey . '" class="uk-modal">'
. '<div class="uk-modal-dialog">'
. '<a class="uk-modal-close uk-close"></a>'
. '<button type="button" onclick="printMe(\'' . JFactory :: getConfig () -> get ( 'sitename' ) . '\', \'' . $randomKey . '_print\')" class="uk-button uk-button-primary uk-button-mini uk-align-center"><i class="uk-icon-print"></i> ' . JText :: _ ( 'COM_SUPPORTGROUPS_PRINT_PREVIEW' ) . '</button>'
. '<div id="' . $randomKey . '_print"><div class="uk-modal-header"><h1>' . $item -> { $this -> type . '_name' } . ' - ' . JText :: _ ( 'COM_SUPPORTGROUPS_DETAILS' ) . '</h1></div>'
. '<div class="uk-overflow-container">'
. $item -> { $this -> type . '_details' }
. '</div></div></div></div>' ;
}
return $display . $facilityNotice ;
}
/**
* Build the Additional Info display block
*
* @ params object $object The Support Group Values
*
* @ return string The Value String
*
*/
public function setAdditionalInfo ( & $object )
{
if ( isset ( $object -> additionalInfo ) && SupportgroupsHelper :: checkArray ( $object -> additionalInfo ))
{
$strings = array ();
$div = '' ;
foreach ( $object -> additionalInfo as $additionalInfo )
{
$randomKey = SupportgroupsHelper :: randomkey ( 8 );
$strings [ $additionalInfo -> type . '__' . $additionalInfo -> name ] = array ();
$strings [ $additionalInfo -> type . '__' . $additionalInfo -> name ][ 'string' ] = '<i style="color: ' . $object -> area_color . ';" class="uk-icon-certificate"></i> <a href="#' . $randomKey . '" data-uk-offcanvas>' . $additionalInfo -> name . '</a>' ;
$strings [ $additionalInfo -> type . '__' . $additionalInfo -> name ][ 'type' ] = '<b>' . SupportgroupsHelper :: safeString ( $additionalInfo -> type , 'W' ) . '</b>' ;
if ( ! isset ( $additionalInfo -> details ) || ! SupportgroupsHelper :: checkString ( $additionalInfo -> details ))
{
$additionalInfo -> details = JText :: _ ( 'COM_SUPPORTGROUPS_NO_DETAILS_HAVE_BEEN_SET_PLEASE_CHECK_AGAIN_LATTER' );
}
$div .= '<div id="' . $randomKey . '" class="uk-offcanvas"><div class="uk-offcanvas-bar"><div class="uk-panel"><div class="uk-panel-badge uk-badge">' . $additionalInfo -> type . '</div><h3 class="uk-panel-title">' . $additionalInfo -> name . '</h3>' . $additionalInfo -> details . '</div></div></div>' ;
}
// now sort the capacities
ksort ( $strings );
// now build display
$display = array ();
foreach ( $strings as $string )
{
if ( ! isset ( $display [ $string [ 'type' ]]))
{
$display [ $string [ 'type' ]] = '<dt>' . $string [ 'type' ] . '</dt><dd><ul class="uk-list">' ;
}
$display [ $string [ 'type' ]] .= '<li>' . $string [ 'string' ] . '</li>' ;
}
return '<dl class="uk-description-list-line">' . implode ( '</ul></dd>' , $display ) . '</ul></dd></dl>' . $div ;
}
return '' ;
}
/**
* set Groups Display
*
* @ params array $groups The groups array
*
* @ return string The groups html
*
*/
protected function setGroupsDisplay ( & $groups , & $item , $totalGroups )
{
$randomKey = SupportgroupsHelper :: randomkey ( 8 );
// setup the group total in title
$totalGroups = ( $totalGroups ) ? '<span data-uk-tooltip title="' . JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_RELATED_GROUPS' ) . '">(' . $totalGroups . ')</span> ' : '' ;
// setup facility Notice
$this -> facilityType = ( isset ( $this -> facilityType )) ? $this -> facilityType : JText :: _ ( 'COM_SUPPORTGROUPS_FACILITY' );
$facilityNotice = ( 'facility' == $this -> type ) ? '<p>' . JText :: sprintf ( 'COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESSING_THIS_S' , strtolower ( $this -> facilityType )) . '.</p>' : '' ;
// insure we sort the groups by distance if type is facility
if ( 'facility' == $this -> type )
{
// sort the groups
function sortByOrder ( $a , $b )
{
return $a [ 'order' ] - $b [ 'order' ];
}
usort ( $groups , " sortByOrder " );
// make sure we are back with single array
$buketGroups = array ();
foreach ( $groups as $group )
{
$buketGroups [] = $group [ 'string' ];
}
$groups = $buketGroups ;
}
// start the construction of the group display
if ( $this -> requestView == 'table' )
{
// if table view return Unorderd List
return '<h2>' . $totalGroups . JText :: _ ( 'COM_SUPPORTGROUPS_RELATED_GROUPS' ) . '</h2>' . $facilityNotice
. '<ul class="uk-list uk-list-striped"><li>' . implode ( '</li><li>' , $groups ) . '</li></ul>' ;
}
// update the lang if needed
if ( 'facility' == $this -> type )
{
$this -> langType [ $this -> type ] = $this -> facilityType ;
}
$this -> areaType = ( isset ( $this -> areaType )) ? $this -> areaType : JText :: _ ( 'COM_SUPPORTGROUPS_AREA' );
if ( 'area' == $this -> type )
{
$this -> langType [ $this -> type ] = $this -> areaType ;
}
// if not table view return modal
return '<button class="uk-button uk-width-1-1 uk-margin-small-bottom" data-uk-modal="{target:\'#' . $randomKey . '\'}">' . $totalGroups . JText :: _ ( 'COM_SUPPORTGROUPS_RELATED_GROUPS' ) . '</button>'
. '<div id="' . $randomKey . '" class="uk-modal">'
. '<div class="uk-modal-dialog">'
. '<a class="uk-modal-close uk-close"></a>'
. '<button type="button" onclick="printMe(\'' . JFactory :: getConfig () -> get ( 'sitename' ) . '\', \'' . $randomKey . '_print\')" class="uk-button uk-button-primary uk-button-mini uk-align-center"><i class="uk-icon-print"></i> ' . JText :: _ ( 'COM_SUPPORTGROUPS_PRINT_PREVIEW' ) . '</button>'
. '<div id="' . $randomKey . '_print"><div class="uk-modal-header"><h1>' . $item -> { $this -> type . '_name' } . ' - ' . JText :: _ ( 'COM_SUPPORTGROUPS_GROUPS' ) . '</h1></div>'
. '<div class="uk-overflow-container">' . $facilityNotice
. '<ul class="uk-list uk-list-striped"><li>' . implode ( '</li><li>' , $groups ) . '</li></ul>'
. '</div></div></div></div>' ;
}
/**
* Clustering control method
*
* @ params object $items The Support Group Values
*
* @ return void
*
*/
protected function setClustering ( & $items )
{
$cluster = $this -> app_params -> get ( 'cluster' , null );
if ( $cluster )
{
$cluster_at = $this -> app_params -> get ( 'cluster_at' , 300 );
$total = count ( $items );
if ( $cluster_at <= $total )
{
$this -> cluster = true ;
}
}
}
/**
* get Map Data ( javascript )
*
* @ params object $items The Support Group Values
*
* @ return void
*
*/
protected function getMapData ( & $items )
{
// check the clustering option
$this -> setClustering ( $items );
// now set the map Data
$this -> setMapData ( $items );
// do some hous cleaning
$clusterOptions = '' ;
if ( $this -> cluster )
{
$clusterOptions = ' // Options for the clusterer
var clusterOptions = { gridSize : '.$this->app_params->get(' clustergridsize ', 100).' , maxZoom : '.$this->app_params->get(' clustermaxzoom ', 7).' , imagePath : " '.JURI::root() .'media/com_supportgroups/js-marker-cluster/images/m'.' " };
// Cluster the markers
var markerClusterer = new MarkerClusterer ( map , markersArray , clusterOptions ); ' ;
}
// start building the javascript
return ' < script type = " text/javascript " >
// make map global
var map ;
// the marker array
var markersArray = [];
var markersIndex = [];
var markers = [];
// start-up the Map
function initialize () {
// make sure we reset these
markersArray = [];
markersIndex = [];
markers = [];
var bounds = new google . maps . LatLngBounds ();
var mapOptions = {
mapTypeId : \ '' . $this -> app_params -> get ( 'maptype' , 'roadmap' ) . ' \ '
};
// Display a map on the page
map = new google . maps . Map ( document . getElementById ( " map_canvas " ), mapOptions );
map . setTilt ( 45 );
// Multiple Marker Images
'.$this->markerImages.'
// Multiple Markers
'.$this->markers.'
// Info Window Content
'.$this->windowContent.'
// Display multiple markers on a map
var infoWindow = new google . maps . InfoWindow (), marker , i ;
// Loop through our array of markers & place each one on the map
for ( i = 0 ; i < markers . length ; i ++ ) {
var position = new google . maps . LatLng ( markers [ i ][ 1 ], markers [ i ][ 2 ]);
bounds . extend ( position );
marker = new google . maps . Marker ({
position : position ,
map : map ,
icon : markers [ i ][ 3 ]
});
// Allow each marker to have an info window
google . maps . event . addListener ( marker , \ ' click\ ' , ( function ( marker , i ) {
return function () {
infoWindow . setContent ( infoWindowContent [ i ][ 0 ]);
infoWindow . open ( map , marker );
// get Group data
setMapData ( infoWindowContent [ i ][ 1 ], infoWindowContent [ i ][ 2 ]);
}
})( marker , i ));
// add to array
markersArray . push ( marker );
markersIndex . push ( infoWindowContent [ i ][ 2 ] + \ ' _\ ' + infoWindowContent [ i ][ 1 ] + \ ' _nav\ ' );
// Automatically center the map fitting all markers on the screen
map . fitBounds ( bounds );
}
'.$clusterOptions.'
// Override our map zoom level once our fitBounds function runs (Make sure it only runs once)
var boundsListener = google . maps . event . addListener (( map ), \ ' bounds_changed\ ' , function ( event ) {
this . setZoom ( '.$this->app_params->get(' maxzoom ', 6).' );
google . maps . event . removeListener ( boundsListener );
});
// hide the main menu if needed
jQuery ( \ ' . \ ' + mainBackType + \ ' - menu\ ' ) . hide ();
}
// set go to marker function
function getIndex ( value ){
indexes = jQuery . map ( markersIndex , function ( obj , index ) {
if ( obj == value ) {
return index ;
}
})
return indexes [ 0 ];
}
// trigger the marker info window
function clickMarker ( index ){
google . maps . event . trigger ( markersArray [ index ], \ ' click\ ' );
}
// set go to marker function
function resetMap (){
initialize ();
}
// set go to marker function
function goTo ( id ){
if ( id )
{
// open info window
var index = getIndex ( id );
if ( index )
{
// set new location
var newLatLng = new google . maps . LatLng ( markers [ index ][ 1 ], markers [ index ][ 2 ]);
map . setCenter ( newLatLng );
// get nice and close
map . setZoom ( '.$this->app_params->get(' gotozoom ', 8).' );
setTimeout ( function (){
clickMarker ( index );
}, 500 );
}
}
}
</ script > ' ;
}
/**
* set Map Data
*
* @ params object $items The Support Group Values
*
* @ return void
*
*/
protected function setMapData ( & $items )
{
// reset all buckets
$markersBucket = array ();
$markerImagesBucket = array ();
$contentBucket = array ();
$facilityMarkers = array ();
foreach ( $items as $nr => & $item )
{
// build the facility markers array
if ( isset ( $item -> facility_alias ) && ! isset ( $facilityMarkers [ $item -> facility_id ]) && isset ( $item -> facility_marker ) && ( strpos ( $item -> facility_marker , ')' ) !== false ))
{
$facilityMarkers [ $item -> facility_id ] = new stdClass ;
// fix the marker string and load the array
$facilityMarkers [ $item -> facility_id ] -> id = $item -> facility_id ;
$facilityMarkers [ $item -> facility_id ] -> marker = str_replace ( array ( '(' , ')' ), '' , $item -> facility_marker );
$facilityMarkers [ $item -> facility_id ] -> name = $this -> clean ( $item -> facility_name ) . ' - ' . $this -> clean ( $item -> facility_type );
$facilityMarkers [ $item -> facility_id ] -> alias = $item -> facility_alias ;
$facilityMarkers [ $item -> facility_id ] -> phone = $item -> facility_phone ;
}
// check if group has marker
if ( isset ( $item -> marker ) && ( strpos ( $item -> marker , ')' ) !== false ))
{
if ( strpos ( $item -> area_color , '#' ) === false )
{
$item -> area_color = '53B5DE' ;
}
else
{
// fix the color string
$item -> area_color = trim ( $item -> area_color , '#' );
}
// set the code name
$codeName = SupportgroupsHelper :: safeString ( $item -> alias );
// fix the marker string
$item -> marker = str_replace ( array ( '(' , ')' ), '' , $item -> marker );
// marker key
$A = strtoupper ( $codeName [ 0 ]);
$markerKey = $A . $item -> area_color ;
// load the marker images
$markerImagesBucket [ $markerKey ] = " var " . $markerKey . " Icon = " .
" 'https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld= " . $A . " | " . $item -> area_color . " |000000'; " ;
// load the markers
$markersBucket [] = " [' " . $this -> clean ( $item -> name ) . " ', $item->marker , " . $markerKey . " Icon] " ;
$contentBucket [] = " ['<div class= \" info_content \" ><h3 style= \" color: # " . $item -> area_color . " ; \" > " . $this -> clean ( $item -> name ) . " </h3> " . $this -> getMapDetailsBlock ( $item ) . " </div>', " . $item -> id . " , 'group'] " ;
}
}
// now build the facility markers
if ( SupportgroupsHelper :: checkArray ( $facilityMarkers ))
{
// load the marker images
$markerImagesBucket [ 'facilityIcon' ] = " var facilityIcon = ' " . JURI :: root () .
" media/com_supportgroups/images/facility.png'; " ;
foreach ( $facilityMarkers as $item )
{
// set the code name
$codeName = SupportgroupsHelper :: safeString ( $item -> alias );
// load the markers
$markersBucket [] = " [' " . $item -> name . " ', $item->marker , facilityIcon] " ;
// check for details
$details = '' ;
if ( SupportgroupsHelper :: checkString ( $item -> phone ))
{
$details = '<b>' . JText :: _ ( 'COM_SUPPORTGROUPS_PHONE' ) . '</b>: ' . $item -> phone ;
}
$contentBucket [] = " ['<div class= \" info_content \" ><h3>✚ " . $item -> name . " </h3> " . $details . " </div>', " . $item -> id . " , 'facility'] " ;
}
}
// now set the markers to map
if ( SupportgroupsHelper :: checkArray ( $markersBucket ))
{
$this -> markerImages = implode ( " \n " , $markerImagesBucket );
$this -> markers = 'markers = [' . implode ( ',' , $markersBucket ) . '];' ;
$this -> windowContent = 'var infoWindowContent = [' . implode ( ',' , $contentBucket ) . '];' ;
}
}
/**
* set Map Details Block
*
* @ params object $object The Support Group Values
*
* @ return string The Value String
*
*/
protected function setMapDetailsBlock ( & $object )
{
if ( ! isset ( $this -> mapDetailsBlock [ $object -> id ]))
{
// the display
$diplay = array ();
// the array for the details block
$detailsBlock = array (
'male' => JText :: _ ( 'COM_SUPPORTGROUPS_MALES' ),
'female' => JText :: _ ( 'COM_SUPPORTGROUPS_FEMALES' ),
'male_children' => JText :: _ ( 'COM_SUPPORTGROUPS_MALE_CHILDREN' ),
'female_children' => JText :: _ ( 'COM_SUPPORTGROUPS_FEMALE_CHILDREN' ),
'male_art' => JText :: _ ( 'COM_SUPPORTGROUPS_MALES_ON_ART' ),
'female_art' => JText :: _ ( 'COM_SUPPORTGROUPS_FEMALES_ON_ART' ),
'members' => JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_MEMBERS' ),
'children' => JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_CHILDREN' ),
'on_art' => JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_ON_ART' ));
$special = array ( 'on_art' => 'members' , 'male_art' => 'male' , 'female_art' => 'female' );
// loop given details block array
foreach ( $detailsBlock as $key => $lang )
{
if ( isset ( $object -> $key ))
{
if ( isset ( $special [ $key ]))
{
$temp = round (( $object -> $key * 100 ) / $object -> { $special [ $key ]});
if ( $temp > 100 )
{
$temp = 100 ;
}
$diplay [] = $lang . ': ' . $temp . '%' ;
}
else
{
// now build the display
$diplay [] = $lang . ': ' . $object -> $key ;
}
}
}
// This is the details block
$this -> mapDetailsBlock [ $object -> id ] = '<ul><li>' . implode ( '</li><li>' , $diplay ) . '</li></ul>' ;
}
return $this -> mapDetailsBlock [ $object -> id ];
}
/**
* get Map Details Block
*
* @ params object $object The Support Group Values
*
* @ return string The Value String
*
*/
protected function getMapDetailsBlock ( & $object )
{
if ( ! isset ( $this -> mapDetailsBlock [ $object -> id ]))
{
return $this -> setMapDetailsBlock ( $object );
}
return $this -> mapDetailsBlock [ $object -> id ];
}
/**
* Clean strings for Javacript
*
* @ params string $string The String to Clean
* @ params boolean $tags Switch to set if tabs should also be cleaned
*
* @ return string The cleaned string
*
*/
protected function clean ( $string , $tags = true )
{
return $string ;
if ( $tags )
{
$fix = array ( " & " => " & " , " < " => " < " , " > " => " > " , '"' => '"' , " ' " => ''' , " / " => '/' );
}
else
{
$fix = array ( " & " => " & " , '"' => '"' , " ' " => ''' );
}
// clean the string
return str_replace ( array_keys ( $fix ), array_values ( $fix ), $string );
}
/**
* Get Totals
*
* @ params int $id The target id
*
* @ return string The totals object
*
*/
protected function getTotals ( & $id )
{
if ( ! isset ( $this -> totals [ $this -> type ][ $id ]))
{
// check if we already have set the totals Globally
$this -> totals [ $this -> type ][ $id ] = SupportgroupsHelper :: getTotals ( $this -> type , $id );
}
// check again just to make sure
if ( isset ( $this -> totals [ $this -> type ][ $id ]) && SupportgroupsHelper :: checkArray ( $this -> totals [ $this -> type ][ $id ]))
{
// the totals object
$results = new stdClass ;
// the totals get array
$keys = array ( 'members' , 'children' , 'on_art' , 'male' , 'female' , 'male_children' , 'female_children' , 'male_art' , 'female_art' );
$special = array ( 'on_art' , 'male_art' , 'female_art' );
foreach ( $keys as $key )
{
if ( isset ( $this -> totals [ $this -> type ][ $id ][ $key ]))
{
if ( in_array ( $key , $special ))
{
$results -> $key = round (( array_sum ( $this -> totals [ $this -> type ][ $id ][ $key ]) * 100 ) / array_sum ( $this -> totals [ $this -> type ][ $id ][ $key . '_persent' ]));
if ( $results -> $key > 100 )
{
$results -> $key = 100 ;
}
$results -> $key = $results -> $key . '%' ;
}
else
{
$results -> $key = ( int ) array_sum ( $this -> totals [ $this -> type ][ $id ][ $key ]);
}
}
}
return $results ;
}
return false ;
}
/**
* Calculates the great - circle distance between two points , with
* the Vincenty formula .
*
* @ param float $latitudeFrom Latitude of start point in [ deg decimal ]
* @ param float $longitudeFrom Longitude of start point in [ deg decimal ]
* @ param float $latitudeTo Latitude of target point in [ deg decimal ]
* @ param float $longitudeTo Longitude of target point in [ deg decimal ]
* @ param string $type The type of return value [ km | m | mi ]
* @ param float $earthRadius Mean earth radius in [ m | mi | other ]
*
* @ return float Distance between points in [ $type ] ( same as earthRadius )
*/
protected function getDistance ( $latitudeFrom , $longitudeFrom , $latitudeTo , $longitudeTo , $type = 'km' , $earthRadius = 6371000 )
{
$type = strtolower ( $type );
if ( 'km' == $type || 'm' == $type ) // for kilometer & meter
{
$earthRadius = 6371000 ;
}
elseif ( 'mi' == $type ) // for miles
{
$earthRadius = 3959 ;
}
// convert from degrees to radians
$latFrom = deg2rad ( $latitudeFrom );
$lonFrom = deg2rad ( $longitudeFrom );
$latTo = deg2rad ( $latitudeTo );
$lonTo = deg2rad ( $longitudeTo );
$lonDelta = $lonTo - $lonFrom ;
$a = pow ( cos ( $latTo ) * sin ( $lonDelta ), 2 ) +
pow ( cos ( $latFrom ) * sin ( $latTo ) - sin ( $latFrom ) * cos ( $latTo ) * cos ( $lonDelta ), 2 );
$b = sin ( $latFrom ) * sin ( $latTo ) + cos ( $latFrom ) * cos ( $latTo ) * cos ( $lonDelta );
$angle = atan2 ( sqrt ( $a ), $b );
// set distance
$distance = $angle * $earthRadius ;
if ( 'km' == $type )
{
$km = bcdiv ( $distance , 1000 );
if ( 0 == $km )
{
return '0.' . floor ( $distance );
}
return $km ;
}
return $distance ;
}
/**
* Filter data switches .
*
* @ var strings
*/
protected $totals = array ();
protected $country = false ;
protected $region = false ;
protected $area = false ;
protected $facility = false ;
protected $group = false ;
/**
* Method to build an SQL query to load the list data .
*
* @ return string An SQL query
*/
protected function getListQuery ()
{
// Get the current user for authorisation checks
$this -> user = JFactory :: getUser ();
$this -> levels = $this -> user -> getAuthorisedViewLevels ();
// Make sure all records load, since no pagination allowed.
$this -> setState ( 'list.limit' , 0 );
// Get a db connection.
$db = JFactory :: getDbo ();
// Create a new query object.
$query = $db -> getQuery ( true );
if ( $this -> type == 'groups' )
{
// Get from #__supportgroups_support_group as a
$query -> select ( $db -> quoteName (
array ( 'a.id' , 'a.name' , 'a.alias' , 'a.phone' , 'a.male' , 'a.male_children' , 'a.male_art' , 'a.female' , 'a.female_children' , 'a.female_art' , 'a.marker' , 'a.published' , 'a.ordering' ),
array ( 'id' , 'name' , 'alias' , 'phone' , 'male' , 'male_children' , 'male_art' , 'female' , 'female_children' , 'female_art' , 'marker' , 'published' , 'ordering' )));
$query -> from ( $db -> quoteName ( '#__supportgroups_support_group' , 'a' ));
// Get from #__supportgroups_area as b
$query -> select ( $db -> quoteName (
array ( 'b.id' , 'b.name' , 'b.alias' , 'b.color' ),
array ( 'area_id' , 'area_name' , 'area_alias' , 'area_color' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_area' , 'b' )) . ' ON (' . $db -> quoteName ( 'a.area' ) . ' = ' . $db -> quoteName ( 'b.id' ) . ')' );
// Get from #__supportgroups_area_type as g
$query -> select ( $db -> quoteName (
array ( 'g.name' ),
array ( 'area_type' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_area_type' , 'g' )) . ' ON (' . $db -> quoteName ( 'g.id' ) . ' = ' . $db -> quoteName ( 'b.area_type' ) . ')' );
// Get from #__supportgroups_region as c
$query -> select ( $db -> quoteName (
array ( 'c.id' , 'c.alias' , 'c.name' ),
array ( 'region_id' , 'region_alias' , 'region_name' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_region' , 'c' )) . ' ON (' . $db -> quoteName ( 'b.region' ) . ' = ' . $db -> quoteName ( 'c.id' ) . ')' );
// Get from #__supportgroups_country as d
$query -> select ( $db -> quoteName (
array ( 'd.id' , 'd.name' , 'd.alias' ),
array ( 'country_id' , 'country_name' , 'country_alias' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_country' , 'd' )) . ' ON (' . $db -> quoteName ( 'c.country' ) . ' = ' . $db -> quoteName ( 'd.id' ) . ')' );
// Get from #__supportgroups_facility as e
$query -> select ( $db -> quoteName (
array ( 'e.id' , 'e.alias' , 'e.name' , 'e.phone' , 'e.marker' ),
array ( 'facility_id' , 'facility_alias' , 'facility_name' , 'facility_phone' , 'facility_marker' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_facility' , 'e' )) . ' ON (' . $db -> quoteName ( 'a.facility' ) . ' = ' . $db -> quoteName ( 'e.id' ) . ')' );
// Get from #__supportgroups_facility_type as f
$query -> select ( $db -> quoteName (
array ( 'f.name' ),
array ( 'facility_type' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_facility_type' , 'f' )) . ' ON (' . $db -> quoteName ( 'f.id' ) . ' = ' . $db -> quoteName ( 'e.facility_type' ) . ')' );
}
else
{
// Get from #__supportgroups_support_group as a
$query -> select ( $db -> quoteName (
array ( 'a.id' , 'a.name' , 'a.alias' , 'a.phone' , 'a.info' , 'a.male' , 'a.male_children' , 'a.male_art' , 'a.female' , 'a.female_children' , 'a.female_art' , 'a.marker' , 'a.published' , 'a.ordering' , 'a.details' ),
array ( 'id' , 'name' , 'alias' , 'phone' , 'info' , 'male' , 'male_children' , 'male_art' , 'female' , 'female_children' , 'female_art' , 'marker' , 'published' , 'ordering' , 'details' )));
$query -> from ( $db -> quoteName ( '#__supportgroups_support_group' , 'a' ));
// Get from #__supportgroups_area as b
$query -> select ( $db -> quoteName (
array ( 'b.id' , 'b.name' , 'b.alias' , 'b.color' , 'b.details' ),
array ( 'area_id' , 'area_name' , 'area_alias' , 'area_color' , 'area_details' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_area' , 'b' )) . ' ON (' . $db -> quoteName ( 'a.area' ) . ' = ' . $db -> quoteName ( 'b.id' ) . ')' );
// Get from #__supportgroups_area_type as g
$query -> select ( $db -> quoteName (
array ( 'g.name' ),
array ( 'area_type' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_area_type' , 'g' )) . ' ON (' . $db -> quoteName ( 'g.id' ) . ' = ' . $db -> quoteName ( 'b.area_type' ) . ')' );
// Get from #__supportgroups_region as c
$query -> select ( $db -> quoteName (
array ( 'c.id' , 'c.alias' , 'c.name' ),
array ( 'region_id' , 'region_alias' , 'region_name' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_region' , 'c' )) . ' ON (' . $db -> quoteName ( 'b.region' ) . ' = ' . $db -> quoteName ( 'c.id' ) . ')' );
// Get from #__supportgroups_country as d
$query -> select ( $db -> quoteName (
array ( 'd.id' , 'd.name' , 'd.alias' , 'd.codethree' , 'd.codetwo' ),
array ( 'country_id' , 'country_name' , 'country_alias' , 'country_codethree' , 'country_codetwo' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_country' , 'd' )) . ' ON (' . $db -> quoteName ( 'c.country' ) . ' = ' . $db -> quoteName ( 'd.id' ) . ')' );
// Get from #__supportgroups_facility as e
$query -> select ( $db -> quoteName (
array ( 'e.id' , 'e.alias' , 'e.name' , 'e.phone' , 'e.details' , 'e.marker' ),
array ( 'facility_id' , 'facility_alias' , 'facility_name' , 'facility_phone' , 'facility_details' , 'facility_marker' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_facility' , 'e' )) . ' ON (' . $db -> quoteName ( 'a.facility' ) . ' = ' . $db -> quoteName ( 'e.id' ) . ')' );
// Get from #__supportgroups_facility_type as f
$query -> select ( $db -> quoteName (
array ( 'f.name' ),
array ( 'facility_type' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_facility_type' , 'f' )) . ' ON (' . $db -> quoteName ( 'f.id' ) . ' = ' . $db -> quoteName ( 'e.facility_type' ) . ')' );
}
$query -> where ( 'a.published = 1' );
$query -> where ( 'a.access IN (' . implode ( ',' , $this -> levels ) . ')' );
$query -> order ( 'a.ordering ASC' );
// filter by country
if ( isset ( $this -> country ) && $this -> country )
{
$query -> where ( 'd.id = ' . ( int ) $this -> country );
}
// filter by region
if ( isset ( $this -> region ) && $this -> region )
{
$query -> where ( 'c.id = ' . ( int ) $this -> region );
}
// filter by area
if ( isset ( $this -> area ) && $this -> area )
{
$query -> where ( 'b.id = ' . ( int ) $this -> area );
}
// filter by facility
if ( isset ( $this -> facility ) && $this -> facility )
{
$query -> where ( 'e.id = ' . ( int ) $this -> facility );
}
// filter by facility
if ( isset ( $this -> group ) && $this -> group )
{
$query -> where ( 'a.id = ' . ( int ) $this -> group );
}
// filter by ids
if ( SupportgroupsHelper :: checkArray ( $this -> idArray ))
{
$query -> where ( 'a.id IN (' . implode ( ',' , $this -> idArray ) . ')' );
}
// return the query object
return $query ;
}
/**
* Method to get an array of data items .
*
* @ return mixed An array of data items on success , false on failure .
*/
public function getItems ( & $id = null )
{
$user = JFactory :: getUser ();
// check if this user has permission to access items
if ( ! $user -> authorise ( 'site.map.access' , 'com_supportgroups' ))
{
return false ;
}
// load parent items
$items = parent :: getItems ();
// make sure we have items to work with
if ( isset ( $items ) && SupportgroupsHelper :: checkArray ( $items ))
{
// set totals only if not set already (or is group)
$setTotals = false ;
if ( 'groups' != $this -> type && 'group' != $this -> type && SupportgroupsHelper :: checkString ( $this -> type ) && ! isset ( $this -> totals [ $this -> type ][ $id ]))
{
// check if we already have set the totals globally
$this -> totals [ $this -> type ][ $id ] = SupportgroupsHelper :: getTotals ( $this -> type , $id );
if ( SupportgroupsHelper :: checkArray ( $this -> totals [ $this -> type ][ $id ]))
{
$setTotals = false ;
}
else
{
// to avoid the (Cannot use a scalar value as an array)
$this -> totals [ $this -> type ][ $id ] = array ();
$setTotals = true ;
$keyBuckets = array ( 'members' , 'children' , 'on_art' , 'male' , 'female' , 'male_children' , 'female_children' , 'male_art' , 'female_art' );
}
}
// Convert the parameter fields into objects.
foreach ( $items as $nr => & $item )
{
// Always create a slug for sef URL's
$item -> slug = ( isset ( $item -> alias )) ? $item -> id . ':' . $item -> alias : $item -> id ;
if ( isset ( $item -> info ) && SupportgroupsHelper :: checkString ( $item -> info ))
{
// Decode Additional Info
$item -> info = json_decode ( $item -> info , true );
// set Additional Info Data to the $item object.
$item -> additionalInfo = $this -> getAdditionalInfoData ( $item -> info );
}
// do some calculations here
$item -> members = ( int ) $item -> male + ( int ) $item -> female ;
$item -> children = ( int ) $item -> male_children + ( int ) $item -> female_children ;
$item -> on_art = ( int ) $item -> male_art + ( int ) $item -> female_art ;
// only show ART if numbers set
if ( 0 == $item -> on_art )
{
unset ( $item -> on_art );
unset ( $item -> male_art );
unset ( $item -> female_art );
}
if ( $setTotals )
{
foreach ( $keyBuckets as $nnn => & $key )
{
if ( isset ( $item -> $key ))
{
if ( ! isset ( $this -> totals [ $this -> type ][ $id ][ $key ]))
{
// to avoid the (Cannot use a scalar value as an array)
$this -> totals [ $this -> type ][ $id ][ $key ] = array ();
}
$this -> totals [ $this -> type ][ $id ][ $key ][] = ( int ) $item -> $key ;
// now count the members who has RT set
if ( 'on_art' == $key )
{
if ( ! isset ( $this -> totals [ $this -> type ][ $id ][ 'on_art_persent' ]))
{
// to avoid the (Cannot use a scalar value as an array)
$this -> totals [ $this -> type ][ $id ][ 'on_art_persent' ] = array ();
}
$this -> totals [ $this -> type ][ $id ][ 'on_art_persent' ][] = ( int ) $item -> members ;
}
elseif ( 'male_art' == $key )
{
if ( ! isset ( $this -> totals [ $this -> type ][ $id ][ 'male_art_persent' ]))
{
// to avoid the (Cannot use a scalar value as an array)
$this -> totals [ $this -> type ][ $id ][ 'male_art_persent' ] = array ();
}
$this -> totals [ $this -> type ][ $id ][ 'male_art_persent' ][] = ( int ) $item -> male ;
}
elseif ( 'female_art' == $key )
{
if ( ! isset ( $this -> totals [ $this -> type ][ $id ][ 'female_art_persent' ]))
{
// to avoid the (Cannot use a scalar value as an array)
$this -> totals [ $this -> type ][ $id ][ 'female_art_persent' ] = array ();
}
$this -> totals [ $this -> type ][ $id ][ 'female_art_persent' ][] = ( int ) $item -> female ;
}
}
}
}
}
if ( $setTotals && isset ( $this -> totals [ $this -> type ][ $id ]))
{
if ( ! SupportgroupsHelper :: setTotals ( $this -> totals [ $this -> type ][ $id ], $this -> type , $id ))
{
return false ;
}
}
}
// return items
return $items ;
}
/**
* Method to get an array of Additional Info Objects .
*
* @ return mixed An array of Additional Info Objects on success , false on failure .
*
*/
public function getAdditionalInfoData ( $info )
{
// Get a db connection.
$db = JFactory :: getDbo ();
// Create a new query object.
$query = $db -> getQuery ( true );
// Get from #__supportgroups_additional_info as d
$query -> select ( $db -> quoteName (
array ( 'd.id' , 'd.alias' , 'd.name' , 'd.details' ),
array ( 'id' , 'alias' , 'name' , 'details' )));
$query -> from ( $db -> quoteName ( '#__supportgroups_additional_info' , 'd' ));
// Get from #__supportgroups_info_type as g
$query -> select ( $db -> quoteName (
array ( 'g.name' ),
array ( 'type' )));
$query -> join ( 'LEFT' , ( $db -> quoteName ( '#__supportgroups_info_type' , 'g' )) . ' ON (' . $db -> quoteName ( 'd.info_type' ) . ' = ' . $db -> quoteName ( 'g.id' ) . ')' );
// Check if $info is an array with values.
if ( isset ( $info ) && SupportgroupsHelper :: checkArray ( $info ))
{
$query -> where ( 'd.id IN (' . implode ( ',' , $info ) . ')' );
}
else
{
return false ;
}
// Reset the query using our newly populated query object.
$db -> setQuery ( $query );
$db -> execute ();
// check if there was data returned
if ( $db -> getNumRows ())
{
return $db -> loadObjectList ();
}
return false ;
}
// Used in supportgroups
/**
* The Ids to fetch with query
* @ var array
*/
protected $idArray = array ();
/**
* Get Rows of Group data
*
* @ return string Formatted html table row
*/
public function getColumns ( & $page )
{
// return columns
return array (
array ( 'name' => 'name' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_NAME' ), 'type' => 'text' , 'sorted' => true , 'direction' => 'ASC' ),
array ( 'name' => 'phone' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_PHONE' ), 'type' => 'number' , 'breakpoints' => 'xs' ),
array ( 'name' => 'members' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_MEMBERS' ), 'type' => 'number' , 'breakpoints' => 'xs sm' ),
array ( 'name' => 'children' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_CHILDREN' ), 'type' => 'number' , 'breakpoints' => 'all' ),
array ( 'name' => 'on_art' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_TOTAL_ON_ART' ), 'type' => 'number' , 'breakpoints' => 'all' ),
array ( 'name' => 'male' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_MALES' ), 'type' => 'number' , 'breakpoints' => 'all' ),
array ( 'name' => 'female' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_FEMALES' ), 'type' => 'number' , 'breakpoints' => 'all' ),
array ( 'name' => 'male_children' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_MALE_CHILDREN' ), 'type' => 'number' , 'breakpoints' => 'all' ),
array ( 'name' => 'female_children' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_FEMALE_CHILDREN' ), 'type' => 'number' , 'breakpoints' => 'all' ),
array ( 'name' => 'male_art' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_MALES_ART' ), 'type' => 'number' , 'breakpoints' => 'all' ),
array ( 'name' => 'female_art' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_FEMALES_ART' ), 'type' => 'number' , 'breakpoints' => 'all' ),
array ( 'name' => 'facility_name' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_FACILITIES' ), 'type' => 'html' , 'sort-use' => 'text' , 'breakpoints' => 'xs' ),
array ( 'name' => 'area_name' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_AREAS' ), 'type' => 'html' , 'sort-use' => 'text' , 'breakpoints' => 'xs sm' ),
array ( 'name' => 'region_name' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_REGIONS' ), 'type' => 'html' , 'sort-use' => 'text' , 'breakpoints' => 'xs sm' ),
array ( 'name' => 'country_name' , 'title' => JText :: _ ( 'COM_SUPPORTGROUPS_COUNTRY' ), 'type' => 'html' , 'sort-use' => 'text' , 'breakpoints' => 'xs sm' )
);
}
/**
* Get Rows of Group data
*
* @ return string Formatted html table row
*/
public function getRows ( & $key , & $page )
{
$session = JFactory :: getSession ();
$groups = $session -> get ( $key , null );
// check if this is valid json
if ( SupportgroupsHelper :: checkJson ( $groups ))
{
$array = json_decode ( $groups , true );
// now check that array is all numbers, and set to int
if ( SupportgroupsHelper :: checkArray ( $array ))
{
$this -> idArray = $array ;
}
// at last lets get started
if ( SupportgroupsHelper :: checkArray ( $this -> idArray ))
{
$rowArray = array (
'name' , 'phone' , 'members' , 'children' , 'on_art' , 'male' , 'female' , 'male_children' , 'female_children' , 'male_art' , 'female_art' ,
'facility_name' , 'area_name' , 'region_name' , 'country_name'
);
$clickArray = array (
'facility_name' => array ( 'id' => 'facility_id' , 'type' => 'facility' ),
'area_name' => array ( 'id' => 'area_id' , 'type' => 'area' ),
'region_name' => array ( 'id' => 'region_id' , 'type' => 'region' ),
'country_name' => array ( 'id' => 'country_id' , 'type' => 'country' )
);
$urlArray = array (
'facility_name' => 'facility' ,
'area_name' => 'area' ,
'region_name' => 'region' ,
'country_name' => 'country'
);
// set the map route
$mapRoute = 'index.php?option=com_supportgroups&view=map' ;
$items = $this -> getItems ();
if ( $items )
{
// start row builder
$rows = array ();
foreach ( $items as $nr => $item )
{
// build the row
$rows [ $nr ] = array ();
foreach ( $rowArray as $value )
{
if ( isset ( $item -> $value ))
{
// build a click-able button
if ( array_key_exists ( $value , $clickArray ))
{
$typeAdded = '' ;
if ( 'facility_name' == $value && isset ( $item -> facility_type ))
{
$typeAdded = ' data-uk-tooltip="{pos:\'left\'}" title="' . $item -> facility_type . '"' ;
}
$mapUrl = $mapRoute . '&' . $urlArray [ $value ] . '=' . $item -> $clickArray [ $value ][ 'id' ];
$key = $clickArray [ $value ][ 'type' ] . '__' . $item -> $clickArray [ $value ][ 'id' ];
$buttons = '<div class="uk-button-group uk-width-1-1"><button class="uk-button uk-width-4-5 '
. 'uk-button-primary"' . $typeAdded . ' data-uk-modal="{target:\'#item-info\'}"type="button" onclick="getItemData(\'' . $key . '\')">'
. $item -> $value . '</button><a href="' . $mapUrl . '" class="modal uk-button uk-width-1-5 ">'
. '<i class="uk-icon-map-marker"></i></a></div>' ;
$rows [ $nr ][ $value ][ 'value' ] = $buttons ;
$rows [ $nr ][ $value ][ 'options' ] = array ( 'filterValue' => $item -> $value );
}
else
{
$rows [ $nr ][ $value ][ 'value' ] = $item -> $value ;
$rows [ $nr ][ $value ][ 'options' ] = array ( 'filterValue' => $item -> $value );
}
}
else
{
$rows [ $nr ][ $value ] = '' ;
}
}
}
}
}
// just return this for now :)
return $rows ;
}
return false ;
}
/**
* Get Table Totals
*
* @ return string Formatted html string
*/
public function getTableTotals ( & $id , $requestView = 'table' )
{
// force totals
$this -> type = 'totals' ;
// set the request view
$this -> requestView = $requestView ;
$id = 1 ;
// get group
$groups = $this -> getItems ( $id );
if ( isset ( $groups ) && SupportgroupsHelper :: checkArray ( $groups ))
{
return $this -> getDisplay ( $groups , $id );
}
return false ;
2022-03-03 03:49:35 +00:00
}
}