Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/User/Point/Action/Action.php
Строк: 258
<?php

namespace ConcreteCoreUserPointAction;

use 
Database;
use 
Environment;
use 
ConcreteCorePackagePackageList;
use 
Group;
use 
Core;
use 
User;
use 
UserInfo;
use 
ConcreteCoreUserPointEntry as UserPointEntry;

class 
Action
{
    public 
$upaID;
    public 
$upaHandle;
    public 
$upaName;
    public 
$upaDefaultPoints;
    public 
$gBadgeID;

    public function 
load($upaID)
    {
        
$db Database::connection();
        
$row $db->GetRow('select * from UserPointActions where upaID = ?', array($upaID));
        
$this->setDataFromArray($row);
    }

    public function 
delete()
    {
        
$db Database::connection();
        
$db->delete('UserPointActions', array('upaID' => $this->upaID));
    }

    
/**
     * @param $upaID
     *
     * @return UserPointAction
     */
    
public static function getByID($upaID)
    {
        
$db Database::connection();
        
$row $db->getRow("SELECT * FROM UserPointActions WHERE upaID = ?", array($upaID));
        if (
$row['upaID']) {
            
$upa = static::getClass($row);
            
$upa->setDataFromArray($row);

            return 
$upa;
        }
    }

    protected static function 
getClass($row)
    {
        
$standardClass '\ConcreteCore\User\Point\Action\Action';
        if (
$row['upaHasCustomClass']) {
            
$handleClass Core::make('helper/text')->camelcase($row['upaHandle']) . 'Action';
            
$pkgHandle PackageList::getHandle($row['pkgID']);
            
$customClass overrideable_core_class(
                
'Core\User\Point\Action\' . $handleClass,
                DIRNAME_CLASSES . '
/User/Point/Action/' . $handleClass . '.php',
                $pkgHandle
            );
            try {
                $upa = Core::make($customClass);
            } catch (ReflectionException $e) {
                $upa = Core::make($standardClass);
            }
        } else {
            $upa = Core::make($standardClass);
        }

        return $upa;
    }

    /**
     * @param Package $pkg
     *
     * @return array
     */
    public static function getListByPackage($pkg)
    {
        $db = Database::connection();
        $upaIDs = $db->GetCol('
select upaID from UserPointActions where pkgID = ? order by upaName asc', array($pkg->getPackageID()));
        $actions = array();
        foreach ($upaIDs as $upaID) {
            $action = static::getByID($upaID);
            if (is_object($action)) {
                $actions[] = $action;
            }
        }

        return $actions;
    }

    /**
     * @param $upaHandle
     *
     * @return UserPointAction
     */
    public static function getByHandle($upaHandle)
    {
        $db = Database::connection();
        $row = $db->getRow("SELECT * FROM UserPointActions WHERE upaHandle = ?", array($upaHandle));
        if ($row['
upaID']) {
            $upa = static::getClass($row);
            $upa->setDataFromArray($row);

            return $upa;
        }
    }

    public static function add($upaHandle, $upaName, $upaDefaultPoints, $group, $upaIsActive = true, $pkg = false)
    {
        $upa = new static();
        $upa->upaHandle = $upaHandle;
        $upa->upaName = $upaName;
        $upa->upaDefaultPoints = $upaDefaultPoints;
        $upa->gBadgeID = 0;
        $upa->upaHasCustomClass = 0;
        $upa->upaIsActive = $upaIsActive;
        if (!$upaIsActive) {
            $upa->upaIsActive = 0;
        }

        if (is_object($group)) {
            $upa->gBadgeID = $group->getGroupID();
        }
        $upa->pkgID = 0;
        $pkgHandle = false;
        if (is_object($pkg)) {
            $upa->pkgID = $pkg->getPackageID();
            $pkgHandle = $pkg->getPackageHandle();
        }

        $env = Environment::get();
        $upaHandleCamel = Core::make("helper/text")->camelcase($upaHandle);
        $r = $env->getRecord(DIRNAME_CLASSES . '
/User/Point/Action/' . $upaHandleCamel . 'Action.php', $pkgHandle);
        if ($r->exists()) {
            $upa->upaHasCustomClass = 1;
        }
        $upa->save();
    }

    /**
     * @param array $data
     *
     * @return bool
     */
    protected function setDataFromArray($data)
    {
        if (is_array($data) && count($data)) {
            $this->upaID = $data['
upaID'];
            $this->upaHandle = $data['
upaHandle'];
            $this->upaName = $data['
upaName'];
            $this->upaDefaultPoints = $data['
upaDefaultPoints'];
            $this->upaHasCustomClass = $data['
upaHasCustomClass'];
            $this->gBadgeID = $data['
gBadgeID'];
            $this->upaIsActive = $data['
upaIsActive'];

            return true;
        } else {
            return false;
        }
    }

    public function getAttributeNames()
    {
        return array('
upaID', 'upaHandle', 'upaName', 'upaDefaultPoints', 'gBadgeID', 'upaIsActive');
    }

    /**
     * @return bool
     */
    public function hasCustomClass()
    {
        return $this->upaHasCustomClass ? true : false;
    }

    public function getPackageHandle()
    {
        return PackageList::getHandle($this->pkgID);
    }

    public function getPackageID()
    {
        return $this->pkgID;
    }

    /**
     * @return string
     */
    public function getUserPointActionHandle()
    {
        return $this->upaHandle;
    }

    /**
     * @return string
     */
    public function getUserPointActionName()
    {
        return $this->upaName;
    }

    /**
     * @return int
     */
    public function getUserPointActionID()
    {
        return $this->upaID;
    }

    /**
     * @return int
     */
    public function getUserPointActionDefaultPoints()
    {
        return $this->upaDefaultPoints;
    }

    /**
     * @return int
     */
    public function getUserPointActionBadgeGroupID()
    {
        return $this->gBadgeID;
    }

    public function isUserPointActionActive()
    {
        return $this->upaIsActive;
    }

    /**
     * @return Group
     */
    public function getUserPointActionBadgeGroupObject()
    {
        return Group::getByID($this->getUserPointActionBadgeGroupID());
    }

    public function addEntry($user, ActionDescription $descr, $points = false, $date = null)
    {
        if (!$this->isUserPointActionActive()) {
            return false;
        }

        if (is_object($user)) {
            $user = UserInfo::getByID($user->getUserID());
            $uID = $user->getUserID();
        } else {
            $uID = $user;
        }

        if (!isset($uID) || $uID <= 0) {
            return false;
        }

        $g = $this->getUserPointActionBadgeGroupObject();
        if ($g instanceof Group) {
            if ($user instanceof UserInfo) {
                $user = User::getByUserID($user->getUserID());
            }
            $user->enterGroup($g);
        }

        if ($date == null) {
            $date = date('
Y-m-d H:i:s');
        }

        if ($points === false) {
            $points = $this->getUserPointActionDefaultPoints();
        }

        try {
            $upe = new UserPointEntry();
            $upe->upuID = $uID;
            $upe->upaID = $this->upaID;
            $upe->upPoints = $points;
            $upe->timestamp = $date;
            $descr = serialize($descr);
            $upe->object = $descr;
            $upe->save();

            return $upe;
        } catch (Exception $e) {
            Log::addEntry(t("Error saving user point record: %s", $e->getMessage()), '
exceptions');

            return false;
        }

        return true;
    }

    public function save()
    {
        $db = Database::connection();
        if ($this->upaID) {
            $db->update('
UserPointActions', array(
                '
upaHandle' => $this->upaHandle,
                '
upaName' => $this->upaName,
                '
upaDefaultPoints' => $this->upaDefaultPoints,
                '
upaHasCustomClass' => $this->upaHasCustomClass,
                '
upaIsActive' => $this->upaIsActive,
                '
gBadgeID' => $this->gBadgeID,
            ), array("upaID" => $this->upaID));
        } else {
            $res = $db->insert('
UserPointActions', array(
                '
upaHandle' => $this->upaHandle,
                '
upaName' => $this->upaName,
                '
upaDefaultPoints' => $this->upaDefaultPoints,
                '
upaHasCustomClass' => $this->upaHasCustomClass,
                '
upaIsActive' => $this->upaIsActive,
                '
gBadgeID' => $this->gBadgeID,
            ));
        }
    }
}
Онлайн: 2
Реклама