Esempio n. 1
0
function ciniki_artistprofiles_web_subMenuItems(&$ciniki, $settings, $business_id, $args)
{
    if (!isset($ciniki['business']['modules']['ciniki.artistprofiles'])) {
        return array('stat' => '404', 'err' => array('pkg' => 'ciniki', 'code' => '3040', 'msg' => "I'm sorry, the file you requested does not exist."));
    }
    //
    // Return nothing if the page format doesn't have a submenu
    //
    if (isset($settings['page-artistprofiles-submenu']) && $settings['page-artistprofiles-submenu'] != 'yes') {
        return array('stat' => 'ok', 'submenu' => array());
    }
    $submenu = array();
    //
    // Check if Categories is enabled
    //
    if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.artistprofiles', 0x100)) {
        //
        // Load the settings for categories
        //
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbDetailsQueryDash');
        $rc = ciniki_core_dbDetailsQueryDash($ciniki, 'ciniki_artistprofiles_settings', 'business_id', $business_id, 'ciniki.artistprofiles', 'settings', 'tag-category');
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (isset($rc['settings'])) {
            $psettings = $rc['settings'];
        } else {
            $psettings = array();
        }
        if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.artistprofiles', 0x200)) {
            $submenu['featured'] = array('sequence' => 1, 'title' => 'Featured', 'sequence' => isset($psettings['tag-category-sequence-featured']) && $psettings['tag-category-sequence-featured'] != '' ? $psettings['tag-category-sequence-featured'] : 1, 'title' => isset($psettings['tag-category-title-featured']) && $psettings['tag-category-title-featured'] != '' ? $psettings['tag-category-title-featured'] : 'Featured', 'image_id' => isset($args['content']) && $args['content'] == 'yes' && isset($psettings['tag-category-image-featured']) ? $psettings['tag-category-image-featured'] : '', 'content' => isset($args['content']) && $args['content'] == 'yes' && isset($psettings['tag-category-content-featured']) ? $psettings['tag-category-content-featured'] : '', 'permalink' => 'featured');
        }
        //
        // Load the list of tags
        //
        $strsql = "SELECT DISTINCT tag_name, permalink " . "FROM ciniki_artistprofiles_tags " . "WHERE business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND tag_type = 10 " . "";
        $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.artistprofiles', 'category');
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (isset($rc['rows'])) {
            $categories = $rc['rows'];
            foreach ($categories as $cat) {
                $submenu[$cat['permalink']] = array('sequence' => isset($psettings['tag-category-sequence-' . $cat['permalink']]) && $psettings['tag-category-sequence-' . $cat['permalink']] != '' ? $psettings['tag-category-sequence-' . $cat['permalink']] : 10, 'title' => isset($psettings['tag-category-title-' . $cat['permalink']]) && $psettings['tag-category-title-' . $cat['permalink']] != '' ? $psettings['tag-category-title-' . $cat['permalink']] : $cat['tag_name'], 'image_id' => isset($args['content']) && $args['content'] == 'yes' && isset($psettings['tag-category-image-' . $cat['permalink']]) ? $psettings['tag-category-image-' . $cat['permalink']] : '', 'content' => isset($args['content']) && $args['content'] == 'yes' && isset($psettings['tag-category-content-' . $cat['permalink']]) ? $psettings['tag-category-content-' . $cat['permalink']] : '', 'permalink' => $cat['permalink']);
            }
        }
        //
        // Sort the submenu
        //
        uasort($submenu, function ($a, $b) {
            if ($a['sequence'] == $b['sequence']) {
                return strcmp($b['title'], $a['title']);
            }
            return $a['sequence'] < $b['sequence'] ? -1 : 1;
        });
    }
    return array('stat' => 'ok', 'submenu' => $submenu);
}
Esempio n. 2
0
function ciniki_artistprofiles_artistList($ciniki)
{
    //
    // Find all the required and optional arguments
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'prepareArgs');
    $rc = ciniki_core_prepareArgs($ciniki, 'no', array('business_id' => array('required' => 'yes', 'blank' => 'no', 'name' => 'Business'), 'category_permalink' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Category')));
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    $args = $rc['args'];
    //
    // Check access to business_id as owner, or sys admin.
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'artistprofiles', 'private', 'checkAccess');
    $rc = ciniki_artistprofiles_checkAccess($ciniki, $args['business_id'], 'ciniki.artistprofiles.artistList');
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    //
    // Get the list of artists
    //
    if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.artistprofiles', 0x100) && isset($args['category_permalink']) && $args['category_permalink'] != '') {
        if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.artistprofiles', 0x200) && $args['category_permalink'] == 'featured') {
            $strsql = "SELECT ciniki_artistprofiles.id, " . "ciniki_artistprofiles.name, " . "ciniki_artistprofiles.sort_name, " . "ciniki_artistprofiles.permalink, " . "ciniki_artistprofiles.status, " . "ciniki_artistprofiles.flags " . "FROM ciniki_artistprofiles " . "WHERE ciniki_artistprofiles.business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "AND (flags&0x01) = 0x01 " . "ORDER BY sort_name " . "";
        } else {
            $strsql = "SELECT ciniki_artistprofiles.id, " . "ciniki_artistprofiles.name, " . "ciniki_artistprofiles.sort_name, " . "ciniki_artistprofiles.permalink, " . "ciniki_artistprofiles.status, " . "ciniki_artistprofiles.flags " . "FROM ciniki_artistprofiles_tags, ciniki_artistprofiles " . "WHERE ciniki_artistprofiles_tags.business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "AND ciniki_artistprofiles_tags.tag_type = 10 " . "AND ciniki_artistprofiles_tags.permalink = '" . ciniki_core_dbQuote($ciniki, $args['category_permalink']) . "' " . "AND ciniki_artistprofiles_tags.artist_id = ciniki_artistprofiles.id " . "AND ciniki_artistprofiles.business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "ORDER BY sort_name " . "";
        }
    } else {
        $strsql = "SELECT ciniki_artistprofiles.id, " . "ciniki_artistprofiles.name, " . "ciniki_artistprofiles.sort_name, " . "ciniki_artistprofiles.permalink, " . "ciniki_artistprofiles.status, " . "ciniki_artistprofiles.flags " . "FROM ciniki_artistprofiles " . "WHERE ciniki_artistprofiles.business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "ORDER BY sort_name " . "";
    }
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbHashQueryArrayTree');
    $rc = ciniki_core_dbHashQueryArrayTree($ciniki, $strsql, 'ciniki.artistprofiles', array(array('container' => 'artists', 'fname' => 'id', 'fields' => array('id', 'name', 'sort_name', 'permalink', 'status', 'flags'))));
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    if (isset($rc['artists'])) {
        $artists = $rc['artists'];
    } else {
        $artists = array();
    }
    $rsp = array('stat' => 'ok', 'artists' => $artists);
    //
    // Return list of categories
    //
    if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.artistprofiles', 0x100)) {
        ciniki_core_loadMethod($ciniki, 'ciniki', 'artistprofiles', 'web', 'subMenuItems');
        $rc = ciniki_artistprofiles_web_subMenuItems($ciniki, array(), $args['business_id'], array());
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        $rsp['categories'] = $rc['submenu'];
    }
    return $rsp;
}
Esempio n. 3
0
function ciniki_merchandise_productSearch($ciniki)
{
    //
    // Find all the required and optional arguments
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'prepareArgs');
    $rc = ciniki_core_prepareArgs($ciniki, 'no', array('business_id' => array('required' => 'yes', 'blank' => 'no', 'name' => 'Business'), 'start_needle' => array('required' => 'yes', 'blank' => 'no', 'name' => 'Search String'), 'limit' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Limit')));
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    $args = $rc['args'];
    //
    // Check access to business_id as owner, or sys admin.
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'merchandise', 'private', 'checkAccess');
    $rc = ciniki_merchandise_checkAccess($ciniki, $args['business_id'], 'ciniki.merchandise.productList');
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    //
    // Get the list of products
    //
    $strsql = "SELECT ciniki_merchandise.id, " . "ciniki_merchandise.code, " . "ciniki_merchandise.name, " . "ciniki_merchandise.permalink, " . "ciniki_merchandise.status, " . "ciniki_merchandise.sequence, " . "ciniki_merchandise.flags, " . "ciniki_merchandise.unit_amount, " . "ciniki_merchandise.unit_discount_amount, " . "ciniki_merchandise.unit_discount_percentage, " . "ciniki_merchandise.taxtype_id, " . "ciniki_merchandise.inventory, " . "ciniki_merchandise.shipping_other, " . "ciniki_merchandise.shipping_CA, " . "ciniki_merchandise.shipping_US, " . "ciniki_merchandise.primary_image_id, " . "ciniki_merchandise.synopsis, " . "ciniki_merchandise.description " . "FROM ciniki_merchandise " . "WHERE ciniki_merchandise.business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "";
    if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.merchandise', 0x1)) {
        $strsql .= "AND (code LIKE '" . ciniki_core_dbQuote($ciniki, $args['start_needle']) . "%' " . "OR code LIKE '% " . ciniki_core_dbQuote($ciniki, $args['start_needle']) . "%' " . "OR name LIKE '" . ciniki_core_dbQuote($ciniki, $args['start_needle']) . "%' " . "OR name LIKE '% " . ciniki_core_dbQuote($ciniki, $args['start_needle']) . "%' " . ") ";
    } else {
        $strsql .= "AND (name LIKE '" . ciniki_core_dbQuote($ciniki, $args['start_needle']) . "%' " . "OR name LIKE '% " . ciniki_core_dbQuote($ciniki, $args['start_needle']) . "%' " . ") ";
    }
    if (isset($args['limit']) && is_numeric($args['limit']) && $args['limit'] > 0) {
        $strsql .= "LIMIT " . ciniki_core_dbQuote($ciniki, $args['limit']) . " ";
    } else {
        $strsql .= "LIMIT 25 ";
    }
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbHashQueryArrayTree');
    $rc = ciniki_core_dbHashQueryArrayTree($ciniki, $strsql, 'ciniki.merchandise', array(array('container' => 'products', 'fname' => 'id', 'fields' => array('id', 'code', 'name', 'permalink', 'status', 'sequence', 'flags', 'unit_amount', 'unit_discount_amount', 'unit_discount_percentage', 'taxtype_id', 'inventory', 'shipping_other', 'shipping_CA', 'shipping_US', 'primary_image_id', 'synopsis', 'description'))));
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    if (isset($rc['products'])) {
        $products = $rc['products'];
        foreach ($products as $pid => $product) {
            if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.merchandise', 0x1) && $product['code'] != '') {
                $products[$pid]['display_name'] = $product['code'] . ' - ' . $product['name'];
            } else {
                $products[$pid]['display_name'] = $product['name'];
            }
        }
    } else {
        $products = array();
    }
    return array('stat' => 'ok', 'products' => $products);
}
Esempio n. 4
0
function ciniki_merchandise_web_productList($ciniki, $settings, $business_id, $args)
{
    //
    // Load INTL settings
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'businesses', 'private', 'intlSettings');
    $rc = ciniki_businesses_intlSettings($ciniki, $business_id);
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    $intl_timezone = $rc['settings']['intl-default-timezone'];
    $intl_currency_fmt = numfmt_create($rc['settings']['intl-default-locale'], NumberFormatter::CURRENCY);
    $intl_currency = $rc['settings']['intl-default-currency'];
    //
    // Load the list of products for an object
    //
    if (isset($args['object']) && $args['object'] != '' && isset($args['object_id']) && $args['object_id'] != '') {
        $strsql = "SELECT ciniki_merchandise_objrefs.id AS ref_id, " . "ciniki_merchandise.id, " . "ciniki_merchandise.code, " . "ciniki_merchandise.name, " . "ciniki_merchandise.permalink, " . "ciniki_merchandise.inventory, " . "ciniki_merchandise.unit_amount, " . "ciniki_merchandise.primary_image_id, " . "ciniki_merchandise.synopsis, ";
        if (isset($settings['page-merchandise-active']) && $settings['page-merchandise-active'] == 'yes') {
            $strsql .= "'yes' AS is_details ";
        } else {
            $strsql .= "'no' AS is_details ";
        }
        $strsql .= "FROM ciniki_merchandise_objrefs " . "LEFT JOIN ciniki_merchandise ON (" . "ciniki_merchandise_objrefs.product_id = ciniki_merchandise.id " . "AND ciniki_merchandise.status = 10 " . "AND (ciniki_merchandise.flags&0x01) = 0x01 " . "AND ciniki_merchandise.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . ") " . "WHERE ciniki_merchandise_objrefs.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND ciniki_merchandise_objrefs.object = '" . ciniki_core_dbQuote($ciniki, $args['object']) . "' " . "AND ciniki_merchandise_objrefs.object_id = '" . ciniki_core_dbQuote($ciniki, $args['object_id']) . "' " . "ORDER BY ciniki_merchandise_objrefs.sequence, ciniki_merchandise.name " . "";
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbHashQueryArrayTree');
        $rc = ciniki_core_dbHashQueryArrayTree($ciniki, $strsql, 'ciniki.merchandise', array(array('container' => 'products', 'fname' => 'id', 'fields' => array('id', 'code', 'name', 'permalink', 'image_id' => 'primary_image_id', 'synopsis', 'is_details'))));
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (isset($rc['products'])) {
            foreach ($rc['products'] as $pid => $product) {
                $rc['products'][$pid]['localurl'] = '/merchandise/' . $product['permalink'];
                if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.merchandise', 0x1)) {
                    $rc['products'][$pid]['title'] = ($product['code'] != '' ? $product['code'] . ' - ' : '') . $product['name'];
                } else {
                    $rc['products'][$pid]['title'] = $product['name'];
                }
                //                $rc['products'][$pid]['unit_amount_display'] = numfmt_format_currency($intl_currency_fmt, $product['unit_amount'], $intl_currency);
            }
            return array('stat' => 'ok', 'products' => $rc['products']);
        } else {
            return array('stat' => 'ok', 'products' => array());
        }
    }
    return array('stat' => 'ok', 'products' => array());
}
Esempio n. 5
0
function ciniki_artistprofiles_hooks_uiSettings($ciniki, $business_id, $args)
{
    //
    // Setup the default response
    //
    $rsp = array('stat' => 'ok', 'menu_items' => array(), 'settings_menu_items' => array());
    //
    // Check permissions for what menu items should be available
    //
    if (isset($ciniki['business']['modules']['ciniki.artistprofiles']) && (isset($args['permissions']['owners']) || isset($args['permissions']['employees']) || isset($args['permissions']['resellers']) || ($ciniki['session']['user']['perms'] & 0x1) == 0x1)) {
        $menu_item = array('priority' => 3700, 'label' => 'Artist Profiles', 'edit' => array('app' => 'ciniki.artistprofiles.main'));
        $rsp['menu_items'][] = $menu_item;
    }
    //
    // Check if Dropbox has been enabled
    //
    if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.artistprofiles', 0x1) && (isset($args['permissions']['owners']) || isset($args['permissions']['resellers']) || ($ciniki['session']['user']['perms'] & 0x1) == 0x1)) {
        $rsp['settings_menu_items'][] = array('priority' => 3700, 'label' => 'Artist Profiles', 'edit' => array('app' => 'ciniki.artistprofiles.settings'));
    }
    return $rsp;
}
Esempio n. 6
0
function ciniki_merchandise_hooks_productList($ciniki, $business_id, $args)
{
    //
    // Load INTL settings
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'businesses', 'private', 'intlSettings');
    $rc = ciniki_businesses_intlSettings($ciniki, $business_id);
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    $intl_timezone = $rc['settings']['intl-default-timezone'];
    $intl_currency_fmt = numfmt_create($rc['settings']['intl-default-locale'], NumberFormatter::CURRENCY);
    $intl_currency = $rc['settings']['intl-default-currency'];
    //
    // Load the list of products for an object
    //
    if (isset($args['object']) && $args['object'] != '' && isset($args['object_id']) && $args['object_id'] != '') {
        $strsql = "SELECT ciniki_merchandise_objrefs.id AS ref_id, " . "ciniki_merchandise.id, " . "ciniki_merchandise.code, " . "ciniki_merchandise.name, " . "ciniki_merchandise.inventory, " . "ciniki_merchandise.unit_amount " . "FROM ciniki_merchandise_objrefs " . "LEFT JOIN ciniki_merchandise ON (" . "ciniki_merchandise_objrefs.product_id = ciniki_merchandise.id " . "AND ciniki_merchandise.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . ") " . "WHERE ciniki_merchandise_objrefs.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND ciniki_merchandise_objrefs.object = '" . ciniki_core_dbQuote($ciniki, $args['object']) . "' " . "AND ciniki_merchandise_objrefs.object_id = '" . ciniki_core_dbQuote($ciniki, $args['object_id']) . "' " . "ORDER BY ciniki_merchandise_objrefs.sequence, ciniki_merchandise.name " . "";
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbHashQueryArrayTree');
        $rc = ciniki_core_dbHashQueryArrayTree($ciniki, $strsql, 'ciniki.merchandise', array(array('container' => 'products', 'fname' => 'id', 'fields' => array('ref_id', 'product_id' => 'id', 'code', 'name', 'inventory', 'unit_amount'))));
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (isset($rc['products'])) {
            foreach ($rc['products'] as $pid => $product) {
                if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.merchandise', 0x1) && $product['code'] != '') {
                    $rc['products'][$pid]['display_name'] = $product['code'] . ' - ' . $product['name'];
                } else {
                    $rc['products'][$pid]['display_name'] = $product['name'];
                }
                $rc['products'][$pid]['unit_amount_display'] = numfmt_format_currency($intl_currency_fmt, $product['unit_amount'], $intl_currency);
            }
            return array('stat' => 'ok', 'products' => $rc['products']);
        } else {
            return array('stat' => 'ok', 'products' => array());
        }
    }
    return array('stat' => 'fail', 'err' => array('code' => 'ciniki.merchandise.1', 'msg' => 'Unable to get the product list'));
}
Esempio n. 7
0
function ciniki_merchandise_web_processRequest(&$ciniki, $settings, $business_id, $args)
{
    if (!isset($ciniki['business']['modules']['ciniki.merchandise'])) {
        return array('stat' => '404', 'err' => array('code' => 'ciniki.merchandise.23', 'msg' => "I'm sorry, the page you requested does not exist."));
    }
    $page = array('title' => $args['page_title'], 'breadcrumbs' => $args['breadcrumbs'], 'blocks' => array());
    //
    // Setup titles
    //
    if (count($page['breadcrumbs']) == 0) {
        if (isset($settings['page-merchandise-name']) && $settings['page-merchandise-name'] != '') {
            $page['breadcrumbs'][] = array('name' => $settings['page-merchandise-name'], 'url' => $args['base_url']);
        } else {
            $page['breadcrumbs'][] = array('name' => 'Shop', 'url' => $args['base_url']);
        }
    }
    $display = '';
    $ciniki['response']['head']['og']['url'] = $args['domain_base_url'];
    //
    // Parse the url to determine what was requested
    //
    $categories = array();
    if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.merchandise', 0x4)) {
        $strsql = "SELECT ciniki_merchandise.primary_image_id AS image_id, " . "ciniki_merchandise_tags.permalink, " . "ciniki_merchandise_tags.tag_name AS title " . "FROM ciniki_merchandise, ciniki_merchandise_tags " . "WHERE ciniki_merchandise.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND (ciniki_merchandise.flags&0x01) = 0x01 " . "AND ciniki_merchandise.id = ciniki_merchandise_tags.product_id " . "AND ciniki_merchandise_tags.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND ciniki_merchandise_tags.tag_type = 10 " . "ORDER BY ciniki_merchandise_tags.permalink, ciniki_merchandise_tags.tag_name, ciniki_merchandise.primary_image_id DESC " . "";
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbHashQueryIDTree');
        $rc = ciniki_core_dbHashQueryIDTree($ciniki, $strsql, 'ciniki.merchandise', array(array('container' => 'categories', 'fname' => 'permalink', 'fields' => array('permalink', 'title', 'image_id'))));
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (isset($rc['categories']) && count($rc['categories']) > 0) {
            $categories = $rc['categories'];
        }
    }
    //
    // Setup the base url as the base url for this page. This may be altered below
    // as the uri_split is processed, but we do not want to alter the original passed in.
    //
    $base_url = $args['base_url'];
    //
    // Check if we are to display an image, from the gallery, or latest images
    //
    $display = '';
    $uri_split = $args['uri_split'];
    //
    // First check if there is a category and remove from uri_split
    //
    if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.merchandise', 0x4) && isset($categories) && isset($uri_split[0]) && isset($categories[$uri_split[0]])) {
        $category = $categories[$uri_split[0]];
        $page['title'] = $category['title'];
        $page['breadcrumbs'][] = array('name' => $category['title'], 'url' => $base_url . '/' . $category['permalink']);
        $base_url .= '/' . $category['permalink'];
        array_shift($uri_split);
    }
    //
    // Check for an product
    //
    if (isset($uri_split[0]) && $uri_split[0] != '') {
        $product_permalink = $uri_split[0];
        $display = 'product';
        //
        // Check for gallery pic request
        //
        if (isset($uri_split[1]) && $uri_split[1] == 'gallery' && isset($uri_split[2]) && $uri_split[2] != '') {
            $image_permalink = $uri_split[2];
            $display = 'productpic';
        }
        $ciniki['response']['head']['og']['url'] .= '/' . $product_permalink;
        $base_url .= '/' . $product_permalink;
    } elseif (isset($category)) {
        $display = 'categorylist';
    } elseif (isset($categories) && count($categories) > 0) {
        $display = 'categories';
    } else {
        $display = 'list';
    }
    if ($display == 'list') {
        //
        // Display list as thumbnails
        //
        $strsql = "SELECT id, code, name, permalink, primary_image_id AS image_id, synopsis, 'yes' AS is_details " . "FROM ciniki_merchandise " . "WHERE business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND (flags&0x01) = 0x01 " . "ORDER BY name ";
        $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.merchandise', 'product');
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (!isset($rc['rows']) || count($rc['rows']) == 0) {
            $page['blocks'][] = array('type' => 'content', 'content' => "There are currently no products available. Please check back soon.");
        } else {
            $page['blocks'][] = array('type' => 'imagelist', 'base_url' => $base_url, 'list' => $rc['rows']);
        }
    } elseif ($display == 'categorylist') {
        //
        // Display list as thumbnails
        //
        $strsql = "SELECT ciniki_merchandise.id, " . "ciniki_merchandise.name, " . "ciniki_merchandise.permalink, " . "ciniki_merchandise.primary_image_id AS image_id, " . "ciniki_merchandise.synopsis, " . "'yes' AS is_details " . "FROM ciniki_merchandise_tags, ciniki_merchandise " . "WHERE ciniki_merchandise_tags.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND ciniki_merchandise_tags.tag_type = 10 " . "AND ciniki_merchandise_tags.permalink = '" . ciniki_core_dbQuote($ciniki, $category['permalink']) . "' " . "AND ciniki_merchandise_tags.product_id = ciniki_merchandise.id " . "AND ciniki_merchandise.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND (ciniki_merchandise.flags&0x01) = 0x01 " . "ORDER BY ciniki_merchandise.code, ciniki_merchandise.name " . "";
        $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.merchandise', 'product');
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (!isset($rc['rows']) || count($rc['rows']) == 0) {
            $page['blocks'][] = array('type' => 'content', 'content' => "There are currently no products available. Please check back soon.");
        } elseif (count($rc['rows']) == 1) {
            $display = 'product';
            $product_permalink = $rc['rows'][0]['permalink'];
            $base_url .= '/' . $product_permalink;
        } else {
            $page['blocks'][] = array('type' => 'imagelist', 'base_url' => $base_url, 'noimage' => 'yes', 'list' => $rc['rows']);
        }
    } elseif ($display == 'categories') {
        $page['blocks'][] = array('type' => 'tagimages', 'base_url' => $base_url, 'tags' => $categories);
    }
    if ($display == 'product' || $display == 'productpic') {
        if (isset($category)) {
            $ciniki['response']['head']['links'][] = array('rel' => 'canonical', 'href' => $args['base_url'] . '/' . $product_permalink);
        }
        ciniki_core_loadMethod($ciniki, 'ciniki', 'merchandise', 'web', 'productLoad');
        $rc = ciniki_merchandise_web_productLoad($ciniki, $business_id, array('permalink' => $product_permalink, 'images' => 'yes'));
        if ($rc['stat'] != 'ok') {
            return array('stat' => '404', 'err' => array('code' => 'ciniki.merchandise.24', 'msg' => "We're sorry, the page you requested is not available."));
        }
        if (!isset($rc['product'])) {
            return array('stat' => '404', 'err' => array('code' => 'ciniki.merchandise.25', 'msg' => "We're sorry, the page you requested is not available."));
        } else {
            $product = $rc['product'];
            $page['title'] = $product['name'];
            $page['breadcrumbs'][] = array('name' => $product['name'], 'url' => $base_url . '/' . $product['permalink']);
            if ($display == 'productpic') {
                if (!isset($product['images']) || count($product['images']) < 1) {
                    $page['blocks'][] = array('type' => 'message', 'content' => "I'm sorry, but we can't seem to find the image you requested.");
                } else {
                    ciniki_core_loadMethod($ciniki, 'ciniki', 'web', 'private', 'galleryFindNextPrev');
                    $rc = ciniki_web_galleryFindNextPrev($ciniki, $product['images'], $image_permalink);
                    if ($rc['stat'] != 'ok') {
                        return $rc;
                    }
                    if ($rc['img'] == NULL) {
                        $page['blocks'][] = array('type' => 'message', 'content' => "I'm sorry, but we can't seem to find the image you requested.");
                    } else {
                        $page['breadcrumbs'][] = array('name' => $rc['img']['title'], 'url' => $base_url . '/gallery/' . $image_permalink);
                        if ($rc['img']['title'] != '') {
                            $page['title'] .= ' - ' . $rc['img']['title'];
                        }
                        $block = array('type' => 'galleryimage', 'primary' => 'yes', 'image' => $rc['img']);
                        if ($rc['prev'] != null) {
                            $block['prev'] = array('url' => $base_url . '/gallery/' . $rc['prev']['permalink'], 'image_id' => $rc['prev']['image_id']);
                        }
                        if ($rc['next'] != null) {
                            $block['next'] = array('url' => $base_url . '/gallery/' . $rc['next']['permalink'], 'image_id' => $rc['next']['image_id']);
                        }
                        $page['blocks'][] = $block;
                    }
                }
            } else {
                if (isset($product['primary_image_id']) && $product['primary_image_id'] > 0) {
                    $page['blocks'][] = array('type' => 'image', 'section' => 'primary-image', 'primary' => 'yes', 'image_id' => $product['primary_image_id'], 'title' => $product['name'], 'caption' => $product['primary_image_caption'], 'base_url' => $base_url . '/gallery', 'permalink' => $product['uuid']);
                }
                if (isset($product['description']) && $product['description'] != '') {
                    $page['blocks'][] = array('type' => 'content', 'section' => 'content', 'title' => '', 'content' => $product['description']);
                } elseif (isset($product['synopsis']) && $product['synopsis'] != '') {
                    $page['blocks'][] = array('type' => 'content', 'section' => 'content', 'title' => '', 'content' => $product['synopsis']);
                }
                // Add share buttons
                if (!isset($settings['page-merchandise-share-buttons']) || $settings['page-merchandise-share-buttons'] == 'yes') {
                    $page['blocks'][] = array('type' => 'sharebuttons', 'section' => 'share', 'pagetitle' => $product['name'], 'tags' => array());
                }
                // Add gallery
                if (isset($product['images']) && ($product['primary_image_id'] > 0 && count($product['images']) > 1 || $product['primary_image_id'] == 0 && count($product['images']) > 0)) {
                    $page['blocks'][] = array('type' => 'gallery', 'title' => 'Additional Images', 'base_url' => $base_url . '/gallery', 'images' => $product['images']);
                }
            }
        }
    }
    //
    // Return error if nothing found to display
    //
    if ($display == '') {
        return array('stat' => '404', 'err' => array('code' => 'ciniki.merchandise.26', 'msg' => "We're sorry, the page you requested is not available."));
    }
    return array('stat' => 'ok', 'page' => $page);
}
Esempio n. 8
0
function ciniki_merchandise_productGet($ciniki)
{
    //
    // Find all the required and optional arguments
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'prepareArgs');
    $rc = ciniki_core_prepareArgs($ciniki, 'no', array('business_id' => array('required' => 'yes', 'blank' => 'no', 'name' => 'Business'), 'product_id' => array('required' => 'yes', 'blank' => 'no', 'name' => 'Merchandise Product'), 'images' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Images')));
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    $args = $rc['args'];
    //
    // Make sure this module is activated, and
    // check permission to run this function for this business
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'merchandise', 'private', 'checkAccess');
    $rc = ciniki_merchandise_checkAccess($ciniki, $args['business_id'], 'ciniki.merchandise.productGet');
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    //
    // Load business settings
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'businesses', 'private', 'intlSettings');
    $rc = ciniki_businesses_intlSettings($ciniki, $args['business_id']);
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    $intl_timezone = $rc['settings']['intl-default-timezone'];
    $intl_currency_fmt = numfmt_create($rc['settings']['intl-default-locale'], NumberFormatter::CURRENCY);
    $intl_currency = $rc['settings']['intl-default-currency'];
    ciniki_core_loadMethod($ciniki, 'ciniki', 'users', 'private', 'datetimeFormat');
    $datetime_format = ciniki_users_datetimeFormat($ciniki, 'php');
    //
    // Return default for new Merchandise Product
    //
    if ($args['product_id'] == 0) {
        $product = array('id' => 0, 'code' => '', 'name' => '', 'permalink' => '', 'status' => '10', 'sequence' => '1', 'flags' => '0', 'unit_amount' => '', 'unit_discount_amount' => '', 'unit_discount_percentage' => '', 'taxtype_id' => '0', 'inventory' => '', 'shipping_other' => '', 'shipping_CA' => '', 'shipping_US' => '', 'primary_image_id' => '0', 'synopsis' => '', 'description' => '', 'images' => array());
    } else {
        $strsql = "SELECT ciniki_merchandise.id, " . "ciniki_merchandise.code, " . "ciniki_merchandise.name, " . "ciniki_merchandise.permalink, " . "ciniki_merchandise.status, " . "ciniki_merchandise.sequence, " . "ciniki_merchandise.flags, " . "ciniki_merchandise.unit_amount, " . "ciniki_merchandise.unit_discount_amount, " . "ciniki_merchandise.unit_discount_percentage, " . "ciniki_merchandise.taxtype_id, " . "ciniki_merchandise.inventory, " . "ciniki_merchandise.shipping_other, " . "ciniki_merchandise.shipping_CA, " . "ciniki_merchandise.shipping_US, " . "ciniki_merchandise.primary_image_id, " . "ciniki_merchandise.synopsis, " . "ciniki_merchandise.description " . "FROM ciniki_merchandise " . "WHERE ciniki_merchandise.business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "AND ciniki_merchandise.id = '" . ciniki_core_dbQuote($ciniki, $args['product_id']) . "' " . "";
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbHashQuery');
        $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.merchandise', 'product');
        if ($rc['stat'] != 'ok') {
            return array('stat' => 'fail', 'err' => array('code' => 'ciniki.merchandise.17', 'msg' => 'Merchandise Product not found', 'err' => $rc['err']));
        }
        if (!isset($rc['product'])) {
            return array('stat' => 'fail', 'err' => array('code' => 'ciniki.merchandise.18', 'msg' => 'Unable to find Merchandise Product'));
        }
        $product = $rc['product'];
        $product['unit_amount'] = $product['unit_amount'] == 0 ? '' : numfmt_format_currency($intl_currency_fmt, $product['unit_amount'], $intl_currency);
        $product['unit_discount_amount'] = $product['unit_discount_amount'] == 0 ? '' : numfmt_format_currency($intl_currency_fmt, $product['unit_discount_amount'], $intl_currency);
        $product['shipping_other'] = $product['shipping_other'] == 0 ? '' : numfmt_format_currency($intl_currency_fmt, $product['shipping_other'], $intl_currency);
        $product['shipping_CA'] = $product['shipping_CA'] == 0 ? '' : numfmt_format_currency($intl_currency_fmt, $product['shipping_CA'], $intl_currency);
        $product['shipping_US'] = $product['shipping_US'] == 0 ? '' : numfmt_format_currency($intl_currency_fmt, $product['shipping_US'], $intl_currency);
        //
        // Get any tags for this product
        //
        if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.merchandise', 0x4)) {
            $product['categories'] = array();
            $strsql = "SELECT tag_type, tag_name AS lists " . "FROM ciniki_merchandise_tags " . "WHERE product_id = '" . ciniki_core_dbQuote($ciniki, $args['product_id']) . "' " . "AND business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "ORDER BY tag_type, tag_name " . "";
            ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbHashQueryTree');
            $rc = ciniki_core_dbHashQueryTree($ciniki, $strsql, 'ciniki.merchandise', array(array('container' => 'tags', 'fname' => 'tag_type', 'name' => 'tags', 'fields' => array('tag_type', 'lists'), 'dlists' => array('lists' => '::'))));
            if ($rc['stat'] != 'ok') {
                return $rc;
            }
            if (isset($rc['tags'])) {
                foreach ($rc['tags'] as $tags) {
                    if ($tags['tags']['tag_type'] == 10) {
                        $product['categories'] = $tags['tags']['lists'];
                    }
                }
            }
        }
        //
        // Get the list of object references for this product
        //
        $strsql = "SELECT id, object, object_id, 'Unknown' as display_name " . "FROM ciniki_merchandise_objrefs " . "WHERE product_id = '" . ciniki_core_dbQuote($ciniki, $args['product_id']) . "' " . "";
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbHashQueryArrayTree');
        $rc = ciniki_core_dbHashQueryArrayTree($ciniki, $strsql, 'ciniki.merchandise', array(array('container' => 'objrefs', 'fname' => 'id', 'fields' => array('id', 'object', 'object_id', 'display_name'))));
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (isset($rc['objrefs'])) {
            $product['objrefs'] = $rc['objrefs'];
            foreach ($product['objrefs'] as $rid => $ref) {
                list($pkg, $mod, $obj) = explode('.', $ref['object']);
                $rc = ciniki_core_loadMethod($ciniki, $pkg, $mod, 'hooks', 'getObjectName');
                if ($rc['stat'] == 'ok') {
                    $fn = $rc['function_call'];
                    $rc = $fn($ciniki, $args['business_id'], array('object' => $ref['object'], 'object_id' => $ref['object_id']));
                    if ($rc['stat'] == 'ok' && isset($rc['name'])) {
                        $product['objrefs'][$rid]['display_name'] = $rc['name'];
                    }
                }
            }
        } else {
            $product['objrefs'] = array();
        }
        //
        // Get the additional images for this product
        //
        if (isset($args['images']) && $args['images'] == 'yes') {
            ciniki_core_loadMethod($ciniki, 'ciniki', 'images', 'hooks', 'loadThumbnail');
            $strsql = "SELECT ciniki_merchandise_images.id, " . "ciniki_merchandise_images.image_id, " . "ciniki_merchandise_images.name, " . "ciniki_merchandise_images.sequence, " . "ciniki_merchandise_images.description " . "FROM ciniki_merchandise_images " . "WHERE ciniki_merchandise_images.product_id = '" . ciniki_core_dbQuote($ciniki, $args['product_id']) . "' " . "AND ciniki_merchandise_images.business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "ORDER BY ciniki_merchandise_images.sequence, ciniki_merchandise_images.date_added, ciniki_merchandise_images.name " . "";
            $rc = ciniki_core_dbHashQueryArrayTree($ciniki, $strsql, 'ciniki.artcatalog', array(array('container' => 'images', 'fname' => 'id', 'fields' => array('id', 'image_id', 'name', 'sequence', 'description'))));
            if ($rc['stat'] != 'ok') {
                return $rc;
            }
            if (isset($rc['images'])) {
                $product['images'] = $rc['images'];
                foreach ($product['images'] as $inum => $img) {
                    if (isset($img['image_id']) && $img['image_id'] > 0) {
                        $rc = ciniki_images_hooks_loadThumbnail($ciniki, $args['business_id'], array('image_id' => $img['image_id'], 'maxlength' => 75));
                        if ($rc['stat'] != 'ok') {
                            return $rc;
                        }
                        $product['images'][$inum]['image_data'] = 'data:image/jpg;base64,' . base64_encode($rc['image']);
                    }
                }
            }
        }
    }
    $rsp = array('stat' => 'ok', 'product' => $product);
    //
    // Check if all tags should be returned
    //
    $rsp['categories'] = array();
    if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.merchandise', 0x4)) {
        //
        // Get the available tags
        //
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbQueryList');
        $strsql = "SELECT DISTINCT tag_name FROM ciniki_merchandise_tags WHERE tag_type = 10 AND business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' ";
        $rc = ciniki_core_dbQueryList($ciniki, $strsql, 'ciniki.merchandise', 'categories', 'tag_name');
        if ($rc['stat'] != 'ok') {
            return array('stat' => 'fail', 'err' => array('code' => 'ciniki.merchandise.19', 'msg' => 'Unable to get list of categories', 'err' => $rc['err']));
        }
        if (isset($rc['categories'])) {
            $rsp['categories'] = $rc['categories'];
        }
    }
    return $rsp;
}
Esempio n. 9
0
function ciniki_merchandise_productAdd(&$ciniki)
{
    //
    // Find all the required and optional arguments
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'prepareArgs');
    $rc = ciniki_core_prepareArgs($ciniki, 'no', array('business_id' => array('required' => 'yes', 'blank' => 'no', 'name' => 'Business'), 'code' => array('required' => 'no', 'blank' => 'yes', 'trimblanks' => 'yes', 'name' => 'Product Code'), 'name' => array('required' => 'yes', 'blank' => 'no', 'trimblanks' => 'yes', 'name' => 'Product Name'), 'permalink' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Permalink'), 'status' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Status'), 'sequence' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Sequence'), 'flags' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Options'), 'unit_amount' => array('required' => 'no', 'blank' => 'yes', 'type' => 'currency', 'name' => 'Price'), 'unit_discount_amount' => array('required' => 'no', 'blank' => 'yes', 'type' => 'currency', 'name' => 'Discount Amount'), 'unit_discount_percentage' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Discount Percentage'), 'taxtype_id' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Tax Type'), 'inventory' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Inventory'), 'shipping_other' => array('required' => 'no', 'blank' => 'yes', 'type' => 'currency', 'name' => 'Shipping Cost Other'), 'shipping_CA' => array('required' => 'no', 'blank' => 'yes', 'type' => 'currency', 'name' => 'Shipping Canada'), 'shipping_US' => array('required' => 'no', 'blank' => 'yes', 'type' => 'currency', 'name' => 'Shipping USA'), 'primary_image_id' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Image'), 'synopsis' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Synopsis'), 'description' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Description'), 'object' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Object'), 'object_id' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Object ID'), 'image_id' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Additional Image'), 'categories' => array('required' => 'no', 'blank' => 'yes', 'type' => 'list', 'delimiter' => '::', 'name' => 'Categories')));
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    $args = $rc['args'];
    //
    // Check access to business_id as owner
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'merchandise', 'private', 'checkAccess');
    $rc = ciniki_merchandise_checkAccess($ciniki, $args['business_id'], 'ciniki.merchandise.productAdd');
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    //
    // Make sure code is unique
    //
    if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.merchandise', 0x1)) {
        if (!isset($args['code']) || $args['code'] == '') {
            return array('stat' => 'fail', 'err' => array('code' => 'ciniki.merchandise.10', 'msg' => 'You must specify a code.'));
        }
        $strsql = "SELECT id, code, permalink " . "FROM ciniki_merchandise " . "WHERE business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "AND code = '" . ciniki_core_dbQuote($ciniki, $args['code']) . "' " . "";
        $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.merchandise', 'item');
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if ($rc['num_rows'] > 0) {
            return array('stat' => 'fail', 'err' => array('code' => 'ciniki.merchandise.11', 'msg' => 'You already have a product with that code, please choose another.'));
        }
    }
    //
    // Setup permalink
    //
    if (!isset($args['permalink']) || $args['permalink'] == '') {
        if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.merchandise', 0x1)) {
            ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'makePermalink');
            $args['permalink'] = ciniki_core_makePermalink($ciniki, $args['code'] . '-' . $args['name']);
        } else {
            ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'makePermalink');
            $args['permalink'] = ciniki_core_makePermalink($ciniki, $args['name']);
        }
    }
    //
    // Make sure the permalink is unique
    //
    $strsql = "SELECT id, name, permalink " . "FROM ciniki_merchandise " . "WHERE business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "AND permalink = '" . ciniki_core_dbQuote($ciniki, $args['permalink']) . "' " . "";
    $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.merchandise', 'item');
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    if ($rc['num_rows'] > 0) {
        return array('stat' => 'fail', 'err' => array('code' => 'ciniki.merchandise.12', 'msg' => 'You already have a merchandise product with that name, please choose another.'));
    }
    //
    // Start transaction
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbTransactionStart');
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbTransactionRollback');
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbTransactionCommit');
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbAddModuleHistory');
    $rc = ciniki_core_dbTransactionStart($ciniki, 'ciniki.merchandise');
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    //
    // Add the merchandise product to the database
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'objectAdd');
    $rc = ciniki_core_objectAdd($ciniki, $args['business_id'], 'ciniki.merchandise.product', $args, 0x4);
    if ($rc['stat'] != 'ok') {
        ciniki_core_dbTransactionRollback($ciniki, 'ciniki.merchandise');
        return $rc;
    }
    $product_id = $rc['id'];
    //
    // Update the categories
    //
    if (isset($args['categories'])) {
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'tagsUpdate');
        $rc = ciniki_core_tagsUpdate($ciniki, 'ciniki.merchandise', 'tag', $args['business_id'], 'ciniki_merchandise_tags', 'ciniki_merchandise_history', 'product_id', $product_id, 10, $args['categories']);
        if ($rc['stat'] != 'ok') {
            ciniki_core_dbTransactionRollback($ciniki, 'ciniki.merchandise');
            return $rc;
        }
    }
    //
    // Add additional image if supplied
    //
    if (isset($args['image_id']) && $args['image_id'] > 0) {
        //
        // Get a UUID for use in permalink
        //
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbUUID');
        $rc = ciniki_core_dbUUID($ciniki, 'ciniki.merchandise');
        if ($rc['stat'] != 'ok') {
            return array('stat' => 'fail', 'err' => array('code' => 'ciniki.merchandise.13', 'msg' => 'Unable to get a new UUID', 'err' => $rc['err']));
        }
        $args['uuid'] = $rc['uuid'];
        //
        // Setup permalink
        //
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'makePermalink');
        $args['permalink'] = ciniki_core_makePermalink($ciniki, $args['uuid']);
        $args['name'] = '';
        //
        // Add the product image to the database
        //
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'objectAdd');
        $rc = ciniki_core_objectAdd($ciniki, $args['business_id'], 'ciniki.merchandise.productimage', $args, 0x4);
        if ($rc['stat'] != 'ok') {
            ciniki_core_dbTransactionRollback($ciniki, 'ciniki.merchandise');
            return $rc;
        }
        $productimage_id = $rc['id'];
    }
    //
    // If the object is specified
    //
    if (isset($args['object']) && $args['object'] != '' && isset($args['object_id']) && $args['object_id'] != '') {
        $rc = ciniki_core_objectAdd($ciniki, $args['business_id'], 'ciniki.merchandise.objref', array('product_id' => $product_id, 'object' => $args['object'], 'object_id' => $args['object_id'], 'sequence' => 1), 0x4);
        if ($rc['stat'] != 'ok') {
            ciniki_core_dbTransactionRollback($ciniki, 'ciniki.merchandise');
            return $rc;
        }
    }
    //
    // Commit the transaction
    //
    $rc = ciniki_core_dbTransactionCommit($ciniki, 'ciniki.merchandise');
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    //
    // Update the last_change date in the business modules
    // Ignore the result, as we don't want to stop user updates if this fails.
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'businesses', 'private', 'updateModuleChangeDate');
    ciniki_businesses_updateModuleChangeDate($ciniki, $args['business_id'], 'ciniki', 'merchandise');
    //
    // Update the web index if enabled
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'hookExec');
    ciniki_core_hookExec($ciniki, $args['business_id'], 'ciniki', 'web', 'indexObject', array('object' => 'ciniki.merchandise.product', 'object_id' => $product_id));
    return array('stat' => 'ok', 'id' => $product_id);
}
Esempio n. 10
0
function ciniki_artistprofiles_web_processRequest(&$ciniki, $settings, $business_id, $args)
{
    if (!isset($ciniki['business']['modules']['ciniki.artistprofiles'])) {
        return array('stat' => '404', 'err' => array('pkg' => 'ciniki', 'code' => '3041', 'msg' => "I'm sorry, the page you requested does not exist."));
    }
    $page = array('title' => $args['page_title'], 'breadcrumbs' => $args['breadcrumbs'], 'blocks' => array());
    //
    // Get the list of categories
    //
    if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.artistprofiles', 0x100)) {
        ciniki_core_loadMethod($ciniki, 'ciniki', 'artistprofiles', 'web', 'subMenuItems');
        $rc = ciniki_artistprofiles_web_subMenuItems($ciniki, $settings, $business_id, array('content' => 'yes'));
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (isset($rc['submenu'])) {
            $categories = $rc['submenu'];
        }
    }
    //
    // Setup titles
    //
    if (count($page['breadcrumbs']) == 0) {
        $page['breadcrumbs'][] = array('name' => 'Artists', 'url' => $args['base_url']);
    }
    $display = '';
    $ciniki['response']['head']['og']['url'] = $args['domain_base_url'];
    //
    // Parse the url to determine what was requested
    //
    //
    // Setup the base url as the base url for this page. This may be altered below
    // as the uri_split is processed, but we do not want to alter the original passed in.
    //
    $base_url = $args['base_url'];
    // . "/" . $args['blogtype'];
    //
    // Check if we are to display an image, from the gallery, or latest images
    //
    $display = '';
    //    $page['blocks'][] = array('type'=>'content', 'html'=>'<pre>' . print_r($categories, true) . "</pre>");
    //  return array('stat'=>'ok', 'page'=>$page);
    $uri_split = $args['uri_split'];
    //
    // First check if there is a category and remove from uri_split
    //
    if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.artistprofiles', 0x100) && isset($categories) && isset($uri_split[0]) && isset($categories[$uri_split[0]])) {
        $category = $categories[$uri_split[0]];
        $page['title'] = $category['title'];
        $page['breadcrumbs'][] = array('name' => $category['title'], 'url' => $base_url . '/' . $category['permalink']);
        $base_url .= '/' . $category['permalink'];
        array_shift($uri_split);
    }
    //
    // Check for an artist
    //
    if (isset($uri_split[0]) && $uri_split[0] != '') {
        $artist_permalink = $uri_split[0];
        $display = 'artist';
        //
        // Check for gallery pic request
        //
        if (isset($uri_split[1]) && $uri_split[1] == 'gallery' && isset($uri_split[2]) && $uri_split[2] != '') {
            $image_permalink = $uri_split[2];
            $display = 'artistpic';
        }
        $ciniki['response']['head']['og']['url'] .= '/' . $artist_permalink;
        $base_url .= '/' . $artist_permalink;
    } elseif (isset($category) && count($category) > 0) {
        $display = 'categorylist';
    } elseif (isset($categories) && count($categories) > 0) {
        $display = 'categories';
    } else {
        $display = 'list';
    }
    if ($display == 'list' || $display == 'categorylist' && $category['permalink'] == 'featured') {
        //
        // Display list as thumbnails
        //
        $strsql = "SELECT id, name, subname, permalink, primary_image_id AS image_id " . "FROM ciniki_artistprofiles " . "WHERE business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND status = 10 " . "";
        if ($category['permalink'] == 'featured') {
            $strsql .= "AND (flags&0x01) = 0x01 ";
        }
        $strsql .= "ORDER BY sort_name ";
        $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.artistprofiles', 'artist');
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (!isset($rc['rows']) || count($rc['rows']) == 0) {
            $page['blocks'][] = array('type' => 'content', 'content' => "There are currently no artist profiles available. Please check back soon.");
        } else {
            $page['blocks'][] = array('type' => 'tradingcards', 'base_url' => $base_url, 'cards' => $rc['rows']);
        }
    } elseif ($display == 'categorylist') {
        //
        // Display list as thumbnails
        //
        $strsql = "SELECT ciniki_artistprofiles.id, " . "ciniki_artistprofiles.name, " . "ciniki_artistprofiles.subname, " . "ciniki_artistprofiles.permalink, " . "ciniki_artistprofiles.primary_image_id AS image_id " . "FROM ciniki_artistprofiles_tags, ciniki_artistprofiles " . "WHERE ciniki_artistprofiles_tags.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND ciniki_artistprofiles_tags.tag_type = 10 " . "AND ciniki_artistprofiles_tags.permalink = '" . ciniki_core_dbQuote($ciniki, $category['permalink']) . "' " . "AND ciniki_artistprofiles_tags.artist_id = ciniki_artistprofiles.id " . "AND ciniki_artistprofiles.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND ciniki_artistprofiles.status = 10 " . "ORDER BY sort_name " . "";
        $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.artistprofiles', 'artist');
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (!isset($rc['rows']) || count($rc['rows']) == 0) {
            $page['blocks'][] = array('type' => 'content', 'content' => "There are currently no artist profiles available. Please check back soon.");
        } else {
            $page['blocks'][] = array('type' => 'tradingcards', 'base_url' => $base_url, 'cards' => $rc['rows']);
        }
    } elseif ($display == 'categories') {
        $page['blocks'][] = array('type' => 'tagimages', 'base_url' => $base_url, 'tags' => $categories);
    } elseif ($display == 'artist' || $display == 'artistpic') {
        if (isset($category)) {
            $ciniki['response']['head']['links'][] = array('rel' => 'canonical', 'href' => $args['base_url'] . '/' . $artist_permalink);
        }
        ciniki_core_loadMethod($ciniki, 'ciniki', 'artistprofiles', 'private', 'artistLoad');
        $rc = ciniki_artistprofiles_artistLoad($ciniki, $business_id, $artist_permalink, array('images' => 'yes', 'audio' => 'yes', 'videos' => 'yes', 'links' => 'yes'));
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (isset($rc['artist']) && $rc['artist']['status'] != 10) {
            return array('stat' => '404', 'err' => array('pkg' => 'ciniki', 'code' => '3038', 'msg' => "We're sorry, the page you requested is not available."));
        }
        if (!isset($rc['artist'])) {
            return array('stat' => '404', 'err' => array('pkg' => 'ciniki', 'code' => '3043', 'msg' => "We're sorry, the page you requested is not available."));
        } else {
            $artist = $rc['artist'];
            $page['title'] = $artist['name'];
            if (isset($artist['subname']) && $artist['subname'] != '') {
                $page['subtitle'] = $artist['subname'];
            }
            $page['breadcrumbs'][] = array('name' => $artist['name'], 'url' => $base_url);
            if ($display == 'artistpic') {
                $page['title'] = "<a href='{$base_url}'>" . $artist['name'] . "</a>";
                ciniki_core_loadMethod($ciniki, 'ciniki', 'web', 'private', 'galleryFindNextPrev');
                $rc = ciniki_web_galleryFindNextPrev($ciniki, $artist['images'], $image_permalink);
                if ($rc['stat'] != 'ok') {
                    return $rc;
                }
                if ($rc['img'] == NULL) {
                    $page['blocks'][] = array('type' => 'message', 'content' => "I'm sorry, but we can't seem to find the image you requested.");
                } else {
                    $page['breadcrumbs'][] = array('name' => $rc['img']['title'], 'url' => $base_url . '/gallery/' . $image_permalink);
                    if ($rc['img']['title'] != '') {
                        $page['title'] .= ' - ' . $rc['img']['title'];
                    }
                    $block = array('type' => 'galleryimage', 'section' => 'gallery-primary-image', 'primary' => 'yes', 'image' => $rc['img']);
                    if ($rc['prev'] != null) {
                        $block['prev'] = array('url' => $base_url . '/gallery/' . $rc['prev']['permalink'], 'image_id' => $rc['prev']['image_id']);
                    }
                    if ($rc['next'] != null) {
                        $block['next'] = array('url' => $base_url . '/gallery/' . $rc['next']['permalink'], 'image_id' => $rc['next']['image_id']);
                    }
                    $page['blocks'][] = $block;
                    $page['blocks'][] = array('type' => 'gallery', 'title' => 'Additional Images', 'section' => 'gallery-images', 'base_url' => $base_url . '/gallery', 'images' => $artist['images']);
                }
            } else {
                if (isset($artist['primary_image_id']) && $artist['primary_image_id'] > 0) {
                    $page['blocks'][] = array('type' => 'image', 'section' => 'primary-image', 'primary' => 'yes', 'image_id' => $artist['primary_image_id'], 'title' => $artist['name'], 'caption' => $artist['primary_image_caption']);
                }
                if (isset($artist['description']) && $artist['description'] != '') {
                    $page['blocks'][] = array('type' => 'content', 'section' => 'content', 'title' => '', 'content' => $artist['description']);
                } elseif (isset($artist['synopsis']) && $artist['synopsis'] != '') {
                    $page['blocks'][] = array('type' => 'content', 'section' => 'content', 'title' => '', 'content' => $artist['synopsis']);
                }
                if (isset($artist['links']) && count($artist['links']) > 0) {
                    $page['blocks'][] = array('type' => 'links', 'section' => 'links', 'title' => 'Links', 'links' => $artist['links']);
                }
                if (isset($artist['videos']) && count($artist['videos']) > 0) {
                    $page['blocks'][] = array('type' => 'videolinks', 'section' => 'videos', 'title' => 'Videos', 'videos' => $artist['videos']);
                }
                // Add share buttons
                if (!isset($settings['page-artistprofiles-share-buttons']) || $settings['page-artistprofiles-share-buttons'] == 'yes') {
                    $page['blocks'][] = array('type' => 'sharebuttons', 'section' => 'share', 'pagetitle' => $artist['name'], 'tags' => array());
                }
                // Add gallery
                if (isset($artist['images']) && ($artist['primary_image_id'] > 0 && count($artist['images']) > 1 || $artist['primary_image_id'] == 0 && count($artist['images']) > 0)) {
                    $page['blocks'][] = array('type' => 'gallery', 'title' => 'Additional Images', 'section' => 'additional-images', 'base_url' => $base_url . '/gallery', 'images' => $artist['images']);
                }
            }
        }
    } else {
        return array('stat' => '404', 'err' => array('pkg' => 'ciniki', 'code' => '3044', 'msg' => "We're sorry, the page you requested is not available."));
    }
    //
    // Setup the sidebar
    //
    if (isset($settings['page-artistprofiles-sidebar']) && $settings['page-artistprofiles-sidebar'] == 'yes' && isset($category)) {
        $page['sidebar'] = array();
        //
        // Get the list of artists for the current category
        //
        if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.artistprofiles', 0x200) && $category['permalink'] == 'featured') {
            $strsql = "SELECT ciniki_artistprofiles.id, " . "ciniki_artistprofiles.name, " . "ciniki_artistprofiles.subname, " . "ciniki_artistprofiles.permalink " . "FROM ciniki_artistprofiles " . "WHERE ciniki_artistprofiles.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND (flags&0x01) = 0x01 " . "AND status = 10 " . "ORDER BY sort_name " . "";
        } else {
            $strsql = "SELECT ciniki_artistprofiles.id, " . "ciniki_artistprofiles.name, " . "ciniki_artistprofiles.subname, " . "ciniki_artistprofiles.permalink " . "FROM ciniki_artistprofiles_tags, ciniki_artistprofiles " . "WHERE ciniki_artistprofiles_tags.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND ciniki_artistprofiles_tags.tag_type = 10 " . "AND ciniki_artistprofiles_tags.permalink = '" . ciniki_core_dbQuote($ciniki, $category['permalink']) . "' " . "AND ciniki_artistprofiles_tags.artist_id = ciniki_artistprofiles.id " . "AND ciniki_artistprofiles.business_id = '" . ciniki_core_dbQuote($ciniki, $business_id) . "' " . "AND status = 10 " . "ORDER BY sort_name " . "";
        }
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbHashQuery');
        $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.artistprofiles', 'profile');
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if (isset($rc['rows'])) {
            $artists = $rc['rows'];
            //
            // FIXME: Finish code for sidebar menu
            //
        }
    }
    return array('stat' => 'ok', 'page' => $page);
}
Esempio n. 11
0
function ciniki_merchandise_productUpdate(&$ciniki)
{
    //
    // Find all the required and optional arguments
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'prepareArgs');
    $rc = ciniki_core_prepareArgs($ciniki, 'no', array('business_id' => array('required' => 'yes', 'blank' => 'no', 'name' => 'Business'), 'product_id' => array('required' => 'yes', 'blank' => 'no', 'name' => 'Merchandise Product'), 'code' => array('required' => 'no', 'blank' => 'yes', 'trimblanks' => 'yes', 'name' => 'Product Code'), 'name' => array('required' => 'no', 'blank' => 'no', 'trimblanks' => 'yes', 'name' => 'Product Name'), 'permalink' => array('required' => 'no', 'blank' => 'no', 'name' => 'Permalink'), 'status' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Status'), 'sequence' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Sequence'), 'flags' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Options'), 'unit_amount' => array('required' => 'no', 'blank' => 'no', 'type' => 'currency', 'name' => 'Price'), 'unit_discount_amount' => array('required' => 'no', 'blank' => 'yes', 'type' => 'currency', 'name' => 'Discount Amount'), 'unit_discount_percentage' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Discount Percentage'), 'taxtype_id' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Tax Type'), 'inventory' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Inventory'), 'shipping_other' => array('required' => 'no', 'blank' => 'yes', 'type' => 'currency', 'name' => 'Shipping Cost Other'), 'shipping_CA' => array('required' => 'no', 'blank' => 'yes', 'type' => 'currency', 'name' => 'Shipping Canada'), 'shipping_US' => array('required' => 'no', 'blank' => 'yes', 'type' => 'currency', 'name' => 'Shipping USA'), 'primary_image_id' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Image'), 'synopsis' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Synopsis'), 'description' => array('required' => 'no', 'blank' => 'yes', 'name' => 'Description'), 'categories' => array('required' => 'no', 'blank' => 'yes', 'type' => 'list', 'delimiter' => '::', 'name' => 'Categories')));
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    $args = $rc['args'];
    //
    // Make sure this module is activated, and
    // check permission to run this function for this business
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'merchandise', 'private', 'checkAccess');
    $rc = ciniki_merchandise_checkAccess($ciniki, $args['business_id'], 'ciniki.merchandise.productUpdate');
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    //
    // Check if product already exists
    //
    $strsql = "SELECT id, code, name " . "FROM ciniki_merchandise " . "WHERE business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "AND id = '" . ciniki_core_dbQuote($ciniki, $args['product_id']) . "' " . "";
    $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.merchandise', 'product');
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    if (!isset($rc['product'])) {
        return array('stat' => 'fail', 'err' => array('code' => 'ciniki.merchandise.20', 'msg' => 'That product does not exist.'));
    }
    $product = $rc['product'];
    //
    // Check to make sure code is unique
    //
    if (isset($args['code'])) {
        $strsql = "SELECT id, code, permalink " . "FROM ciniki_merchandise " . "WHERE business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "AND code = '" . ciniki_core_dbQuote($ciniki, $args['code']) . "' " . "AND id <> '" . ciniki_core_dbQuote($ciniki, $args['product_id']) . "' " . "";
        $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.merchandise', 'item');
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if ($rc['num_rows'] > 0) {
            return array('stat' => 'fail', 'err' => array('code' => 'ciniki.merchandise.21', 'msg' => 'You already have a product with that code, please choose another.'));
        }
    }
    if (isset($args['name']) || isset($args['code'])) {
        if (ciniki_core_checkModuleFlags($ciniki, 'ciniki.merchandise', 0x1)) {
            ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'makePermalink');
            $args['permalink'] = ciniki_core_makePermalink($ciniki, (isset($args['code']) ? $args['code'] : $product['code']) . '-' . isset($args['name']) ? $args['name'] : $product['name']);
        } else {
            ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'makePermalink');
            $args['permalink'] = ciniki_core_makePermalink($ciniki, isset($args['name']) ? $args['name'] : $product['name']);
        }
        //
        // Make sure the permalink is unique
        //
        $strsql = "SELECT id, code, name, permalink " . "FROM ciniki_merchandise " . "WHERE business_id = '" . ciniki_core_dbQuote($ciniki, $args['business_id']) . "' " . "AND permalink = '" . ciniki_core_dbQuote($ciniki, $args['permalink']) . "' " . "AND id <> '" . ciniki_core_dbQuote($ciniki, $args['product_id']) . "' " . "";
        $rc = ciniki_core_dbHashQuery($ciniki, $strsql, 'ciniki.merchandise', 'item');
        if ($rc['stat'] != 'ok') {
            return $rc;
        }
        if ($rc['num_rows'] > 0) {
            return array('stat' => 'fail', 'err' => array('code' => 'ciniki.merchandise.22', 'msg' => 'You already have an merchandise product with this name, please choose another.'));
        }
    }
    //
    // Start transaction
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbTransactionStart');
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbTransactionRollback');
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbTransactionCommit');
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'dbAddModuleHistory');
    $rc = ciniki_core_dbTransactionStart($ciniki, 'ciniki.merchandise');
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    //
    // Update the Merchandise Product in the database
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'objectUpdate');
    $rc = ciniki_core_objectUpdate($ciniki, $args['business_id'], 'ciniki.merchandise.product', $args['product_id'], $args, 0x4);
    if ($rc['stat'] != 'ok') {
        ciniki_core_dbTransactionRollback($ciniki, 'ciniki.merchandise');
        return $rc;
    }
    //
    // Update the categories
    //
    if (isset($args['categories'])) {
        ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'tagsUpdate');
        $rc = ciniki_core_tagsUpdate($ciniki, 'ciniki.merchandise', 'tag', $args['business_id'], 'ciniki_merchandise_tags', 'ciniki_merchandise_history', 'product_id', $args['product_id'], 10, $args['categories']);
        if ($rc['stat'] != 'ok') {
            ciniki_core_dbTransactionRollback($ciniki, 'ciniki.merchandise');
            return $rc;
        }
    }
    //
    // Commit the transaction
    //
    $rc = ciniki_core_dbTransactionCommit($ciniki, 'ciniki.merchandise');
    if ($rc['stat'] != 'ok') {
        return $rc;
    }
    //
    // Update the last_change date in the business modules
    // Ignore the result, as we don't want to stop user updates if this fails.
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'businesses', 'private', 'updateModuleChangeDate');
    ciniki_businesses_updateModuleChangeDate($ciniki, $args['business_id'], 'ciniki', 'merchandise');
    //
    // Update the web index if enabled
    //
    ciniki_core_loadMethod($ciniki, 'ciniki', 'core', 'private', 'hookExec');
    ciniki_core_hookExec($ciniki, $args['business_id'], 'ciniki', 'web', 'indexObject', array('object' => 'ciniki.merchandise.product', 'object_id' => $args['product_id']));
    return array('stat' => 'ok');
}