src-empire/Empire/Core/Position.php line 278

Open in your IDE?
  1. <?php
  2. namespace Empire\Core;
  3. use App\Service\AvatarImageService;
  4. use Empire\Access\Access;
  5. use Empire\Access\Key;
  6. use Empire\Legacy\db;
  7. class Position extends AbstractEntity implements EntityNamedLoadable {
  8.     public $typeName$branchID$unitID$tier$public$pay;
  9.     protected $POSI_NAME$BRAN_ID$POSI_TIER$POSI_PUBLIC$POSI_PAY;
  10.     const POSITION_TIER_RANKFILE 5;
  11.     const POSITION_TIER_FOURTH 4;
  12.     const POSITION_TIER_THIRD 3;
  13.     const POSITION_TIER_SECOND 2;
  14.     const POSITION_TIER_FIRST 1;
  15.     const POSITION_TIER_THRONE 0;
  16.     const POSITION_TIER_TRAINEE 6;
  17.     const POSITION_TIER_NAMES = ["The Throne""1st Tier""2nd Tier""3rd Tier""4th Tier""Rank and File""Trainee"];
  18.     public $name;
  19.     protected $UNIT_ID;
  20.     protected $POSI_ID;
  21.     function __construct(){
  22.         $this->type cint_TYPE_POSITION;
  23.         parent::__construct();
  24.     }
  25.     function __toString() {
  26.         return "" $this->getID();
  27.     }
  28.     function getPrimaryField(){
  29.         return 'POSI_ID';
  30.     }
  31.     function getTable(){
  32.         return 'POSITION';
  33.     }
  34.     function initialize(){
  35.         $this->id $this->POSI_ID;
  36.         $this->type cint_TYPE_POSITION;
  37.         $this->typeName 'Position';
  38.         $this->name $this->POSI_NAME;
  39.         $this->branchID $this->BRAN_ID;
  40.         $this->branch Branch::load([$this->BRAN_ID]);
  41.         $this->unitID $this->UNIT_ID;
  42.         $this->unit Unit::load([$this->UNIT_ID]);
  43.         $this->tier $this->POSI_TIER;
  44.         $this->public = (bool) $this->POSI_PUBLIC;
  45.         $this->pay $this->POSI_PAY;
  46.     }
  47.     
  48.   /**  function delete($objUser) {
  49.         if($this->getUsers() == null) {
  50.             DB::prepare("DELETE FROM !! WHERE !! = ?", $this->getTable(), $this->getPrimaryField(), $this->getID());
  51.             Event::send($objUser->id, cint_RECEIVER_ADMIN, $objUser->name . 'has deleted the position ' . $this->name . 'from the database.', cint_EVENTTYPE_POSITION);
  52.             return true;
  53.         }
  54.         
  55.         return false;
  56.     } **/
  57.     
  58.     function getName() {
  59.         return $this->name;
  60.     }
  61.     
  62.     function setName($name) {
  63.         $name trim($name);
  64.         $name str_replace("'"'`'$name);
  65.         
  66.         if($name != $this->name && $name != '' && $name != NULL) {
  67.             $this->updateFields(array('POSI_NAME' => $name));
  68.             $this->refresh();
  69.         }
  70.         
  71.         return true;
  72.     }
  73.     /**
  74.      * @return Unit
  75.      */
  76.     function getUnit() {
  77.         if(!isset($this->unit)) {
  78.             $get Unit::load(array($this->unitID));
  79.             $this->unit $get;
  80.         }
  81.         
  82.         return $this->unit;
  83.     }
  84.     /**
  85.      * @return Branch
  86.      */
  87.     function getBranch() {
  88.         if(!isset($this->branch)) {
  89.             $get Branch::load(array($this->branchID));
  90.             $this->branch $get;
  91.         }
  92.         
  93.         return $this->branch;
  94.     }
  95.     /**
  96.      * Get the users with this position
  97.      *
  98.      * @param bool $forceArray
  99.      * @return User|User[] array of User objects or a single User object, depending
  100.      * @throws \Exception
  101.      */
  102.     function getUsers($forceArray false) {
  103.         $get db::prepare("SELECT * FROM MEMBER_POSITION WHERE POSI_ID = ?"$this->id);
  104.         $res db::fetchArrayOfObjects($get);
  105.         
  106.         if(count($res) > 0) {
  107.             if(count($res) > 1) {
  108.                 $membIDs = [];
  109.                 foreach($res as $row) {
  110.                     $membIDs[] = $row->MEMB_ID;
  111.                 }
  112.                 $users User::load($membIDs$forceArray);
  113.                 return $users;
  114.             } else {
  115.                 $user User::load(array($res[0]->MEMB_ID), $forceArray);
  116.                 return $user;
  117.             }
  118.         } else {
  119.             return null;
  120.         }
  121.     }
  122.     
  123.     function loadMemberData($intUserID$refresh false) {
  124.         if(!isset($this->MEMB_ID) || !isset($this->MEPO_ID) || $refresh) {
  125.             $get db::prepare("SELECT * FROM MEMBER_POSITION WHERE POSI_ID=? AND MEMB_ID=?"$this->id$intUserID);
  126.             $obj db::fetchObject($get);
  127.             $this->MEMB_ID $obj->MEMB_ID;
  128.             $this->MEPO_ID $obj->MEPO_ID;
  129.         }
  130.         return;
  131.     }
  132.     /**
  133.      * @param $prefix
  134.      * @return string
  135.      */
  136.     public function getTierImage($prefix) {
  137.         if($this->tier 5) {
  138.             $co = ['DarkViolet''gold''silver''gold''silver'];
  139.             $ci = ['gold''gold''gold''silver''silver'];
  140.             return '<strong style="color: '.$co[$this->tier].'; cursor: help" title="'self::POSITION_TIER_NAMES[$this->tier].'">{<span class="fab fa-empire" style="color: '$ci[$this->tier]  .'"></span>}</strong>';
  141.         } else {
  142.             return '<span class="fab fa-empire" style="cursor: help; color: silver;" title="Rank and File"></span>';
  143.         }
  144.     }
  145.     /**
  146.      * Determines whether a user has the permissions to edit this user. TODO
  147.      * @param User $user
  148.      * @return bool
  149.      */
  150.     public function isEditable(User $user) {
  151.         return $this->getUnit()->isEditable($user);
  152.     }
  153.     /**
  154.      * Returns all keys associated with this position. Alias for Access::positionKeys.
  155.      * @return Key[];
  156.      */
  157.     public function getKeys() {
  158.         return Access::positionKeys($this);
  159.     }
  160.     /**
  161.      * @param $strPosition
  162.      * @param $strBranch
  163.      * @param null $strUnit
  164.      * @return null
  165.      * @throws \Exception
  166.      */
  167.     public static function getPositionIDByName($strPosition$strBranch$strUnit=null) {
  168.         if(!is_null($strUnit)) {
  169.             $query db::prepare("SELECT POSI.POSI_ID FROM POSITION AS POSI
  170.               LEFT JOIN BRANCH AS BRAN ON POSI.BRAN_ID = BRAN.BRAN_ID
  171.               LEFT JOIN UNIT ON POSI.UNIT_ID = UNIT.UNIT_ID
  172.               WHERE POSI.POSI_NAME = ? AND BRAN.BRAN_NAME = ? AND UNIT.UNIT_NAME = ?"$strPosition$strBranch$strUnit);
  173.         } else {
  174.             $query db::prepare("SELECT POSI.POSI_ID FROM POSITION AS POSI
  175.               LEFT JOIN BRANCH AS BRAN ON POSI.BRAN_ID = BRAN.BRAN_ID
  176.               LEFT JOIN UNIT ON POSI.UNIT_ID = UNIT.UNIT_ID
  177.               WHERE POSI.POSI_NAME = ? AND BRAN.BRAN_NAME = ?"$strPosition$strBranch);
  178.         }
  179.         $ret db::fetchObject($query);
  180.         
  181.         if(isset($ret->POSI_ID)) {
  182.             return $ret->POSI_ID;
  183.         }
  184.         
  185.         return null;
  186.     }
  187.     
  188.     public static function getNameByID($intPositionID) {
  189.         $position Position::load(array($intPositionID));
  190.         
  191.         return $position->name;
  192.     }
  193.     
  194.     public static function getNameByMEPOID($intMEPOID) {
  195.         $res db::prepare("SELECT * FROM MEMBER_POSITION WHERE MEPO_ID = ?"$intMEPOID);
  196.         $obj db::fetchObject($res);
  197.         
  198.         $position Position::load(array($obj->POSI_ID));
  199.         
  200.         return $position->name;
  201.     }
  202.     public static function getPosByMEPOID($intMEPOID) {
  203.         $res db::prepare("SELECT * FROM MEMBER_POSITION WHERE MEPO_ID = ?"$intMEPOID);
  204.         $obj db::fetchObject($res);
  205.         
  206.         $position Position::load(array($obj->POSI_ID));
  207.         
  208.         return $position;
  209.     }
  210.     /**
  211.      * @param $intBranchID
  212.      * @param $intUnitID
  213.      * @param $name
  214.      * @param $tier
  215.      * @return bool
  216.      * @throws \Exception
  217.      */
  218.     public static function add($intBranchID$intUnitID$name$tier$public false) {
  219.         if($intBranchID <= || $intUnitID <= 0) {
  220.             return false;
  221.         }
  222.         $query db::prepare("SELECT POSI.POSI_ID FROM POSITION AS POSI
  223.                                 LEFT JOIN BRANCH AS BRAN ON POSI.BRAN_ID = BRAN.BRAN_ID
  224.                                 LEFT JOIN UNIT ON POSI.UNIT_ID = UNIT.UNIT_ID
  225.                                 WHERE POSI.POSI_NAME = ? AND BRAN.BRAN_ID = ? AND UNIT.UNIT_ID = ?",
  226.                                     $name
  227.                                     $intBranchID,
  228.                                     $intUnitID);
  229.         if(db::numRows($query) > 0) {
  230.             throw new \Exception('Position already exists.'10);
  231.         }
  232.         
  233.         $insertID db::insert('POSITION', array('BRAN_ID' => (int)$intBranchID'UNIT_ID' => (int)$intUnitID'POSI_NAME' => $name'POSI_TIER' => $tier'POSI_PUBLIC' => $public'POSI_PAY' => 0));
  234.         
  235.         if($insertID 0) {
  236.             $position Position::load(array($insertID));
  237.             return true;
  238.         }
  239.         return false;
  240.     }
  241.     /**
  242.      * @param $intPositionID
  243.      * @param bool $useAlias
  244.      * @param int $offset
  245.      * @return \stdClass
  246.      * @throws \Exception
  247.      */
  248.     public static function getAvatarByPosition($intPositionID$useAlias false$offset 0) {
  249.         $ObjReturn = new \stdClass;
  250.         
  251.         if($intPositionID 0) {
  252.             if(null === ($position Position::load(array($intPositionID)))) {
  253.                 throw new \Exception('Unknown Position');
  254.             }
  255.             if(!$position->isPublic()){
  256.                 // if the position isnt public, we return vacant to hide it. Get out of here, spies.
  257.                 $ObjReturn->BRAN_NAME '';
  258.                 $ObjReturn->UNIT_NAME '';
  259.                 $ObjReturn->POSI_NAME '';
  260.                 $ObjReturn->MEMB_AVATAR "<img src='http://art.swc-empire.com/avatar/posi_vacant.png'/>";
  261.                 $ObjReturn->AVATAR_SRC 'http://art.swc-empire.com/avatar/posi_vacant.png';
  262.                 $ObjReturn->MEMB_NAME "Position Vacant";
  263.                 return $ObjReturn;
  264.             }
  265.             $ObjReturn->BRAN_NAME $position->getBranch()->getName();
  266.             $ObjReturn->UNIT_NAME $position->getUnit()->getName();
  267.             $ObjReturn->POSI_NAME $position->name;
  268.             //Forcing the use of Alias, if branch is Sith.
  269.             if($position->getBranch()->id == cint_BRANCH_SITH$useAlias true;
  270.             $users $position->getUsers();
  271.             if($users == null) {
  272.                 //nobody has this position
  273.                 $ObjReturn->MEMB_AVATAR "<img src='http://art.swc-empire.com/avatar/posi_vacant.png'/>";
  274.                 $ObjReturn->AVATAR_SRC 'http://art.swc-empire.com/avatar/posi_vacant.png';
  275.                 $ObjReturn->MEMB_NAME "Position Vacant";
  276.             } elseif(is_array($users)) {
  277.                 //more than one person has this position
  278.                 if($offset >= count($users)) {
  279.                     //we're looking for a higher offset than the number of people with the position
  280.                     $ObjReturn->MEMB_AVATAR "<img src='http://art.swc-empire.com/avatar/posi_vacant.png'/>";
  281.                     $ObjReturn->AVATAR_SRC 'http://art.swc-empire.com/avatar/posi_vacant.png';
  282.                     $ObjReturn->MEMB_NAME "Position Vacant";
  283.                 } else {
  284.                     $user $users[$offset];
  285.                     $ObjReturn->MEMB_NAME $user->getName($useAlias);
  286.                     $ObjReturn->MEMB_AVATAR AvatarImageService::getAvatarUrl($user$useAlias);
  287.                     $ObjReturn->AVATAR_SRC AvatarImageService::getAvatarUrl($user$useAliasfalse);
  288.                 }
  289.             } else {
  290.                 //only one person has this position
  291.                 if($offset 0) {
  292.                     //we're looking for the Nth person with this position but only one person has it,
  293.                     //so don't show that person multiple times, just throw up the vacant avatar
  294.                     $ObjReturn->MEMB_AVATAR "<img src='http://art.swc-empire.com/avatar/posi_vacant.png'/>";
  295.                     $ObjReturn->AVATAR_SRC 'http://art.swc-empire.com/avatar/posi_vacant.png';
  296.                     $ObjReturn->MEMB_NAME "Position Vacant";
  297.                 } else {
  298.                     $ObjReturn->MEMB_NAME $users->getName($useAlias);
  299.                     $ObjReturn->MEMB_AVATAR AvatarImageService::getAvatarUrl($users$useAlias);
  300.                     $ObjReturn->AVATAR_SRC AvatarImageService::getAvatarUrl($users$useAliasfalse);
  301.                 }
  302.             }
  303.         } else {
  304.             $ObjReturn->BRAN_NAME '';
  305.             $ObjReturn->UNIT_NAME '';
  306.             $ObjReturn->POSI_NAME '';
  307.             $ObjReturn->MEMB_AVATAR "<img src='http://art.swc-empire.com/avatar/posi_vacant.png'/>";
  308.             $ObjReturn->AVATAR_SRC 'http://art.swc-empire.com/avatar/posi_vacant.png';
  309.             $ObjReturn->MEMB_NAME "Position Vacant";
  310.         }
  311.         
  312.         return $ObjReturn;
  313.     }
  314.     public static function getPositionsForAutocomplete($searchUser $user null) {
  315.         if(!is_null($user)) {
  316.             $units Unit::loadEditable($user0true);
  317.             $perms = [];
  318.             foreach ($units as $unit) {
  319.                 $perms[] = $unit->getID();
  320.             }
  321.             $get db::prepare('SELECT * FROM POSITION WHERE UNIT_ID IN ? AND POSI_NAME LIKE ?'$perms"%".$search."%");
  322.         } else {
  323.             $get db::prepare('SELECT * FROM POSITION WHERE POSI_NAME LIKE ?'"%".$search."%");
  324.         }
  325.         $arr db::fetchArrayOfObjects($getPosition::class);
  326.         if(!is_array($arr)) $arr = [];
  327.         return array_map(function(Position $item) {
  328.             return [
  329.                 'value' => $item->getID(),
  330.                 'label' => $item->getName(),
  331.                 'unit'  => $item->getUnit()->getName(),
  332.                 'parent' => !is_null($item->getUnit()->getParent()) ? $item->getUnit()->getParent()->getName() : null,
  333.                 'branch' => $item->getBranch()->getName(),
  334.             ];
  335.         }, $arr);
  336.     }
  337.     public static function getTierNames() {
  338.         $return = [];
  339.         foreach (self::POSITION_TIER_NAMES as $val => $item) {
  340.             $return[] = ['id' => $val'name' => $item];
  341.         }
  342.         return $return;
  343.     }
  344.     public static function getMemberIDs($positionid) {
  345.         $fetch db::prepare("SELECT * FROM MEMBER_POSITION WHERE POSI_ID = ?"$positionid);
  346.         $arr db::fetchArrayOfObjects($fetch);
  347.         
  348.         if(count($arr) > 0) {
  349.             $get = [];
  350.             foreach($arr as $row) {
  351.                 $get[] = $row->MEMB_ID;
  352.             }
  353.             return $get;
  354.         }
  355.     }
  356.     public static function getActiveDiscordMembers($positionid){
  357.         $activestatus cint_STATUS_ACTIVE;
  358.         $fetch db::prepare("SELECT * FROM MEMBER_POSITION
  359.         LEFT JOIN MEMBER ON MEMBER_POSITION.MEMB_ID = MEMBER.MEMB_ID
  360.         WHERE POSI_ID = $positionid AND STAT_ID = $activestatus AND MEMB_SNOWFLAKE IS NOT NULL");
  361.         $arr db::fetchArrayOfObjects($fetch);
  362.         if(count($arr) > 0) {
  363.             $get = [];
  364.             foreach($arr as $row) {
  365.                 $get[] = $row->MEMB_ID;
  366.             }
  367.             return $get;
  368.         }
  369.     }
  370.     public function isPublic(){
  371.         if ($this->public){
  372.             return true;
  373.         } else {
  374.             return false;
  375.         }
  376.     }
  377.     /**
  378.      * @param string $pay the pay.
  379.      * @throws \Doctrine\DBAL\DBALException
  380.      */
  381.     function setPay($pay) {
  382.         $this->pay $pay;
  383.         $this->POSI_PAY $pay;
  384.         $this->updateFields(['POSI_PAY' => $pay]);
  385.         return $this;
  386.     }
  387.         /**
  388.      * @param string $name the branch name
  389.      * @return static
  390.      * @throws \Exception
  391.      */
  392.     public static function loadByName($name) {
  393.         $result db::prepare("SELECT * FROM POSITION WHERE POSI_NAME LIKE ? LIMIT 1"$name);
  394.         return db::fetchObject($resultget_called_class());
  395.     }
  396. }