public static function CancelAuction($auctionId)
 {
     global $config, $user;
     // validate args
     $auctionId = floor((int) $auctionId);
     if ($auctionId < 1) {
         $_SESSION['error'][] = 'Invalid auction id!';
         return FALSE;
     }
     // query auction
     $auction = QueryAuctions::QuerySingle($auctionId);
     if (!$auction) {
         $_SESSION['error'][] = 'Auction not found!';
         return FALSE;
     }
     // isAdmin or owns auction
     if (!$user->hasPerms('isAdmin') && $auction->getSellerId() != $user->getId()) {
         $_SESSION['error'][] = 'You don\'t own that auction!';
         return FALSE;
     }
     // remove auction
     self::RemoveAuction($auctionId, -1);
     // add item to inventory
     $tableRowId = ItemFuncs::AddCreateItem($auction->getSellerId(), $auction->getItem());
     // add sale log
     $Item = $auction->getItem();
     LogSales::addLog(LogSales::LOG_CANCEL, LogSales::SALE_BUYNOW, $user->getId(), NULL, $Item, 0.0, FALSE, '');
     return TRUE;
 }
 public static function SellShop($shopId, $qty)
 {
     global $config, $user;
     // has canSell permissions
     if (!$user->hasPerms('canSell')) {
         $_SESSION['error'][] = 'You don\'t have permission to sell.';
         return FALSE;
     }
     // sanitize args
     $shopId = (int) $shopId;
     $qty = (int) $qty;
     if ($shopId < 1) {
         $_SESSION['error'][] = 'Invalid server shop id!';
         return FALSE;
     }
     if ($qty < 1) {
         $_SESSION['error'][] = 'Invalid qty!';
         return FALSE;
     }
     // query shop
     $shop = QueryAuctions::QuerySingleShop($shopId);
     if (!$shop) {
         $_SESSION['error'][] = 'Shop not found!';
         return FALSE;
     }
     $shopItem = $shop->getItem();
     if (!$shopItem) {
         $_SESSION['error'][] = 'Failed to get item info for server shop!';
         return FALSE;
     }
     // query player items
     $Items = QueryItems::QueryInventory($user->getId(), $shopItem);
     if (!$Items) {
         $_SESSION['error'][] = 'Failed to get item from inventory!';
         return FALSE;
     }
     // shop price
     $shopPrice = $shop->getPriceSell();
     if ($shopPrice <= 0.0) {
         $_SESSION['error'][] = 'Cannot sell to this shop!';
         return FALSE;
     }
     // sell multiple stacks
     $hasFound = FALSE;
     $soldCount = 0;
     while (TRUE) {
         $Item = $Items->getNext();
         // no more stacks found
         if (!$Item) {
             break;
         }
         // remove empty stack
         if ($Item->getItemQty() <= 0) {
             ItemFuncs::RemoveItem($Item->getTableRowId(), -1);
             continue;
         }
         // sold enough
         if ($soldCount >= $qty) {
             break;
         }
         $hasFound = TRUE;
         // sell partial stack
         if ($qty - $soldCount < $Item->getItemQty()) {
             $sellQty = $qty - $soldCount;
             $soldCount += $sellQty;
             if (!ItemFuncs::RemoveItem($Item->getTableRowId(), $sellQty)) {
                 $_SESSION['error'][] = 'Failed to remove sold item!';
                 return FALSE;
             }
             // sell full stack
         } else {
             $soldCount += $Item->getItemQty();
             if (!ItemFuncs::RemoveItem($Item->getTableRowId(), -1)) {
                 $_SESSION['error'][] = 'Failed to remove sold item!';
                 return FALSE;
             }
         }
     }
     // no items sold
     if (!$hasFound || $soldCount <= 0) {
         $_SESSION['error'][] = 'You don\'t have any of this item!';
         return FALSE;
     }
     // price for sold items
     $priceTotal = $shopPrice * (double) $soldCount;
     // success
     $_SESSION['success'][] = 'Sold ' . $soldCount . ' items for ' . SettingsClass::getString('Currency Prefix') . $priceTotal . SettingsClass::getString('Currency Postfix');
     // make payment to seller
     UserClass::PaymentQuery($user->getName(), $user->getUUID(), $priceTotal);
     // sold less than requested
     if ($qty > $soldCount) {
         $_SESSION['error'][] = 'You don\'t have that many!';
     }
     // add sale log
     $Item->setItemQty($soldCount);
     LogSales::addLog(LogSales::LOG_SALE, LogSales::SALE_SERVER, NULL, $user->getId(), $Item, $priceTotal, FALSE, '', FALSE);
     return TRUE;
 }