forked from Wavyzz/dolibarr
Make canvas for products working again.
This commit is contained in:
@@ -32,7 +32,7 @@ class Canvas
|
||||
var $db;
|
||||
var $error;
|
||||
var $errors=array();
|
||||
|
||||
|
||||
var $actiontype;
|
||||
|
||||
var $dirmodule; // Module directory
|
||||
@@ -114,12 +114,13 @@ class Canvas
|
||||
* Shared method for canvas to assign values for templates
|
||||
*
|
||||
* @param string &$action Action string
|
||||
* @param int $id Object id
|
||||
* @param int $id Object id (if ref not provided)
|
||||
* @param string $ref Object ref (if id not provided)
|
||||
* @return void
|
||||
*/
|
||||
function assign_values(&$action='view', $id=0)
|
||||
function assign_values(&$action='view', $id=0, $ref='')
|
||||
{
|
||||
if (method_exists($this->control,'assign_values')) $this->control->assign_values($action, $id);
|
||||
if (method_exists($this->control,'assign_values')) $this->control->assign_values($action, $id, $ref);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -40,18 +40,20 @@ class ActionsCardProduct extends Product
|
||||
public $list_datas = array();
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param DoliDB $DB Handler acces base de donnees
|
||||
* @param string $targetmodule Name of directory of module where canvas is stored
|
||||
* @param string $canvas Name of canvas
|
||||
* @param string $card Name of tab (sub-canvas)
|
||||
* @param DoliDB $DB Database handler
|
||||
* @param string $dirmodule Name of directory of module
|
||||
* @param string $targetmodule Name of directory where canvas is stored
|
||||
* @param string $canvas Name of canvas
|
||||
* @param string $card Name of tab (sub-canvas)
|
||||
*/
|
||||
function ActionsCardProduct($DB,$targetmodule,$canvas,$card)
|
||||
function __construct($DB, $dirmodule, $targetmodule, $canvas, $card)
|
||||
{
|
||||
$this->db = $DB;
|
||||
$this->targetmodule = $targetmodule;
|
||||
$this->db = $DB;
|
||||
$this->dirmodule = $dirmodule;
|
||||
$this->targetmodule = $targetmodule;
|
||||
$this->canvas = $canvas;
|
||||
$this->card = $card;
|
||||
|
||||
@@ -74,18 +76,45 @@ class ActionsCardProduct extends Product
|
||||
return $langs->trans("Products");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get object from id or ref and save it into this->object
|
||||
*
|
||||
* @param int $id Object id
|
||||
* @param string $ref Ojbect ref
|
||||
* @return Object Object loaded
|
||||
*/
|
||||
function getObject($id,$ref='')
|
||||
{
|
||||
$object = new Product($this->db);
|
||||
if (! empty($id) || ! empty($ref)) $object->fetch($id,$ref);
|
||||
$this->object = $object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign custom values for canvas (for example into this->tpl to be used by templates)
|
||||
*
|
||||
* @param string $action Type of action
|
||||
* @param string &$action Type of action
|
||||
* @param string $id Id of object
|
||||
* @param string $ref Ref of object
|
||||
* @return void
|
||||
*/
|
||||
function assign_values($action)
|
||||
function assign_values(&$action, $id=0, $ref='')
|
||||
{
|
||||
global $conf,$langs,$user;
|
||||
global $conf, $langs, $user, $mysoc, $canvas;
|
||||
global $html, $formproduct;
|
||||
|
||||
// canvas
|
||||
$ret = $this->getObject($id,$ref);
|
||||
|
||||
//parent::assign_values($action);
|
||||
|
||||
foreach($this->object as $key => $value)
|
||||
{
|
||||
$this->tpl[$key] = $value;
|
||||
}
|
||||
|
||||
$this->tpl['error'] = get_htmloutput_errors($this->object->error,$this->object->errors);
|
||||
|
||||
// canvas
|
||||
$this->tpl['canvas'] = $this->canvas;
|
||||
|
||||
// id
|
||||
@@ -133,10 +162,16 @@ class ActionsCardProduct extends Product
|
||||
|
||||
if ($action == 'view')
|
||||
{
|
||||
// Ref
|
||||
$this->tpl['ref'] = $html->showrefnav($this,'ref','',1,'ref');
|
||||
$head = product_prepare_head($this->object,$user);
|
||||
|
||||
// Accountancy buy code
|
||||
$this->tpl['showrefnav'] = $html->showrefnav($this->object,'ref','',1,'ref');
|
||||
|
||||
$titre=$langs->trans("CardProduct".$this->object->type);
|
||||
$picto=($this->object->type==1?'service':'product');
|
||||
$this->tpl['showhead']=dol_get_fiche_head($head, 'card', $titre, 0, $picto);
|
||||
$this->tpl['showend']=dol_get_fiche_end();
|
||||
|
||||
// Accountancy buy code
|
||||
$this->tpl['accountancyBuyCodeKey'] = $html->editfieldkey("ProductAccountancyBuyCode",'productaccountancycodesell',$this->accountancy_code_sell,'id',$this->id,$user->rights->produit->creer);
|
||||
$this->tpl['accountancyBuyCodeVal'] = $html->editfieldval("ProductAccountancyBuyCode",'productaccountancycodesell',$this->accountancy_code_sell,'id',$this->id,$user->rights->produit->creer);
|
||||
|
||||
@@ -196,11 +231,6 @@ class ActionsCardProduct extends Product
|
||||
|
||||
if ($action == 'view')
|
||||
{
|
||||
$head=product_prepare_head($this->object, $user);
|
||||
$titre=$langs->trans("CardProduct".$this->object->type);
|
||||
$picto=($this->object->type==1?'service':'product');
|
||||
$this->tpl['fiche_head']=dol_get_fiche_head($head, 'card', $titre, 0, $picto);
|
||||
|
||||
// Status
|
||||
$this->tpl['status'] = $this->object->getLibStatut(2,0);
|
||||
$this->tpl['status_buy'] = $this->object->getLibStatut(2,1);
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
?>
|
||||
|
||||
<!-- BEGIN PHP TEMPLATE -->
|
||||
<?php echo $this->control->tpl['fiche_head']; ?>
|
||||
<?php echo $this->control->tpl['showhead']; ?>
|
||||
|
||||
<?php dol_htmloutput_errors($this->control->tpl['error'],$this->control->tpl['errors']); ?>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
<tr>
|
||||
<td width="15%"><?php echo $langs->trans("Ref"); ?></td>
|
||||
<td colspan="2"><?php echo $this->control->tpl['ref']; ?></td>
|
||||
<td colspan="2"><?php echo $this->control->tpl['showrefnav']; ?></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
@@ -88,6 +88,6 @@
|
||||
|
||||
</table>
|
||||
|
||||
<?php echo $this->control->tpl['fiche_end']; ?>
|
||||
<?php echo $this->control->tpl['showend']; ?>
|
||||
|
||||
<!-- END PHP TEMPLATE -->
|
||||
@@ -74,17 +74,45 @@ class ActionsCardService extends Product
|
||||
return $langs->trans("Products");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get object from id or ref and save it into this->object
|
||||
*
|
||||
* @param int $id Object id
|
||||
* @param string $ref Ojbect ref
|
||||
* @return Object Object loaded
|
||||
*/
|
||||
function getObject($id,$ref='')
|
||||
{
|
||||
$object = new Product($this->db);
|
||||
if (! empty($id) || ! empty($ref)) $object->fetch($id,$ref);
|
||||
$this->object = $object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign custom values for canvas (for example into this->tpl to be used by templates)
|
||||
*
|
||||
* @param string $action Type of action
|
||||
* @param string &$action Type of action
|
||||
* @param string $id Id of object
|
||||
* @param string $ref Ref of object
|
||||
* @return void
|
||||
*/
|
||||
function assign_values($action)
|
||||
function assign_values(&$action, $id=0, $ref='')
|
||||
{
|
||||
global $conf,$langs,$user;
|
||||
global $conf, $langs, $user, $mysoc, $canvas;
|
||||
global $html, $formproduct;
|
||||
|
||||
$ret = $this->getObject($id,$ref);
|
||||
|
||||
//parent::assign_values($action);
|
||||
|
||||
foreach($this->object as $key => $value)
|
||||
{
|
||||
$this->tpl[$key] = $value;
|
||||
}
|
||||
|
||||
$this->tpl['error'] = get_htmloutput_errors($this->object->error,$this->object->errors);
|
||||
|
||||
// canvas
|
||||
$this->tpl['canvas'] = $this->canvas;
|
||||
|
||||
@@ -133,8 +161,14 @@ class ActionsCardService extends Product
|
||||
|
||||
if ($action == 'view')
|
||||
{
|
||||
// Ref
|
||||
$this->tpl['ref'] = $html->showrefnav($this,'ref','',1,'ref');
|
||||
$head = product_prepare_head($this->object,$user);
|
||||
|
||||
$this->tpl['showrefnav'] = $html->showrefnav($this->object,'ref','',1,'ref');
|
||||
|
||||
$titre=$langs->trans("CardProduct".$this->object->type);
|
||||
$picto=($this->object->type==1?'service':'product');
|
||||
$this->tpl['showhead']=dol_get_fiche_head($head, 'card', $titre, 0, $picto);
|
||||
$this->tpl['showend']=dol_get_fiche_end();
|
||||
|
||||
// Accountancy buy code
|
||||
$this->tpl['accountancyBuyCodeKey'] = $html->editfieldkey("ProductAccountancyBuyCode",'productaccountancycodesell',$this->accountancy_code_sell,'id',$this->id,$user->rights->produit->creer);
|
||||
@@ -192,11 +226,6 @@ class ActionsCardService extends Product
|
||||
|
||||
if ($action == 'view')
|
||||
{
|
||||
$head=product_prepare_head($this->object, $user);
|
||||
$titre=$langs->trans("CardProduct".$this->object->type);
|
||||
$picto=($this->object->type==1?'service':'product');
|
||||
$this->tpl['fiche_head']=dol_get_fiche_head($head, 'card', $titre, 0, $picto);
|
||||
|
||||
// Status
|
||||
$this->tpl['status'] = $this->object->getLibStatut(2,0);
|
||||
$this->tpl['status_buy'] = $this->object->getLibStatut(2,1);
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
?>
|
||||
|
||||
<!-- BEGIN PHP TEMPLATE -->
|
||||
<?php echo $this->control->tpl['fiche_head']; ?>
|
||||
<?php echo $this->control->tpl['showhead']; ?>
|
||||
|
||||
<?php dol_htmloutput_errors($this->control->tpl['error'],$this->control->tpl['errors']); ?>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
<tr>
|
||||
<td width="15%"><?php echo $langs->trans("Ref"); ?></td>
|
||||
<td colspan="2"><?php echo $this->control->tpl['ref']; ?></td>
|
||||
<td colspan="2"><?php echo $this->control->tpl['showrefnav']; ?></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
@@ -73,5 +73,5 @@
|
||||
|
||||
</table>
|
||||
|
||||
<?php echo $this->control->tpl['fiche_end']; ?>
|
||||
<?php echo $this->control->tpl['showend']; ?>
|
||||
<!-- END PHP TEMPLATE -->
|
||||
@@ -47,7 +47,7 @@ $mesg = ''; $error=0; $errors=array();
|
||||
|
||||
$id=GETPOST('id');
|
||||
$ref=GETPOST('ref');
|
||||
$action=GETPOST('action');
|
||||
$action=(GETPOST('action') ? GETPOST('action') : 'view');
|
||||
$confirm=GETPOST('confirm');
|
||||
$socid=GETPOST("socid");
|
||||
if ($user->societe_id) $socid=$user->societe_id;
|
||||
@@ -66,8 +66,8 @@ if (! empty($canvas))
|
||||
}
|
||||
|
||||
// Security check
|
||||
if (isset($id) || isset($ref)) $value = isset($id)?$id:(isset($ref)?$ref:'');
|
||||
$type = isset($ref)?'ref':'rowid';
|
||||
$value = $ref?$ref:$id;
|
||||
$type = $ref?'ref':'rowid';
|
||||
$result=restrictedArea($user,'produit|service',$value,'product','','',$type, $objcanvas);
|
||||
|
||||
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
|
||||
@@ -81,7 +81,7 @@ $hookmanager->callHooks(array('product'));
|
||||
* Actions
|
||||
*/
|
||||
|
||||
$parameters=array('socid'=>$socid);
|
||||
$parameters=array('id'=>$id, 'ref'=>$ref, 'objcanvas'=>$objcanvas);
|
||||
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
|
||||
$error=$hookmanager->error; $errors=$hookmanager->errors;
|
||||
|
||||
@@ -90,7 +90,7 @@ if (empty($reshook))
|
||||
if ($action == 'setproductaccountancycodebuy')
|
||||
{
|
||||
$product = new Product($db);
|
||||
$result=$product->fetch($id);
|
||||
$result=$product->fetch($id,$ref);
|
||||
$product->accountancy_code_buy=$_POST["productaccountancycodebuy"];
|
||||
$result=$product->update($product->id,$user,1,0,1);
|
||||
if ($result < 0)
|
||||
@@ -105,7 +105,7 @@ if (empty($reshook))
|
||||
if ($action == 'setproductaccountancycodesell')
|
||||
{
|
||||
$product = new Product($db);
|
||||
$result=$product->fetch($id);
|
||||
$result=$product->fetch($id,$ref);
|
||||
$product->accountancy_code_sell=$_POST["productaccountancycodesell"];
|
||||
$result=$product->update($product->id,$user,1,0,1);
|
||||
if ($result < 0)
|
||||
@@ -118,9 +118,9 @@ if (empty($reshook))
|
||||
if ($action == 'fastappro')
|
||||
{
|
||||
$product = new Product($db);
|
||||
$product->fetch($id);
|
||||
$result = $product->fastappro($user);
|
||||
Header("Location: fiche.php?id=".$id);
|
||||
$result=$product->fetch($id,$ref);
|
||||
$result=$product->fastappro($user);
|
||||
Header("Location: fiche.php?id=".$product->id);
|
||||
exit;
|
||||
}
|
||||
|
||||
@@ -229,7 +229,7 @@ if (empty($reshook))
|
||||
else
|
||||
{
|
||||
$product=new Product($db);
|
||||
if ($product->fetch($id))
|
||||
if ($product->fetch($id,$ref))
|
||||
{
|
||||
$product->ref = $ref;
|
||||
$product->libelle = $_POST["libelle"];
|
||||
@@ -288,7 +288,7 @@ if (empty($reshook))
|
||||
|
||||
$product = new Product($db);
|
||||
$originalId = $id;
|
||||
if ($product->fetch($id) > 0)
|
||||
if ($product->fetch($id,$ref) > 0)
|
||||
{
|
||||
$product->ref = GETPOST('clone_ref');
|
||||
$product->status = 0;
|
||||
@@ -343,7 +343,7 @@ if (empty($reshook))
|
||||
if ($action == 'confirm_delete' && $confirm == 'yes')
|
||||
{
|
||||
$object = new Product($db);
|
||||
$object->fetch($id);
|
||||
$object->fetch($id,$ref);
|
||||
|
||||
if ( ($object->type == 0 && $user->rights->produit->supprimer) || ($object->type == 1 && $user->rights->service->supprimer) )
|
||||
{
|
||||
@@ -384,7 +384,7 @@ if (empty($reshook))
|
||||
}
|
||||
|
||||
$prod = new Product($db);
|
||||
$result=$prod->fetch($id);
|
||||
$result=$prod->fetch($id,$ref);
|
||||
if ($result <= 0)
|
||||
{
|
||||
dol_print_error($db,$prod->error);
|
||||
@@ -464,7 +464,7 @@ if (empty($reshook))
|
||||
}
|
||||
|
||||
$prod = new Product($db);
|
||||
$result=$prod->fetch($id);
|
||||
$result=$prod->fetch($id,$ref);
|
||||
if ($result <= 0)
|
||||
{
|
||||
dol_print_error($db,$prod->error);
|
||||
@@ -546,7 +546,7 @@ if (empty($reshook))
|
||||
}
|
||||
|
||||
$prod = new Product($db);
|
||||
$result = $prod->fetch($id);
|
||||
$result = $prod->fetch($id,$ref);
|
||||
if ($result <= 0)
|
||||
{
|
||||
dol_print_error($db,$prod->error);
|
||||
@@ -635,42 +635,18 @@ llxHeader('',$langs->trans("CardProduct".$_GET["type"]),$helpurl);
|
||||
$html = new Form($db);
|
||||
$formproduct = new FormProduct($db);
|
||||
|
||||
|
||||
// TODO Mutualize this part of code (same than societe/soc.php and contact/fiche.php)
|
||||
if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action))
|
||||
{
|
||||
// -----------------------------------------
|
||||
// When used with CANVAS
|
||||
// -----------------------------------------
|
||||
if ($action == 'create')
|
||||
{
|
||||
$objcanvas->assign_values($action); // Set value for templates
|
||||
$objcanvas->display_canvas($action,0); // Show template
|
||||
}
|
||||
elseif ($action == 'edit')
|
||||
{
|
||||
$objcanvas->control->object=$objcanvas->getObject($socid); // TODO: Getting and storing object should be done into assign_values (for template with no code) or into tpl
|
||||
if (empty($objcanvas->control->object))
|
||||
{
|
||||
$object = new Product($db);
|
||||
$object->fetch($id);
|
||||
$objcanvas->control->object=$object;
|
||||
}
|
||||
$objcanvas->assign_values($action); // Set value for templates
|
||||
$objcanvas->display_canvas($action); // Show template
|
||||
}
|
||||
else
|
||||
{
|
||||
$objcanvas->control->object=$objcanvas->getObject($socid); // TODO: Getting and storing object should be done into assign_values (for template with no code) or into tpl
|
||||
if (empty($objcanvas->control->object))
|
||||
{
|
||||
$object = new Product($db);
|
||||
$object->fetch($id);
|
||||
$objcanvas->control->object=$object;
|
||||
}
|
||||
$objcanvas->assign_values('view');
|
||||
$objcanvas->display_canvas('view'); // Show template
|
||||
}
|
||||
if (! $objcanvas->hasActions() && ($id || $ref))
|
||||
{
|
||||
$object = new Product($db);
|
||||
$object->fetch($id, $ref); // For use with "pure canvas" (canvas that contains templates only)
|
||||
}
|
||||
$objcanvas->assign_values($action, $id, $ref); // Set value for templates
|
||||
$objcanvas->display_canvas(); // Show template
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -60,10 +60,10 @@ abstract class ActionsCardCommon
|
||||
$this->canvas = $canvas;
|
||||
$this->card = $card;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Instantiation of DAO class
|
||||
*
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function getInstanceDao()
|
||||
@@ -84,25 +84,26 @@ abstract class ActionsCardCommon
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get object
|
||||
* Get object from id or ref and save it into this->object
|
||||
*
|
||||
* @param int Object id
|
||||
* @param ref Object ref
|
||||
* @return object Object loaded
|
||||
*/
|
||||
function getObject($id)
|
||||
function getObject($id,$ref='')
|
||||
{
|
||||
$ret = $this->getInstanceDao();
|
||||
|
||||
|
||||
if (is_object($this->object) && method_exists($this->object,'fetch'))
|
||||
{
|
||||
if (! empty($id)) $this->object->fetch($id);
|
||||
if (! empty($id) || ! empty($ref)) $this->object->fetch($id,$ref);
|
||||
}
|
||||
else
|
||||
{
|
||||
$object = new Societe($this->db);
|
||||
if (! empty($id)) $object->fetch($id);
|
||||
if (! empty($id) || ! empty($ref)) $object->fetch($id,$ref);
|
||||
$this->object = $object;
|
||||
}
|
||||
}
|
||||
@@ -297,7 +298,7 @@ abstract class ActionsCardCommon
|
||||
Header("Location: ".$_SERVER["PHP_SELF"]."?socid=".$this->object->id);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
$oldsoccanvas = dol_clone($this->object);
|
||||
|
||||
// To avoid setting code if third party is not concerned. But if it had values, we keep them.
|
||||
@@ -379,12 +380,14 @@ abstract class ActionsCardCommon
|
||||
}
|
||||
|
||||
/**
|
||||
* Set content of ->tpl array, to use into template
|
||||
*
|
||||
* @param string $action Type of action
|
||||
* @return string HTML output
|
||||
* Assign custom values for canvas (for example into this->tpl to be used by templates)
|
||||
*
|
||||
* @param string &$action Type of action
|
||||
* @param string $id Id of object
|
||||
* @param string $ref Ref of object
|
||||
* @return void
|
||||
*/
|
||||
function assign_values(&$action)
|
||||
function assign_values(&$action, $id=0, $ref='')
|
||||
{
|
||||
global $conf, $langs, $user, $mysoc, $canvas;
|
||||
global $form, $formadmin, $formcompany;
|
||||
|
||||
@@ -81,7 +81,7 @@ class ActionsCardCompany extends ActionsCardCommon
|
||||
function doActions(&$action, $id)
|
||||
{
|
||||
$ret = $this->getObject($id);
|
||||
|
||||
|
||||
$return = parent::doActions($action);
|
||||
|
||||
return $return;
|
||||
@@ -90,18 +90,20 @@ class ActionsCardCompany extends ActionsCardCommon
|
||||
/**
|
||||
* Assign custom values for canvas (for example into this->tpl to be used by templates)
|
||||
*
|
||||
* @param string $action Type of action
|
||||
* @param string &$action Type of action
|
||||
* @param string $id Id of object
|
||||
* @param string $ref Ref of object
|
||||
* @return void
|
||||
*/
|
||||
function assign_values(&$action, $id)
|
||||
function assign_values(&$action, $id=0, $ref='')
|
||||
{
|
||||
global $conf, $langs, $user, $mysoc;
|
||||
global $form, $formadmin, $formcompany;
|
||||
|
||||
$ret = $this->getObject($id);
|
||||
|
||||
$ret = $this->getObject($id,$ref);
|
||||
|
||||
parent::assign_values($action);
|
||||
|
||||
|
||||
$this->tpl['title'] = $this->getTitle($action);
|
||||
|
||||
$this->tpl['profid1'] = $this->object->siren;
|
||||
|
||||
@@ -81,27 +81,29 @@ class ActionsCardIndividual extends ActionsCardCommon
|
||||
function doActions(&$action, $id)
|
||||
{
|
||||
$ret = $this->getObject($id);
|
||||
|
||||
|
||||
$return = parent::doActions($action);
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign custom values for canvas (for example into this->tpl to be used by templates)
|
||||
* Assign custom values for canvas (for example into this->tpl to be used by templates)
|
||||
*
|
||||
* @param string $action Type of action
|
||||
* @return void
|
||||
* @param string &$action Type of action
|
||||
* @param string $id Id of object
|
||||
* @param string $ref Ref of object
|
||||
* @return void
|
||||
*/
|
||||
function assign_values(&$action, $id)
|
||||
function assign_values(&$action, $id=0, $ref='')
|
||||
{
|
||||
global $conf, $langs;
|
||||
global $form, $formcompany;
|
||||
|
||||
$ret = $this->getObject($id);
|
||||
|
||||
$ret = $this->getObject($id,$ref);
|
||||
|
||||
parent::assign_values($action);
|
||||
|
||||
|
||||
$this->tpl['title'] = $this->getTitle($action);
|
||||
|
||||
if ($action == 'create' || $action == 'edit')
|
||||
|
||||
Reference in New Issue
Block a user