Back to PhocacartEdit class

Method store

public static
store
(mixed &$options)

Method store - Source code

public static function store(&$options)
{
    $user = Factory::getUser();
    $canCreate = $user->authorise('core.create', 'com_phocacart');
    $canEdit = $user->authorise('core.edit', 'com_phocacart');
    $paramsC = PhocacartUtils::getComponentParameters();
    $admin_eip_title = $paramsC->get('admin_eip_title', 4);
    if ($canCreate || $canEdit) {
    } else {
        $options['msg'] = Text::_('COM_PHOCACART_NO_RIGHTS_EDIT_ITEMS');
        return false;
    }
    $idA = explode(':', $options['id']);
    //table:column:id
    $tableDb = '';
    // No direct access to table - this is why tables are listed here
    $tableDbName = '';
    $column = '';
    // No direct access to column - this is why columns are listed here
    $allowedTables = array('#__phocacart_products' => 'PhocaCartItem', '#__phocacart_currencies' => 'PhocacartCurrency', '#__phocacart_taxes' => 'PhocacartTax', '#__phocacart_coupons' => 'PhocacartCoupon', '#__phocacart_discounts' => 'PhocacartDiscount', '#__phocacart_payment_methods' => 'PhocacartPayment', '#__phocacart_shipping_methods' => 'PhocacartShipping');
    $allowedColumns = array('price', 'price_original', 'title', 'sku', 'hits', 'stock', 'exchange_rate', 'tax_rate', 'discount', 'cost', 'upc', 'ean', 'jan', 'isbn', 'mpn', 'serial_number', 'registration_key', 'external_id', 'external_key', 'external_link', 'external_text', 'external_link2', 'external_text2', 'min_quantity', 'min_multiple_quantity', 'unit_amount', 'unit_unit', 'length', 'width', 'height', 'weight', 'volume', 'points_needed', 'points_received', 'description', 'description_long', 'features', 'video', 'type_feed', 'type_category_feed', 'metakey', 'metadesc', 'metatitle');
    // Alias can be edited
    if ($admin_eip_title == 3 || $admin_eip_title == 4) {
        $allowedColumns[] = 'alias';
    }
    $requiredColumns = array('title', 'alias');
    /* This can be specified for different tables
    		 * if ($tableDb == 'products') {
    			$requiredColumns = array(
    				'title', 'alias'
    			);
    		}*/
    if (isset($idA[0])) {
        $tableDbTest = '#__phocacart_' . PhocacartText::filterValue($idA[0], 'alphanumeric2');
        if (array_key_exists($tableDbTest, $allowedTables)) {
            $tableDb = $tableDbTest;
            $tableDbName = $allowedTables[$tableDbTest];
        }
    }
    if (isset($idA[1])) {
        $columnTest = $idA[1];
        if (in_array($columnTest, $allowedColumns)) {
            $column = PhocacartText::filterValue($columnTest, 'alphanumeric2');
        }
        if (in_array($columnTest, $requiredColumns)) {
            if ($options['value'] == '') {
                $options['msg'] = Text::_('COM_PHOCACART_VALUE_CANNOT_BE_EMPTY');
                return false;
            }
        }
    }
    switch ($column) {
        case 'price':
        case 'price_original':
        case 'exchange_rate':
        case 'tax_rate':
        case 'discount':
        case 'cost':
            $options['value'] = PhocacartUtils::replaceCommaWithPoint($options['value']);
            $options['value'] = (float) $options['value'];
            break;
        case 'stock':
            $options['value'] = (int) $options['value'];
            break;
        case 'title':
        case 'alias':
            $options['value'] = strip_tags($options['value']);
            break;
    }
    if ($tableDb == '') {
        $options['msg'] = Text::_('COM_PHOCACART_TABLE_EMPTY_OR_NOT_ALLOWED');
        return false;
    }
    if ($column == '') {
        $options['msg'] = Text::_('COM_PHOCACART_COLUMN_EMPTY_OR_NOT_ALLOWED');
        return false;
    }
    if ($tableDbName != '' && $tableDb != '' && $column != '' && isset($idA[2]) && (int) $idA[2] > 0) {
        $idRow = (int) $idA[2];
        // TEST CHECKOUT
        $user = Factory::getUser();
        // Get an instance of the row to checkout.
        Table::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_phocacart/tables');
        $table = Table::getInstance($tableDbName, 'Table');
        if (!$table->load($idRow)) {
            $options['msg'] = $table->getError();
            //throw new RuntimeException($tableDb->getError());
            return false;
        }
        // Check if this is the user having previously checked out the row.
        if ($table->checked_out > 0 && $table->checked_out != $user->get('id')) {
            $options['msg'] = Text::_('JLIB_APPLICATION_ERROR_CHECKOUT_USER_MISMATCH');
            //throw new RuntimeException(JText::_('JLIB_APPLICATION_ERROR_CHECKOUT_USER_MISMATCH'));
            return false;
        }
        // Attempt to check the row out.
        if (!$table->checkout($user->get('id'), $idRow)) {
            $options['msg'] = $table->getError();
            //throw new RuntimeException($tableDb->getError());
            return false;
        }
        // DATA
        $data = array();
        $db = Factory::getDBO();
        $data[$column] = $options['value'];
        if ($column == 'title') {
            // Update even alias it this is set in options
            // Alias can be overwritten by title
            if ($admin_eip_title == 2 || $admin_eip_title == 4) {
                $options['valuecombined'] = strip_tags(PhocacartUtils::getAliasName($options['value']));
                if (isset($idA[0])) {
                    $options['idcombined'] = strip_tags($idA[0]) . ':alias:' . (int) $idRow;
                }
                $data['alias'] = $options['valuecombined'];
            }
        }
        // After saving the item will be free
        $data['checked_out'] = 0;
        $data['checked_out_time'] = '0000-00-00 00:00:00';
        if (!$table->bind($data)) {
            $options['msg'] = $table->getError();
            return false;
        }
        if (!$table->check()) {
            $options['msg'] = $table->getError();
            return false;
        }
        if (!$table->store()) {
            $options['msg'] = $table->getError();
            return false;
        }
        // Update product price history and product group price
        if ($tableDbName == 'PhocaCartItem' && $column == 'price') {
            // Update price history
            PhocacartPriceHistory::storePriceHistoryById((int) $idRow, $data['price']);
            // Update group price
            PhocacartGroup::updateGroupProductPriceById((int) $idRow, $data['price']);
        }
        /*
        $db	= Factory::getDBO();
        $q	= 'UPDATE '.$tableDb.' SET '.$db->quoteName($column).' = '.$db->quote($options['value']).' WHERE id = '.(int)$idRow;
        
        $db->setQuery($q);
        $db->execute();
        
        if ($column == 'title') {
        
        	// Update even alias
        	$column = 'alias';
        	$options['valuecombined'] = strip_tags(PhocacartUtils::getAliasName($options['value']));
        	if (isset($idA[0])) {
        		$options['idcombined'] = strip_tags($idA[0]).':alias:' . (int)$idRow;
        	}
        	$q	= 'UPDATE '.$tableDb.' SET '.$db->quoteName($column).' = '.$db->quote($options['valuecombined']).',  WHERE id = '.(int)$idRow;
        
        	$db->setQuery($q);
        	$db->execute();
        }
        */
        return true;
    } else {
        $options['msg'] = Text::_('COM_PHOCACART_TABLE_OR_COLUMN_EMPTY');
    }
    return false;
}