27require
'../main.inc.php';
28require
'class/ProductAttribute.class.php';
29require
'class/ProductAttributeValue.class.php';
30require
'lib/variants.lib.php';
33$langs->loadLangs(array(
'products'));
37$action =
GETPOST(
'action',
'aZ09');
38$confirm =
GETPOST(
'confirm',
'alpha');
39$cancel =
GETPOST(
'cancel',
'alpha');
40$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'productattribute';
41$backtopage =
GETPOST(
'backtopage',
'alpha');
42$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
43$lineid =
GETPOST(
'lineid',
'alpha');
46if (!isModEnabled(
'variants')) {
49if ($user->socid > 0) {
54$hookmanager->initHooks(array(
'productattributecard',
'globalcard'));
62$extrafields->fetch_name_optionals_label(
$object->table_element);
65include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
67$permissiontoread = $user->hasRight(
'variants',
'read');
68$permissiontoadd = $user->hasRight(
'variants',
'write');
69$permissiontoedit = $user->hasRight(
'variants',
'write');
70$permissiontodelete = $user->hasRight(
'variants',
'delete');
82$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
92 if (empty($backtopage) || ($cancel && empty($id))) {
93 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
94 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
95 $backtopage = $backurlforlist;
97 $backtopage =
dol_buildpath(
'/variants/card.php', 1).
'?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
103 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
105 if (!empty($backtopage)) {
106 header(
"Location: " . $backtopage);
113 include DOL_DOCUMENT_ROOT.
'/core/actions_addupdatedelete.inc.php';
116 if ($action ==
'up' && $permissiontoedit) {
119 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'#'.
GETPOST(
'rowid'));
121 } elseif ($action ==
'down' && $permissiontoedit) {
124 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'#'.
GETPOST(
'rowid'));
128 if ($action ==
'addline' && $permissiontoedit) {
129 $line_ref =
GETPOST(
'line_ref',
'alpha');
130 $line_value =
GETPOST(
'line_value',
'alpha');
132 $result =
$object->addLine($line_ref, $line_value);
135 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id);
141 } elseif ($action ==
'updateline' && $permissiontoedit) {
142 $line_ref =
GETPOST(
'line_ref',
'alpha');
143 $line_value =
GETPOST(
'line_value',
'alpha');
145 $result =
$object->updateLine($lineid, $line_ref, $line_value);
148 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id);
152 $action =
'editline';
163$help_url =
'EN:Module_Products#Variants';
167if ($action ==
'create') {
168 print
load_fiche_titre($langs->trans(
"NewObject", $langs->transnoentitiesnoconv(
"ProductAttribute")),
'',
'object_' .
$object->picto);
170 print
'<form method="POST" action="' . $_SERVER[
"PHP_SELF"] .
'">';
171 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
172 print
'<input type="hidden" name="action" value="add">';
174 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
176 if ($backtopageforcancel) {
177 print
'<input type="hidden" name="backtopageforcancel" value="' . $backtopageforcancel .
'">';
182 print
'<table class="border centpercent tableforfieldcreate">' .
"\n";
185 include DOL_DOCUMENT_ROOT .
'/core/tpl/commonfields_add.tpl.php';
188 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_add.tpl.php';
190 print
'</table>' .
"\n";
194 print
'<div class="center">';
195 print
'<input type="submit" class="button" name="add" value="' .
dol_escape_htmltag($langs->trans(
"Create")) .
'">';
197 print
'<input type="' . ($backtopage ?
"submit" :
"button") .
'" class="button button-cancel" name="cancel" value="' .
dol_escape_htmltag($langs->trans(
"Cancel")) .
'"' . ($backtopage ?
'' :
' onclick="history.go(-1)"') .
'>';
203} elseif (($id || $ref) && $action ==
'edit') {
207 print
'<form method="POST" action="' . $_SERVER[
"PHP_SELF"] .
'">';
208 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
209 print
'<input type="hidden" name="action" value="update">';
210 print
'<input type="hidden" name="id" value="' .
$object->id .
'">';
212 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
214 if ($backtopageforcancel) {
215 print
'<input type="hidden" name="backtopageforcancel" value="' . $backtopageforcancel .
'">';
220 print
'<table class="border centpercent tableforfieldedit">' .
"\n";
223 include DOL_DOCUMENT_ROOT .
'/core/tpl/commonfields_edit.tpl.php';
226 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_edit.tpl.php';
228 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
229 print $hookmanager->resPrint;
235 print
'<div class="center"><input type="submit" class="button button-save" name="save" value="' . $langs->trans(
"Save") .
'">';
236 print
' <input type="submit" class="button button-cancel" name="cancel" value="' . $langs->trans(
"Cancel") .
'">';
240} elseif (
$object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create'))) {
242 $res =
$object->fetch_optionals();
250 if ($action ==
'delete') {
251 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id, $langs->trans(
'DeleteMyObject'), $langs->trans(
'ProductAttributeDeleteDialog'),
'confirm_delete',
'', 0, 1);
252 } elseif ($action ==
'ask_deleteline') {
255 if ($object_value->fetch($lineid) > 0) {
256 $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);
261 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
262 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
263 if (empty($reshook)) {
264 $formconfirm .= $hookmanager->resPrint;
265 } elseif ($reshook > 0) {
266 $formconfirm = $hookmanager->resPrint;
274 $backtolist = (
GETPOST(
'backtolist') ?
GETPOST(
'backtolist') : DOL_URL_ROOT .
'/variants/list.php?leftmenu=?restore_lastsearch_values=1');
275 $linkback =
'<a href="' .
dol_sanitizeUrl($backtolist) .
'">' . $langs->trans(
"BackToList") .
'</a>';
277 dol_banner_tab(
$object,
'id', $linkback);
279 print
'<div class="fichecenter">';
280 print
'<div class="fichehalfleft">';
281 print
'<div class="underbanner clearboth"></div>';
282 print
'<table class="border centpercent tableforfield">' .
"\n";
285 include DOL_DOCUMENT_ROOT .
'/core/tpl/commonfields_view.tpl.php';
288 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
294 print
'<div class="clearboth"></div>';
299 if ($action !=
'editline') {
300 print
'<div class="tabsAction">' .
"\n";
301 $parameters = array();
302 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
307 if (empty($reshook)) {
309 print
dolGetButtonAction($langs->trans(
'Modify'),
'',
'default', $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=edit',
'', $permissiontoedit);
312 print
dolGetButtonAction($langs->trans(
'Delete'),
'',
'delete', $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'&action=delete',
'', $permissiontodelete);
314 print
'</div>' .
"\n";
320 if (!empty(
$object->table_element_line)) {
322 $result =
$object->getLinesArray();
324 print
load_fiche_titre($langs->trans(
"PossibleValues") . (!empty(
$object->lines) ?
'<span class="opacitymedium colorblack paddingleft">(' . count(
$object->lines) .
')</span>' :
''));
326 print
'<form name="addproduct" id="addproduct" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id . (($action !=
'editline') ?
'' :
'#line_' .
GETPOSTINT(
'lineid')) .
'" method="POST">
327 <input type="hidden" name="token" value="' .
newToken() .
'">
328 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline') .
'">
329 <input type="hidden" name="mode" value="">
330 <input type="hidden" name="page_y" value="">
331 <input type="hidden" name="id" value="' .
$object->id .
'">
334 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
336 if ($backtopageforcancel) {
337 print
'<input type="hidden" name="backtopageforcancel" value="' . $backtopageforcancel .
'">';
340 if (!empty($conf->use_javascript_ajax)) {
341 include DOL_DOCUMENT_ROOT .
'/core/tpl/ajaxrow.tpl.php';
344 print
'<div class="div-table-responsive-no-min">';
345 if (!empty(
$object->lines) || ($permissiontoedit && $action !=
'selectlines' && $action !=
'editline')) {
346 print
'<table id="tablelines" class="noborder centpercent">';
349 $object->printObjectLines($action, $mysoc,
null,
GETPOSTINT(
'lineid'), 1,
'/variants/tpl', ($permissiontoedit ? 1 : 0));
351 if (!empty(
$object->lines) || ($permissiontoedit && $action !=
'selectlines' && $action !=
'editline')) {
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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)
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...
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.