/** Define any javascript needed @return a javascript string function javascript_content(){ $js =""; return $js; //js_content() } */ function body_content() { //Should this really be done with global? global $FANNIE_PLUGIN_LIST, $FANNIE_PLUGIN_SETTINGS; ob_start(); echo showInstallTabs('Plugins'); ?> <form action=InstallPluginsPage.php method=post> <h1 class="install"> <?php if (!$this->themed) { echo "<h1 class='install'>{$this->header}</h1>"; } ?> </h1> <?php if (is_writable('../config.php')) { echo "<div class=\"alert alert-success\"><i>config.php</i> is writeable</div>"; } else { echo "<div class=\"alert alert-danger\"><b>Error</b>: config.php is not writeable</div>"; } ?> <h4 class="install">Available plugins</h4> <?php if (!isset($FANNIE_PLUGIN_LIST)) { $FANNIE_PLUGIN_LIST = array(); } if (!is_array($FANNIE_PLUGIN_LIST)) { $FANNIE_PLUGIN_LIST = array(); } if (!isset($FANNIE_PLUGIN_SETTINGS)) { $FANNIE_PLUGIN_SETTINGS = array(); } if (!is_array($FANNIE_PLUGIN_SETTINGS)) { $FANNIE_PLUGIN_SETTINGS = array(); } $mods = FannieAPI::ListModules('FanniePlugin'); $others = FannieAPI::listModules('\\COREPOS\\Fannie\\API\\FanniePlugin'); foreach ($others as $o) { if (!in_array($o, $mods)) { $mods[] = $o; } } sort($mods); if (isset($_REQUEST['PLUGINLIST']) || isset($_REQUEST['psubmit'])) { $oldset = $FANNIE_PLUGIN_LIST; if (!is_array($oldset)) { $oldset = array(); } $newset = isset($_REQUEST['PLUGINLIST']) ? $_REQUEST['PLUGINLIST'] : array(); foreach ($newset as $plugin_class) { if (!\COREPOS\Fannie\API\FanniePlugin::IsEnabled($plugin_class)) { $obj = new $plugin_class(); $obj->pluginEnable(); } } foreach ($oldset as $plugin_class) { if (!class_exists($plugin_class)) { continue; } if (!in_array($plugin_class, $newset)) { $obj = new $plugin_class(); $obj->pluginDisable(); } } $FANNIE_PLUGIN_LIST = $_REQUEST['PLUGINLIST']; } echo '<table id="install" class="table">'; $count = 0; foreach ($mods as $m) { $enabled = False; $instance = new $m(); foreach ($FANNIE_PLUGIN_LIST as $r) { if ($r == $m) { $enabled = True; break; } } /* 17Jun13 Under Fannie Admin CSS the spacing is cramped. The slider overlaps the text. Want it higher and to the right. Not obvious why or how to fix. Jiggered the CSS a little here and above but isn't really a fix. */ echo '<tr ' . ($count % 2 == 0 ? 'class="info"' : '') . '> <td style="width:10em;"> </td> <td style="width:25em;">' . "\n"; echo '<fieldset class="toggle">' . "\n"; printf('<input name="PLUGINLIST[]" id="plugin_%s" type="checkbox" %s value="%s" onchange="$(\'#settings_%s\').toggle();" class="checkbox-inline" /> <label onclick="" for="plugin_%s">%s</label>', $m, $enabled ? 'checked' : '', $m, $m, $m, $m); echo "\n" . '<span class="toggle-button"></span></fieldset>' . "\n"; // 17Jun13 EL Added <br /> for overlap problem. printf('<br /><span class="noteTxt">%s</span>', $instance->plugin_description); echo '</td></tr>' . "\n"; if (empty($instance->plugin_settings)) { echo '<tr ' . ($count % 2 == 0 ? 'class="info"' : '') . '> <td colspan="2"><i>No settings required</i></td></tr>'; } else { echo '<tr ' . ($count % 2 == 0 ? 'class="info"' : '') . '> <td colspan="2" style="margin-bottom: 0px; height:auto;">'; printf('<div id="settings_%s" %s>', $m, !$enabled ? 'class="collapse"' : ''); foreach ($instance->plugin_settings as $field => $info) { $form_id = $m . '_' . $field; // ignore submitted values if plugin was not enabled if ($enabled && isset($_REQUEST[$form_id])) { $FANNIE_PLUGIN_SETTINGS[$field] = $_REQUEST[$form_id]; } if (!isset($FANNIE_PLUGIN_SETTINGS[$field])) { $FANNIE_PLUGIN_SETTINGS[$field] = isset($info['default']) ? $info['default'] : ''; } echo '<b>' . (isset($info['label']) ? $info['label'] : $field) . '</b>: '; if (isset($info['options'])) { echo '<select name="' . $form_id . '" class="form-control">'; foreach ($info['options'] as $key => $val) { printf('<option %s value="%s">%s</option>', $FANNIE_PLUGIN_SETTINGS[$field] == $val ? 'selected' : '', $val, $key); } echo '</select>'; } else { printf('<input type="text" name="%s" value="%s" class="form-control" />', $form_id, $FANNIE_PLUGIN_SETTINGS[$field]); } // show the default if plugin isn't enabled, but // unset so that it isn't saved in the configuration if (!$enabled) { unset($FANNIE_PLUGIN_SETTINGS[$field]); } // 17Jun13 EL Added <br /> for crampedness problem. if (isset($info['description'])) { echo '<br /><span class="noteTxt">' . $info['description'] . '</span>'; } echo '<br />'; //confset($field,"'".$CORE_LOCAL->get($field)."'"); } if ($enabled && isset($_REQUEST['psubmit'])) { $instance->settingChange(); } echo '</div>'; echo '</td></tr>'; } $count++; } echo '</table>'; $saveStr = "array("; foreach ($FANNIE_PLUGIN_LIST as $r) { $saveStr .= "'" . $r . "',"; } $saveStr = rtrim($saveStr, ",") . ")"; confset('FANNIE_PLUGIN_LIST', $saveStr); $saveStr = "array("; foreach ($FANNIE_PLUGIN_SETTINGS as $key => $val) { $saveStr .= "'" . $key . "'=>'" . $val . "',"; } $saveStr = rtrim($saveStr, ",") . ")"; confset('FANNIE_PLUGIN_SETTINGS', $saveStr); ?> <hr /> <p> <button type="submit" name="psubmit" value="1" class="btn btn-default">Save Configuration</button> </p> </form> <?php return ob_get_clean(); // body_content }
/** Define any javascript needed @return A javascript string function javascript_content(){ $js =""; return $js; } */ function body_content() { include dirname(__FILE__) . '/../config.php'; ob_start(); echo showInstallTabs('Products'); ?> <form action=InstallProductsPage.php method=post> <h1 class="install"> <?php if (!$this->themed) { echo "<h1 class='install'>{$this->header}</h1>"; } ?> </h1> <?php if (is_writable('../config.php')) { echo "<div class=\"alert alert-success\"><i>config.php</i> is writeable</div>"; } else { echo "<div class=\"alert alert-danger\"><b>Error</b>: config.php is not writeable</div>"; } ?> <hr /> <h4 class="install">Product Information Modules</h4> The product editing interface displayed after you select a product at: <br /><a href="<?php echo $FANNIE_URL; ?> item/" target="_item"><?php echo $FANNIE_URL; ?> item/</a> <br />consists of fields grouped in several sections, called modules, listed below. <br />The enabled (active) ones are highlighted. <br />The <i>Show</i> setting controls whether or not the module is displayed. The <i>Auto</i> means only display the module if it is relevant to the current item. <br />The <i>Expand</i> setting controls whether the module is intially expanded or collapsed. The <i>Auto</i> option means display expanded if relevant to the current item. <br /> <br /><b>Available Modules</b> <br /> <?php $mods = FannieAPI::ListModules('ItemModule', True); sort($mods); ?> <table class="table"> <tr> <th>Name</th> <th>Position</th> <th>Show</th> <th>Expand</th> </tr> <?php /** Change by Andy 2Jun14 Store modules in a keyed array. Format: - module_name => settings array + seq [int] display order + show [int] yes/no/auto + expand [int] yes/no/auto The settings for each module control how it is displayed. The "auto" option will only print or expand a module if it is relevant for that particular item. */ $in_mods = FormLib::get('_pm', array()); $in_seq = FormLib::get('_pmSeq', array()); $in_show = FormLib::get('_pmShow', array()); $in_exp = FormLib::get('_pmExpand', array()); for ($i = 0; $i < count($in_mods); $i++) { if (!isset($in_show[$i]) || $in_show[$i] == 0) { if (isset($FANNIE_PRODUCT_MODULES[$in_mods[$i]])) { unset($FANNIE_PRODUCT_MODULES[$in_mods[$i]]); } continue; } $FANNIE_PRODUCT_MODULES[$in_mods[$i]] = array('seq' => isset($in_seq[$i]) ? $in_seq[$i] : 0, 'show' => isset($in_show[$i]) ? $in_show[$i] : 0, 'expand' => isset($in_exp[$i]) ? $in_exp[$i] : 0); } /* Convert old settings to new format. */ $legacy_indexes = array(); $replacement_values = array(); foreach ($FANNIE_PRODUCT_MODULES as $id => $m) { if (preg_match('/^\\d+$/', $id)) { // old setting. convert to new. $legacy_indexes[] = $id; $replacement_values[$m] = array('seq' => $id, 'show' => 1, 'expand' => 1); } } foreach ($legacy_indexes as $index) { unset($FANNIE_PRODUCT_MODULES[$index]); } foreach ($replacement_values as $name => $params) { $FANNIE_PRODUCT_MODULES[$name] = $params; } // set a default if needed if (count($FANNIE_PRODUCT_MODULES) == 0) { $FANNIE_PRODUCT_MODULES['BaseItemModule'] = array('seq' => 0, 'show' => 1, 'expand' => 1); } $default = array('seq' => 0, 'show' => 0, 'expand' => 0); $opts = array('No', 'Yes', 'Auto'); foreach ($mods as $module) { $css = isset($FANNIE_PRODUCT_MODULES[$module]) ? 'class="info"' : ''; printf('<tr %s><td>%s<input type="hidden" name="_pm[]" value="%s" /></td>', $css, $module, $module); $params = isset($FANNIE_PRODUCT_MODULES[$module]) ? $FANNIE_PRODUCT_MODULES[$module] : $default; printf('<td><input type="number" class="form-control" name="_pmSeq[]" value="%d" /></td>', $params['seq']); echo '<td><select name="_pmShow[]" class="form-control">'; foreach ($opts as $id => $label) { printf('<option %s value="%d">%s</option>', $id == $params['show'] ? 'selected' : '', $id, $label); } echo '</select></td>'; echo '<td><select name="_pmExpand[]" class="form-control">'; foreach ($opts as $id => $label) { printf('<option %s value="%d">%s</option>', $id == $params['expand'] ? 'selected' : '', $id, $label); } echo '</select></td>'; echo '</tr>'; } $saveStr = 'array('; foreach ($FANNIE_PRODUCT_MODULES as $name => $info) { $saveStr .= sprintf("'%s'=>array('seq'=>%d,'show'=>%d,'expand'=>%d),", $name, $info['seq'], $info['show'], $info['expand']); } $saveStr = substr($saveStr, 0, strlen($saveStr) - 1) . ')'; confset('FANNIE_PRODUCT_MODULES', $saveStr); ?> </table> <hr /> <label>Default Batch View</label> <?php $batch_opts = array('all' => 'All', 'current' => 'Current', 'Pending' => 'Pending', 'Historical' => 'Historical'); echo installSelectField('FANNIE_BATCH_VIEW', $FANNIE_BATCH_VIEW, $batch_opts, 'all'); ?> <hr /> <label>Default Reporting Departments View</label> <?php $report_opts = array('range' => 'Range of Departments', 'multi' => 'Multi Select'); echo installSelectField('FANNIE_REPORT_DEPT_MODE', $FANNIE_REPORT_DEPT_MODE, $report_opts, 'range'); ?> <hr /> <label>Default Shelf Tag Layout</label> <?php $layouts = 'No Layouts Found!'; if (file_exists($FANNIE_ROOT . 'admin/labels/scan_layouts.php') && !function_exists('scan_layouts')) { include $FANNIE_ROOT . 'admin/labels/scan_layouts.php'; $layouts = scan_layouts(); } echo installSelectField('FANNIE_DEFAULT_PDF', $FANNIE_DEFAULT_PDF, $layouts, 'Fannie Standard'); ?> <label>Shelf Tag Data Source</label> <?php $mods = FannieAPI::listModules('TagDataSource'); $source = array('' => 'Default'); foreach ($mods as $m) { $source[$m] = $m; } echo installSelectField('FANNIE_TAG_DATA_SOURCE', $FANNIE_TAG_DATA_SOURCE, $source); ?> <label>Default Signage Layout</label> <?php $mods = FannieAPI::listModules('\\COREPOS\\Fannie\\API\\item\\FannieSignage'); echo installSelectField('FANNIE_DEFAULT_SIGNAGE', $FANNIE_DEFAULT_SIGNAGE, $mods); ?> <label>Default Account Coding</label> <?php $mods = array('\\COREPOS\\Fannie\\API\\item\\Accounting', '\\COREPOS\\Fannie\\API\\item\\StandardAccounting'); $mods = array_merge($mods, FannieAPI::listModules('\\COREPOS\\Fannie\\API\\item\\Accounting')); echo installSelectField('FANNIE_ACCOUNTING_MODULE', $FANNIE_ACCOUNTING_MODULE, $mods); ?> <hr /> <h4 class="install">Service Scale Integration</h4> <p class='ichunk' style="margin:0.4em 0em 0.4em 0em;"><b>Data Gate Weigh directory</b> <?php echo installTextField('FANNIE_DGW_DIRECTORY', $FANNIE_DGW_DIRECTORY, ''); if ($FANNIE_DGW_DIRECTORY !== '') { if (is_writable($FANNIE_DGW_DIRECTORY)) { echo "<div class=\"alert alert-success\">{$FANNIE_DGW_DIRECTORY} is writable</div>"; } elseif (!file_exists($FANNIE_DGW_DIRECTORY)) { echo "<div class=\"alert alert-danger\">{$FANNIE_DGW_DIRECTORY} does not exist</div>"; } else { echo "<div class=\"alert alert-danger\">{$FANNIE_DGW_DIRECTORY} is not writable</div>"; } } ?> <p class='ichunk' style="margin:0.4em 0em 0.4em 0em;"><b>E-Plum directory</b> <?php echo installTextField('FANNIE_EPLUM_DIRECTORY', $FANNIE_EPLUM_DIRECTORY, ''); if ($FANNIE_EPLUM_DIRECTORY !== '') { if (is_writable($FANNIE_EPLUM_DIRECTORY)) { echo "<div class=\"alert alert-success\">{$FANNIE_EPLUM_DIRECTORY} is writable</div>"; } elseif (!file_exists($FANNIE_EPLUM_DIRECTORY)) { echo "<div class=\"alert alert-danger\">{$FANNIE_EPLUM_DIRECTORY} does not exist</div>"; } else { echo "<div class=\"alert alert-danger\">{$FANNIE_EPLUM_DIRECTORY} is not writable</div>"; } } ?> <hr /> <h4 class="install">Product Editing</h4> <p class='ichunk' style="margin:0.4em 0em 0.4em 0em;"><b>Compose Product Description</b>: <?php echo installSelectField('FANNIE_COMPOSE_PRODUCT_DESCRIPTION', $FANNIE_COMPOSE_PRODUCT_DESCRIPTION, array(1 => 'Yes', 0 => 'No'), 0); ?> <br />If No products.description, which appears on the receipt, will be used as-is. <br />If Yes it will be shortened enough hold a "package" description made by concatenating products.size and products.unitofmeasure so that the whole string is still 30 or less characters: <br /> "Eden Seville Orange Marma 500g" </p> <p class='ichunk' style="margin:0.0em 0em 0.4em 0em;"><b>Compose Long Product Description</b>: <?php echo installSelectField('FANNIE_COMPOSE_LONG_PRODUCT_DESCRIPTION', $FANNIE_COMPOSE_LONG_PRODUCT_DESCRIPTION, array(1 => 'Yes', 0 => 'No'), 0); ?> <br />If No productUser.description, which may be used in Product Verification, will be used as-is. <br />If Yes productUser.brand will be prepended and a "package" description made by concatenating products.size and products.unitofmeasure will be appended: <br /> "EDEN | Marmalade, Orange, Seville, Rough-Cut | 500g"<br /> </p> <hr /> <p> <button type="submit" class="btn btn-default">Save Configuration</button> </p> </form> <?php return ob_get_clean(); // body_content }
function SaveFormData($upc) { $FANNIE_PRODUCT_MODULES = FannieConfig::config('PRODUCT_MODULES', array()); $upc = BarcodeLib::padUPC($upc); $dbc = $this->db(); $model = new ProductsModel($dbc); $model->upc($upc); if (!$model->load()) { // fully init new record $model->special_price(0); $model->specialpricemethod(0); $model->specialquantity(0); $model->specialgroupprice(0); $model->advertised(0); $model->tareweight(0); $model->start_date('0000-00-00'); $model->end_date('0000-00-00'); $model->discounttype(0); $model->wicable(0); $model->scaleprice(0); $model->inUse(1); } $stores = FormLib::get('store_id', array()); for ($i = 0; $i < count($stores); $i++) { $model->store_id($stores[$i]); $taxes = FormLib::get('tax'); if (isset($taxes[$i])) { $model->tax($taxes[$i]); } $fs = FormLib::get('FS', array()); if (in_array($stores[$i], $fs)) { $model->foodstamp(1); } else { $model->foodstamp(0); } $scale = FormLib::get('Scale', array()); if (in_array($stores[$i], $scale)) { $model->scale(1); } else { $model->scale(0); } $qtyFrc = FormLib::get('QtyFrc', array()); if (in_array($stores[$i], $qtyFrc)) { $model->qttyEnforced(1); } else { $model->qttyEnforced(0); } $wic = FormLib::get('prod-wicable', array()); if (in_array($stores[$i], $wic)) { $model->wicable(1); } else { $model->wicable(0); } $discount_setting = FormLib::get('discount'); if (isset($discount_setting[$i])) { switch ($discount_setting[$i]) { case 0: $model->discount(0); $model->line_item_discountable(0); break; case 1: $model->discount(1); $model->line_item_discountable(1); break; case 2: $model->discount(1); $model->line_item_discountable(0); break; case 3: $model->discount(0); $model->line_item_discountable(1); break; } } $price = FormLib::get('price'); if (isset($price[$i])) { $model->normal_price($price[$i]); } $cost = FormLib::get('cost'); if (isset($cost[$i])) { $model->cost($cost[$i]); } $desc = FormLib::get('descript'); if (isset($desc[$i])) { $model->description(str_replace("'", '', $desc[$i])); } $brand = FormLib::get('manufacturer'); if (isset($brand[$i])) { $model->brand(str_replace("'", '', $brand[$i])); } $model->pricemethod(0); $model->groupprice(0.0); $model->quantity(0); $dept = FormLib::get('department'); if (isset($dept[$i])) { $model->department($dept[$i]); } $size = FormLib::get('size'); if (isset($size[$i])) { $model->size($size[$i]); } $model->modified(date('Y-m-d H:i:s')); $unit = FormLib::get('unitm'); if (isset($unit[$i])) { $model->unitofmeasure($unit[$i]); } $subdept = FormLib::get('subdept'); if (isset($subdept[$i])) { $model->subdept($subdept[$i]); } // lookup vendorID by name $vendorID = 0; $v_input = FormLib::get('distributor'); if (isset($v_input[$i])) { $vendor = new VendorsModel($dbc); $vendor->vendorName($v_input[$i]); foreach ($vendor->find('vendorID') as $obj) { $vendorID = $obj->vendorID(); break; } } $model->default_vendor_id($vendorID); $inUse = FormLib::get('prod-in-use', array()); if (in_array($stores[$i], $inUse)) { $model->inUse(1); } else { $model->inUse(0); } $idEnf = FormLib::get('id-enforced', array()); if (isset($idEnf[$i])) { $model->idEnforced($idEnf[$i]); } $local = FormLib::get('prod-local'); if (isset($local[$i])) { $model->local($local[$i]); } $deposit = FormLib::get('deposit-upc'); if (isset($deposit[$i])) { if ($deposit[$i] == '') { $deposit[$i] = 0; } $model->deposit($deposit[$i]); } /* products.formatted_name is intended to be maintained automatically. * Get all enabled plugins and standard modules of the base. * Run plugins first, then standard modules. */ $formatters = FannieAPI::ListModules('ProductNameFormatter'); $fmt_name = ""; $fn_params = array('index' => $i); foreach ($formatters as $formatter_name) { $formatter = new $formatter_name(); $fmt_name = $formatter->compose($fn_params); if (isset($formatter->this_mod_only) && $formatter->this_mod_only) { break; } } $model->formatted_name($fmt_name); $model->save(); } /** If a vendor is selected, intialize a vendorItems record */ if ($vendorID != 0) { $vitem = new VendorItemsModel($dbc); $vitem->vendorID($vendorID); $vitem->upc($upc); $sku = FormLib::get('vendorSKU'); if (empty($sku)) { $sku = $upc; } else { /** If a SKU is provided, update any old record that used the UPC as a placeholder SKU. */ $existsP = $dbc->prepare(' SELECT sku FROM vendorItems WHERE sku=? AND upc=? AND vendorID=?'); $existsR = $dbc->execute($existsP, array($sku, $upc, $vendorID)); if ($dbc->numRows($existsR) > 0 && $sku != $upc) { $delP = $dbc->prepare(' DELETE FROM vendorItems WHERE sku =? AND upc=? AND vendorID=?'); $dbc->execute($delP, array($upc, $upc, $vendorID)); } else { $fixSkuP = $dbc->prepare(' UPDATE vendorItems SET sku=? WHERE sku=? AND vendorID=?'); $dbc->execute($fixSkuP, array($sku, $upc, $vendorID)); } } $vitem->sku($sku); $vitem->size($model->size()); $vitem->description($model->description()); $vitem->brand($model->brand()); $vitem->units(FormLib::get('caseSize', 1)); $vitem->cost($model->cost()); $vitem->save(); } if ($dbc->table_exists('prodExtra')) { $extra = new ProdExtraModel($dbc); $extra->upc($upc); if (!$extra->load()) { $extra->variable_pricing(0); $extra->margin(0); $extra->case_quantity(''); $extra->case_cost(0.0); $extra->case_info(''); } $brand = FormLib::get('manufacturer'); if (isset($brand[0])) { $extra->manufacturer(str_replace("'", '', $brand[0])); } $dist = FormLib::get('distributor'); if (isset($dist[0])) { $extra->distributor(str_replace("'", '', $dist[0])); } $cost = FormLib::get('cost'); if (isset($cost[0])) { $extra->cost($cost[0]); } $extra->save(); } if (!isset($FANNIE_PRODUCT_MODULES['ProdUserModule'])) { if ($dbc->table_exists('productUser')) { $ldesc = FormLib::get_form_value('puser_description'); $model = new ProductUserModel($dbc); $model->upc($upc); $model->description($ldesc); $model->save(); } } }