_formId = $formId;
$this->_inAdmin = $inAdmin;
}
/**
*
* get current user
*
* @return \Ppb\Db\Table\Row\User
*/
public function getUser()
{
if (!$this->_user instanceof UserModel) {
$this->setUser(
Front::getInstance()->getBootstrap()->getResource('user'));
}
return $this->_user;
}
/**
*
* set current user
*
* @param \Ppb\Db\Table\Row\User $user
*
* @return $this
*/
public function setUser(UserModel $user)
{
$this->_user = $user;
return $this;
}
/**
*
* get list in options
*
* @return array
*/
public function getListIn()
{
if (empty($this->_listIn)) {
$this->setListIn();
}
return $this->_listIn;
}
/**
*
* set list in field options
* if store only mode is enabled, items will all be listed as in "Both"
*
* @param array $listIn
*
* @return $this
*/
public function setListIn(array $listIn = null)
{
if ($listIn === null) {
$settings = $this->getSettings();
$user = $this->getUser();
if (!$settings['store_only_mode']) {
$listIn['site'] = 'Site';
}
$storeEnabled = false;
if ($user['id']) {
$storeEnabled = $user->storeStatus();
}
if ($storeEnabled) {
if ($settings['stores_force_list_in_both']) {
$listIn = array();
}
else if (!$settings['store_only_mode']) {
$listIn['store'] = 'Store';
}
$listIn['both'] = 'Both';
}
}
$this->_listIn = (array)$listIn;
return $this;
}
/**
*
* get currencies table service
*
* @return \Ppb\Service\Table\Currencies
*/
public function getCurrencies()
{
if (!$this->_currencies instanceof Service\Table\Currencies) {
$this->setCurrencies(
new Service\Table\Currencies());
}
return $this->_currencies;
}
/**
*
* set currencies service
*
* @param \Ppb\Service\Table\Currencies $currencies
*
* @return $this
*/
public function setCurrencies(Service\Table\Currencies $currencies)
{
$this->_currencies = $currencies;
return $this;
}
/**
*
* get durations table service
*
* @return \Ppb\Service\Table\Durations
*/
public function getDurations()
{
if (!$this->_durations instanceof Service\Table\Durations) {
$this->setDurations(
new Service\Table\Durations());
}
return $this->_durations;
}
/**
*
* set durations service
*
* @param \Ppb\Service\Table\Durations $durations
*
* @return $this
*/
public function setDurations(Service\Table\Durations $durations)
{
$this->_durations = $durations;
return $this;
}
/**
*
* get offline payment methods table service
*
* @return \Ppb\Service\Table\OfflinePaymentMethods
*/
public function getPaymentMethods()
{
if (!$this->_paymentMethods instanceof Service\Table\OfflinePaymentMethods) {
$this->setPaymentMethods(
new Service\Table\OfflinePaymentMethods());
}
return $this->_paymentMethods;
}
/**
*
* set offline payment methods table service
*
* @param \Ppb\Service\Table\OfflinePaymentMethods $paymentMethods
*
* @return $this
*/
public function setPaymentMethods(Service\Table\OfflinePaymentMethods $paymentMethods)
{
$this->_paymentMethods = $paymentMethods;
return $this;
}
/**
*
* get payment gateways table service
*
* @return \Ppb\Service\Table\PaymentGateways
*/
public function getPaymentGateways()
{
if (!$this->_paymentGateways instanceof Service\Table\PaymentGateways) {
$this->setPaymentGateways(
new Service\Table\PaymentGateways());
}
return $this->_paymentGateways;
}
/**
*
* set payment gateways table service
*
* @param \Ppb\Service\Table\PaymentGateways $paymentGateways
*
* @return $this
*/
public function setPaymentGateways(Service\Table\PaymentGateways $paymentGateways)
{
$this->_paymentGateways = $paymentGateways;
return $this;
}
/**
*
* get fees service
*
* @return \Ppb\Service\Fees
*/
public function getFees()
{
if (!$this->_fees instanceof Service\Fees) {
$this->setFees(
new Service\Fees());
}
return $this->_fees;
}
/**
*
* set fees service
*
* @param \Ppb\Service\Fees $fees
*
* @return $this
*/
public function setFees(Service\Fees $fees)
{
$this->_fees = $fees;
return $this;
}
/**
*
* get form data
* for certain keys, generate preset values
*
* @param string $key
*
* @return mixed
*/
public function getData($key = null)
{
$result = parent::getData($key);
if ($result === null) {
$settings = $this->getSettings();
switch ($key) {
case 'list_in':
$listInKeys = array_keys($this->getListIn());
$result = array_shift($listInKeys);
$this->addData('list_in', $result);
break;
case 'listing_type':
$listIn = $this->getData('list_in');
if ($listIn != 'site' && !$settings['enable_auctions_in_stores'] && $settings['enable_products']) {
$result = 'product';
}
else {
$listingTypesKeys = array_keys($this->getListingTypes());
$result = array_shift($listingTypesKeys);
}
$this->addData('listing_type', $result);
break;
case 'currency':
$result = $settings['currency'];
$this->addData('currency', $result);
break;
case 'country':
$countries = $this->getLocations()->getMultiOptions();
$result = intval($this->getFirstElement($countries));
$this->addData('country', $result);
break;
}
}
return $result;
}
/**
*
* generate listing form elements
*
* @return array
*/
public function getElements()
{
$listIn = $this->getListIn();
$listingTypes = $this->getListingTypes();
$currencies = $this->getCurrencies()->getMultiOptions('iso_code');
$settings = $this->getSettings();
$translate = $this->getTranslate();
$durations = $this->getDurations()->getMultiOptions($this->getData('listing_type'));
$countries = $this->getLocations()->getMultiOptions();
$states = $this->getLocations()->getMultiOptions(
$this->getData('country'));
$paymentGateways = $this->getPaymentGateways()->getMultiOptions($this->_user['id']);
$paymentMethods = $this->getPaymentMethods()->getMultiOptions();
$categoryId = $this->getData('category_id');
$addlCategoryId = $this->getData('addl_category_id');
$categoriesFilter = array(0);
if ($categoryId) {
$categoriesFilter = array_merge($categoriesFilter, array_keys(
$this->getCategories()->getBreadcrumbs($categoryId)));
}
if ($addlCategoryId) {
$categoriesFilter = array_merge($categoriesFilter, array_keys(
$this->getCategories()->getBreadcrumbs($addlCategoryId)));
}
$customFieldsType = (in_array($this->_formId, $this->getCustomFields()->getCustomFieldTypes())) ?
$this->_formId : 'item';
$customFields = $this->getCustomFields()->getFields(
array(
'type' => $customFieldsType,
'active' => 1,
'category_ids' => $categoriesFilter,
))->toArray();
$calculationAmount = ($this->getData('listing_type') == 'product') ?
$this->getData('buyout_price') : max(array($this->getData('start_price'), $this->getData('reserve_price')));
$this->getFees()->setCategoryId($this->getData('category_id'))
->setUser($this->getUser())
->setAmount($calculationAmount);
// images field related description
$imagesDescription = sprintf($translate->_('You can upload up to %s images. Arrange by drag and drop.'), $settings['images_max']);
$imagesFeeAmount = $this->getFees()->getFeeAmount(Service\Fees::IMAGES);
$nbFreeImages = intval($this->getFees()->getFeeAmount(Service\Fees::NB_FREE_IMAGES));
if ($imagesFeeAmount > 0) {
if ($nbFreeImages < $settings['images_max']) {
$imagesDescription .= '
';
if ($nbFreeImages > 0) {
$imagesDescription .= sprintf($translate->_('Upload %s images for free.'), $nbFreeImages)
. ' ' . sprintf($translate->_('Each additional image costs %s.'), $this->getView()->amount($imagesFeeAmount));
}
else {
$imagesDescription .= sprintf($translate->_('Each image costs %s.'), $this->getView()->amount($imagesFeeAmount));
}
}
}
// media upload field related description
$videosDescription = sprintf($translate->_('You can upload up to %s videos.'), $settings['videos_max']);
$videosFeeAmount = $this->getFees()->getFeeAmount(Service\Fees::MEDIA);
$nbFreeVideos = intval($this->getFees()->getFeeAmount(Service\Fees::NB_FREE_MEDIA));
if ($videosFeeAmount > 0) {
if ($nbFreeVideos < $settings['videos_max']) {
$videosDescription .= '
';
if ($nbFreeVideos > 0) {
$videosDescription .= sprintf($translate->_('Upload %s media for free.'), $nbFreeVideos)
. ' ' . sprintf($translate->_('Each additional media upload costs %s.'), $this->getView()->amount($videosFeeAmount));
}
else {
$videosDescription .= sprintf($translate->_('Each media file upload costs %s.'), $this->getView()->amount($videosFeeAmount));
}
}
}
// digital downloads field related description
$downloadsDescription = $translate->_('If this listing contains digital downloads, please upload the files using this field.') . '
' .
sprintf($translate->_('You can upload up to %s digital downloads.'),
$settings['digital_downloads_max']);
$downloadsFeeAmount = $this->getFees()->getFeeAmount(Service\Fees::DIGITAL_DOWNLOADS);
$nbFreeDownloads = intval($this->getFees()->getFeeAmount(Service\Fees::NB_FREE_DOWNLOADS));
if ($downloadsFeeAmount > 0) {
$downloadsDescription .= '
';
if ($nbFreeDownloads < $settings['digital_downloads_max']) {
if ($nbFreeDownloads > 0) {
$downloadsDescription .= sprintf($translate->_('First %s uploaded files are free.'), $nbFreeDownloads)
. ' ' . sprintf($translate->_('Each additional upload costs %s.'), $this->getView()->amount($downloadsFeeAmount));
}
else {
$downloadsDescription .= sprintf($translate->_('Each file upload costs %s.'), $this->getView()->amount($downloadsFeeAmount));
}
}
}
$bulkArraySeparator = Service\Listings\BulkLister::ARRAY_SEPARATOR;
$locationRecordExists = new Validate\Db\RecordExists(array(
'table' => new Table\Locations(),
'field' => 'id',
));
$locationRecordExists->setMessage($translate->_("The country id '%value%' is invalid."));
/**
* @version 7.5: moved above the array initialization due to the product attributes module
*/
$isProductAttributes = false;
foreach ($customFields as $key => $customField) {
$customFields[$key]['form_id'] = array($customField['type'], 'product_edit');
$customFields[$key]['id'] = 'custom_field_' . $customField['id'];
$customFields[$key]['subform'] = 'details';
if (!empty($customField['multiOptions'])) {
$multiOptions = \Ppb\Utility::unserialize($customField['multiOptions']);
$customFields[$key]['bulk']['multiOptions'] = (!empty($multiOptions['key'])) ?
array_flip(array_filter($multiOptions['key'])) : array();
}
if ($customField['product_attribute']) {
$isProductAttributes = true;
$customFields[$key]['required'] = false;
$customFields[$key]['attributes'] = array('class' => 'product-attribute');
}
}
$array = array(
array(
'form_id' => array('global', 'prefilled', 'fees_calculator'),
'id' => 'user_id',
'element' => 'hidden',
'bodyCode' => "
"
),
array(
'form_id' => 'global',
'id' => 'option',
'element' => 'hidden',
),
array(
'form_id' => array('item', 'fees_calculator', 'bulk'),
'subform' => 'details',
'id' => 'list_in',
'element' => (count($listIn) > 1) ? 'select' : 'hidden',
'label' => $this->_('List In'),
'multiOptions' => $listIn,
'required' => true,
'hideDefault' => true,
'value' => $this->getFirstElement($listIn),
'description' => $this->_('Choose where to list your item.'),
'attributes' => array(
'class' => 'form-control input-small field-changeable form-refresh',
),
),
array(
'form_id' => 'product_edit',
'id' => 'list_in',
'element' => 'hidden',
),
array(
'form_id' => array('product_edit'),
'id' => 'listing_type',
'element' => 'hidden',
),
array(
'form_id' => array('item', 'fees_calculator', 'bulk'),
'subform' => 'details',
'id' => 'listing_type',
'element' => (count($listingTypes) > 1) ? 'select' : 'hidden',
'label' => $this->_('Listing Type'),
'multiOptions' => $listingTypes,
'required' => true,
'hideDefault' => true,
'value' => $this->getFirstElement($listingTypes),
'description' => $this->_('Choose the listing type you wish to create.'),
'attributes' => array(
'class' => 'form-control input-small field-changeable form-refresh',
),
),
array(
'subtitle' => $this->_('Select Category'),
'subform' => 'details',
'form_id' => array('global', 'fees_calculator', 'bulk'),
'id' => 'category_id',
'element' => '\\Ppb\\Form\\Element\\Category',
'label' => $this->_('Main Category'),
'description' => $this->_('Select a main category where the item will be listed.'),
'required' => true,
'validators' => array(
'\\Ppb\\Validate\\Db\\Category',
),
'bulk' => array(
'notes' => $translate->_('Category IDs allowed are available in the "Categories" tab.'),
'type' => $translate->_('integer'),
'sample' => 7425,
),
),
array(
'form_id' => array('global', 'bulk'),
'subform' => 'details',
'id' => 'addl_category_id',
'element' => ($settings['addl_category_listing']) ? '\\Ppb\\Form\\Element\\Category' : false,
'label' => $this->_('Additional Category'),
'suffix' => $this->getView()->amount($this->getFees()->getFeeAmount(Service\Fees::ADDL_CATEGORY),
null,
'(+%s)'),
'description' => $this->_('Select an additional category where to list your item (optional).'),
'validators' => $this->getData('addl_category_id') ? array(
'\\Ppb\\Validate\\Db\\Category',
array('Different', array($translate->_('Main Category'), $this->getData('category_id')))
) : null,
'bulk' => array(
'type' => $translate->_('integer'),
),
),
array(
'form_id' => 'fees_calculator',
'id' => 'addl_category_id',
'element' => ($settings['addl_category_listing']) ? 'checkbox' : false,
'label' => $this->_('Additional Category'),
'description' => $this->_('Check the above checkbox if you wish to list the item in an additional category.'),
'multiOptions' => array(
1 => $this->getView()->amount($this->getFees()->getFeeAmount(Service\Fees::ADDL_CATEGORY),
null,
'(+%s)'),
),
),
array(
'subtitle' => $this->_('Listing Details'),
'form_id' => array('global', 'prefilled', 'bulk'),
'subform' => 'details',
'id' => 'name',
'element' => 'text',
'label' => $this->_('Item Title'),
'description' => $this->_('Enter a title for your listing.'),
'required' => ($this->_formId !== 'prefilled') ? true : false,
'validators' => array(
'NoHtml',
array('StringLength', array(null, min(255, $settings['character_length']))),
),
'filters' => array(
'\\Ppb\\Filter\\BadWords',
),
'attributes' => array(
'class' => 'form-control input-xlarge',
),
'bulk' => array(
'sample' => 'My Listing',
),
),
array(
'form_id' => array('item', 'bulk'),
'subform' => 'details',
'id' => 'subtitle',
'element' => ($settings['enable_subtitle']) ? 'text' : false,
'label' => $this->_('Sub Title'),
'description' => $this->_('Enter a sub title for your listing (optional).'),
'suffix' => $this->getView()->amount(
$this->getFees()->getFeeAmount(Service\Fees::SUBTITLE), null, '(+%s)'),
'validators' => array(
'NoHtml',
array('StringLength', array(null, min(255, $settings['character_length']))),
),
'filters' => array(
'\\Ppb\\Filter\\BadWords',
),
'attributes' => array(
'class' => 'form-control input-xlarge',
),
'bulk' => array(
'sample' => 'Listing Subtitle',
),
),
array(
'form_id' => array('global', 'prefilled', 'bulk'),
'subform' => 'details',
'id' => 'description',
'element' => '\\Ppb\\Form\\Element\\Wysiwyg',
'label' => $this->_('Description'),
'description' => $this->_('Enter a description for your item.'),
'required' => ($this->_formId !== 'prefilled') ? true : false,
'filters' => array(
'\\Ppb\\Filter\\BadWords',
),
'attributes' => array(
'class' => 'form-control',
'rows' => '12',
),
'bulk' => array(
'sample' => 'Listing Description',
),
),
array(
'form_id' => array('global', 'bulk'),
'subform' => 'details',
'id' => 'image',
'element' => ($settings['images_max'] > 0) ? '\\Ppb\\Form\\Element\\MultiUpload\\Sortable' : false,
'label' => $this->_('Images'),
'description' => $imagesDescription,
'required' => ($settings['mandatory_images']) ? true : false,
'multiple' => true,
'customData' => array(
'buttonText' => $translate->_('Select Images'),
'acceptFileTypes' => '/(\.|\/)(gif|jpe?g|png)$/i',
'remoteUploads' => ($settings['remote_uploads']) ? true : false,
'formData' => array(
'watermark' => $settings['images_watermark'],
'fileSizeLimit' => ($settings['images_size'] * 1024),
'uploadLimit' => $settings['images_max'],
),
),
'bulk' => array(
'sample' => $settings['site_path'] . '/images/sample1.jpg'
. $bulkArraySeparator
. $settings['site_path'] . '/images/sample2.jpg',
'notes' => sprintf($translate->_('Absolute path to images is highly recommended. '
. 'For local images, the "%s" folder will be used. Multiple images are to be separated by "%s"'),
\Ppb\Utility::getFolder('uploads'), $bulkArraySeparator),
)
),
array(
'form_id' => 'fees_calculator',
'id' => 'image',
'element' => ($settings['images_max'] > 0) ? 'text' : false,
'label' => $this->_('Images'),
'description' => $translate->_('Enter the number of images you wish to upload with your listing.') . '
' . $imagesDescription,
'attributes' => array(
'class' => 'form-control input-mini',
),
),
array(
'form_id' => 'global',
'subform' => 'details',
'id' => 'video',
'element' => ($settings['videos_max'] > 0) ? '\\Ppb\\Form\\Element\\MultiUpload' : false,
'label' => $this->_('Media'),
'description' => $videosDescription,
'required' => false,
'multiple' => true,
'customData' => array(
'buttonText' => $translate->_('Select Media'),
'acceptFileTypes' => '/(\.|\/)(mov|mp4|flv)$/i',
'embeddedCode' => ($settings['embedded_code']) ? true : false,
'formData' => array(
'fileSizeLimit' => ($settings['videos_size'] * 1024),
'uploadLimit' => $settings['videos_max'],
),
),
),
array(
'form_id' => 'fees_calculator',
'id' => 'video',
'element' => ($settings['videos_max'] > 0) ? 'text' : false,
'label' => $this->_('Media'),
'description' => $translate->_('Enter the number of videos you wish to add to your listing.') . '
' . $videosDescription,
'attributes' => array(
'class' => 'form-control input-mini',
),
),
array(
'form_id' => 'global',
'subform' => 'details',
'id' => 'download',
'element' => ($settings['digital_downloads_max'] > 0) ? '\\Ppb\\Form\\Element\\MultiUpload' : false,
'label' => $this->_('Digital Downloads'),
'description' => $downloadsDescription,
'required' => false,
'multiple' => true,
'customData' => array(
'buttonText' => $translate->_('Select Files'),
'acceptFileTypes' => '/(\.|\/)(doc?x|xls?x|txt|zip|tar|gz|exe|pdf)$/i',
'formData' => array(
'uploadType' => 'download',
'fileSizeLimit' => ($settings['digital_downloads_size'] * 1024),
'uploadLimit' => $settings['digital_downloads_max'],
),
),
),
array(
'form_id' => 'fees_calculator',
'id' => 'download',
'element' => ($settings['digital_downloads_max'] > 0) ? 'text' : false,
'label' => $this->_('Digital Downloads'),
'description' => $translate->_('Enter the number of digital downloads you wish to upload with your listing.') . '
' . $downloadsDescription,
'attributes' => array(
'class' => 'form-control input-mini',
),
),
array(
'subtitle' => $this->_('Listing Settings'),
'form_id' => array('item', 'prefilled', 'product_edit', 'bulk'),
'subform' => 'settings',
'id' => 'currency',
'element' => (count($currencies) > 1) ? 'select' : 'hidden',
'label' => $this->_('Currency'),
'multiOptions' => $currencies,
'value' => $this->getData('currency'),
'description' => $this->_('Select your item\'s currency.'),
'required' => true,
'attributes' => array(
'class' => 'form-control input-small field-changeable',
),
),
array(
'form_id' => array('item', 'product_edit', 'bulk'),
'subform' => 'settings',
'id' => 'quantity',
'element' => '\\Ppb\\Form\\Element\\Quantity',
'label' => $this->_('Quantity'),
'description' => $this->_('Enter the number of items you are offering for sale.'),
'required' => true,
'value' => 1,
'attributes' => array(
'class' => 'form-control input-mini',
),
'source' => array(
'1' => '1',
'2' => '2',
'3' => '3',
'4' => '4',
'5' => '5',
'10' => '10',
'-1' => $translate->_('Unlimited'),
),
'validators' => array(
'Digits',
),
'bulk' => array(
'notes' => $translate->_('Only editable for products. For auctions it will always be reset to 1.'),
'type' => $translate->_('integer'),
),
),
array(
'form_id' => array('item', 'fees_calculator', 'bulk'),
'subform' => 'settings',
'id' => 'start_price',
'element' => ($settings['enable_auctions']) ? '\\Ppb\\Form\\Element\\LocalizedNumeric' : false,
'label' => $this->_('Start Price'),
'description' => $this->_('Enter the start price for your item.'),
'required' => ($this->getData('listing_type') == 'auction') ? true : false,
'prefix' => '' . $this->getData('currency') . '',
'attributes' => array(
'class' => 'form-control input-mini',
),
'filters' => array(
'\\Ppb\\Filter\\LocalizedNumeric',
),
'validators' => array(
'Numeric',
array('GreaterThan',
($this->getData('listing_type') == 'auction') ?
array(0, false, true) : array(0, true)),
),
'bulk' => array(
'notes' => $translate->_('Field required for auctions.'),
'type' => $translate->_('decimal'),
'sample' => 5,
),
),
array(
'form_id' => 'item',
'subform' => 'settings',
'id' => 'enable_reserve_price',
'element' => ($settings['enable_auctions']) ? 'checkbox' : false,
'label' => $this->_('Enable Reserve'),
'multiOptions' => array(
1 => $this->getView()->amount($this->getFees()->getFeeAmount(Service\Fees::RESERVE), null, '(+%s)'),
),
'value' => ($this->getData('reserve_price') > 0) ? 1 : null,
'description' => $this->_('By enabling reserve, the auction wont be awarded unless the high bid is above the reserve price. The amount is hidden.'),
'attributes' => array(
'class' => 'form-control field-changeable',
),
),
array(
'form_id' => array('item', 'fees_calculator', 'bulk'),
'subform' => 'settings',
'id' => 'reserve_price',
'element' => ($settings['enable_auctions']) ? '\\Ppb\\Form\\Element\\LocalizedNumeric' : false,
'label' => $this->_('Reserve Price'),
'description' => $this->_('Enter the reserve price.'),
'required' => ($this->getData('enable_reserve_price')) ? true : false,
'prefix' => '' . $this->getData('currency') . '',
'attributes' => array(
'class' => 'form-control input-mini',
),
'filters' => array(
'\\Ppb\\Filter\\LocalizedNumeric',
),
'validators' => array(
'Numeric',
array('GreaterThan',
array((($this->getData('enable_reserve_price') || $this->_formId == 'bulk') ? $this->getData('start_price') : -0.01), false)),
),
'bulk' => array(
'notes' => $translate->_('Only available for auctions. If set, it needs to be greater than the start price.'),
'type' => $translate->_('decimal'),
),
),
array(
'form_id' => array('item', 'fees_calculator'),
'subform' => 'settings',
'id' => 'enable_buyout_price',
'element' => ($settings['enable_buyout']) ? 'checkbox' : false,
'label' => $this->_('Enable Buy Out'),
'multiOptions' => array(
1 => $this->getView()->amount($this->getFees()->getFeeAmount(Service\Fees::BUYOUT), null, '(+%s)'),
),
'value' => ($this->getData('buyout_price') > 0) ? 1 : null,
'description' => $this->_('Enable Buy Out if you want to allow your users to purchase your item instantly.'),
'attributes' => array(
'class' => 'form-control field-changeable',
),
),
array(
'form_id' => array('item', 'fees_calculator', 'product_edit', 'bulk'),
'subform' => 'settings',
'id' => 'buyout_price',
'element' => ($settings['enable_buyout'] || $settings['enable_products']) ? '\\Ppb\\Form\\Element\\LocalizedNumeric' : false,
'label' => $this->_('Buy Out Price'),
'description' => $this->_('Enter the buy out price for your item.'),
'required' => (
$this->getData('enable_buyout_price') ||
$this->getData('listing_type') == 'product' ||
$this->_formId == 'bulk'
) ? true : false,
'prefix' => '' . $this->getData('currency') . '',
'attributes' => array(
'class' => 'form-control input-mini',
),
'filters' => array(
'\\Ppb\\Filter\\LocalizedNumeric',
),
'validators' => array(
'Numeric',
array(
'GreaterThan',
array(
($this->getData('listing_type') == 'product') ? 0 : max(array($this->getData('start_price'), $this->getData('reserve_price'))),
false,
($this->getData('listing_type') == 'product') ? true : false
),
),
),
'bulk' => array(
'notes' => $translate->_('Required for products. For auctions, if set, it needs to be greater than the start price and reserve price.'),
'type' => $translate->_('decimal'),
'sample' => 15,
),
),
array(
'form_id' => array('item', 'product_edit', 'bulk'),
'subform' => 'settings',
'id' => 'stock_levels',
'element' => ($isProductAttributes) ? '\\Ppb\\Form\\Element\\StockLevels' : 'hidden',
'label' => $this->_('Stock Levels'),
'description' => $this->_('Enter the stock levels and variations from the base price corresponding to your selected product attributes combinations.'),
'attributes' => array(
'class' => 'form-control input-mini',
),
'validators' => ($this->getData('listing_type') == 'product' && $isProductAttributes) ? array('\\Ppb\\Validate\\StockLevels') : array(),
'customFields' => $customFields,
'formData' => $this->getData(),
'bulk' => array(), // TODO
),
array(
'form_id' => array('item', 'product_edit', 'fees_calculator', 'bulk'),
'subform' => 'settings',
'id' => 'enable_make_offer',
'element' => ($settings['enable_make_offer']) ? 'checkbox' : false,
'label' => $this->_('Accept Offers'),
'multiOptions' => array(
1 => $this->getView()->amount($this->getFees()->getFeeAmount(Service\Fees::MAKE_OFFER), null,
'(+%s)'),
),
'description' => $this->_('Check the above checkbox if you wish to accept offers for your item.'),
'attributes' => array(
'class' => 'field-changeable',
),
'bulk' => array(
'multiOptions' => array(0, 1),
'type' => $translate->_('integer'),
),
),
array(
'form_id' => array('item', 'product_edit', 'bulk'),
'subform' => 'settings',
'id' => 'make_offer_min',
'element' => ($settings['enable_make_offer']) ? '\\Ppb\\Form\\Element\\LocalizedNumeric' : false,
'label' => $this->_('Minimum Offer Range'),
'prefix' => '' . $this->getData('currency') . '',
'attributes' => array(
'class' => 'form-control input-mini',
),
'filters' => array(
'\\Ppb\\Filter\\LocalizedNumeric',
),
'validators' => array(
'Numeric',
array('GreaterThan', array(0, true)),
),
'bulk' => array(
'type' => $translate->_('decimal'),
),
),
array(
'form_id' => array('item', 'product_edit', 'bulk'),
'subform' => 'settings',
'id' => 'make_offer_max',
'element' => ($settings['enable_make_offer']) ? '\\Ppb\\Form\\Element\\LocalizedNumeric' : false,
'label' => $this->_('Maximum Offer Range'),
'description' => $this->_('Enter a range between which users can place offers (Optional).'),
'prefix' => '' . $this->getData('currency') . '',
'attributes' => array(
'class' => 'form-control input-mini',
),
'filters' => array(
'\\Ppb\\Filter\\LocalizedNumeric',
),
'validators' => array(
'Numeric',
array('GreaterThan', array($this->getData('make_offer_min'), true)),
),
'bulk' => array(
'type' => $translate->_('decimal'),
),
),
array(
'form_id' => 'item',
'subform' => 'settings',
'id' => 'bid_increment_type',
'element' => ($settings['enable_auctions']) ? 'radio' : false,
'label' => $this->_('Bid Increment'),
'multiOptions' => array(
0 => array(
$translate->_('Use the built-in proportional increments table'),
),
1 => array(
$translate->_('Enter your custom increment amount'),
),
),
'value' => ($this->getData('bid_increment') > 0) ? 1 : 0,
'description' => $this->_('Select how the bid increments will be calculated.'),
'attributes' => array(
'class' => 'field-changeable',
),
),
array(
'form_id' => array('item', 'bulk'),
'subform' => 'settings',
'id' => 'bid_increment',
'element' => ($settings['enable_auctions']) ? '\\Ppb\\Form\\Element\\LocalizedNumeric' : false,
'label' => $this->_('Bid Increment Amount'),
'description' => $this->_('Enter your custom bid increment amount.'),
'prefix' => '' . $this->getData('currency') . '',
'attributes' => array(
'class' => 'form-control input-mini',
),
'filters' => array(
'\\Ppb\\Filter\\LocalizedNumeric',
),
'validators' => array(
'Numeric',
array('GreaterThan', array(0, false)),
),
'bulk' => array(
'notes' => $translate->_('Only set if you wish to use a custom increment amount for your auction. '
. 'By default, the bid increments table will be used.'),
'type' => $translate->_('decimal'),
),
),
array(
'form_id' => array('global', 'bulk'),
'subform' => 'settings',
'id' => 'start_time_type',
'element' => ($settings['enable_custom_start_time']) ? 'radio' : 'hidden',
'label' => $this->_('Start Time'),
'description' => $this->_('Enter the start time for your listing.'),
'value' => 0,
'multiOptions' => array(
0 => $translate->_('Now'),
1 => $translate->_('Custom'),
),
'attributes' => array(
'class' => 'field-changeable',
),
'bulk' => array(
'notes' => $translate->_('Allowed types: 0 => Now, 1 => Custom'),
'type' => $translate->_('integer'),
),
),
array(
'form_id' => array('global', 'bulk'),
'subform' => 'settings',
'id' => 'start_time',
'element' => ($settings['enable_custom_start_time']) ? '\\Ppb\\Form\\Element\\DateTime' : 'hidden',
'label' => $this->_('Custom Start Time'),
'description' => $this->_('Choose a custom start time for the listing.'),
'required' => ($this->getData('start_time_type') == 1) ? true : false,
'validators' => ($settings['enable_custom_start_time']) ? array(
array('GreaterThan', array(date('Y-m-d H:i:s', time()), false)),
) : null,
'attributes' => array(
'class' => 'form-control input-medium',
),
'customData' => array(
'formData' => array(
'format' => '"YYYY-MM-DD HH:mm"',
'minDate' => 'new Date()',
'stepping' => '5',
'showClear' => 'true',
),
),
'bulk' => array(
'type' => $translate->_('datetime'),
'notes' => $translate->_('Accepted format: yyyy-mm-dd hh:mm:ss'),
),
),
array(
'form_id' => array('global', 'bulk'),
'subform' => 'settings',
'id' => 'end_time_type',
'element' => (($settings['enable_unlimited_duration'] &&
$settings['force_unlimited_duration'] &&
$this->getData('listing_type') == 'product') || !$settings['enable_custom_end_time']) ? false : 'radio',
'label' => $this->_('End Time'),
'description' => $translate->_('Enter the end time for your listing.') .
(($settings['enable_change_duration'] && $this->getData('listing_type') == 'auction') ?
'
' . sprintf(
$translate->_('Note: If the time left is greater than %s days when the first bid is placed, the duration will be reduced to %s days.'),
$settings['change_duration_days'],
$settings['change_duration_days']) : ''),
'values' => 0,
'multiOptions' => array(
0 => $translate->_('Duration'),
1 => $translate->_('Custom'),
),
'attributes' => array(
'class' => 'field-changeable',
),
'bulk' => array(
'notes' => $translate->_('Allowed types: 0 => Duration, 1 => Custom'),
'type' => $translate->_('integer'),
),
),
array(
'form_id' => array('global', 'prefilled', 'bulk'),
'subform' => 'settings',
'id' => 'duration',
'element' => (count($durations) > 1) ? 'select' : 'hidden',
'label' => $this->_('Duration'),
'multiOptions' => $durations,
'description' => $this->_('Select a duration for your listing.'),
'attributes' => array(
'class' => 'form-control input-medium',
),
),
array(
'form_id' => array('global', 'bulk'),
'subform' => 'settings',
'id' => 'end_time',
'element' => '\\Ppb\\Form\\Element\\DateTime',
'label' => $this->_('Custom End Time'),
'description' => $this->_('Choose a custom end time for the listing.'),
'required' => ($this->getData('end_time_type') == 1) ? true : false,
'validators' => array(
array('GreaterThan', array($this->getData('start_time'), false)),
),
'attributes' => array(
'class' => 'form-control input-medium',
),
'customData' => array(
'formData' => array(
'format' => '"YYYY-MM-DD HH:mm"',
'minDate' => 'new Date()',
'stepping' => '5',
'showClear' => 'true',
),
),
'bulk' => array(
'type' => $translate->_('datetime'),
'notes' => $translate->_('Accepted format: yyyy-mm-dd hh:mm:ss'),
),
),
array(
'form_id' => array('item', 'prefilled', 'product_edit', 'bulk'),
'subform' => 'settings',
'id' => 'apply_tax',
'element' => ($this->getUser()->canApplyTax()) ? 'checkbox' : false,
'label' => $this->_('Apply Tax'),
'multiOptions' => array(
1 => null,
),
'description' => $this->_('Check the above checkbox to apply tax for this listing.'),
'attributes' => array(
'class' => 'field-changeable',
),
'bulk' => array(
'multiOptions' => array(0, 1),
'type' => $translate->_('integer'),
),
),
array(
'form_id' => array('item', 'prefilled', 'bulk'),
'subform' => 'settings',
'id' => 'private_auction',
'element' => ($settings['enable_auctions']) ? 'checkbox' : false,
'label' => $this->_('Private Auction'),
'multiOptions' => array(
1 => null,
),
'description' => $this->_('By enabling this option, bidders on this auction will be hidden to site users, and only you '
. '(the owner of the auction) will be able to see the usernames of the bidders. Bid amounts will still be visible.'),
'bulk' => array(
'multiOptions' => array(0, 1),
'type' => $translate->_('integer'),
),
),
array(
'form_id' => array('item', 'prefilled', 'bulk'),
'subform' => 'settings',
'id' => 'disable_sniping',
'element' => ($settings['enable_auctions'] && $settings['enable_auctions_sniping']) ? 'checkbox' : false,
'label' => $this->_('Disable Sniping Feature'),
'multiOptions' => array(
1 => null,
),
'description' => $this->_('Check the above checkbox if you want to disable the sniping feature for this auction.'),
'bulk' => array(
'multiOptions' => array(0, 1),
'type' => $translate->_('integer'),
),
),
array(
'subtitle' => $this->_('Feature Your Listing'),
'form_id' => array('item', 'fees_calculator', 'bulk'),
'subform' => 'settings',
'id' => 'hpfeat',
'element' => 'checkbox',
'label' => '',
'multiOptions' => array(
1 => $translate->_('Feature on home page') . ' ' . $this->getView()->amount($this->getFees()->getFeeAmount(Service\Fees::HPFEAT),
null, '(+%s)'),
),
'bulk' => array(
'multiOptions' => array(0, 1),
'label' => $translate->_('Home Page Featuring'),
'type' => $translate->_('integer'),
),
),
array(
'form_id' => array('item', 'fees_calculator', 'bulk'),
'subform' => 'settings',
'id' => 'catfeat',
'element' => 'checkbox',
'label' => '',
'multiOptions' => array(
1 => $translate->_('Feature on category page') . ' ' . $this->getView()->amount($this->getFees()->getFeeAmount(Service\Fees::CATFEAT),
null, '(+%s)'),
),
'bulk' => array(
'multiOptions' => array(0, 1),
'label' => $translate->_('Category Page Featuring'),
'type' => $translate->_('integer'),
),
),
// array(
// 'form_id' => array('item', 'fees_calculator'),
// 'subform' => 'settings',
// 'id' => 'bold',
// 'element' => 'checkbox',
// 'label' => '',
// 'multiOptions' => array(
// 1 => $translate->_('Bold listing') . ' ' . $this->getView()->amount($this->getFees()->getFeeAmount(Service\Fees::BOLD),
// null,
// '(+%s)'),
// ),
// ),
array(
'form_id' => array('item', 'fees_calculator', 'bulk'),
'subform' => 'settings',
'id' => 'highlighted',
'element' => 'checkbox',
'label' => '',
'multiOptions' => array(
1 => $translate->_('Highlight listing') . ' ' . $this->getView()->amount($this->getFees()->getFeeAmount(Service\Fees::HIGHLIGHTED),
null, '(+%s)'),
),
'bulk' => array(
'multiOptions' => array(0, 1),
'label' => $translate->_('Highlighted Listing'),
'type' => $translate->_('integer'),
),
),
array(
'form_id' => array('item', 'prefilled'),
'subtitle' => $this->_('Auto Relist'),
'subform' => 'settings',
'id' => 'enable_auto_relist',
'element' => ($settings['auto_relist']) ? 'checkbox' : false,
'value' => ($this->getData('nb_relists') > 0) ? 1 : 0,
'label' => $this->_('Enable Auto Relist'),
'multiOptions' => array(
1 => null,
),
'attributes' => array(
'class' => 'field-changeable',
),
'description' => $this->_('Check the above checkbox for your listing to be relisted automatically.'),
),
array(
'form_id' => array('item', 'prefilled', 'bulk'),
'subform' => 'settings',
'id' => 'nb_relists',
'element' => ($settings['auto_relist']) ? 'text' : false,
'label' => $this->_('Number of Relists'),
'description' => sprintf($translate->_('(Optional) Enter the number of times the item will be relisted automatically.
'
. 'The maximum number of auto relists allowed is %s.'), $settings['max_auto_relists']),
'attributes' => array(
'class' => 'form-control input-mini',
),
'validators' => array(
'Digits',
array('LessThan', array($settings['max_auto_relists'], true)),
),
'bulk' => array(
'type' => $translate->_('integer'),
),
),
array(
'form_id' => array('item', 'prefilled', 'bulk'),
'subform' => 'settings',
'id' => 'auto_relist_sold',
'element' => ($settings['auto_relist']) ? 'checkbox' : false,
'label' => $this->_('Auto Relist if Sold'),
'multiOptions' => array(
1 => null,
),
'description' => $this->_('By enabling this option, your item will be relisted even if sold.'),
'bulk' => array(
'multiOptions' => array(0, 1),
'type' => $translate->_('integer'),
),
),
array(
'form_id' => array('item', 'prefilled', 'product_edit', 'bulk'),
'subtitle' => $this->_('Location'),
'subform' => 'settings',
'id' => 'country',
'element' => 'select',
'label' => $this->_('Country'),
'multiOptions' => $countries,
'required' => true,
'description' => $this->_('Enter the country where the item is located.'),
'attributes' => array(
'class' => 'form-control input-medium',
),
'bodyCode' => "
",
'validators' => array(
$locationRecordExists,
),
'bulk' => array(
'type' => $translate->_('integer'),
'notes' => $translate->_('Country IDs allowed are available in the "Locations" tab. '),
'multiOptions' => array(),
'sample' => 2083,
),
),
array(
'form_id' => array('item', 'prefilled', 'product_edit', 'bulk'),
'subform' => 'settings',
'id' => 'state',
'element' => (count($states) > 0) ? 'select' : 'text',
'label' => $this->_('State/County'),
'multiOptions' => $states,
'required' => true,
'description' => $this->_('Enter the state/county where the item is located.'),
'attributes' => array(
'class' => 'form-control input-medium',
),
'filters' => array(
'\\Ppb\\Filter\\BadWords',
),
'bulk' => array(
'multiOptions' => array(),
'sample' => 2104,
),
),
array(
'form_id' => array('item', 'prefilled', 'product_edit', 'bulk'),
'subform' => 'settings',
'id' => 'address',
'element' => 'text',
'label' => $this->_('Address/Post Code'),
'required' => true,
'description' => $this->_('Enter the address/post code where the item is located.'),
'attributes' => array(
'class' => 'form-control input-medium',
),
'filters' => array(
'\\Ppb\\Filter\\BadWords',
),
'bulk' => array(
'sample' => 'My Street',
),
),
array(
'form_id' => array('item', 'prefilled', 'product_edit', 'bulk'),
'subform' => 'shipping',
'subtitle' => $this->_('Shipping'),
'id' => ShippingModel::FLD_PICKUP_OPTIONS,
'element' => ($settings['enable_shipping'] && $settings['enable_pickups']) ? 'select' : 'hidden',
'value' => ($settings['enable_pickups']) ? $this->getData('pickups') : ShippingModel::NO_PICKUPS,
'label' => ShippingModel::$postageFields[ShippingModel::FLD_PICKUP_OPTIONS],
'description' => $this->_('Select if you wish to offer pick-up options for your listing.'),
'multiOptions' => ShippingModel::$pickupOptions,
'attributes' => array(
'class' => 'form-control input-medium field-changeable',
),
),
array(
'form_id' => array('item', 'prefilled', 'product_edit', 'bulk'),
'subform' => 'shipping',
'id' => ShippingModel::FLD_POSTAGE,
'element' => ($settings['enable_shipping'] && $this->getUser()->getShipping()->getPostageType() == ShippingModel::POSTAGE_TYPE_ITEM) ? '\\Ppb\\Form\\Element\\ListingPostageLocations' : false,
'label' => ShippingModel::$postageFields[ShippingModel::FLD_POSTAGE],
'chznMultiOptions' => $this->getUser()->getShipping()->getLocationGroups(),
'description' => $this->_('Enter the postage options that apply to this item.'),
'attributes' => array(
'class' => 'field-shipping',
),
'validators' => (
$this->_formId !== 'prefilled' &&
$this->_formId !== 'bulk' &&
$this->getData(ShippingModel::FLD_PICKUP_OPTIONS) != ShippingModel::MUST_PICKUP) ?
array(
'\\Ppb\\Validate\\ItemPostage',
) : null,
'filters' => array(
'\\Ppb\\Filter\\LocalizedNumeric',
),
'bulk' => array(
'multiOptions' => (array)$this->getUser()->getShipping()->getLocationGroups(),
),
),
array(
'form_id' => array('item', 'product_edit', 'bulk'),
'subform' => 'shipping',
'id' => ShippingModel::FLD_ITEM_WEIGHT,
'element' => ($settings['enable_shipping'] && $this->getUser()->getShipping()->getPostageType() == ShippingModel::POSTAGE_TYPE_CARRIERS) ? '\\Ppb\\Form\\Element\\LocalizedNumeric' : 'hidden',
'label' => ShippingModel::$postageFields[ShippingModel::FLD_ITEM_WEIGHT],
'suffix' => $this->getUser()->getShipping()->getWeightUom(),
'description' => $this->_('Enter the weight of your item.'),
'attributes' => array(
'class' => 'form-control input-mini field-shipping',
),
'required' => (
$settings['enable_shipping'] &&
$this->getUser()->getShipping()->getPostageType() == ShippingModel::POSTAGE_TYPE_CARRIERS &&
$this->getData(ShippingModel::FLD_PICKUP_OPTIONS) != ShippingModel::MUST_PICKUP
) ? true : false,
'filters' => array(
'\\Ppb\\Filter\\LocalizedNumeric',
),
'bulk' => array(
'type' => $translate->_('decimal'),
'notes' => sprintf($translate->_('Weight UOM: %s'), $this->getUser()->getShipping()->getWeightUom()),
'sample' => 1.5,
),
),
array(
'form_id' => array('item', 'product_edit', 'bulk'),
'subform' => 'shipping',
'id' => ShippingModel::FLD_DIMENSIONS,
'element' => ($settings['enable_shipping'] && $this->getUser()->getShipping()->getPostageType() == ShippingModel::POSTAGE_TYPE_CARRIERS) ? '\\Ppb\\Form\\Element\\Dimensions' : 'hidden',
'label' => ShippingModel::$postageFields[ShippingModel::FLD_DIMENSIONS],
'suffix' => $this->getUser()->getShipping()->getDimensionsUom(),
'description' => $this->_('Enter the dimensions of your item (L x W x H).'),
'attributes' => array(
'class' => 'form-control input-mini field-shipping',
'placeholder' => array(
ShippingModel::DIMENSION_LENGTH => $translate->_('Length'),
ShippingModel::DIMENSION_WIDTH => $translate->_('Width'),
ShippingModel::DIMENSION_HEIGHT => $translate->_('Height'),
),
),
'filters' => array(
'\\Ppb\\Filter\\LocalizedNumeric',
),
'bulk' => array(
'type' => $translate->_('string'),
'notes' => sprintf($translate->_('Weight UOM: %s'), $this->getUser()->getShipping()->getDimensionsUom())
. '
'
. $this->_('The required format for this field is: Length||Width||Height'),
'sample' => '5' . Service\Listings\BulkLister::ARRAY_SEPARATOR . '7' . Service\Listings\BulkLister::ARRAY_SEPARATOR . '10',
),
),
array(
'form_id' => array('item', 'product_edit', 'prefilled', 'bulk'),
'subform' => 'shipping',
'id' => ShippingModel::FLD_INSURANCE,
'element' => ($settings['enable_shipping']) ? '\\Ppb\\Form\\Element\\LocalizedNumeric' : 'hidden',
'label' => ShippingModel::$postageFields[ShippingModel::FLD_INSURANCE],
'prefix' => '' . $this->getData('currency') . '',
'description' => $this->_('Enter the insurance amount that applies to this item (optional).'),
'attributes' => array(
'class' => 'form-control input-mini field-shipping',
),
'filters' => array(
'\\Ppb\\Filter\\LocalizedNumeric',
),
'validators' => array(
'Numeric',
array('GreaterThan', array(0, true)),
),
'bulk' => array(
'type' => $translate->_('decimal'),
),
),
array(
'form_id' => array('item', 'product_edit', 'prefilled', 'bulk'),
'subform' => 'shipping',
'id' => ShippingModel::FLD_SHIPPING_DETAILS,
'element' => ($settings['enable_shipping']) ? 'textarea' : 'hidden',
'label' => ShippingModel::$postageFields[ShippingModel::FLD_SHIPPING_DETAILS],
'description' => $this->_('Enter any shipping instructions that might apply for your item (optional).'),
'attributes' => array(
'rows' => '4',
'class' => 'form-control field-shipping',
),
'filters' => array(
'\\Ppb\\Filter\\BadWords',
),
'bulk' => array(
'sample' => 'Shipping Details',
),
),
array(
'form_id' => array('item', 'product_edit', 'prefilled', 'bulk'),
'subform' => 'shipping',
'subtitle' => $this->_('Returns'),
'id' => ShippingModel::FLD_ACCEPT_RETURNS,
'element' => ($settings['enable_returns']) ? 'checkbox' : false,
'value' => ($this->getData('returns_policy')) ? 1 : null,
'label' => ShippingModel::$postageFields[ShippingModel::FLD_ACCEPT_RETURNS],
'multiOptions' => array(
1 => null,
),
'attributes' => array(
'class' => 'field-changeable',
),
'description' => $this->_('Check the above checkbox if you will be accepting returns for this item.'),
'bulk' => array(
'multiOptions' => array(0, 1),
),
),
array(
'form_id' => array('item', 'product_edit', 'prefilled', 'bulk'),
'subform' => 'shipping',
'id' => ShippingModel::FLD_RETURNS_POLICY,
'element' => 'textarea',
'label' => ShippingModel::$postageFields[ShippingModel::FLD_RETURNS_POLICY],
'description' => $this->_('Enter any return policy details that might apply for your item (optional).'),
'attributes' => array(
'class' => 'form-control',
),
'filters' => array(
'\\Ppb\\Filter\\BadWords',
),
'bulk' => array(
'sample' => 'Returns Policy',
),
),
array(
'form_id' => array('item', 'product_edit', 'prefilled', 'bulk'),
'subform' => 'shipping',
'subtitle' => $this->_('Payment Methods'),
'id' => 'direct_payment',
'element' => (count($paymentGateways) > 0) ? 'checkbox' : 'hidden',
'label' => $this->_('Direct Payment'),
'multiOptions' => $paymentGateways,
'attributes' => array(
'class' => 'direct-payment',
),
'description' => $translate->_('Select any direct payment methods that can be used to pay for this item.')
. ((!$this->_inAdmin) ? '
'
. sprintf($translate->_(' to manage your payment gateways credentials / settings.'),
$this->getView()->url(array(
'module' => 'members',
'controller' => 'user',
'action' => 'edit-payment-gateway',
'popup' => true)),
$translate->_('Direct Payment Gateways Settings')) : ''),
'bulk' => array(
'notes' => sprintf(
$translate->_('Direct payment methods available are displayed in the "Payment Methods" tab. Multiple selections are to be separated by "%s"'),
$bulkArraySeparator),
'multiOptions' => array(),
'sample' => implode($bulkArraySeparator, array_keys($paymentGateways))
),
),
array(
'form_id' => array('item', 'product_edit', 'prefilled', 'bulk'),
'subform' => 'shipping',
'id' => 'offline_payment',
'element' => (count($paymentMethods) > 0) ? 'checkbox' : 'hidden',
'label' => $this->_('Offline Payment'),
'multiOptions' => $paymentMethods,
'description' => $this->_('Select any payment methods from the above that the buyer might use to pay for the item.'
. 'The payment through these payment methods will be handled offline.'),
'bulk' => array(
'notes' => sprintf(
$translate->_('Offline payment methods available are displayed in the "Payment Methods" tab. Multiple selections are to be separated by "||"'),
$bulkArraySeparator),
'multiOptions' => array(),
'sample' => implode($bulkArraySeparator, array_keys($paymentMethods))
),
),
array(
'form_id' => array('item', 'product_edit'),
'subform' => 'shipping',
'id' => 'check_payment_methods',
'element' => 'hidden',
'validators' => (count($paymentGateways) > 0 || count($paymentMethods) > 0) ?
array('\\Ppb\\Validate\\PaymentMethods') : null,
)
);
if ($this->_formId != 'bulk') {
array_splice($array, 10, 0, $customFields);
}
else {
$bulkListerCustomFields = $this->getCustomFields()->getFields(
array(
'type' => $customFieldsType,
'active' => 1,
))->toArray();
foreach ($bulkListerCustomFields as $key => $customField) {
$bulkListerCustomFields[$key]['form_id'] = array('bulk');
$bulkListerCustomFields[$key]['id'] = 'custom_field_' . $customField['id'];
if ($customField['product_attribute']) {
$bulkListerCustomFields[$key]['required'] = false;
}
if (!empty($customField['multiOptions'])) {
$multiOptions = \Ppb\Utility::unserialize($customField['multiOptions']);
$bulkListerCustomFields[$key]['bulk']['multiOptions'] = (!empty($multiOptions['key'])) ?
array_flip(array_filter($multiOptions['key'])) : array();
}
}
$array = array_merge($array, $bulkListerCustomFields);
}
return $array;
}
}