/**
 * Imports product data from request parameters.
 * @param  string $source Source request method for parameters
 * @param  array  $ritem  Existing product data from database
 * @param  array  $auth   Permissions array
 * @return array          Product data
 */
function cot_market_import($source = 'POST', $ritem = array(), $auth = array())
{
    global $cfg, $db_market, $cot_extrafields, $usr, $sys;
    if (count($auth) == 0) {
        $auth = cot_page_auth($ritem['item_cat']);
    }
    if ($source == 'D' || $source == 'DIRECT') {
        // A trick so we don't have to affect every line below
        global $_PATCH;
        $_PATCH = $ritem;
        $source = 'PATCH';
    }
    $ritem['item_cat'] = cot_import('rcat', $source, 'TXT');
    $ritem['item_title'] = cot_import('rtitle', $source, 'TXT');
    $ritem['item_alias'] = cot_import('ralias', $source, 'TXT');
    $ritem['item_text'] = cot_import('rtext', $source, 'HTM');
    $ritem['item_cost'] = cot_import('rcost', $source, 'NUM');
    $ritem['item_parser'] = cot_import('rparser', $source, 'ALP');
    if (empty($ritem['item_date'])) {
        $ritem['item_date'] = (int) $sys['now'];
    } else {
        $ritem['item_update'] = (int) $sys['now'];
    }
    if ($auth['isadmin'] && isset($ritem['item_userid'])) {
        $ritem['item_count'] = cot_import('rcount', $source, 'INT');
        $ritem['item_userid'] = $ritem['item_userid'];
    } else {
        $ritem['item_userid'] = $usr['id'];
    }
    // Extra fields
    foreach ($cot_extrafields[$db_market] as $exfld) {
        $ritem['item_' . $exfld['field_name']] = cot_import_extrafields('ritem' . $exfld['field_name'], $exfld, $source, $ritem['item_' . $exfld['field_name']]);
    }
    return $ritem;
}
/**
 * Updates a page in the CMS.
 * @param  integer $id    Page ID
 * @param  array   $rpage Page data
 * @param  array   $auth  Permissions array
 * @return boolean        TRUE on success, FALSE on error
 */
function cot_page_update($id, &$rpage, $auth = array())
{
    global $cache, $cfg, $db, $db_pages, $db_structure, $structure, $L;
    if (cot_error_found()) {
        return false;
    }
    if (count($auth) == 0) {
        $auth = cot_page_auth($rpage['page_cat']);
    }
    if (!empty($rpage['page_alias'])) {
        $page_count = $db->query("SELECT COUNT(*) FROM {$db_pages} WHERE page_alias = ? AND page_id != ?", array($rpage['page_alias'], $id))->fetchColumn();
        if ($page_count > 0) {
            $rpage['page_alias'] = $rpage['page_alias'] . rand(1000, 9999);
        }
    }
    $row_page = $db->query("SELECT * FROM {$db_pages} WHERE page_id = ?", $id)->fetch();
    if ($row_page['page_cat'] != $rpage['page_cat'] && $row_page['page_state'] == 0) {
        $db->query("UPDATE {$db_structure} SET structure_count=structure_count-1 WHERE structure_code = ? AND structure_area = 'page'", $row_page['page_cat']);
    }
    //$usr['isadmin'] = cot_auth('page', $rpage['page_cat'], 'A');
    if ($rpage['page_state'] == 0) {
        if ($auth['isadmin'] && $cfg['page']['autovalidate']) {
            if ($row_page['page_state'] != 0 || $row_page['page_cat'] != $rpage['page_cat']) {
                $db->query("UPDATE {$db_structure} SET structure_count=structure_count+1 WHERE structure_code = ? AND structure_area = 'page'", $rpage['page_cat']);
            }
        } else {
            $rpage['page_state'] = 1;
        }
    }
    if ($rpage['page_state'] != 0 && $row_page['page_state'] == 0) {
        $db->query("UPDATE {$db_structure} SET structure_count=structure_count-1 WHERE structure_code = ?", $rpage['page_cat']);
    }
    $cache && $cache->db->remove('structure', 'system');
    if (!$db->update($db_pages, $rpage, 'page_id = ?', $id)) {
        return false;
    }
    cot_extrafield_movefiles();
    /* === Hook === */
    foreach (cot_getextplugins('page.edit.update.done') as $pl) {
        include $pl;
    }
    /* ===== */
    if (($rpage['page_state'] == 0 || $rpage['page_cat'] != $row_page['page_cat']) && $cache) {
        if ($cfg['cache_page']) {
            $cache->page->clear('page/' . str_replace('.', '/', $structure['page'][$rpage['page_cat']]['path']));
            if ($rpage['page_cat'] != $row_page['page_cat']) {
                $cache->page->clear('page/' . str_replace('.', '/', $structure['page'][$row_page['page_cat']]['path']));
            }
        }
        if ($cfg['cache_index']) {
            $cache->page->clear('index');
        }
    }
    return true;
}