28require
'../main.inc.php';
29require
'class/ProductAttribute.class.php';
30require
'class/ProductAttributeValue.class.php';
31require
'lib/variants.lib.php';
44$langs->loadLangs(array(
'products'));
48$action =
GETPOST(
'action',
'aZ09');
49$confirm =
GETPOST(
'confirm',
'alpha');
50$cancel =
GETPOST(
'cancel',
'alpha');
51$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'productattribute';
52$backtopage =
GETPOST(
'backtopage',
'alpha');
53$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
57if (!isModEnabled(
'variants')) {
60if ($user->socid > 0) {
65$hookmanager->initHooks(array(
'productattributecard',
'globalcard'));
73$extrafields->fetch_name_optionals_label(
$object->table_element);
76include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
78$permissiontoread = $user->hasRight(
'variants',
'read');
79$permissiontoadd = $user->hasRight(
'variants',
'write');
80$permissiontoedit = $user->hasRight(
'variants',
'write');
81$permissiontodelete = $user->hasRight(
'variants',
'delete');
93$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
103 if (empty($backtopage) || ($cancel && empty($id))) {
104 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
105 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
106 $backtopage = $backurlforlist;
108 $backtopage =
dol_buildpath(
'/variants/card.php', 1).
'?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
114 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
116 if (!empty($backtopage)) {
117 header(
"Location: " . $backtopage);
124 include DOL_DOCUMENT_ROOT.
'/core/actions_addupdatedelete.inc.php';
127 if ($action ==
'up' && $permissiontoedit) {
130 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'#'.
GETPOSTINT(
'rowid'));
132 } elseif ($action ==
'down' && $permissiontoedit) {
135 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'#'.
GETPOSTINT(
'rowid'));
139 if ($action ==
'addline' && $permissiontoedit) {
140 $line_ref =
GETPOST(
'line_ref',
'alpha');
141 $line_value =
GETPOST(
'line_value',
'alpha');
143 $result =
$object->addLine($line_ref, $line_value);
146 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id);
152 } elseif ($action ==
'updateline' && $permissiontoedit) {
153 $line_ref =
GETPOST(
'line_ref',
'alpha');
154 $line_value =
GETPOST(
'line_value',
'alpha');
156 $result =
$object->updateLine($lineid, $line_ref, $line_value);
159 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id);
163 $action =
'editline';
174$help_url =
'EN:Module_Products#Variants';
178if ($action ==
'create') {
179 print
load_fiche_titre($langs->trans(
"NewObject", $langs->transnoentitiesnoconv(
"ProductAttribute")),
'',
'object_' .
$object->picto);
181 print
'<form method="POST" action="' . $_SERVER[
"PHP_SELF"] .
'">';
182 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
183 print
'<input type="hidden" name="action" value="add">';
185 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
187 if ($backtopageforcancel) {
188 print
'<input type="hidden" name="backtopageforcancel" value="' . $backtopageforcancel .
'">';
193 print
'<table class="border centpercent tableforfieldcreate">' .
"\n";
196 include DOL_DOCUMENT_ROOT .
'/core/tpl/commonfields_add.tpl.php';
199 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_add.tpl.php';
201 print
'</table>' .
"\n";
205 print
'<div class="center">';
206 print
'<input type="submit" class="button" name="add" value="' .
dol_escape_htmltag($langs->trans(
"Create")) .
'">';
208 print
'<input type="' . ($backtopage ?
"submit" :
"button") .
'" class="button button-cancel" name="cancel" value="' .
dol_escape_htmltag($langs->trans(
"Cancel")) .
'"' . ($backtopage ?
'' :
' onclick="history.go(-1)"') .
'>';
214} elseif (($id || $ref) && $action ==
'edit') {
218 print
'<form method="POST" action="' . $_SERVER[
"PHP_SELF"] .
'">';
219 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
220 print
'<input type="hidden" name="action" value="update">';
221 print
'<input type="hidden" name="id" value="' .
$object->id .
'">';
223 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
225 if ($backtopageforcancel) {
226 print
'<input type="hidden" name="backtopageforcancel" value="' . $backtopageforcancel .
'">';
231 print
'<table class="border centpercent tableforfieldedit">' .
"\n";
234 include DOL_DOCUMENT_ROOT .
'/core/tpl/commonfields_edit.tpl.php';
237 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_edit.tpl.php';
239 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
240 print $hookmanager->resPrint;
246 print
'<div class="center"><input type="submit" class="button button-save" name="save" value="' . $langs->trans(
"Save") .
'">';
247 print
' <input type="submit" class="button button-cancel" name="cancel" value="' . $langs->trans(
"Cancel") .
'">';
251} elseif (
$object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create'))) {
253 $res =
$object->fetch_optionals();
261 if ($action ==
'delete') {
262 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id, $langs->trans(
'DeleteMyObject'), $langs->trans(
'ProductAttributeDeleteDialog'),
'confirm_delete',
'', 0, 1);
263 } elseif ($action ==
'ask_deleteline') {
266 if ($object_value->fetch($lineid) > 0) {
267 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&lineid=' . $lineid, $langs->trans(
'DeleteLine'), $langs->trans(
'ProductAttributeValueDeleteDialog',
dol_htmlentities($object_value->value),
dol_htmlentities($object_value->ref)),
'confirm_deleteline',
'', 0, 1);
272 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
273 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
274 if (empty($reshook)) {
275 $formconfirm .= $hookmanager->resPrint;
276 } elseif ($reshook > 0) {
277 $formconfirm = $hookmanager->resPrint;
285 $backtolist = (
GETPOST(
'backtolist') ?
GETPOST(
'backtolist') : DOL_URL_ROOT .
'/variants/list.php?leftmenu=?restore_lastsearch_values=1');
286 $linkback =
'<a href="' .
dol_sanitizeUrl($backtolist) .
'">' . $langs->trans(
"BackToList") .
'</a>';
288 dol_banner_tab(
$object,
'id', $linkback);
290 print
'<div class="fichecenter">';
291 print
'<div class="fichehalfleft">';
292 print
'<div class="underbanner clearboth"></div>';
293 print
'<table class="border centpercent tableforfield">' .
"\n";
296 include DOL_DOCUMENT_ROOT .
'/core/tpl/commonfields_view.tpl.php';
299 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
305 print
'<div class="clearboth"></div>';
310 if ($action !=
'editline') {
311 print
'<div class="tabsAction">' .
"\n";
312 $parameters = array();
313 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
318 if (empty($reshook)) {
320 print
dolGetButtonAction($langs->trans(
'Modify'),
'',
'default', $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=edit',
'', $permissiontoedit);
323 print
dolGetButtonAction($langs->trans(
'Delete'),
'',
'delete', $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'&action=delete',
'', $permissiontodelete);
325 print
'</div>' .
"\n";
331 if (!empty(
$object->table_element_line)) {
333 $result =
$object->getLinesArray();
335 print
load_fiche_titre($langs->trans(
"PossibleValues") . (!empty(
$object->lines) ?
'<span class="opacitymedium colorblack paddingleft">(' . count(
$object->lines) .
')</span>' :
''));
337 print
'<form name="addproduct" id="addproduct" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id . (($action !=
'editline') ?
'' :
'#line_' .
GETPOSTINT(
'lineid')) .
'" method="POST">
338 <input type="hidden" name="token" value="' .
newToken() .
'">
339 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline') .
'">
340 <input type="hidden" name="mode" value="">
341 <input type="hidden" name="page_y" value="">
342 <input type="hidden" name="id" value="' .
$object->id .
'">
345 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
347 if ($backtopageforcancel) {
348 print
'<input type="hidden" name="backtopageforcancel" value="' . $backtopageforcancel .
'">';
351 if (!empty(
$conf->use_javascript_ajax)) {
352 include DOL_DOCUMENT_ROOT .
'/core/tpl/ajaxrow.tpl.php';
355 print
'<div class="div-table-responsive-no-min">';
356 if (!empty(
$object->lines) || ($permissiontoedit && $action !=
'selectlines' && $action !=
'editline')) {
357 print
'<table id="tablelines" class="noborder centpercent">';
360 $object->printObjectLines($action, $mysoc,
null,
GETPOSTINT(
'lineid'), 1,
'/variants/tpl', ($permissiontoedit ? 1 : 0));
362 if (!empty(
$object->lines) || ($permissiontoedit && $action !=
'selectlines' && $action !=
'editline')) {
$id
Support class for third parties, contacts, members, users or resources.
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class ProductAttribute Used to represent a Product attribute Examples:
Class ProductAttributeValue Used to represent a product attribute value.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_set_focus($selector)
Set focus onto field with selector (similar behaviour of 'autofocus' HTML5 tag)
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
dol_htmlentities($string, $flags=ENT_QUOTES|ENT_SUBSTITUTE, $encoding='UTF-8', $double_encode=false)
Replace htmlentities functions.
dol_sanitizeUrl($stringtoclean, $type=1)
Clean a string to use it as an URL (into a href or src attribute)
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
productAttributePrepareHead($object)
Prepare array with list of tabs.