36 $this->jquery = $controller->jquery;
47 public function getForm($identifier, $instance) {
48 $type = ($instance->_new) ?
"new" :
"edit";
49 $messageInfos = [
"new" => [
"icon" => HtmlIconGroups::corner (
"table",
"plus",
"big" ),
"message" =>
"New object creation" ],
"edit" => [
"icon" => HtmlIconGroups::corner (
"table",
"edit",
"big" ),
"message" =>
"Editing an existing object" ] ];
50 $message = $messageInfos [$type];
51 $form = $this->jquery->semantic ()->dataForm ( $identifier, $instance );
52 $className = \get_class ( $instance );
53 $fields = $this->controller->_getAdminData ()->getFormFieldNames ( $className );
54 $form->setFields ( $fields );
55 $form->insertField ( 0,
"_message" );
56 $form->fieldAsMessage (
"_message", [
"icon" => $message [
"icon"] ] );
57 $instance->_message = $className;
61 $form->setCaptions ( $this->
getFormCaptions ( $form->getInstanceViewer ()->getVisibleProperties (), $className, $instance ) );
62 $form->setCaption (
"_message", $message [
"message"] );
63 $form->setSubmitParams ( $this->controller->_getBaseRoute () .
"/update",
"#frm-add-update" );
73 foreach ( $fieldTypes as $property => $type ) {
76 $form->fieldAsCheckbox ( $property );
80 $form->fieldAsInput ( $property, [
"inputType" =>
"number" ] );
83 $form->fieldAsInput ( $property, [
"inputType" =>
"date" ] );
86 $form->fieldAsInput ( $property, [
"inputType" =>
"datetime-local" ] );
93 $adminRoute = $this->controller->_getBaseRoute ();
94 $semantic = $this->jquery->semantic ();
95 $fields = $this->controller->_getAdminData ()->getElementFieldNames( $model );
97 $dataElement = $semantic->dataElement(
"de", $instance );
99 $dataElement->getInstanceViewer()->setIdentifierFunction(
function() use($pk){
return $pk;});
100 $dataElement->setFields($fields);
104 foreach ( $fkInstances as $member=>$fkInstanceArray ) {
105 if(array_search($member, $fields)!==
false){
106 $dataElement->setValueFunction($member,
function() use($fkInstanceArray,$member){
107 return $this->
getFkMemberElement($member,$fkInstanceArray[
"objectFK"],$fkInstanceArray[
"fkClass"],$fkInstanceArray[
"fkTable"]);
124 $adminRoute = $this->controller->_getBaseRoute ();
125 $semantic = $this->jquery->semantic ();
127 $modal = ($this->
isModal ( $instances, $model ) ?
"modal" :
"no");
129 $attributes = $this->controller->_getAdminData()->getFieldNames ( $model );
131 $dataTable->setCaptions ( $this->
getCaptions ( $attributes, $model ) );
133 $dataTable->setFields ( $attributes );
137 $dataTable->getOnRow (
"click", $adminRoute .
"/showDetail",
"#table-details", [
"attr" =>
"data-ajax" ] );
138 $dataTable->setActiveRowSelector (
"error" );
140 $dataTable->setUrls ( [
"refresh"=>$adminRoute .
"/refresh_",
"delete" => $adminRoute .
"/delete",
"edit" => $adminRoute .
"/edit/" . $modal ,
"display"=> $adminRoute.
"/display/".$modal] );
141 $dataTable->setTargetSelector ( [
"delete" =>
"#table-messages",
"edit" =>
"#frm-add-update" ,
"display"=>
"#table-details" ] );
142 $dataTable->addClass (
"small very compact" );
143 $lbl=
new HtmlLabel(
"search-query",
"<span id='search-query-content'></span>");
144 $icon=$lbl->addIcon(
"delete",
false);
145 $lbl->wrap(
"<span>",
"</span>");
146 $lbl->setProperty(
"style",
"display: none;");
147 $icon->getOnClick($adminRoute.
"/refreshTable",
"#lv",[
"jqueryDone"=>
"replaceWith",
"hasLoader"=>
"internal"]);
149 $dataTable->addItemInToolbar($lbl);
150 $dataTable->addSearchInToolbar();
151 $dataTable->setToolbarPosition(PositionInTable::FOOTER);
152 $dataTable->getToolbar()->setSecondary();
164 $totalCount=
DAO::count($model,$this->controller->_getInstancesFilter($model));
165 $semantic = $this->jquery->semantic ();
167 if(is_numeric($recordsPerPage)){
168 $dataTable = $semantic->jsonDataTable(
"lv", $model, $instances );
169 $dataTable->paginate($page,$totalCount,$recordsPerPage,5);
170 $dataTable->onActiveRowChange(
'$("#table-details").html("");');
171 $dataTable->onSearchTerminate(
'$("#search-query-content").html(data);$("#search-query").show();$("#table-details").html("");');
173 $dataTable = $semantic->dataTable(
"lv", $model, $instances );
183 return [
"edit",
"delete"];
187 $dataTable->onPreCompile (
function () use ($attributes, &$dataTable) {
188 $dataTable->getHtmlComponent ()->colRight ( \count ( $attributes ) );
190 $dataTable->addAllButtons(
false, [
"ajaxTransition" =>
"random" ],
function ($bt) {
191 $bt->addClass (
"circular" );
193 $bt->addClass (
"circular" );
195 $bt->addClass (
"circular" );
197 $dataTable->setDisplayBehavior([
"jsCallback"=>
'$("#dataTable").hide();',
"ajaxTransition"=>
"random"]);
213 return \count ( $objects ) > 5;
223 return array_map (
"ucfirst", $captions );
233 return array_map (
"ucfirst", $captions );
243 return array_map (
"ucfirst", $captions );
254 return new HtmlHeader(
"", 4, $member,
"content" );
265 return new HtmlHeader(
"", 4, $member .
" (" . \count ( $list ) .
")",
"content" );
276 return $this->jquery->semantic ()->htmlLabel (
"element-" . $className .
"." . $member, $object .
"" );
287 $element = $this->jquery->semantic ()->htmlList (
"list-" . $className .
"." . $member );
288 $element->setMaxVisible(15);
290 return $element->addClass (
"animated divided celled" );
302 $header=
new HtmlHeader(
"", 4, $memberFK,
"content");
303 if (is_array($objectFK) || $objectFK instanceof \Traversable) {
306 foreach ( $objectFK as $oItem ) {
307 if (method_exists($oItem,
"__toString")) {
309 $item=$element->addItem($oItem .
"");
310 $item->setProperty(
"data-ajax", $fkTable .
"." . $id);
311 $item->addClass(
"showTable");
316 if (method_exists($objectFK,
"__toString")) {
320 $element->setProperty(
"data-ajax", $fkTable .
"." . $id)->addClass(
"showTable");
324 return [$header,$element];
349 if (is_array($objectFK) || $objectFK instanceof \Traversable) {
350 $element=$this->
getFkList($memberFK,$objectFK);
351 foreach ( $objectFK as $oItem ) {
352 if (method_exists($oItem,
"__toString")) {
354 $item=$element->addItem($oItem .
"");
355 $item->setProperty(
"data-ajax", $fkTable .
"." . $id);
356 $item->addClass(
"showTable");
361 if (method_exists($objectFK,
"__toString")) {
363 $element=$this->
getFkElement($memberFK, $fkClass, $objectFK);
364 $element->setProperty(
"data-ajax", $fkTable .
"." . $id)->addClass(
"showTable");
378 $element = $this->jquery->semantic ()->htmlList (
"list-". $member );
379 $element->setMaxVisible(10);
380 return $element->addClass (
"animated" );
401 return $this->jquery->semantic ()->htmlLabel (
"element-" . $className .
"." . $member, $object .
"" );
414 foreach ( $relations as $member ) {
417 } elseif ($this->controller->_getAdminData ()->getUpdateOneToManyInForm () && ($annot =
OrmUtils::getAnnotationInfoMember ( $className,
"#oneToMany", $member )) !==
false) {
419 } elseif ($this->controller->_getAdminData ()->getUpdateManyToManyInForm () && ($annot =
OrmUtils::getAnnotationInfoMember ( $className,
"#manyToMany", $member )) !==
false) {
429 $fkClass = $joinColumn [
"className"];
430 if ($fkObject === null) {
431 $fkObject =
new $fkClass ();
434 $fkIdGetter =
"get" . \ucfirst ( $fkId );
435 if (\method_exists ( $fkObject,
"__toString" ) && \method_exists ( $fkObject, $fkIdGetter )) {
436 $fkField = $joinColumn [
"name"];
440 $form->addField ( $fkField );
442 $form->fieldAsDropDown ( $fkField, JArray::modelArray (
DAO::getAll ( $fkClass ), $fkIdGetter,
"__toString" ) );
443 $form->setCaption ( $fkField, \ucfirst ( $member ) );
449 $newField = $member .
"Ids";
450 $fkClass = $annot [
"className"];
452 $fkIdGetter =
"get" . \ucfirst ( $fkId );
454 $form->addField ( $newField );
455 $ids = \array_map (
function ($elm) use ($fkIdGetter) {
456 return $elm->{$fkIdGetter} ();
458 $instance->{$newField} = \implode (
",", $ids );
459 $form->fieldAsDropDown ( $newField, JArray::modelArray (
DAO::getAll ( $fkClass ), $fkIdGetter,
"__toString" ),
true );
460 $form->setCaption ( $newField, \ucfirst ( $member ) );
464 $newField = $member .
"Ids";
465 $fkClass = $annot [
"targetEntity"];
467 $fkIdGetter =
"get" . \ucfirst ( $fkId );
469 $form->addField ( $newField );
470 $ids = \array_map (
function ($elm) use ($fkIdGetter) {
471 return $elm->{$fkIdGetter} ();
473 $instance->{$newField} = \implode (
",", $ids );
474 $form->fieldAsDropDown ( $newField, JArray::modelArray ( $this->controller->_getAdminData ()->getManyToManyDatas ( $fkClass, $instance, $member ), $fkIdGetter,
"__toString" ),
true, [
"jsCallback" =>
function ($elm) {
475 $elm->getField ()->asSearch ();
477 $form->setCaption ( $newField, \ucfirst ( $member ) );
getFkElementDetails($member, $className, $object)
Returns a component for displaying a single foreign object (manyToOne relation), (from DataTable) ...
static getFieldsInRelations($class)
getFkMemberElement($memberFK, $objectFK, $fkClass, $fkTable)
Returns a component for displaying a foreign object (from DataElement)
manyToManyFormField(DataForm $form, $member, $instance, $annot)
getFormCaptions($captions, $className, $instance)
Returns the captions for form fields.
getDataTableRowButtons()
Returns an array of buttons ["display","edit","delete"] to display for each row in dataTable...
getElementCaptions($captions, $className, $instance)
Returns the captions for DataElement fields.
static getAnnotationInfoMember($class, $keyAnnotation, $member)
static setMemberValue($instance, $member, $value)
recordsPerPage($model, $totalCount=0)
relationMembersInForm($form, $instance, $className)
addAllButtons(DataTable $dataTable, $attributes)
getFkListDetails($member, $className, $list)
Returns a list component for displaying a collection of foreign objects (*ToMany relations), (from DataTable)
getFkHeaderListDetails($member, $className, $list)
Returns the header for a list of foreign objects (issue from oneToMany or ManyToMany), (from DataTable)
static getFirstKey($class)
static getFirstKeyValue($instance)
showDetailsOnDataTableClick()
To override to make sure that the detail of a clicked object is displayed or not. ...
static getManyToMany($instance, $member, $array=null, $useCache=NULL)
Assigns / loads the child records in the $member member of $instance.
static getAll($className, $condition='', $loadManyToOne=true, $loadOneToMany=false, $useCache=NULL)
Returns an array of $className objects from the database.
getForm($identifier, $instance)
Returns the form for adding or modifying an object.
getFkHeaderElementDetails($member, $className, $object)
Returns the header for a single foreign object (element is an instance, issue from ManyToOne)...
manyToOneFormField(DataForm $form, $member, $className, $instance)
getFkMemberElementDetails($memberFK, $objectFK, $fkClass, $fkTable)
Returns a component for displaying a foreign object (from DataTable)
getCaptions($captions, $className)
Returns the captions for list fields in showTable action.
static getIdentifierFunction($model)
static count($className, $condition='')
Returns the number of objects of $className from the database respecting the condition possibly passe...
static getMemberValue($instance, $member)
getModelDataTable($instances, $model, $page=1)
Returns the dataTable responsible for displaying instances of the model.
static getFieldTypes($className)
displayFkElementList($element, $member, $className, $object)
To modify for displaying an element in a list component of foreign objects, (from DataElement) ...
getDataTableInstance($instances, $model, $page=1)
static getFKIntances($instance, $model)
static getOneToMany($instance, $member, $useCache=NULL, $annot=null)
Assign / load the child records in the $member member of $instance.
getFkElement($member, $className, $object)
Returns a component for displaying a single foreign object (manyToOne relation), (from DataElement) ...
confirmButtons(HtmlButton $confirmBtn, HtmlButton $cancelBtn)
getModelDataElement($instance, $model, $modal)
__construct(HasModelViewerInterface $controller)
oneToManyFormField(DataForm $form, $member, $instance, $annot)
displayFkElementListDetails($element, $member, $className, $object)
To modify for displaying an element in a list component of foreign objects (from DataTable) ...
setFormFieldsComponent(DataForm $form, $fieldTypes)
Sets the components for each field.
isModal($objects, $model)
Condition to determine if the edit or add form is modal for $model objects.
getFkList($member, $list)
Returns a list component for displaying a collection of foreign objects (*ToMany relations), (from DataElement)