| Current Path : /var/www/html/components/com_community/libraries/ |
| Current File : /var/www/html/components/com_community/libraries/badge.php |
<?php
/**
* @copyright (C) 2013 iJoomla, Inc. - All rights reserved.
* @license GNU General Public License, version 2 (http://www.gnu.org/licenses/gpl-2.0.html)
* @author iJoomla.com <webmaster@ijoomla.com>
* @url https://www.jomsocial.com/license-agreement
* The PHP code portions are distributed under the GPL license. If not otherwise stated, all images, manuals, cascading style sheets, and included JavaScript *are NOT GPL, and are released under the IJOOMLA Proprietary Use License v1.0
* More info at https://www.jomsocial.com/license-agreement
*/
use Joomla\CMS\Factory as CMSFactory;
use Joomla\CMS\Uri\Uri;
defined('_JEXEC') or die('Restricted access');
class CBadge {
private $user;
private $db;
public $points;
/**
* Constructor
*
* @param $user
* @param int $fakePoints - optional, override use rpoints for debug
*/
public function __construct($user, $fakePoints=0) {
$this->user = $user;
$this->points = (int) $this->user->getKarmaPoint();
if($this->points < 0) $this->points = 0;
if($fakePoints) $this->points = $fakePoints;
$this->db = CMSFactory::getDBO();
}
/**
* Return a badge
*
* @param bool $json
* @return object / json
*/
public function getBadge($json = false) {
jimport('joomla.filesystem.file');
$badges = new stdClass();
$badges->current = null;
$badges->next = null;
// Get current badge
$sql = 'SELECT * FROM #__community_badges ' .
' WHERE '.$this->db->quoteName('points').' <= '.$this->points.
' AND '.$this->db->quoteName('published').'= 1 '.
' ORDER by '.$this->db->quoteName('points').' DESC, '.$this->db->quoteName('id').' DESC'.
' LIMIT 1';
$this->db->setQuery($sql);
$result=$this->db->loadObjectList();
if($result) {
$badges->current = $this->parseResult($result[0]);
}
// Get next badge
$sql = 'SELECT * FROM #__community_badges ' .
' WHERE '.$this->db->quoteName('points').' > '.$this->points.
' AND '.$this->db->quoteName('published').'= 1 '.
' ORDER by '.$this->db->quoteName('points').' ASC, '.$this->db->quoteName('id').' DESC'.
' LIMIT 1';
$this->db->setQuery($sql);
$result=$this->db->loadObjectList();
if($result) {
$badges->next = $this->parseResult($result[0]);
}
if($json) return json_encode($badges);
return $badges;
}
private function parseResult($result) {
$result->image = Uri::root().'components/com_community/assets/badge_'.$result->id.'.'.$result->image;
if($this->points < $result->points) {
$result->progress = sprintf('%.2f',$this->points / $result->points);
}
return json_decode(json_encode($result), FALSE);
}
}