public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $actions = array("list","add","modify","delete","clone","email"); // Get the table & class name $table = SLS_String::substrAfterFirstDelimiter($this->_http->getParam("name"),"_"); $db = SLS_String::substrBeforeFirstDelimiter($this->_http->getParam("name"),"_"); $class = ucfirst($db)."_".SLS_String::tableToClass($table); $file = ucfirst($db).".".SLS_String::tableToClass($table); $sql = SLS_Sql::getInstance(); // If current db is not this one if ($sql->getCurrentDb() != $db) $sql->changeDb($db); // If the table exists, delete the bo & model if ($sql->tableExists($table)) { foreach($actions as $action) if($this->boActionExist($table,$db,$action)) $this->deleteActionBo($table,$action,$db); @unlink($this->_generic->getPathConfig("models").$file.".model.php"); @unlink($this->_generic->getPathConfig("modelsSql").$file.".sql.php"); } $controllers = $this->_generic->getTranslatedController("SLS_Bo","Models"); $this->_generic->redirect($controllers['controller']."/".$controllers['scontroller']); }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $table = SLS_String::substrAfterFirstDelimiter(SLS_String::trimSlashesFromString($this->_http->getParam("__table")),"_"); $db = SLS_String::substrBeforeFirstDelimiter(SLS_String::trimSlashesFromString($this->_http->getParam("__table")),"_"); $columns = $this->_http->getParams(); $class = ucfirst($db)."_".SLS_String::tableToClass($table); $desc = SLS_String::trimSlashesFromString($this->_http->getParam("description")); $this->_generic->useModel($table,$db,"user"); $object = new $class(); if (!empty($desc)) $object->setTableComment($desc,$table,$db); // Descriptions foreach($columns as $key => $value) { if (SLS_String::startsWith($key,"col_")) { $column = SLS_String::substrAfterFirstDelimiter($key,"_"); $object->setColumnComment($column,SLS_String::trimSlashesFromString($value),$table); } } $controllers = $this->_generic->getTranslatedController("SLS_Bo","EditModel"); $this->_generic->redirect($controllers["controller"]."/".$controllers["scontroller"]."/name/".$db."_".$table); $this->saveXML($xml); }
/** * Constructor * * @access public * @since 1.0 */ public function __construct($xml,$db,$table,$forward=true) { parent::__construct(); $this->_xml = $xml; $this->_db_alias = $db; $this->_table = $table; $this->_forward = $forward; # Objects $className = ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table); $this->_generic->useModel(SLS_String::tableToClass($this->_table),ucfirst(strtolower($this->_db_alias)),"user"); $this->_object = new $className(); $this->_table = $this->_object->getTable(); $nbDelete = 0; # /Objects # Params $ids = $this->_http->getParam("id"); $ids = (SLS_String::contains($ids,"|")) ? explode("|",$ids) : array($ids); # /Params # Perform delete foreach($ids as $id) if ($this->_object->getModel($id) === true) $nbDelete += $this->_object->delete(true); if ($this->_object->isMultilanguage() && is_numeric($nbDelete) && $nbDelete > 0) $nbDelete = floor($nbDelete / count($this->_lang->getSiteLangs())); # Perform delete if ($this->_async) { if ($nbDelete !== false && is_numeric($nbDelete) && $nbDelete > 0) { $this->_render["status"] = "OK"; $this->_render["result"]["message"] = ($nbDelete==1) ? $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_GENERIC_SUBMIT_SUCCESS_DELETE'] : sprintf($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_GENERIC_SUBMIT_SUCCESS_DELETES'],$nbDelete); } echo json_encode($this->_render); die(); } else { # Notif if ($nbDelete !== false && is_numeric($nbDelete) && $nbDelete > 0) $this->pushNotif("success",($nbDelete==1) ? $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_GENERIC_SUBMIT_SUCCESS_DELETE'] : sprintf($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_GENERIC_SUBMIT_SUCCESS_DELETES'],$nbDelete)); # /Notif # Forward if ($this->_forward) { $rememberList = (is_array($this->_session->getParam("SLS_BO_LIST"))) ? $this->_session->getParam("SLS_BO_LIST") : array(); if (array_key_exists($this->_db_alias."_".$this->_table,$rememberList) && !empty($rememberList[$this->_db_alias."_".$this->_table])) $this->_generic->redirect($rememberList[$this->_db_alias."_".$this->_table]); else $this->_generic->forward($this->_boController,"List".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)); } } # /Forward }
public function action() { $user = $this->hasAuthorative(); // Objects $xmlFk = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml")); $xmlBearer = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bearers.xml")); // Get the table & class name $table = SLS_String::substrAfterFirstDelimiter($this->_http->getParam("name"),"_"); $db = SLS_String::substrBeforeFirstDelimiter($this->_http->getParam("name"),"_"); $class = ucfirst($db)."_".SLS_String::tableToClass($table); $result = array_shift($xmlBearer->getTagsAttributes("//sls_configs/entry[@tableBearer='".$class."']",array("table1"))); if (!empty($result)) $xmlBearer->saveXML($this->_generic->getPathConfig("configSls")."/bearers.xml",$xmlBearer->deleteTags("//sls_configs/entry[@tableBearer='".$class."']")); $this->_generic->forward("SLS_Bo","EditModel",array(array("key"=>"name","value"=>$this->_http->getParam("name")))); }
public function constructXML() { $this->_boController = $this->_generic->getBo(); if ($this->_generic->getGenericControllerName() == $this->_boController) { @include_once($this->_generic->getPathConfig("actionLangs").$this->_boController."/__".$this->_boController.".".$this->_lang->getLang().".lang.php"); $db = SLS_Sql::getInstance(); $dbsAlias = $db->getDbs(); $comments = array(); foreach($dbsAlias as $dbAlias) { $db->changeDb($dbAlias); $tables = $db->showTables(); for($i=0 ; $i<$count=count($tables) ; $i++) { $table = $tables[$i]->Name; $key = ucfirst(strtolower($dbAlias))."_".SLS_String::tableToClass($table); if (!array_key_exists($key,$comments)) { $comment = $tables[$i]->Comment; if (SLS_String::startsWith($comment,"sls:lang:")) { $globalKey = strtoupper(SLS_String::substrAfterFirstDelimiter($comment,"sls:lang:")); $comment = (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$globalKey])) ? (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$globalKey]) ? $table : $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$globalKey]) : $GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$globalKey]; } $comments[$key] = (empty($comment)) ? $table : $comment; } } } $db->changeDb($db->connectToDefaultDb()); # Nav if (SLS_BoRights::isLogged()) { $xmlBo = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bo.xml")); $entries = $xmlBo->getTagsAttributes("//sls_configs/entry",array("type","name")); $this->_xmlToolBox->startTag("nav"); if (!empty($entries)) { # BOs $this->_xmlToolBox->startTag("section"); $this->_xmlToolBox->addFullTag("title",$GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_MENU_SITE'],"true"); $this->_xmlToolBox->addFullTag("href","#","true"); $this->_xmlToolBox->startTag("categories"); for($i=0 ; $i<$count=count($entries) ; $i++) { $position = ($i+1); $type = $entries[$i]["attributes"][0]["value"]; $name = $entries[$i]["attributes"][1]["value"]; if ($type == "category") { $childs = $xmlBo->getTagsAttributes("//sls_configs/entry[".$position."]/entry",array("type","name")); $comment = $name; if (SLS_String::startsWith($comment,"sls:lang:")) { $globalKey = strtoupper(SLS_String::substrAfterFirstDelimiter($comment,"sls:lang:")); $comment = (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$globalKey])) ? (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$globalKey]) ? $name : $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$globalKey]) : $GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$globalKey]; } $this->_xmlToolBox->startTag("category",array("type"=>"category")); $this->_xmlToolBox->addFullTag("title",$comment,"true"); $this->_xmlToolBox->addFullTag("href","#","true"); if (!empty($childs)) { $this->_xmlToolBox->startTag("items"); for($j=0 ; $j<$count=count($childs) ; $j++) { $type = $childs[$j]["attributes"][0]["value"]; $name = $childs[$j]["attributes"][1]["value"]; $dbAlias = ucfirst(strtolower(SLS_String::substrBeforeFirstDelimiter($name,"_"))); $table = SLS_String::substrAfterFirstDelimiter($name,"_"); $right = SLS_BoRights::isAuthorized("read",$dbAlias."_".SLS_String::tableToClass($table)); if ($right == 1) { $comment = $comments[$dbAlias."_".SLS_String::tableToClass($table)]; if (SLS_String::startsWith($comment,"sls:lang:")) { $key = strtoupper(SLS_String::substrAfterFirstDelimiter($comment,"sls:lang:")); $comment = (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key])) ? (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) ? $table : $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) : $GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key]; } $actionIdsModel = array($this->_generic->getActionId($this->_boController,"List".$dbAlias."_".SLS_String::tableToClass($table)), $this->_generic->getActionId($this->_boController,"Add".$dbAlias."_".SLS_String::tableToClass($table)), $this->_generic->getActionId($this->_boController,"Modify".$dbAlias."_".SLS_String::tableToClass($table)), $this->_generic->getActionId($this->_boController,"Clone".$dbAlias."_".SLS_String::tableToClass($table)), $this->_generic->getActionId($this->_boController,"Delete".$dbAlias."_".SLS_String::tableToClass($table))); if ($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"List".$dbAlias."_".SLS_String::tableToClass($table)))) { $this->_xmlToolBox->startTag("item"); $this->_xmlToolBox->addFullTag("db",$dbAlias,true); $this->_xmlToolBox->addFullTag("model",SLS_String::tableToClass($table),true); $this->_xmlToolBox->addFullTag("title",$comment,"true"); $this->_xmlToolBox->addFullTag("like",(SLS_BoRights::isLike("read",$dbAlias."_".SLS_String::tableToClass($table))) ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("selected",(in_array($this->_generic->getActionId(),$actionIdsModel)) ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("href",$this->_generic->getFullPath($this->_boController,"List".$dbAlias."_".SLS_String::tableToClass($table)),"true"); $this->_xmlToolBox->endTag("item"); } } } $this->_xmlToolBox->endTag("items"); } $this->_xmlToolBox->endTag("category"); } else { $dbAlias = ucfirst(strtolower(SLS_String::substrBeforeFirstDelimiter($name,"_"))); $table = SLS_String::substrAfterFirstDelimiter($name,"_"); $right = SLS_BoRights::isAuthorized("read",$dbAlias."_".SLS_String::tableToClass($table)); if ($right == 1) { $comment = $comments[$dbAlias."_".SLS_String::tableToClass($table)]; if (SLS_String::startsWith($comment,"sls:lang:")) { $key = strtoupper(SLS_String::substrAfterFirstDelimiter($comment,"sls:lang:")); $comment = (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key])) ? (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) ? $table : $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) : $GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key]; } $actionIdsModel = array($this->_generic->getActionId($this->_boController,"List".$dbAlias."_".SLS_String::tableToClass($table)), $this->_generic->getActionId($this->_boController,"Add".$dbAlias."_".SLS_String::tableToClass($table)), $this->_generic->getActionId($this->_boController,"Modify".$dbAlias."_".SLS_String::tableToClass($table)), $this->_generic->getActionId($this->_boController,"Clone".$dbAlias."_".SLS_String::tableToClass($table)), $this->_generic->getActionId($this->_boController,"Delete".$dbAlias."_".SLS_String::tableToClass($table))); if ($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"List".$dbAlias."_".SLS_String::tableToClass($table)))) { $this->_xmlToolBox->startTag("category",array("type"=>"table")); $this->_xmlToolBox->addFullTag("db",$dbAlias,true); $this->_xmlToolBox->addFullTag("model",SLS_String::tableToClass($table),true); $this->_xmlToolBox->addFullTag("title",$comment,"true"); $this->_xmlToolBox->addFullTag("like",(SLS_BoRights::isLike("read",$dbAlias."_".SLS_String::tableToClass($table))) ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("selected",(in_array($this->_generic->getActionId(),$actionIdsModel)) ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("href",$this->_generic->getFullPath($this->_boController,"List".$dbAlias."_".SLS_String::tableToClass($table)),"true"); $this->_xmlToolBox->endTag("category"); } } } } $this->_xmlToolBox->endTag("categories"); $this->_xmlToolBox->endTag("section"); # /BOs } # i18n if ($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController, "Boi18n")) && SLS_BoRights::isAuthorized("","",$this->_generic->getActionId($this->_boController, "Boi18n"))) { $file = $this->_http->getParam("File"); $this->_xmlToolBox->startTag("section"); $this->_xmlToolBox->addFullTag("title",$GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_MENU_I18N'],"true"); $this->_xmlToolBox->addFullTag("selected",($this->_generic->getActionId() == $this->_generic->getActionId($this->_boController, "Boi18n")) ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("href","#","true"); $this->_xmlToolBox->startTag("categories"); $controllers = $this->_generic->getControllersXML()->getTags("//controllers/controller[@side='user']/@name"); sort($controllers,SORT_STRING); for($i=0 ; $i<$count=count($controllers) ; $i++) { $actions = $this->_generic->getControllersXML()->getTags("//controllers/controller[@name='".$controllers[$i]."' and @side='user']/scontrollers/scontroller/@name"); sort($actions,SORT_STRING); $this->_xmlToolBox->startTag("category",array("type"=>"category")); $this->_xmlToolBox->addFullTag("title",$controllers[$i],"true"); $this->_xmlToolBox->addFullTag("selected",($this->_generic->getActionId() == $this->_generic->getActionId($this->_boController, "Boi18n") && SLS_String::startsWith($file, "Actions|".$controllers[$i]."|")) ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("href","#","true"); $this->_xmlToolBox->startTag("items"); if (file_exists($this->_generic->getPathConfig("actionLangs").$controllers[$i]."/__".$controllers[$i].".".$this->_lang->getLang().".lang.php") && ($translations = file_get_contents($this->_generic->getPathConfig("actionLangs").$controllers[$i]."/__".$controllers[$i].".".$this->_lang->getLang().".lang.php")) && SLS_String::contains(str_replace("","",$translations),'*/'."\n".'$GLOBALS') || (!SLS_String::contains($translations,"/**") && SLS_String::contains($translations,'$GLOBALS'))) { $this->_xmlToolBox->startTag("item"); $this->_xmlToolBox->addFullTag("title","__".$controllers[$i],"true"); $this->_xmlToolBox->addFullTag("selected",($this->_generic->getActionId() == $this->_generic->getActionId($this->_boController, "Boi18n") && $file == "Actions|".$controllers[$i]."|__".$controllers[$i]) ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("href",$this->_generic->getFullPath($this->_boController, "Boi18n", array("File" => "Actions|".$controllers[$i]."|__".$controllers[$i])),"true"); $this->_xmlToolBox->endTag("item"); } for($j=0 ; $j<$countJ=count($actions) ; $j++) { if (file_exists($this->_generic->getPathConfig("actionLangs").$controllers[$i]."/".$actions[$j].".".$this->_lang->getLang().".lang.php") && ($translations = file_get_contents($this->_generic->getPathConfig("actionLangs").$controllers[$i]."/".$actions[$j].".".$this->_lang->getLang().".lang.php")) && SLS_String::contains(str_replace("","",$translations),'*/'."\n".'$GLOBALS') || (!SLS_String::contains($translations,"/**") && SLS_String::contains($translations,'$GLOBALS'))) { $this->_xmlToolBox->startTag("item"); $this->_xmlToolBox->addFullTag("title",$actions[$j],"true"); $this->_xmlToolBox->addFullTag("selected",($this->_generic->getActionId() == $this->_generic->getActionId($this->_boController, "Boi18n") && $file == "Actions|".$controllers[$i]."|".$actions[$j]) ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("href",$this->_generic->getFullPath($this->_boController, "Boi18n", array("File" => "Actions|".$controllers[$i]."|".$actions[$j])),"true"); $this->_xmlToolBox->endTag("item"); } } $this->_xmlToolBox->endTag("items"); $this->_xmlToolBox->endTag("category"); } if (file_exists($this->_generic->getPathConfig("genericLangs")."site.".$this->_lang->getLang().".lang.php") && ($translations = file_get_contents($this->_generic->getPathConfig("genericLangs")."site.".$this->_lang->getLang().".lang.php")) && SLS_String::contains(str_replace("","",$translations),'*/'."\n".'$GLOBALS') || (!SLS_String::contains($translations,"/**") && SLS_String::contains($translations,'$GLOBALS'))) { $this->_xmlToolBox->startTag("category",array("type"=>"table")); $this->_xmlToolBox->addFullTag("title","__".$GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_MENU_I18N_SITE'],"true"); $this->_xmlToolBox->addFullTag("selected",($this->_generic->getActionId() == $this->_generic->getActionId($this->_boController, "Boi18n") && $file == "Generics|site") ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("href",$this->_generic->getFullPath($this->_boController, "Boi18n", array("File" => "Generics|site")),"true"); $this->_xmlToolBox->endTag("category"); } $this->_xmlToolBox->endTag("categories"); $this->_xmlToolBox->endTag("section"); } # /i18n # CkFinder if ($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController, "BoFileUpload")) && SLS_BoRights::isAuthorized("","",$this->_generic->getActionId($this->_boController, "BoFileUpload"))) { $this->_xmlToolBox->startTag("section"); $this->_xmlToolBox->addFullTag("title",$GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_MENU_FILE_MANAGER'],"true"); $this->_xmlToolBox->addFullTag("selected",($this->_generic->getActionId() == $this->_generic->getActionId($this->_boController,"BoFileUpload")) ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("href",$this->_generic->getFullPath($this->_boController,"BoFileUpload"),"true"); $this->_xmlToolBox->endTag("section"); } # /CkFinder # ProjectSettings if ($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController, "BoProjectSettings")) && SLS_BoRights::isAuthorized("","",$this->_generic->getActionId($this->_boController, "BoProjectSettings"))) { $this->_xmlToolBox->startTag("section"); $this->_xmlToolBox->addFullTag("title",$GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_MENU_PROJECT_SETTINGS'],"true"); $this->_xmlToolBox->addFullTag("selected",($this->_generic->getActionId() == $this->_generic->getActionId($this->_boController,"BoProjectSettings")) ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("href",$this->_generic->getFullPath($this->_boController,"BoProjectSettings"),"true"); $this->_xmlToolBox->endTag("section"); } # /ProjectSettings # Users if ($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController, "BoUserList")) && SLS_BoRights::isAuthorized("","",$this->_generic->getActionId($this->_boController, "BoUserList"))) { $actionsUser = array($this->_generic->getActionId($this->_boController, "BoUserList"), $this->_generic->getActionId($this->_boController, "BoUserAdd"), $this->_generic->getActionId($this->_boController, "BoUserModify"), $this->_generic->getActionId($this->_boController, "BoUserDelete"), $this->_generic->getActionId($this->_boController, "BoUserStatus")); $this->_xmlToolBox->startTag("section"); $this->_xmlToolBox->addFullTag("title",$GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_MENU_USERS'],"true"); $this->_xmlToolBox->addFullTag("selected",(in_array($this->_generic->getActionId(),$actionsUser)) ? "true" : "false","true"); $this->_xmlToolBox->addFullTag("href",$this->_generic->getFullPath($this->_boController,"BoUserList"),"true"); $this->_xmlToolBox->endTag("section"); } # /Users # Developer actions $boActions = $this->_generic->getControllersXML()->getTags("//controllers/controller[@isBo='true']/scontrollers/scontroller/@name"); for($i=0 ; $i<$count=count($boActions) ; $i++) { // If dev action & admin authorized if (!SLS_String::startsWith($boActions[$i],"Bo") && // Sls generated actions !SLS_String::startsWith($boActions[$i],"List") && // User action ListDb_Model !SLS_String::startsWith($boActions[$i],"Add") && // User action AddDb_Model !SLS_String::startsWith($boActions[$i],"Modify") && // User action ModifyDb_Model !SLS_String::startsWith($boActions[$i],"Delete") && // User action DeleteDb_Model !SLS_String::startsWith($boActions[$i],"Clone") && // User action CloneDb_Model !SLS_String::startsWith($boActions[$i],"Email") && // User action EmailDb_Model SLS_BoRights::isAuthorized("","",$this->_generic->getActionId($this->_boController, $boActions[$i]))) { $this->_xmlToolBox->startTag("section"); $this->_xmlToolBox->addFullTag("title",$this->_generic->getControllersXML()->getTag("//controllers/controller[@isBo='true']/scontrollers/scontroller[@name='".$boActions[$i]."']/scontrollerLangs/scontrollerLang[@lang='".$this->_lang->getLang()."']"),"true"); $this->_xmlToolBox->addFullTag("selected",($this->_generic->getActionId() == $this->_generic->getActionId($this->_boController, $boActions[$i])) ? "true" : "false", "true"); $this->_xmlToolBox->addFullTag("href",$this->_generic->getFullPath($this->_boController,$boActions[$i]),"true"); $this->_xmlToolBox->endTag("section"); } } # /Developer actions $this->_xmlToolBox->endTag("nav"); } # /Nav # Admin $xmlRight = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/rights.xml")); $adminName = $this->_session->getParam("SLS_BO_USER_NAME"); $adminFirstname = $this->_session->getParam("SLS_BO_USER_FIRSTNAME"); if (!empty($adminName) && !empty($adminFirstname)) $imgPath = $this->_generic->getPathConfig("files")."__Uploads/images/bo/".SLS_String::stringToUrl($adminName."_".$adminFirstname,"_").".jpg"; else $imgPath = $this->_generic->getPathConfig("coreImg")."BO-2014/Pictos/default_dev_account_small.jpg"; $this->_xmlToolBox->startTag("admin"); $this->_xmlToolBox->addFullTag("img",(file_exists($imgPath) && !is_dir($imgPath)) ? $this->_generic->getSiteConfig("protocol")."://".$this->_generic->getSiteConfig("domainName")."/".$imgPath : $this->_generic->getSiteConfig("protocol")."://".$this->_generic->getSiteConfig("domainName")."/".$this->_generic->getPathConfig("files")."__Uploads/images/bo/default_account.jpg",true); $this->_xmlToolBox->addFullTag("login",$this->_session->getParam("SLS_BO_USER"),true); $this->_xmlToolBox->addFullTag("name",ucwords(strtolower((!empty($adminName)) ? $adminName : "Developer")),true); $this->_xmlToolBox->addFullTag("firstname",((!empty($adminFirstname)) ? ucwords(strtolower($adminFirstname)) : "SillySmart"),true); $this->_xmlToolBox->addFullTag("type",SLS_BoRights::getAdminType(),true); $nodeExists = $xmlRight->getTag("//sls_configs/entry[@login='******']/@login"); if (!empty($nodeExists)) { $settings = array_combine($xmlRight->getTags("//sls_configs/entry[@login='******']/settings/setting/@key"),$xmlRight->getTags("//sls_configs/entry[@login='******']/settings/setting")); $this->_xmlToolBox->startTag("settings"); foreach($settings as $key => $value) $this->_xmlToolBox->addFullTag("setting",$value,true,array("key"=>$key)); $this->_xmlToolBox->endTag("settings"); } $xmlBoColors = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bo_colors.xml")); $boColors = $xmlBoColors->getTagsAttributes("//sls_configs/template",array("name","hexa")); $this->_xmlToolBox->startTag("colors"); for($i=0 ; $i<$count=count($boColors) ; $i++) $this->_xmlToolBox->addFullTag("color",$boColors[$i]["attributes"][0]["value"],true,array("hexa" => $boColors[$i]["attributes"][1]["value"])); $this->_xmlToolBox->endTag("colors"); $this->_xmlToolBox->endTag("admin"); # /Admin # URLs $this->_xmlToolBox->startTag("various"); $this->_xmlToolBox->addFullTag("dashboard",$this->_generic->getFullPath($this->_boController,"BoDashBoard"),true,array("selected" => ($this->_generic->getActionId() == $this->_generic->getActionId($this->_boController,"BoDashBoard")) ? "true" : "false")); $this->_xmlToolBox->addFullTag("export",$this->_generic->getFullPath($this->_boController,"BoExport"),true); $this->_xmlToolBox->addFullTag("ac",$this->_generic->getFullPath($this->_boController,"BoFkAc"),true); $this->_xmlToolBox->addFullTag("like",$this->_generic->getFullPath($this->_boController,"BoLike"),true); $this->_xmlToolBox->addFullTag("setting",$this->_generic->getFullPath($this->_boController,"BoSetting"),true); $this->_xmlToolBox->addFullTag("unique",$this->_generic->getFullPath($this->_boController,"BoUnique"),true); $this->_xmlToolBox->addFullTag("upload",$this->_generic->getFullPath($this->_boController,"BoUpload"),true); $this->_xmlToolBox->addFullTag("upload_progress",$this->_generic->getFullPath($this->_boController,"BoUploadProgress"),true); $this->_xmlToolBox->addFullTag("delete_file",$this->_generic->getFullPath($this->_boController,"BoDeleteFile"),true); $this->_xmlToolBox->addFullTag("login",$this->_generic->getFullPath($this->_boController,"BoLogin"),true); $this->_xmlToolBox->addFullTag("logout",(SLS_BoRights::getAdminType() == "developer") ? $this->_generic->getFullPath("SLS_Bo","Logout",array("Redirect" => $this->_generic->getActionId($this->_boController,"BoLogin"), "Lang" => $this->_lang->getLang()),true,"en") : $this->_generic->getFullPath($this->_boController,"BoLogout"),true); $this->_xmlToolBox->addFullTag("forgotten_pwd",$this->_generic->getFullPath($this->_boController,"BoForgottenPwd"),true); $this->_xmlToolBox->addFullTag("renew_pwd",$this->_generic->getFullPath($this->_boController,"BoRenewPwd",array("Login"=>$this->_session->getParam("SLS_BO_USER"))),true); $this->_xmlToolBox->addFullTag("is_logged",$this->_generic->getFullPath($this->_boController,"BoIsLogged"),true); $this->_xmlToolBox->addFullTag("switch_lang",$this->_generic->getFullPath($this->_boController,"BoSwitchLang",array("Lang"=>""),false),true); $this->_xmlToolBox->addFullTag("user_add",$this->_generic->getFullPath($this->_boController,"BoUserAdd"),true,array("authorized" => (SLS_BoRights::isAuthorized("","",$this->_generic->getActionId($this->_boController,"BoUserAdd"))) ? "true" : "false")); $this->_xmlToolBox->addFullTag("user_modify",$this->_generic->getFullPath($this->_boController,"BoUserModify",array("id" => ''),false),true,array("authorized" => (SLS_BoRights::isAuthorized("","",$this->_generic->getActionId($this->_boController,"BoUserModify"))) ? "true" : "false")); $this->_xmlToolBox->addFullTag("user_delete",$this->_generic->getFullPath($this->_boController,"BoUserDelete",array("id" => ''),false),true,array("authorized" => (SLS_BoRights::isAuthorized("","",$this->_generic->getActionId($this->_boController,"BoUserDelete"))) ? "true" : "false")); $this->_xmlToolBox->addFullTag("user_status",$this->_generic->getFullPath($this->_boController,"BoUserStatus",array("id" => ''),false),true,array("authorized" => (SLS_BoRights::isAuthorized("","",$this->_generic->getActionId($this->_boController,"BoUserStatus"))) ? "true" : "false")); $this->_xmlToolBox->endTag("various"); # /URLs # Server $apcUpload = (in_array(ini_get("apc.rfc1867"),array(1,"1","On","on",true,"true"))) ? "true" : "false"; $apcUploadKey = ini_get("apc.rfc1867_name"); $uploadMaxFilesize = ini_get("upload_max_filesize"); $unite = strtolower(substr(trim($uploadMaxFilesize), -1)); switch ($unite) { case 'k': $uploadMaxFilesize = (int)$uploadMaxFilesize * 1024; break; case 'm': $uploadMaxFilesize = (int)$uploadMaxFilesize * 1024 * 1024; break; case 'g': $uploadMaxFilesize = (int)$uploadMaxFilesize * 1024 * 1024 * 1024; break; default: $uploadMaxFilesize = $uploadMaxFilesize; break; } $this->_xmlToolBox->startTag("server"); $this->_xmlToolBox->addFullTag("apc_upload",$apcUpload,true); $this->_xmlToolBox->addFullTag("apc_upload_key",$apcUploadKey,true); $this->_xmlToolBox->addFullTag("upload_max_size",$uploadMaxFilesize,true); $this->_xmlToolBox->endTag("server"); # /Server } }
public function action() { $user = $this->hasAuthorative(); $sql = SLS_Sql::getInstance(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $errors = array(); // Get the table name $table = SLS_String::substrAfterFirstDelimiter($this->_http->getParam("name"),"_"); $db = SLS_String::substrBeforeFirstDelimiter($this->_http->getParam("name"),"_"); $column= $this->_http->getParam("column"); $class = ucfirst($db)."_".SLS_String::tableToClass($table); $file = ucfirst($db).".".SLS_String::tableToClass($table); // If current db is not this one if ($sql->getCurrentDb() != $db) $sql->changeDb($db); if ($sql->tableExists($table)) { if ($this->_http->getParam("reload") == "true") { $replacements = array('&','>','<','=','"',"'"); $masks = array('&','>','<','=','','',''); $columnWanted = $this->_http->getParam("column"); $tableWanted = $this->_http->getParam("table"); $labelWanted = $this->_http->getParam($tableWanted.'_fkLabel'); $labelSpecified = SLS_String::trimSlashesFromString($this->_http->getParam("fkLabel_specified")); $multilang = $this->_http->getParam("multilanguage"); $onDelete = $this->_http->getParam("ondelete"); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml"); $xmlFk = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml"); $xmlType = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/filters.xml"); $xmlFilter = new SLS_XMLToolbox($pathsHandle); if (!empty($labelSpecified)) $labelSpecified = str_replace(array('='),array('='),htmlentities(strtolower($labelSpecified),ENT_QUOTES,"UTF-8")); $result = $xmlFk->getTags("//sls_configs/entry[@tableFk='".$db."_".$table."' and @columnFk='".$columnWanted."' and @tablePk='".$tableWanted."']"); // If an entry already exists in the XML, delete this record if (!empty($result)) { $xmlTmp = $xmlFk->deleteTags("//sls_configs/entry[@tableFk='".$db."_".$table."' and @columnFk='".$columnWanted."' and @tablePk='".$tableWanted."']"); $xmlFk->saveXML($this->_generic->getPathConfig("configSls")."/fks.xml",$xmlTmp); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml"); $xmlFk = new SLS_XMLToolbox($pathsHandle); } // Save it into the XML $xmlNode = '<entry tableFk="'.$db."_".$table.'" columnFk="'.$columnWanted.'" multilanguage="'.$multilang.'" ondelete="'.$onDelete.'" labelPk="'.(empty($labelSpecified) ? $labelWanted : $labelSpecified).'" tablePk="'.$tableWanted.'" />'; $xmlFk->appendXMLNode("//sls_configs",$xmlNode); $xmlFk->saveXML($this->_generic->getPathConfig("configSls")."/fks.xml",$xmlFk->getXML()); // Update model $this->_generic->goDirectTo("SLS_Bo","UpdateModel",array(array("key"=>"name","value"=>$this->_http->getParam("name")))); } // Get generic object $this->_generic->useModel(SLS_String::tableToClass($table),$db,"user"); $object = new $class(); // Get object's infos $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml"); $xmlFk = new SLS_XMLToolbox($pathsHandle); $columnsP = $object->getParams(); $pk = $object->getPrimaryKey(); $multilanguage = $object->isMultilanguage(); $xml->startTag("model"); $xml->addFullTag("table",$table,true); $xml->addFullTag("db",$db,true); $xml->addFullTag("class",$class,true); $xml->addFullTag("pk",$pk,true); $xml->addFullTag("multilanguage",($multilanguage) ? "true" : "false",true); $xml->startTag("columns"); foreach($columnsP as $key => $value) { if ($object->getPrimaryKey() != $key && $key != "pk_lang") $xml->addFullTag("column",$key,true); } $xml->endTag("columns"); $attributes = array_shift($xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".strtolower($db."_".$table)."' and @ columnFk='".$column."']",array("multilanguage","labelPk","tablePk","ondelete"))); $this->_generic->useModel(SLS_String::substrAfterFirstDelimiter($attributes["attributes"][2]["value"],"_"),ucfirst(SLS_String::substrBeforeFirstDelimiter($attributes["attributes"][2]["value"],"_")),"user"); $className = ucfirst($attributes["attributes"][2]["value"]); $objectN = new $className(); $columns = $objectN->getColumns(); $specificPattern = true; foreach($columns as $key) if ($key == $attributes["attributes"][1]["value"]) $specificPattern = false; $xml->startTag("current_values"); $xml->addFullTag("tableFk",$db."_".SLS_String::tableToClass($table),true); $xml->addFullTag("columnFk",$column,true); $xml->addFullTag("multilanguage",$attributes["attributes"][0]["value"],true); $xml->addFullTag("labelPk",$attributes["attributes"][1]["value"],true); $xml->addFullTag("tablePk",$attributes["attributes"][2]["value"],true); $xml->addFullTag("ondelete",$attributes["attributes"][3]["value"],true); $xml->addFullTag("specific_pattern",($specificPattern) ? "true" : "false",true); $xml->endTag("current_values"); $tables = $this->getAllModels(); sort($tables,SORT_REGULAR); $xml->startTag("tables"); for($i=0 ; $i<$count=count($tables) ; $i++) { if (SLS_String::startsWith($tables[$i],$db)) { $xml->startTag("table"); $xml->addFullTag("name",SLS_String::substrAfterFirstDelimiter($tables[$i],".")); $xml->addFullTag("db",SLS_String::substrBeforeFirstDelimiter($tables[$i],".")); $tableN = SLS_String::substrAfterFirstDelimiter($tables[$i],"."); $dbN = SLS_String::substrBeforeFirstDelimiter($tables[$i],"."); $classN = ucfirst($dbN)."_".SLS_String::tableToClass($tableN); $this->_generic->useModel($tableN,$dbN,"user"); $obj = new $classN(); $properties = $obj->getParams(); $xml->startTag("columns"); foreach($properties as $key => $value) if ($key != "pk_lang") $xml->addFullTag("column",$key,true); $xml->endTag("columns"); $xml->endTag("table"); } } $xml->endTag("tables"); $xml->endTag("model"); } else { $xml->addFullTag("error","Sorry this table doesn't exist anymore",true); } $this->saveXML($xml); }
/** * Action Home * */ public function action() { $this->secureURL(); $this->_generic->registerLink('DataBase', 'SLS_Init', 'DataBase'); $step = 0; $xml = $this->getXML(); $errors = array(); $mysqlCharsets = array("armscii8","ascii","big5","binary","cp1250","cp1251","cp1256","cp1257","cp850","cp852","cp866","cp932","dec8","eucjpms","euckr","gb2312","gbk","geostd8","greek","hebrew","hp8","keybcs2","koi8u","koi8r","latin1","latin2","latin5","latin7","macce","macroman","sjis","swe7","tis620","ucs2","ujis","utf8"); if ($this->_http->getParam("database_reload") == "1") { $useSql = $this->_http->getParam("database_useSql"); if (empty($useSql)) array_push($errors, "Will you need MySQL connection?"); else { if ($this->_http->getParam("database_useSql") == "false") { $this->setInstallationStep(array(0=>"SLS_Init",1=>"Initialization"), array(0=>"MailSettings",1=>"MailSettings")); return $this->_generic->dispatch("SLS_Init", "MailSettings"); } else { $step = 1; $nbDbs = $this->_http->getParam("nb_databases"); if (empty($nbDbs) || !is_numeric($nbDbs) || $nbDbs <= 0) $nbDbs = 1; $xml->startTag("nb_databases"); for($i=0 ; $i<$nbDbs ; $i++) $xml->addFullTag("nb_database","",true); $xml->endTag("nb_databases"); } } } elseif ($this->_http->getParam("database_reload") == "2") { $nb_databases = SLS_String::trimSlashesFromString($this->_http->getParam("nb_databases")); if (empty($nb_databases) || !is_numeric($nb_databases) || $nb_databases <= 0) $nb_databases = 1; $xml->startTag("nb_databases"); for($i=0 ; $i<$nb_databases ; $i++) $xml->addFullTag("nb_database","",true); $xml->endTag("nb_databases"); $nicks_used = array(); for($i=1 ; $i<=$nb_databases ; $i++) { $nick_{$i} = strtolower(SLS_String::tableToClass(SLS_String::trimSlashesFromString($this->_http->getParam("database_alias_".$i)))); $charset_{$i} = SLS_String::trimSlashesFromString($this->_http->getParam("database_charset_".$i)); $host_{$i} = SLS_String::trimSlashesFromString($this->_http->getParam("database_host_".$i)); $name_{$i} = SLS_String::trimSlashesFromString($this->_http->getParam("database_name_".$i)); $user_{$i} = SLS_String::trimSlashesFromString($this->_http->getParam("database_user_".$i)); $pass_{$i} = SLS_String::trimSlashesFromString($this->_http->getParam("database_pass_".$i)); $no_p_{$i} = SLS_String::trimSlashesFromString($this->_http->getParam("database_no_pass_".$i)); if (empty($charset_{$i}) || !in_array($charset_{$i},$mysqlCharsets)) array_push($errors, "You have to fill the charset for the database n°".$i); if (empty($nick_{$i})) array_push($errors, "You have to fill the database alias for the database n°".$i); else if (in_array($nick_{$i},$nicks_used)) array_push($errors, "The database alias must be unique"); else array_push($nicks_used,$nick_{$i}); if (empty($host_{$i})) array_push($errors, "You have to fill the database host for the database n°".$i); if (empty($name_{$i})) array_push($errors, "You have to fill the database name for the database n°".$i); if (empty($user_{$i})) array_push($errors, "You have to fill the database username for the database n°".$i); if (empty($no_p_{$i}) && empty($pass_{$i})) array_push($errors, "You have to fill the database password or to check 'No password' for the database n°".$i); } // Ping if ($this->_http->getParam("ping") == "true") { $sql = SLS_Sql::getInstance(); $errorsP = array(); for($i=1 ; $i<=$nb_databases ; $i++) { $verdict = $sql->pingConnection($host_{$i},$name_{$i},$user_{$i},(empty($no_p_{$i}) ? $pass_{$i} : "")); if ($verdict === true) array_push($errorsP,'<li style="color:green;"><u>Database n°'.$i.':</u><br />Connection successfull</li>'); if ($verdict !== true) array_push($errorsP,'<li style="color:red;"><u>Database n°'.$i.':</u><br />Connection failed with message `'.$verdict.'`</li>'); } $xml->addFullTag("ping",(empty($errorsP)) ? "true" : "false",true); $xml->startTag("ping_msgs"); foreach($errorsP as $errorP) $xml->addFullTag("ping_msg",$errorP,true); $xml->endTag("ping_msgs"); } // If it have errors //if (!empty($errors)) //{ $xml->startTag("dbs"); for($i=1 ; $i<=$nb_databases ; $i++) { $xml->startTag("db_".$i); $xml->addFullTag("alias",$nick_{$i},true); $xml->addFullTag("charset",$charset_{$i},true); $xml->addFullTag("host",$host_{$i},true); $xml->addFullTag("name",$name_{$i},true); $xml->addFullTag("user",$user_{$i},true); $xml->addFullTag("pass",$pass_{$i},true); $xml->addFullTag("no_pass",(empty($no_p_{$i}))?"false":"true",true); $xml->endTag("db_".$i); } $xml->endTag("dbs"); //} // Good, we can save it! if (empty($errors) && $this->_http->getParam("ping") != "true") { $dbXml = $this->_generic->getDbXML(); $str_xml = ""; for($i=1 ; $i<=$nb_databases ; $i++) { $default = ($i==1) ? 'true' : 'false'; $host_{$i} = SLS_Security::getInstance()->encrypt($host_{$i},$this->_generic->getSiteConfig("privateKey")); $name_{$i} = SLS_Security::getInstance()->encrypt($name_{$i},$this->_generic->getSiteConfig("privateKey")); $user_{$i} = SLS_Security::getInstance()->encrypt($user_{$i},$this->_generic->getSiteConfig("privateKey")); $pass_{$i} = (empty($no_p_{$i})) ? SLS_Security::getInstance()->encrypt($pass_{$i},$this->_generic->getSiteConfig("privateKey")) : ""; $str_xml .= '<db alias="'.$nick_{$i}.'" isDefault="'.$default.'" isSecure="true" js="false" charset="'.$charset_{$i}.'">'. '<host><![CDATA['.$host_{$i}.']]></host>'. '<base><![CDATA['.$name_{$i}.']]></base>'. '<user><![CDATA['.$user_{$i}.']]></user>'. '<pass><![CDATA['.$pass_{$i}.']]></pass>'. '</db>'; } $dbXml->appendXMLNode("//dbs",$str_xml); $dbXml->saveXML($this->_generic->getPathConfig("configSecure")."db.xml"); $this->setInstallationStep(array(0=>"SLS_Init",1=>"Initialization"), array(0=>"MailSettings",1=>"MailSettings")); // If old sls_graph_* exists $sql = SLS_Sql::getInstance(); $graphTables = array("sls_graph", "sls_graph_query", "sls_graph_query_column", "sls_graph_query_group", "sls_graph_query_join", "sls_graph_query_limit", "sls_graph_query_order", "sls_graph_query_where"); foreach($graphTables as $graphTable) { try { if ($sql->tableExists($graphTable)) $sql->exec("DROP TABLE `".$graphTable."`"); } catch (Exception $e) { continue; } } return $this->_generic->dispatch("SLS_Init", "MailSettings"); } $step = 1; } if (!empty($errors) && $this->_http->getParam("database_reload") == "1" || ( !empty($errors) && $this->_http->getParam("ping") != "true")) { $xml->startTag("errors"); foreach($errors as $error) $xml->addFullTag("error", $error, true); $xml->endTag("errors"); } $xml->addFullTag("step", $step, true); $xml->startTag("charsets"); foreach($mysqlCharsets as $key => $value) $xml->addFullTag("charset",$value,true); $xml->endTag("charsets"); $this->saveXML($xml); }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $sql = SLS_Sql::getInstance(); $slsGraphId = $this->_http->getParam('id'); $this->useModel('Sls_graph_query',$this->defaultDb,"sls"); $this->useModel('Sls_graph',$this->defaultDb,"sls"); $this->useModel('Sls_graph_query_column',$this->defaultDb,"sls"); $this->useModel('Sls_graph_query_join',$this->defaultDb,"sls"); $this->useModel('Sls_graph_query_group',$this->defaultDb,"sls"); $this->useModel('Sls_graph_query_where',$this->defaultDb,"sls"); $className = ucfirst($this->defaultDb)."_Sls_graph_query"; $slsGraphQuery = new $className(); $className = ucfirst($this->defaultDb)."_Sls_graph"; $slsGraph = new $className(); if($slsGraph->getModel($slsGraphId) === false || $slsGraphQuery->getModel($slsGraph->sls_graph_query_id) === false) $this->forward('SLS_Default', 'UrlError'); $slsGraphQueryCurrent = $slsGraphQuery; $errors = array(); $slsGraphTypes = array('pie', 'bar', 'pivot', 'list'); $slsGraphAggregationTypes = array('sum', 'avg', 'count'); $slsGraphAggregationTypesNeedField = array('sum', 'avg'); $slsGraphQueryOperators = array('like','notlike','startwith','endwith','equal','notequal','in','notin','lt','lte','gt','gte','null','notnull'); $this->queryOperatorsNeedField = array('like','notlike','startwith','endwith','equal','notequal','in','notin','lt','lte','gt','gte'); $tableFieldsValues = array(); $slsGraphQueryData = array( 'sls_graph_query_where' => array( 'sls_graph_query_where_type' => 'group', 'sls_graph_query_where_condition' => '', 'sls_graph_query_where_column' => '', 'sls_graph_query_where_operator' => '', 'sls_graph_query_where_value' => '', 'sls_graph_query_where_children' => array(), 'sls_graph_query_where_root' => 'true', ) ); $slsGraphData = array(); $slsGraphQueryWheres = array(); # reload if($this->_http->getParam('reload') == 'true') { $xmlFk = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml")); $slsGraphQueryData = $this->_http->getParam('sls_graph_query'); $slsGraphData = $this->_http->getParam('sls_graph'); if(!$slsGraph->setSlsGraphTitle($slsGraphData['sls_graph_title'])) $errors['sls_graph_title'] = 'Titre invalide'; $tmp = explode('.', $slsGraphQueryData['sls_graph_query_table']); if(count($tmp) == 2) { $slsGraphQueryDbAlias = $tmp[0]; $slsGraphQueryTable = $tmp[1]; $slsGraphQueryTableAlias = $this->getTableAlias($slsGraphQueryTable); $sql->changeDb($slsGraphQueryDbAlias); } else { $slsGraphQueryTableAlias = $slsGraphQueryDbAlias = $slsGraphQueryTable = ''; } if(!$slsGraphQuery->setSlsGraphQueryDbAlias($slsGraphQueryDbAlias) || !$slsGraphQuery->setSlsGraphQueryTable($slsGraphQueryTable) || !$slsGraphQuery->setSlsGraphQueryTableAlias($slsGraphQueryTableAlias) || !$sql->tableExists($slsGraphQueryTable)) $errors['sls_graph_query_table'] = 'Table invalide'; else { $tableFields = $sql->showColumns($slsGraphQueryTable); $tableFieldsValues = array_map(array($this,'filterFields'), $tableFields); } if(!$slsGraph->setSlsGraphType($slsGraphData['sls_graph_type'])) { $errors['sls_graph_type'] = 'Type invalide'; } else if($slsGraphData['sls_graph_type'] == 'pie') { # query columns $tmp = explode('.', $slsGraphData['sls_graph_pie_group_by']); $column = $tmp[1]; $columnConcat = $column; $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; $slsGraphQueryColumn1 = new $className(); $slsGraphQueryColumn1->setSlsGraphQueryColumnName($column); $slsGraphQueryColumn1->setSlsGraphQueryColumnAlias('legend_id'); $slsGraphQueryColumn1->setSlsGraphQueryColumnTable($slsGraphQueryTable); $slsGraphQueryColumn1->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias); $columnFk = array_shift($xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".strtolower($slsGraphQueryDbAlias.'_'.$slsGraphQueryTable)."' and @columnFk = '".$column."']",array("tablePk","labelPk"))); if(!empty($columnFk)) { $tablePk = $columnFk['attributes'][0]['value']; $labelPk = $columnFk['attributes'][1]['value']; $dbPk = SLS_String::substrBeforeFirstDelimiter($tablePk, '_'); $tablePk = SLS_String::substrAfterFirstDelimiter($tablePk, '_'); $this->_generic->useModel($tablePk, $dbPk, "user"); $classFk = ucfirst($dbPk)."_".SLS_String::tableToClass($tablePk); $objectFk = new $classFk(); $columns = array(); $columnsLabel = array(); $clause = array(); $render = array(); $columnTable = $objectFk->getTable(); # add join $i = 1; # target $className = ucfirst($this->defaultDb)."_Sls_graph_query_join"; ${slsGraphQueryJoin.$i} = new $className(); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableTarget($slsGraphQueryTable); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableAliasTarget($slsGraphQueryTableAlias); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinColumnTarget($column); # /target # source ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableSource($columnTable); $slsGraphQueryJoin = $this->getTableAlias($columnTable); /*$slsGraphQueryJoin = $columnTable.$aliasIndex; $aliasIndex++;*/ ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableAliasSource($slsGraphQueryJoin); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinColumnSource($objectFk->getPrimaryKey()); # /source ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinMode('left'); $i++; # /add join foreach($objectFk->getParams() as $key => $value) { array_push($columns,"`".$key."`"); if (SLS_String::contains($labelPk,$key)) $columnsLabel[$key] = strpos($labelPk,$key); } array_multisort($columnsLabel); foreach($columnsLabel as $columnLabel => $offset) array_push($clause,$columnLabel); $pattern = str_replace("'","''",$labelPk); foreach($clause as $columnC) $pattern = str_replace($columnC,"',"."CAST(".$slsGraphQueryJoin.".`".$columnC."` AS CHAR),'",$pattern); $columnConcat = "CONCAT('".$pattern."')"; } $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; $slsGraphQueryColumn2 = new $className(); $slsGraphQueryColumn2->setSlsGraphQueryColumnName($columnConcat); $slsGraphQueryColumn2->setSlsGraphQueryColumnAlias('legend'); $slsGraphQueryColumn2->setSlsGraphQueryColumnTable($slsGraphQueryTable); $slsGraphQueryColumn2->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias); $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; $slsGraphQueryColumn3 = new $className(); $slsGraphQueryColumn3->setSlsGraphQueryColumnAggregation('count'); $slsGraphQueryColumn3->setSlsGraphQueryColumnAlias('count'); $slsGraphQueryColumn3->setSlsGraphQueryColumnTable($slsGraphQueryTable); $slsGraphQueryColumn3->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias); # /query columns # query groups $className = ucfirst($this->defaultDb)."_Sls_graph_query_group"; $slsGraphQueryGroup1 = new $className(); if(!$slsGraphQueryGroup1->setSlsGraphQueryGroupColumn($column)/* || !in_array($slsGraphData['sls_graph_pie_group_by'], $tableFieldsValues)*/) $errors['sls_graph_pie_group_by'] = 'Champ groupé invalide'; # /query groups $sql->changeDb($slsGraphQueryDbAlias); $joins = $this->getQueryJoin($slsGraphQueryTable, $slsGraphQueryTableAlias, array($slsGraphData['sls_graph_pie_group_by'])); } else if($slsGraphData['sls_graph_type'] == 'bar') { $i = 1; $j = 1; # query columns $tmp = explode('.', $slsGraphData['sls_graph_bar_aggregation_field']); if(count($tmp) == 2) $columnAggregationField = $tmp[1]; else $columnAggregationField = ''; $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; ${slsGraphQueryColumn.$j} = new $className(); if(empty($slsGraphData['sls_graph_bar_aggregation']) || !${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAggregation($slsGraphData['sls_graph_bar_aggregation']) || !${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTable($slsGraphQueryTable) || !${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias) || !${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAlias('value')) $errors['sls_graph_bar_aggregation'] = 'Aggrégation invalide'; if(in_array($slsGraphData['sls_graph_bar_aggregation'], $slsGraphAggregationTypesNeedField) && (empty($columnAggregationField) || !${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnName($columnAggregationField))) $errors['sls_graph_bar_aggregation_field'] = 'Champ aggrégation invalide'; $j++; # query column group $tmp = explode('.', $slsGraphData['sls_graph_bar_group_by']); $column = $tmp[1]; $columnConcat = $column; $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; ${slsGraphQueryColumn.$j} = new $className(); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnName($column); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAlias('legend_group_id'); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTable($slsGraphQueryTable); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias); $j++; $columnFk = array_shift($xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".strtolower($slsGraphQueryDbAlias.'_'.$slsGraphQueryTable)."' and @columnFk = '".$column."']",array("tablePk","labelPk"))); if(!empty($columnFk)) { $tablePk = $columnFk['attributes'][0]['value']; $labelPk = $columnFk['attributes'][1]['value']; $dbPk = SLS_String::substrBeforeFirstDelimiter($tablePk, '_'); $tablePk = SLS_String::substrAfterFirstDelimiter($tablePk, '_'); $this->_generic->useModel($tablePk, $dbPk, "user"); $classFk = ucfirst($dbPk)."_".SLS_String::tableToClass($tablePk); $objectFk = new $classFk(); $columns = array(); $columnsLabel = array(); $clause = array(); $render = array(); $columnTable = $objectFk->getTable(); # add join # target $className = ucfirst($this->defaultDb)."_Sls_graph_query_join"; ${slsGraphQueryJoin.$i} = new $className(); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableTarget($slsGraphQueryTable); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableAliasTarget($slsGraphQueryTableAlias); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinColumnTarget($column); # /target # source ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableSource($columnTable); $slsGraphQueryJoin = $this->getTableAlias($columnTable); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableAliasSource($slsGraphQueryJoin); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinColumnSource($objectFk->getPrimaryKey()); # /source ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinMode('left'); $i++; # /add join foreach($objectFk->getParams() as $key => $value) { array_push($columns,"`".$key."`"); if (SLS_String::contains($labelPk,$key)) $columnsLabel[$key] = strpos($labelPk,$key); } array_multisort($columnsLabel); foreach($columnsLabel as $columnLabel => $offset) array_push($clause,$columnLabel); $pattern = str_replace("'","''",$labelPk); foreach($clause as $columnC) $pattern = str_replace($columnC,"',"."CAST(".$slsGraphQueryJoin.".`".$columnC."` AS CHAR),'",$pattern); $columnConcat = "CONCAT('".$pattern."')"; } $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; ${slsGraphQueryColumn.$j} = new $className(); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnName($columnConcat); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAlias('legend_group'); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTable($slsGraphQueryTable); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias); $j++; # query column group # query column stacked if(!empty($slsGraphData['sls_graph_bar_stacked_field'])) { $tmp = explode('.', $slsGraphData['sls_graph_bar_stacked_field']); $column = $tmp[1]; $columnConcat = $column; $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; ${slsGraphQueryColumn.$j} = new $className(); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnName($column); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAlias('legend_stacked_id'); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTable($slsGraphQueryTable); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias); $j++; $columnFk = array_shift($xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".strtolower($slsGraphQueryDbAlias.'_'.$slsGraphQueryTable)."' and @columnFk = '".$column."']",array("tablePk","labelPk"))); if(!empty($columnFk)) { $tablePk = $columnFk['attributes'][0]['value']; $labelPk = $columnFk['attributes'][1]['value']; $dbPk = SLS_String::substrBeforeFirstDelimiter($tablePk, '_'); $tablePk = SLS_String::substrAfterFirstDelimiter($tablePk, '_'); $this->_generic->useModel($tablePk, $dbPk, "user"); $classFk = ucfirst($dbPk)."_".SLS_String::tableToClass($tablePk); $objectFk = new $classFk(); $columns = array(); $columnsLabel = array(); $clause = array(); $render = array(); $columnTable = $objectFk->getTable(); # add join # target $className = ucfirst($this->defaultDb)."_Sls_graph_query_join"; ${slsGraphQueryJoin.$i} = new $className(); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableTarget($slsGraphQueryTable); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableAliasTarget($slsGraphQueryTableAlias); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinColumnTarget($column); # /target # source ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableSource($columnTable); $slsGraphQueryJoin = $this->getTableAlias($columnTable); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableAliasSource($slsGraphQueryJoin); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinColumnSource($objectFk->getPrimaryKey()); # /source ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinMode('left'); $i++; # /add join foreach($objectFk->getParams() as $key => $value) { array_push($columns,"`".$key."`"); if (SLS_String::contains($labelPk,$key)) $columnsLabel[$key] = strpos($labelPk,$key); } array_multisort($columnsLabel); foreach($columnsLabel as $columnLabel => $offset) array_push($clause,$columnLabel); $pattern = str_replace("'","''",$labelPk); foreach($clause as $columnC) $pattern = str_replace($columnC,"',"."CAST(".$slsGraphQueryJoin.".`".$columnC."` AS CHAR),'",$pattern); $columnConcat = "CONCAT('".$pattern."')"; } $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; ${slsGraphQueryColumn.$j} = new $className(); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnName($columnConcat); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAlias('legend_stacked'); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTable($slsGraphQueryTable); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias); } # query column stacked # /query columns # query groups $tmp = explode('.', $slsGraphData['sls_graph_bar_group_by']); $columnGroupByField = $tmp[1]; $className = ucfirst($this->defaultDb)."_Sls_graph_query_group"; $slsGraphQueryGroup1 = new $className(); if(!$slsGraphQueryGroup1->setSlsGraphQueryGroupColumn($columnGroupByField)) $errors['sls_graph_bar_group_by'] = 'Champ groupé invalide'; if(!empty($slsGraphData['sls_graph_bar_stacked_field'])) { $tmp = explode('.', $slsGraphData['sls_graph_bar_stacked_field']); $columnStackedField = $tmp[1]; $className = ucfirst($this->defaultDb)."_Sls_graph_query_group"; $slsGraphQueryGroup2 = new $className(); if(!$slsGraphQueryGroup2->setSlsGraphQueryGroupColumn($columnStackedField)) $errors['sls_graph_bar_stacked_field'] = 'Champ réservé invalide'; } # /query groups $joins = $this->getQueryJoin($slsGraphQueryTable, $slsGraphQueryTableAlias, array($slsGraphData['sls_graph_bar_group_by'])); } else if($slsGraphData['sls_graph_type'] == 'pivot') { $i = 1; $j = 1; # query columns $tmp = explode('.', $slsGraphData['sls_graph_pivot_aggregation_field']); if(count($tmp) == 2) $columnAggregationField = $tmp[1]; else $columnAggregationField = ''; $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; ${slsGraphQueryColumn.$j} = new $className(); if(empty($slsGraphData['sls_graph_pivot_aggregation']) || !${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAggregation($slsGraphData['sls_graph_pivot_aggregation']) || !${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTable($slsGraphQueryTable) || !${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias) || !${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAlias('value')) $errors['sls_graph_pivot_aggregation'] = 'Aggrégation invalide'; if(in_array($slsGraphData['sls_graph_pivot_aggregation'], $slsGraphAggregationTypesNeedField) && (empty($columnAggregationField) || !${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnName($columnAggregationField))) $errors['sls_graph_pivot_aggregation_field'] = 'Champ aggrégation invalide'; $j++; # query column line $tmp = explode('.', $slsGraphData['sls_graph_pivot_line']); $column = $tmp[1]; $columnConcat = $tmp[1]; $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; ${slsGraphQueryColumn.$j} = new $className(); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnName($column); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAlias('legend_line_id'); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTable($slsGraphQueryTable); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias); $j++; $columnFk = array_shift($xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".strtolower($slsGraphQueryDbAlias.'_'.$slsGraphQueryTable)."' and @columnFk = '".$column."']",array("tablePk","labelPk"))); if(!empty($columnFk)) { $tablePk = $columnFk['attributes'][0]['value']; $labelPk = $columnFk['attributes'][1]['value']; $dbPk = SLS_String::substrBeforeFirstDelimiter($tablePk, '_'); $tablePk = SLS_String::substrAfterFirstDelimiter($tablePk, '_'); $this->_generic->useModel($tablePk, $dbPk, "user"); $classFk = ucfirst($dbPk)."_".SLS_String::tableToClass($tablePk); $objectFk = new $classFk(); $columns = array(); $columnsLabel = array(); $clause = array(); $render = array(); $columnTable = $objectFk->getTable(); # add join # target $className = ucfirst($this->defaultDb)."_Sls_graph_query_join"; ${slsGraphQueryJoin.$i} = new $className(); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableTarget($slsGraphQueryTable); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableAliasTarget($slsGraphQueryTableAlias); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinColumnTarget($column); # /target # source ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableSource($columnTable); $slsGraphQueryJoin = $this->getTableAlias($columnTable); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableAliasSource($slsGraphQueryJoin); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinColumnSource($objectFk->getPrimaryKey()); # /source ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinMode('left'); $i++; # /add join foreach($objectFk->getParams() as $key => $value) { array_push($columns,"`".$key."`"); if (SLS_String::contains($labelPk,$key)) $columnsLabel[$key] = strpos($labelPk,$key); } array_multisort($columnsLabel); foreach($columnsLabel as $columnLabel => $offset) array_push($clause,$columnLabel); $pattern = str_replace("'","''",$labelPk); foreach($clause as $columnC) $pattern = str_replace($columnC,"',"."CAST(".$slsGraphQueryJoin.".`".$columnC."` AS CHAR),'",$pattern); $columnConcat = "CONCAT('".$pattern."')"; } $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; ${slsGraphQueryColumn.$j} = new $className(); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnName($columnConcat); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAlias('legend_line'); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTable($slsGraphQueryTable); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias); $j++; # query column line # query column column $tmp = explode('.', $slsGraphData['sls_graph_pivot_column']); $column = $tmp[1]; $columnConcat = $column; $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; ${slsGraphQueryColumn.$j} = new $className(); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnName($column); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAlias('legend_column_id'); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTable($slsGraphQueryTable); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias); $j++; $columnFk = array_shift($xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".strtolower($slsGraphQueryDbAlias.'_'.$slsGraphQueryTable)."' and @columnFk = '".$column."']",array("tablePk","labelPk"))); if(!empty($columnFk)) { $tablePk = $columnFk['attributes'][0]['value']; $labelPk = $columnFk['attributes'][1]['value']; $dbPk = SLS_String::substrBeforeFirstDelimiter($tablePk, '_'); $tablePk = SLS_String::substrAfterFirstDelimiter($tablePk, '_'); $this->_generic->useModel($tablePk, $dbPk, "user"); $classFk = ucfirst($dbPk)."_".SLS_String::tableToClass($tablePk); $objectFk = new $classFk(); $columns = array(); $columnsLabel = array(); $clause = array(); $render = array(); $columnTable = $objectFk->getTable(); # add join # target $className = ucfirst($this->defaultDb)."_Sls_graph_query_join"; ${slsGraphQueryJoin.$i} = new $className(); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableTarget($slsGraphQueryTable); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableAliasTarget($slsGraphQueryTableAlias); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinColumnTarget($column); # /target # source ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableSource($columnTable); $slsGraphQueryJoin = $this->getTableAlias($columnTable); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinTableAliasSource($slsGraphQueryJoin); ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinColumnSource($objectFk->getPrimaryKey()); # /source ${slsGraphQueryJoin.$i}->setSlsGraphQueryJoinMode('left'); $i++; # /add join foreach($objectFk->getParams() as $key => $value) { array_push($columns,"`".$key."`"); if (SLS_String::contains($labelPk,$key)) $columnsLabel[$key] = strpos($labelPk,$key); } array_multisort($columnsLabel); foreach($columnsLabel as $columnLabel => $offset) array_push($clause,$columnLabel); $pattern = str_replace("'","''",$labelPk); foreach($clause as $columnC) $pattern = str_replace($columnC,"',"."CAST(".$slsGraphQueryJoin.".`".$columnC."` AS CHAR),'",$pattern); $columnConcat = "CONCAT('".$pattern."')"; } $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; ${slsGraphQueryColumn.$j} = new $className(); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnName($columnConcat); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnAlias('legend_column'); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTable($slsGraphQueryTable); ${slsGraphQueryColumn.$j}->setSlsGraphQueryColumnTableAlias($slsGraphQueryTableAlias); # query column column # /query columns # query groups $tmp = explode('.', $slsGraphData['sls_graph_pivot_line']); $columnLine = $tmp[1]; $className = ucfirst($this->defaultDb)."_Sls_graph_query_group"; $slsGraphQueryGroup1 = new $className(); if(!$slsGraphQueryGroup1->setSlsGraphQueryGroupColumn($columnLine)) $errors['sls_graph_pivot_line'] = 'Champ Ligne invalide'; $tmp = explode('.', $slsGraphData['sls_graph_pivot_column']); $columnColumn = $tmp[1]; $className = ucfirst($this->defaultDb)."_Sls_graph_query_group"; $slsGraphQueryGroup2 = new $className(); if(!$slsGraphQueryGroup2->setSlsGraphQueryGroupColumn($columnColumn)) $errors['sls_graph_pivot_column'] = 'Champ colonne invalide'; # /query groups $joins = $this->getQueryJoin($slsGraphQueryTable, $slsGraphQueryTableAlias, array($slsGraphData['sls_graph_pivot_column'])); } else if($slsGraphData['sls_graph_type'] == 'list') { # columns $i = 1; $j = 1; $joins = array(); foreach($slsGraphQueryData['sls_graph_query_column'] as $col) { $column = $col['sls_graph_query_column_value']; $path = explode('|', $column); $nbJoins = count($path); $data = explode('.', $path[$nbJoins-1]); $table = $data[0]; $column = $data[1]; $joinBefore = null; # joins for($k = 0; $k<$nbJoins ; $k++) { if($k == 0) { $columns = $sql->showColumns($slsGraphQueryTable); $columnSource = array_shift(array_filter($columns, array($this,'filterPK'))); $columnSourcePK = $columnSource->Field; $join = array( 'sls_graph_query_join_table_source' => $slsGraphQueryTable, 'sls_graph_query_join_column_source' => $columnSourcePK ); } else { $dataSource = explode('.', $path[$k]); $dataTarget = explode('.', $path[$k-1]); $tableSource = $dataSource[0]; $tableTarget = $dataTarget[0]; $columnSource = $dataSource[1]; $columnTarget = $dataTarget[1]; $columns = $sql->showColumns($tableSource); $columnSourcePK = array_shift(array_filter($columns, array($this,'filterPK')))->Field; $columns = $sql->showColumns($tableTarget); $this->columnTarget = $columnTarget; $columnTargetComment = array_shift(array_filter($columns, array($this,'filterFieldTarget')))->Comment; $join = array( 'sls_graph_query_join_table_target' => $tableTarget, 'sls_graph_query_join_column_target' =>$columnTarget, 'sls_graph_query_join_table_comment_target' => empty($columnTargetComment) ? $columnTarget : $columnTargetComment, 'sls_graph_query_join_table_source' => $tableSource, 'sls_graph_query_join_column_source' => $columnSourcePK ); } $joinSearch = $this->array_search_multi($join, $joins); if(empty($joinSearch)) { $join['sls_graph_query_join_table_alias_source'] = ($k == 0) ? $slsGraphQueryTableAlias : $this->getTableAlias($join['sls_graph_query_join_table_source']); /*$join['sls_graph_query_join_table_source'].$aliasIndex++*/; if($k > 0) { $className = ucfirst($this->defaultDb)."_Sls_graph_query_join"; ${slsGraphQueryJoin.$j} = new $className(); ${slsGraphQueryJoin.$j}->setSlsGraphQueryJoinTableSource($join['sls_graph_query_join_table_source']); ${slsGraphQueryJoin.$j}->setSlsGraphQueryJoinTableAliasSource($join['sls_graph_query_join_table_alias_source']); ${slsGraphQueryJoin.$j}->setSlsGraphQueryJoinColumnSource($join['sls_graph_query_join_column_source']); ${slsGraphQueryJoin.$j}->setSlsGraphQueryJoinTableTarget($join['sls_graph_query_join_table_target']); ${slsGraphQueryJoin.$j}->setSlsGraphQueryJoinTableAliasTarget($joinBefore['sls_graph_query_join_table_alias_source']); ${slsGraphQueryJoin.$j}->setSlsGraphQueryJoinColumnTarget($join['sls_graph_query_join_column_target']); ${slsGraphQueryJoin.$j}->setSlsGraphQueryJoinMode('left'); $j++; } array_push($joins, $join); } else $join = $joinSearch; $joinBefore = $join; } # /joins $columns = $sql->showColumns($table); $this->column = $column; $columnComment = array_shift(array_filter($columns, array($this,'filterColumnField')))->Comment; $tableComment = $join['sls_graph_query_join_table_comment_target']; if(empty($tableComment)) { $tables = $sql->showTables(); $this->table = $table; $tableComment = array_shift(array_filter($tables, array($this,'filterTable4')))->Comment; } $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; ${slsGraphQueryColumn.$i} = new $className(); ${slsGraphQueryColumn.$i}->setSlsGraphQueryColumnTable($join['sls_graph_query_join_table_source']); ${slsGraphQueryColumn.$i}->setSlsGraphQueryColumnTableAlias($join['sls_graph_query_join_table_alias_source']); ${slsGraphQueryColumn.$i}->setSlsGraphQueryColumnName($column); ${slsGraphQueryColumn.$i}->setSlsGraphQueryColumnAlias($tableComment.' - '.$columnComment); $i++; } # /columns } # query where if(!empty($slsGraphQueryData['sls_graph_query_where'])) { $i = 0; $j = 0; $this->iterateSetSlsGraphQueryWhere($slsGraphQueryData['sls_graph_query_where'], $i, $j, $slsGraphQueryWheres, $errors, $joins); } # /query where if (empty($errors)) { $sql->changeDb($this->defaultDb); # query $this->deleteQuery($slsGraphQueryCurrent->sls_graph_query_id); $slsGraphQuery->create(); # /query # graph $slsGraph->setSlsGraphQueryId($slsGraphQuery->sls_graph_query_id); $slsGraph->save(); # /graph # query joins $i = 1; //$slsGraphQueryJoin1 while(${slsGraphQueryJoin.$i}) { ${slsGraphQueryJoin.$i}->setSlsGraphQueryId($slsGraphQuery->sls_graph_query_id); ${slsGraphQueryJoin.$i}->create(); $i++; } # /query joins # query columns $i = 1; while(${slsGraphQueryColumn.$i}) { ${slsGraphQueryColumn.$i}->setSlsGraphQueryId($slsGraphQuery->sls_graph_query_id); ${slsGraphQueryColumn.$i}->create(); $i++; } # /query columns # query groups $i = 1; while(${slsGraphQueryGroup.$i}) { ${slsGraphQueryGroup.$i}->setSlsGraphQueryGroupTable($slsGraphQueryTable); ${slsGraphQueryGroup.$i}->setSlsGraphQueryGroupTableAlias($slsGraphQueryTableAlias); ${slsGraphQueryGroup.$i}->setSlsGraphQueryId($slsGraphQuery->sls_graph_query_id); ${slsGraphQueryGroup.$i}->create(); $i++; } # /query groups # query where if(!empty($slsGraphQueryData['sls_graph_query_where'])) { $i = 0; $this->iterateCreateQueryWhere($slsGraphQueryData['sls_graph_query_where'], 0, $i, $slsGraphQueryWheres, $slsGraphQuery->sls_graph_query_id); } # /query where $this->forward('SLS_Bo', 'ReportingBo'); } else { $xml->startTag("errors"); foreach($errors as $key => $error) { if($key == 'sls_graph_query_where') { foreach($error as $slsGraphQueryWhereIndex => $slsGraphQueryWhereErrors) { foreach($slsGraphQueryWhereErrors as $slsGraphQueryWhereKey => $slsGraphQueryWhereError) { $xml->addFullTag("error", $slsGraphQueryWhereError, true, array("num" => $slsGraphQueryWhereIndex, "column" => $slsGraphQueryWhereKey)); } } } else $xml->addFullTag("error", $error, true, array("column" => $key)); } $xml->endTag("errors"); } $slsGraphQueryData = $this->_http->getParam('sls_graph_query'); } # /reload # load else { $this->useModel('Sls_graph_query',$this->defaultDb,"sls"); $this->useModel('Sls_graph',$this->defaultDb,"sls"); $this->useModel('Sls_graph_query_column',$this->defaultDb,"sls"); $this->useModel('Sls_graph_query_join',$this->defaultDb,"sls"); $this->useModel('Sls_graph_query_group',$this->defaultDb,"sls"); $this->useModel('Sls_graph_query_where',$this->defaultDb,"sls"); $className = ucfirst($this->defaultDb)."_Sls_graph_query_column"; $slsGraphQueryColumn = new $className(); $className = ucfirst($this->defaultDb)."_Sls_graph_query_join"; $slsGraphQueryJoin = new $className(); $className = ucfirst($this->defaultDb)."_Sls_graph_query_where"; $slsGraphQueryWhere = new $className(); $className = ucfirst($this->defaultDb)."_Sls_graph_query_group"; $slsGraphQueryGroup = new $className(); $slsGraphQueryId = $slsGraphQueryCurrent->sls_graph_query_id; $tables = array($slsGraphQueryCurrent->sls_graph_query_table => !empty($slsGraphQueryCurrent->sls_graph_query_alias) ? $slsGraphQuery->sls_graph_query_alias : $slsGraphQueryCurrent->sls_graph_query_table); $columns = $slsGraphQueryColumn->searchModels("sls_graph_query_column",array(),array(0=>array("column"=>"sls_graph_query_id","value"=>$slsGraphQueryId,"mode"=>"equal")),array(),array(array("column"=>"sls_graph_query_column_id","order"=>"asc"))); $joins = $slsGraphQueryJoin->searchModels("sls_graph_query_join",array(),array(0=>array("column"=>"sls_graph_query_id","value"=>$slsGraphQueryId,"mode"=>"equal")),array(),array(array("column"=>"sls_graph_query_join_id","order"=>"asc"))); $wheres = $slsGraphQueryWhere->searchModels("sls_graph_query_where",array(),array(0=>array("column"=>"sls_graph_query_id","value"=>$slsGraphQueryId,"mode"=>"equal")),array(),array(array("column"=>"sls_graph_query_where_id","order"=>"asc"))); $groups = $slsGraphQueryGroup->searchModels("sls_graph_query_group",array(),array(0=>array("column"=>"sls_graph_query_id","value"=>$slsGraphQueryId,"mode"=>"equal")),array(),array(array("column"=>"sls_graph_query_group_id","order"=>"asc"))); if($slsGraph->sls_graph_type == 'pie') { $slsGraphData['sls_graph_pie_group_by'] = !empty($groups) ? $slsGraphQueryCurrent->sls_graph_query_table_alias.'.'.$groups[0]->sls_graph_query_group_column : ''; } else if($slsGraph->sls_graph_type == 'bar') { $slsGraphData['sls_graph_bar_aggregation'] = !empty($columns) ? $columns[0]->sls_graph_query_column_aggregation : ''; $slsGraphData['sls_graph_bar_aggregation_field'] = !empty($columns) && !empty($columns[0]->sls_graph_query_column_name) ? $slsGraphQueryCurrent->sls_graph_query_table_alias.'.'.$columns[0]->sls_graph_query_column_name : ''; $slsGraphData['sls_graph_bar_group_by'] = !empty($groups) && !empty($groups[0]->sls_graph_query_group_column) ? $slsGraphQueryCurrent->sls_graph_query_table_alias.'.'.$groups[0]->sls_graph_query_group_column : ''; $slsGraphData['sls_graph_bar_stacked_field'] = !empty($groups) && !empty($groups[1]->sls_graph_query_group_column) ? $slsGraphQueryCurrent->sls_graph_query_table_alias.'.'.$groups[1]->sls_graph_query_group_column : ''; } else if($slsGraph->sls_graph_type == 'pivot') { $slsGraphData['sls_graph_pivot_aggregation'] = !empty($columns) ? $columns[0]->sls_graph_query_column_aggregation : ''; $slsGraphData['sls_graph_pivot_aggregation_field'] = !empty($columns) && !empty($columns[0]->sls_graph_query_column_name) ? $slsGraphQueryCurrent->sls_graph_query_table_alias.'.'.$columns[0]->sls_graph_query_column_name : ''; $slsGraphData['sls_graph_pivot_line'] = !empty($groups) && !empty($groups[0]->sls_graph_query_group_column) ? $slsGraphQueryCurrent->sls_graph_query_table_alias.'.'.$groups[0]->sls_graph_query_group_column : ''; $slsGraphData['sls_graph_pivot_column'] = !empty($groups) && !empty($groups[1]->sls_graph_query_group_column) ? $slsGraphQueryCurrent->sls_graph_query_table_alias.'.'.$groups[1]->sls_graph_query_group_column : ''; } foreach($slsGraph->getParams() as $key => $value) $slsGraphData[$key] = $value; if ($slsGraphQueryCurrent->sls_graph_query_db_alias != $sql->getCurrentDb()) $sql->changeDb($slsGraphQueryCurrent->sls_graph_query_db_alias); $tableFields = $sql->showColumns($slsGraphQueryCurrent->sls_graph_query_table); foreach($slsGraphQueryCurrent->getParams() as $key => $value) { if($key == 'sls_graph_query_table') $value = $slsGraphQueryCurrent->sls_graph_query_db_alias.'.'.$value; $slsGraphQueryData[$key] = $value; } $slsGraphQueryData['sls_graph_query_column'] = $this->iterateFormatQueryColumnToArray($columns, $joins); $slsGraphQueryData['sls_graph_query_where'] = $this->iterateFormatQueryWhereToArray($wheres, 0); } # /load # graph $xml->startTag('sls_graph'); foreach($slsGraphData as $key => $value) $xml->addFullTag($key, $value, true); $xml->addFullTag('graph_table_fields_class', empty($tableFields) ? 'hide' : '', true); $xml->startTag('sls_graph_query'); foreach($slsGraphQueryData as $key => $value) { if($key == 'sls_graph_query_where') { $i = 0; $j = 0; $this->iterateAddXmlQueryWhere($value, $i, $j, $xml); } else if($key == 'sls_graph_query_column') { $xml->startTag('sls_graph_query_columns'); foreach($value as $column) { $xml->startTag('sls_graph_query_column'); $xml->addFullTag('sls_graph_query_column_value', $column['sls_graph_query_column_value'], true); $xml->addFullTag('sls_graph_query_column_label', $column['sls_graph_query_column_label'], true); $xml->endTag('sls_graph_query_column'); } $xml->endTag('sls_graph_query_columns'); } else $xml->addFullTag($key, $value, true); } $xml->endTag('sls_graph_query'); $xml->endTag('sls_graph'); # /graph $labels = array( 'SLS_GRAPH_TYPE_PIE' => "Pie Chart", 'SLS_GRAPH_TYPE_BAR' => "Bar Chart", 'SLS_GRAPH_TYPE_PIVOT' => "Pivot Table", 'SLS_GRAPH_TYPE_LIST' => "List", 'SLS_AGGREGATION_TYPE_SUM' => "SUM", 'SLS_AGGREGATION_TYPE_AVG' => "AVG", 'SLS_AGGREGATION_TYPE_COUNT' => "COUNT", 'SLS_AGGREGATION_TYPE_SUM_LABEL' => "Sum", 'SLS_AGGREGATION_TYPE_AVG_LABEL' => "Average", 'SLS_AGGREGATION_TYPE_COUNT_LABEL' => "Total", 'SLS_QUERY_OPERATOR_LIKE' => "LIKE", 'SLS_QUERY_OPERATOR_NOTLIKE' => "NOT LIKE", 'SLS_QUERY_OPERATOR_STARTWITH' => "START WITH", 'SLS_QUERY_OPERATOR_ENDWITH' => "END WITH", 'SLS_QUERY_OPERATOR_EQUAL' => "EQUAL", 'SLS_QUERY_OPERATOR_NOTEQUAL' => "NOT EQUAL", 'SLS_QUERY_OPERATOR_IN' => "IN", 'SLS_QUERY_OPERATOR_NOTIN' => "NOT IN", 'SLS_QUERY_OPERATOR_LT' => "LESS THAN", 'SLS_QUERY_OPERATOR_LTE' => "LESS THAN EQUAL", 'SLS_QUERY_OPERATOR_GT' => "GREATER THAN", 'SLS_QUERY_OPERATOR_GTE' => "GREATER THAN EQUAL", 'SLS_QUERY_OPERATOR_NULL' => "IS NULL", 'SLS_QUERY_OPERATOR_NOTNULL' => "IS NOT NULL" ); # graph types $xml->startTag('sls_graph_types'); foreach($slsGraphTypes as $slsGraphType){ $xml->startTag('sls_graph_type'); $xml->addFullTag('sls_graph_type_value', $slsGraphType, true); $xml->addFullTag('sls_graph_type_label', $labels['SLS_GRAPH_TYPE_'.mb_strtoupper($slsGraphType, 'UTF-8')], true); $xml->endTag('sls_graph_type'); } $xml->endTag('sls_graph_types'); # /graph types # aggregation types $xml->startTag('sls_graph_aggregation_types'); foreach($slsGraphAggregationTypes as $slsGraphAggregationType){ $xml->startTag('sls_graph_aggregation_type'); $xml->addFullTag('sls_graph_aggregation_type_value', $slsGraphAggregationType, true); $xml->addFullTag('sls_graph_aggregation_type_label', $labels['SLS_AGGREGATION_TYPE_'.mb_strtoupper($slsGraphAggregationType, 'UTF-8')], true); $xml->endTag('sls_graph_aggregation_type'); } $xml->endTag('sls_graph_aggregation_types'); # /aggregation types # query operators $xml->startTag('sls_graph_query_operators'); foreach($slsGraphQueryOperators as $slsGraphQueryOperator){ $xml->startTag('sls_graph_query_operator'); $xml->addFullTag('sls_graph_query_operator_value', $slsGraphQueryOperator, true); $xml->addFullTag('sls_graph_query_operator_label', $labels['SLS_QUERY_OPERATOR_'.mb_strtoupper($slsGraphQueryOperator, 'UTF-8')], true); $xml->endTag('sls_graph_query_operator'); } $xml->endTag('sls_graph_query_operators'); # /query operators # tables $xml->startTag('tables'); $dbs = $sql->getDbs(); foreach($dbs as $db) { $sql->changeDb($db); $tables = $sql->showTables(); usort($tables, array($this,'cmpTables')); foreach($tables as $table) { $xml->startTag('table'); $xml->addFullTag('table_name', $db.'.'.$table->Name, true); $xml->addFullTag('table_label', $db.' - '.$table->Name, true); $xml->endTag('table'); } } $xml->endTag('tables'); # /tables $xml->addFullTag("url_reporting_getfields",$this->_generic->getFullPath("SLS_Bo","ReportingBoGetFields"),true); $xml->addFullTag("url_reporting_getfieldsfrommutipletables",$this->_generic->getFullPath("SLS_Bo","ReportingBoGetFieldsFromMultipleTables"),true); $xml->addFullTag("url_report",$this->_generic->getFullPath("SLS_Bo","ReportingBo"),true); $xml->addFullTag("url_delete",$this->_generic->getFullPath("SLS_Bo","ReportingBoDelete",array("id" => $slsGraphId)),true); $xml->addFullTag("url_status",$this->_generic->getFullPath("SLS_Bo","ReportingBoStatus",array("id" => $slsGraphId)),true); $this->saveXML($xml); }
public function action() { $xml = $this->getXML(); $xml = $this->makeMenu($xml); $user = $this->hasAuthorative(); // Objects $sql = SLS_Sql::getInstance(); $xmlBo = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bo.xml")); $xmlFk = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml")); $xmlType = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml")); // Get the table & class name $tableName = SLS_String::substrAfterFirstDelimiter($this->_http->getParam("name"),"_"); $db = SLS_String::substrBeforeFirstDelimiter($this->_http->getParam("name"),"_"); $className = ucfirst($db)."_".SLS_String::tableToClass($tableName); $file = ucfirst($db).".".SLS_String::tableToClass($tableName); $fileName = ucfirst($db).".".SLS_String::tableToClass($tableName).".model.php"; // If current db is not this one if ($sql->getCurrentDb() != $db) $sql->changeDb($db); // Remind old properties $this->_generic->useModel(SLS_String::tableToClass($tableName),ucfirst(strtolower($db)), "user"); $object = new $className(); $oldColumns = $object->getColumns(); // Update Model $contentM = $this->getModelSource($tableName,$db); file_put_contents($this->_generic->getPathConfig("models").$fileName,$contentM); // Check Bo $controllerBo = $this->_generic->getBo(); if (!empty($controllerBo)) { $boPath = "//sls_configs/entry[@type='table' and @name='".strtolower($className)."']"; $boExists = $xmlBo->getTag($boPath."/@type"); if (empty($boExists)) { $boPath = "//sls_configs/entry/entry[@type='table' and @name='".strtolower($className)."']"; $boExists = $xmlBo->getTag($boPath); } if (!empty($boExists)) { $columns = $sql->showColumns($tableName); $newColumns = array(); for($i=0 ; $i<$count=count($columns) ; $i++) $newColumns[] = $columns[$i]->Field; $xmlNodes = ''; foreach($newColumns as $column) { $columnExists = $xmlBo->getTag($boPath."/columns/column[@table='".strtolower($className)."' and @name='".$column."']/@name"); if (empty($columnExists)) { // Avoid pk $isPk = ($column == $object->getPrimaryKey() || $column == 'pk_lang') ? true : false; // Avoid fk $fkExist = $xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($db."_".$tableName)."' and @columnFk='".$column."']/@tablePk"); $isFk = (!empty($fkExist)) ? true : false; // Avoid quick edit on type file $fileExist = $xmlType->getTag("//sls_configs/entry[@table='".strtolower($db."_".$tableName)."' and @column='".$column."' and (@type='file_all' or @type='file_img')]/@column"); $isFile = (!empty($fileExist)) ? true : false; $xmlNodes .= ' <column table="'.strtolower($db."_".$tableName).'" name="'.$column.'" multilanguage="'.(($object->isMultilanguage() && !$isPk) ? "true" : "false").'" displayFilter="true" displayList="'.(($isFk) ? "false" : "true").'" allowEdit="'.(($isPk || $isFk || $isFile) ? "false" : "true").'" allowHtml="false" />'."\n"; } } if (!empty($xmlNodes)) { $xmlBo->appendXMLNode($boPath."/columns",$xmlNodes); } $deprecatedColumns = array_diff($oldColumns,$newColumns); foreach($deprecatedColumns as $column) { $xmlBo->deleteTags($boPath."/columns/column[@table='".strtolower($className)."' and @name='".$column."']",1); } $xmlBo->saveXML($this->_generic->getPathConfig("configSls")."/bo.xml",$xmlBo->getXML()); $xmlBo->refresh(); } } $action_id = $this->_http->getParam("Redirect"); if ($this->_generic->actionIdExists($action_id)) { $infos = $this->_generic->translateActionId($action_id); $this->_generic->redirect($infos['controller']."/".$infos['scontroller']); } else { $controllers = $this->_generic->getTranslatedController("SLS_Bo","EditModel"); $this->_generic->redirect($controllers['controller']."/".$controllers['scontroller']."/name/".$db."_".$tableName); } }
public function action() { $user = $this->hasAuthorative(); $sql = SLS_Sql::getInstance(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $errors = array(); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml"); $xmlFk = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml"); $xmlType = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/filters.xml"); $xmlFilter = new SLS_XMLToolbox($pathsHandle); // Get the table name $table = SLS_String::substrAfterFirstDelimiter($this->_http->getParam("name"),"_"); $db = SLS_String::substrBeforeFirstDelimiter($this->_http->getParam("name"),"_"); $column= $this->_http->getParam("column"); $class = ucfirst($db)."_".SLS_String::tableToClass($table); $file = ucfirst($db).".".SLS_String::tableToClass($table); // If current db is not this one if ($sql->getCurrentDb() != $db) $sql->changeDb($db); if ($sql->tableExists($table)) { if ($this->_http->getParam("reload") == "true") { $columnWanted = $this->_http->getParam("column"); $typeWanted = $this->_http->getParam("type"); $result = $xmlType->getTags("//sls_configs/entry[@table='".$db."_".$table."' and @column='".$columnWanted."']"); // If an entry already exists in the XML, delete this record if (!empty($result)) { $xmlTmp = $xmlType->deleteTags("//sls_configs/entry[@table='".$db."_".$table."' and @column='".$columnWanted."']"); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlTmp); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml"); $xmlType = new SLS_XMLToolbox($pathsHandle); } // If file type, check possible thumbs if ($typeWanted == "file") { $typeFile = $this->_http->getParam("file"); $file_thumb = $this->_http->getParam("file_thumb"); $multilang = $this->_http->getParam("multilanguage"); $thumbs = array(); $typeWanted = $typeWanted."_".$typeFile; if ($typeFile == "img" && !empty($file_thumb)) { for($i=0 ; $i<10 ; $i++) { $width = $this->_http->getParam("width".$i); $height = $this->_http->getParam("height".$i); $suffix = $this->_http->getParam("suffix".$i); if (!empty($suffix) && (!empty($width) || !empty($height))) array_push($thumbs,array('width' => $width, 'height' => $height, 'suffix' => $suffix)); } } $rules = "*|*|*"; if ($typeFile == "img") { $settings = $this->_http->getParam("imgSettings"); $ratio = str_replace(",",".",$settings["ratio"]); $minWidth = str_replace(",",".",$settings["min-width"]); $minHeight = str_replace(",",".",$settings["min-height"]); $ratio = (!is_numeric($ratio) || (is_numeric($ratio) && $ratio <= 0)) ? "*" : round($ratio,2); $minWidth = (!is_numeric($minWidth) || (is_numeric($minWidth) && $minWidth < 0)) ? "*" : round($minWidth,0); $minHeight = (!is_numeric($minHeight) || (is_numeric($minHeight) && $minHeight < 0)) ? "*" : round($minHeight,0); $rules = $ratio."|".$minWidth."|".$minHeight; } // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" rules="'.$rules.'" thumbs="'.str_replace('"','||#||',serialize($thumbs)).'" multilanguage="'.$multilang.'" type="'.$typeWanted.'" />'; $xmlType->appendXMLNode("//sls_configs",$xmlNode); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlType->getXML()); } else if ($typeWanted == "ip") { $type = $this->_http->getParam("ip"); // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" type="'.$typeWanted."_".$type.'" />'; $xmlType->appendXMLNode("//sls_configs",$xmlNode); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlType->getXML()); } else if ($typeWanted == "complexity") { $complexity = $this->_http->getParam("complexity"); $complexityMin = $this->_http->getParam("complexity_min"); $complexity = (empty($complexity)) ? array() : $complexity; if (!empty($complexityMin) && is_numeric($complexityMin) && $complexityMin >= 0) $complexity[] = "min".$complexityMin; $complexity = implode("|",$complexity); // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" rules="'.$complexity.'" type="complexity" />'; $xmlType->appendXMLNode("//sls_configs",$xmlNode); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlType->getXML()); } else if ($typeWanted == "num") { $type = $this->_http->getParam("num"); // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" type="'.$typeWanted."_".$type.'" />'; $xmlType->appendXMLNode("//sls_configs",$xmlNode); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlType->getXML()); } // Else, it's email, url else { // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" type="'.$typeWanted.'" />'; $xmlType->appendXMLNode("//sls_configs",$xmlNode); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlType->getXML()); } // Update Model $fileName = ucfirst($db).".".SLS_String::tableToClass($table).".model.php"; $contentM = $this->getModelSource($table,$db); file_put_contents($this->_generic->getPathConfig("models").$fileName,$contentM); $controllers = $this->_generic->getTranslatedController("SLS_Bo","EditModel"); $this->_generic->redirect($controllers['controller']."/".$controllers['scontroller']."/name/".$db."_".$table); } // Get generic object $this->_generic->useModel($table,$db,"user"); $object = new $class(); // Get current entry $attributes = array_shift($xmlType->getTagsAttributes("//sls_configs/entry[@table='".$db."_".$table."' and @column='".$column."']",array("type","thumbs","multilanguage","hash","rules"))); // Get object's infos $columnsP = $object->getParams(); $pk = $object->getPrimaryKey(); $multilanguage = $object->isMultilanguage(); $xml->startTag("model"); $xml->addFullTag("table",$table,true); $xml->addFullTag("db",$db,true); $xml->addFullTag("class",$class,true); $xml->addFullTag("pk",$pk,true); $xml->addFullTag("multilanguage",($multilanguage) ? "true" : "false",true); $xml->addFullTag("column",$column,true); $xml->addFullTag("type",$attributes["attributes"][0]["value"],true); $xml->startTag("thumbs"); $thumbs = unserialize(str_replace("||#||",'"',$attributes["attributes"][1]["value"])); if (!empty($thumbs)) { for($i=0 ; $i<$count=count($thumbs) ; $i++) { $xml->startTag("thumb"); $xml->addFullTag("width",$thumbs[$i]["width"],true); $xml->addFullTag("height",$thumbs[$i]["height"],true); $xml->addFullTag("suffix",$thumbs[$i]["suffix"],true); $xml->endTag("thumb"); } } $xml->endTag("thumbs"); $xml->addFullTag("multilanguage",($attributes["attributes"][2]["value"] == "true") ? "true" : "false",true); $xml->addFullTag("hash",$attributes["attributes"][3]["value"],true); $xml->addFullTag("rules",$attributes["attributes"][4]["value"],true); $xml->endTag("model"); $plugin = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configPlugins")."/plugins.xml")); $pluginImg = array_shift($plugin->getTags("//plugins/plugin[@code='image']")); $xml->addFullTag("plugin_img",empty($pluginImg) ? 'false' : 'true',true); $xml->addFullTag("plugin_url",$this->_generic->getFullPath("SLS_Bo","Plugins"),true); } else { $xml->addFullTag("error","Sorry this table doesn't exist anymore",true); } $this->saveXML($xml); }
public function action() { $user = $this->hasAuthorative(); $sql = SLS_Sql::getInstance(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $errors = array(); // Get the table name $table = SLS_String::substrAfterFirstDelimiter($this->_http->getParam("name"),"_"); $db = SLS_String::substrBeforeFirstDelimiter($this->_http->getParam("name"),"_"); $class = ucfirst($db)."_".SLS_String::tableToClass($table); $file = ucfirst($db).".".SLS_String::tableToClass($table); // If current db is not this one if ($sql->getCurrentDb() != $db) $sql->changeDb($db); if ($sql->tableExists($table)) { if ($this->_http->getParam("reload") == "true") { $columnWanted = $this->_http->getParam("column"); $typeWanted = $this->_http->getParam("type"); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml"); $xmlFk = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml"); $xmlType = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/filters.xml"); $xmlFilter = new SLS_XMLToolbox($pathsHandle); $result = $xmlType->getTags("//sls_configs/entry[@table='".$db."_".$table."' and @column='".$columnWanted."']"); // If an entry already exists in the XML, delete this record if (!empty($result)) { $xmlTmp = $xmlType->deleteTags("//sls_configs/entry[@table='".$db."_".$table."' and @column='".$columnWanted."']"); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlTmp); $xmlType->refresh(); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml"); $xmlType = new SLS_XMLToolbox($pathsHandle); } // If file type, check possible thumbs if ($typeWanted == "file") { $typeFile = $this->_http->getParam("file"); $file_thumb = $this->_http->getParam("file_thumb"); $multilang = $this->_http->getParam("multilanguage"); $thumbs = array(); $typeWanted = $typeWanted."_".$typeFile; if ($typeFile == "img" && !empty($file_thumb)) { for($i=0 ; $i<10 ; $i++) { $width = $this->_http->getParam("width".$i); $height = $this->_http->getParam("height".$i); $suffix = $this->_http->getParam("suffix".$i); if (!empty($suffix) && (!empty($width) || !empty($height))) array_push($thumbs,array('width' => $width, 'height' => $height, 'suffix' => $suffix)); } } $rules = "*|*|*"; if ($typeFile == "img") { $settings = $this->_http->getParam("imgSettings"); $ratio = str_replace(",",".",$settings["ratio"]); $minWidth = str_replace(",",".",$settings["min-width"]); $minHeight = str_replace(",",".",$settings["min-height"]); $ratio = (!is_numeric($ratio) || (is_numeric($ratio) && $ratio <= 0)) ? "*" : round($ratio,2); $minWidth = (!is_numeric($minWidth) || (is_numeric($minWidth) && $minWidth < 0)) ? "*" : round($minWidth,0); $minHeight = (!is_numeric($minHeight) || (is_numeric($minHeight) && $minHeight < 0)) ? "*" : round($minHeight,0); $rules = $ratio."|".$minWidth."|".$minHeight; } // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" rules="'.$rules.'" thumbs="'.str_replace('"','||#||',serialize($thumbs)).'" multilanguage="'.$multilang.'" type="'.$typeWanted.'" />'; $xmlType->appendXMLNode("//sls_configs",$xmlNode); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlType->getXML()); } else if ($typeWanted == "ip") { $type = $this->_http->getParam("ip"); // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" type="'.$typeWanted."_".$type.'" />'; $xmlType->appendXMLNode("//sls_configs",$xmlNode); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlType->getXML()); } else if ($typeWanted == "complexity") { $complexity = $this->_http->getParam("complexity"); $complexityMin = $this->_http->getParam("complexity_min"); $complexity = (empty($complexity)) ? array() : $complexity; if (!empty($complexityMin) && is_numeric($complexityMin) && $complexityMin >= 0) $complexity[] = "min".$complexityMin; $complexity = implode("|",$complexity); // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" rules="'.$complexity.'" type="complexity" />'; $xmlType->appendXMLNode("//sls_configs",$xmlNode); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlType->getXML()); } else if ($typeWanted == "num") { $type = $this->_http->getParam("num"); // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" type="'.$typeWanted."_".$type.'" />'; $xmlType->appendXMLNode("//sls_configs",$xmlNode); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlType->getXML()); } // Else, it's email, url, color, uniqid, position, address else { // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" type="'.$typeWanted.'" />'; $xmlType->appendXMLNode("//sls_configs",$xmlNode); $xmlType->saveXML($this->_generic->getPathConfig("configSls")."/types.xml",$xmlType->getXML()); } // Disable UserBo quick-edit feature on this column if ($typeWanted == "file") { $xmlBo = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bo.xml")); $boPath = "//sls_configs/entry[@type='table' and @name='".strtolower($db."_".$table)."']/columns/column[@name='".$columnWanted."']"; $boExists = $xmlBo->getTag($boPath."/@allowEdit"); if (empty($boExists)) $boPath = "//sls_configs/entry/entry[@type='table' and @name='".strtolower($db."_".$table)."']/columns/column[@name='".$columnWanted."']"; $boExists = $xmlBo->getTag($boPath."/@allowEdit"); if (!empty($boExists)) { $xmlBo->setTagAttributes($boPath,array("allowEdit" => "false")); $xmlBo->saveXML($this->_generic->getPathConfig("configSls")."/bo.xml",$xmlBo->getXML()); $xmlBo->refresh(); } } // Update model $this->_generic->goDirectTo("SLS_Bo","UpdateModel",array(array("key"=>"name","value"=>$this->_http->getParam("name")))); } // Get generic object $this->_generic->useModel($table,$db,"user"); $object = new $class(); // Get object's infos $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml"); $xmlFk = new SLS_XMLToolbox($pathsHandle); $columnsP = $object->getParams(); $pk = $object->getPrimaryKey(); $multilanguage = $object->isMultilanguage(); $xml->startTag("model"); $xml->addFullTag("table",$table,true); $xml->addFullTag("db",$db,true); $xml->addFullTag("class",$class,true); $xml->addFullTag("pk",$pk,true); $xml->addFullTag("multilanguage",($multilanguage) ? "true" : "false",true); $xml->startTag("columns"); foreach($columnsP as $column => $value) { $res = $xmlFk->getTags("//sls_configs/entry[@tableFk='".$db."_".$table."' and @columnFk='".$column."']/@tablePk"); if ($object->getPrimaryKey() != $column && $column != "pk_lang" && empty($res)) $xml->addFullTag("column",$column,true); } $xml->endTag("columns"); $xml->endTag("model"); $plugin = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configPlugins")."/plugins.xml")); $pluginImg = array_shift($plugin->getTags("//plugins/plugin[@code='image']")); $xml->addFullTag("plugin_img",empty($pluginImg) ? 'false' : 'true',true); $xml->addFullTag("plugin_url",$this->_generic->getFullPath("SLS_Bo","Plugins"),true); } else { $xml->addFullTag("error","Sorry this table doesn't exist anymore",true); } $this->saveXML($xml); }
public function action() { $user = $this->hasAuthorative(); // Objects $xmlFk = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml")); $xmlBearer = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bearers.xml")); $xml = $this->getXML(); $tables = array(); $xml = $this->makeMenu($xml); // Get the table & class name $table = SLS_String::substrAfterFirstDelimiter($this->_http->getParam("name"),"_"); $db = SLS_String::substrBeforeFirstDelimiter($this->_http->getParam("name"),"_"); $class = ucfirst($db)."_".SLS_String::tableToClass($table); $result = array_shift($xmlBearer->getTagsAttributes("//sls_configs/entry[@tableBearer='".$class."']",array("table1"))); $res = $xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".strtolower($class)."']",array("tablePk","columnFk")); if (!empty($result) || count($res) != "2") $this->_generic->forward("SLS_Bo","EditModel",array(array("key"=>"name","value"=>$this->_http->getParam("name")))); else { $xml->startTag("fks"); for($i=0 ; $i<$count=count($res) ; $i++) { $className = ucfirst($res[$i]["attributes"][0]["value"]); $this->_generic->useModel(SLS_String::substrAfterFirstDelimiter($className,"_"),SLS_String::substrBeforeFirstDelimiter($className,"_"),"user"); $object = new $className(); array_push($tables,$className); $xml->startTag("fk"); $xml->addFullTag("class",$className,"true"); $xml->addFullTag("table",$object->getTable(),"true"); $xml->endTag("fk"); } $xml->endTag("fks"); } $xml->startTag("model"); $xml->addFullTag("table",$table,true); $xml->addFullTag("class",$class,true); $xml->endTag("model"); if ($this->_http->getParam("reload") == "true") { $target_table = SLS_String::trimSlashesFromString($this->_http->getParam("target_table")); $tableBearer = $class; $table2 = ""; foreach($tables as $table) if ($table != $target_table) $table2 = $table; $xmlNode = '<entry tableBearer="'.$tableBearer.'" table1="'.$target_table.'" table2="'.$table2.'" />'; $xmlBearer->appendXMLNode("//sls_configs",$xmlNode); $xmlBearer->saveXML($this->_generic->getPathConfig("configSls")."/bearers.xml",$xmlBearer->getXML()); $this->_generic->forward("SLS_Bo","EditModel",array(array("key"=>"name","value"=>$this->_http->getParam("name")))); } $this->saveXML($xml); }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $db = SLS_Sql::getInstance(); // Check if we need to create sls_graph_* tables if (!$db->tableExists("sls_graph") || !file_exists($this->_generic->getPathConfig("coreSlsModels").ucfirst($this->defaultDb)."Sls_graph.model.php")) { // Create tables $queries = array($this->defaultDb.".sls_graph" => "CREATE TABLE IF NOT EXISTS `sls_graph` (`sls_graph_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Id', `sls_graph_title` varchar(255) NOT NULL COMMENT 'Title', `sls_graph_type` enum('pie','bar','pivot','list') NOT NULL COMMENT 'Type', `sls_graph_visible` enum('yes','no') NOT NULL DEFAULT 'yes' COMMENT 'Visible?', `sls_graph_date_add` datetime NOT NULL COMMENT 'Date add', `sls_graph_query_id` bigint(20) NOT NULL COMMENT 'Query', PRIMARY KEY (`sls_graph_id`), KEY `sls_graph_visible` (`sls_graph_visible`), KEY `sls_graph_query_id` (`sls_graph_query_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Reporting - Graph' AUTO_INCREMENT=1;", $this->defaultDb.".sls_graph_query" => "CREATE TABLE IF NOT EXISTS `sls_graph_query` (`sls_graph_query_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Id', `sls_graph_query_db_alias` varchar(255) NOT NULL COMMENT 'Db alias', `sls_graph_query_table` varchar(255) NOT NULL COMMENT 'Table name', `sls_graph_query_table_alias` varchar(255) NOT NULL COMMENT 'Table alias', `sls_graph_query_date_add` datetime NOT NULL COMMENT 'Date add', PRIMARY KEY (`sls_graph_query_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Reporting - Graph - Query' AUTO_INCREMENT=1;", $this->defaultDb.".sls_graph_query_column" => "CREATE TABLE IF NOT EXISTS `sls_graph_query_column` (`sls_graph_query_column_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Id', `sls_graph_query_column_table` varchar(255) NOT NULL COMMENT 'Table name', `sls_graph_query_column_table_alias` varchar(255) NOT NULL COMMENT 'Table alias', `sls_graph_query_column_name` varchar(255) DEFAULT NULL COMMENT 'Column name', `sls_graph_query_column_alias` varchar(255) DEFAULT NULL COMMENT 'Column alias', `sls_graph_query_column_aggregation` enum('sum','avg','count') DEFAULT NULL COMMENT 'Aggregation function', `sls_graph_query_column_date_add` datetime NOT NULL COMMENT 'Date add', `sls_graph_query_id` bigint(20) NOT NULL COMMENT 'Query', PRIMARY KEY (`sls_graph_query_column_id`), KEY `sls_graph_query_id` (`sls_graph_query_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Reporting - Graph - Column' AUTO_INCREMENT=1;", $this->defaultDb.".sls_graph_query_group" => "CREATE TABLE IF NOT EXISTS `sls_graph_query_group` (`sls_graph_query_group_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Id', `sls_graph_query_group_table` varchar(255) NOT NULL COMMENT 'Table name', `sls_graph_query_group_table_alias` varchar(255) NOT NULL COMMENT 'Table alias', `sls_graph_query_group_column` varchar(255) NOT NULL COMMENT 'Column', `sls_graph_query_group_date_add` datetime NOT NULL COMMENT 'Date add', `sls_graph_query_id` bigint(20) NOT NULL COMMENT 'Query', PRIMARY KEY (`sls_graph_query_group_id`), KEY `sls_graph_query_id` (`sls_graph_query_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Reporting - Graph - Group' AUTO_INCREMENT=1;", $this->defaultDb.".sls_graph_query_join" => "CREATE TABLE IF NOT EXISTS `sls_graph_query_join` (`sls_graph_query_join_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Id', `sls_graph_query_join_table_source` varchar(255) NOT NULL COMMENT 'Table name source', `sls_graph_query_join_table_alias_source` varchar(255) NOT NULL COMMENT 'Table alias source', `sls_graph_query_join_table_target` varchar(255) NOT NULL COMMENT 'Table name target', `sls_graph_query_join_table_alias_target` varchar(255) NOT NULL COMMENT 'Table alias target', `sls_graph_query_join_mode` enum('inner','left','right') NOT NULL COMMENT 'Join mode', `sls_graph_query_join_column_source` varchar(255) NOT NULL COMMENT 'Column PK', `sls_graph_query_join_column_target` varchar(255) NOT NULL COMMENT 'Column FK', `sls_graph_query_join_date_add` datetime NOT NULL COMMENT 'Date add', `sls_graph_query_id` bigint(20) NOT NULL COMMENT 'Query', PRIMARY KEY (`sls_graph_query_join_id`), KEY `sls_graph_query_id` (`sls_graph_query_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Reporting - Graph - Join' AUTO_INCREMENT=1;", $this->defaultDb.".sls_graph_query_limit" => "CREATE TABLE IF NOT EXISTS `sls_graph_query_limit` (`sls_graph_query_limit_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Id', `sls_graph_query_limit_start` int(11) NOT NULL COMMENT 'Start', `sls_graph_query_limit_length` int(11) NOT NULL COMMENT 'Length', `sls_graph_query_limit_date_add` datetime NOT NULL COMMENT 'Date add', `sls_graph_query_id` bigint(20) NOT NULL COMMENT 'Query', PRIMARY KEY (`sls_graph_query_limit_id`), KEY `sls_graph_query_id` (`sls_graph_query_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Reporting - Graph - Limit' AUTO_INCREMENT=1;", $this->defaultDb.".sls_graph_query_order" => "CREATE TABLE IF NOT EXISTS `sls_graph_query_order` (`sls_graph_query_order_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Id', `sls_graph_query_order_table` varchar(255) NOT NULL COMMENT 'Table name', `sls_graph_query_order_table_alias` varchar(255) NOT NULL COMMENT 'Table alias', `sls_graph_query_order_column` varchar(255) NOT NULL COMMENT 'Column', `sls_graph_query_order_way` enum('asc','desc') NOT NULL COMMENT 'Order', `sls_graph_query_order_date_add` datetime NOT NULL COMMENT 'Date add', `sls_graph_query_id` bigint(20) NOT NULL COMMENT 'Query', PRIMARY KEY (`sls_graph_query_order_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Reporting - Graph - Order' AUTO_INCREMENT=1;", $this->defaultDb.".sls_graph_query_where" => "CREATE TABLE IF NOT EXISTS `sls_graph_query_where` (`sls_graph_query_where_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Id', `sls_graph_query_where_type` enum('group','clause') NOT NULL COMMENT 'Type', `sls_graph_query_where_condition` enum('and','or') DEFAULT NULL COMMENT 'Condition', `sls_graph_query_where_table` varchar(255) DEFAULT NULL COMMENT 'Table name', `sls_graph_query_where_table_alias` varchar(255) DEFAULT NULL COMMENT 'Table alias', `sls_graph_query_where_column` varchar(255) DEFAULT NULL COMMENT 'Column', `sls_graph_query_where_operator` enum('like','notlike','startwith','endwith','equal','notequal','in','notin','lt','lte','gt','gte','null','notnull') DEFAULT NULL COMMENT 'Operator', `sls_graph_query_where_value` varchar(255) DEFAULT NULL COMMENT 'Value', `sls_graph_query_where_date_add` datetime NOT NULL COMMENT 'Date add', `sls_graph_query_id` bigint(20) NOT NULL COMMENT 'Query', `parent_sls_graph_query_where_id` bigint(20) DEFAULT '0' COMMENT 'Where Parent', PRIMARY KEY (`sls_graph_query_where_id`), KEY `sls_graph_query_id` (`sls_graph_query_id`), KEY `parent_sls_graph_query_where_id` (`parent_sls_graph_query_where_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Reporting - Graph - Where' AUTO_INCREMENT=1;"); foreach($queries as $table => $query) $db->exec($query); // Create models $url = $this->_generic->getFullPath("SLS_Bo", "GenerateModels", array("reload" => "true", "token" => sha1(substr($this->_generic->getSiteConfig("privateKey"), 0, 3).substr($this->_generic->getSiteConfig("privateKey"), strlen($this->_generic->getSiteConfig("privateKey"))-3))), false); $tables = array_keys($queries); foreach($tables as $table) $url .= "/tables[]/".$table; $url .= ".".$this->_generic->getSiteConfig("defaultExtension"); file_get_contents($url); // Move to sls side foreach(array_keys($queries) as $model) { $modelDb = SLS_String::substrBeforeFirstDelimiter($model,"."); $modelTable = SLS_String::substrAfterFirstDelimiter($model,"."); $modelClass = ucfirst($modelDb).".".SLS_String::tableToClass($modelTable); // Move object if (file_exists($this->_generic->getPathConfig("models").$modelClass.".model.php")) rename($this->_generic->getPathConfig("models").$modelClass.".model.php",$this->_generic->getPathConfig("coreSlsModels").$modelClass.".model.php"); // Move sql if (file_exists($this->_generic->getPathConfig("modelsSql").$modelClass.".sql.php")) rename($this->_generic->getPathConfig("modelsSql").$modelClass.".sql.php",$this->_generic->getPathConfig("coreSlsModelsSql").$modelClass.".sql.php"); } } // Objects $this->_generic->useModel('Sls_graph',$this->defaultDb,'sls'); $className = ucfirst($this->defaultDb)."_Sls_graph"; $graph = new $className(); $graphs = $graph->searchModels("sls_graph",array(),array(),array(),array("sls_graph_date_add" => "desc")); $xml = $graph->pdoToXML($xml,$graphs); // Actions $this->_generic->registerLink('Add', 'SLS_Bo', 'ReportingBoAdd'); $xml->addFullTag("url_view",$this->_generic->getFullPath("SLS_Bo","ReportingBoView",array(),false)); $xml->addFullTag("url_delete",$this->_generic->getFullPath("SLS_Bo","ReportingBoDelete",array(),false)); $xml->addFullTag("url_edit",$this->_generic->getFullPath("SLS_Bo","ReportingBoEdit",array(),false)); $xml->addFullTag("url_status",$this->_generic->getFullPath("SLS_Bo","ReportingBoStatus",array(),false)); $this->saveXML($xml); }
public function isUpToDate($table,$db) { $contentM = $this->getModelSource($table,$db); $currentContent = file_get_contents($this->_generic->getPathConfig("models").ucfirst($db).".".SLS_String::tableToClass($table).".model.php"); return ($currentContent == $contentM) ? true : false; }
public function action() { set_time_limit(0); $user = $this->hasAuthorative(); $errors = array(); $sql = SLS_Sql::getInstance(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); // Get all models $models = array(); $handle = opendir($this->_generic->getPathConfig("models")); while (false !== ($file = readdir($handle))) { if (!is_dir($this->_generic->getPathConfig("models")."/".$file) && substr($file, 0, 1) != ".") { $modelExploded = explode(".",$file); array_push($models,strtolower($modelExploded[0]).".".$modelExploded[1]); } } // If reload if ($this->_http->getParam("reload")=="true") { // Get the tables dude wants to generate $tablesG = ($this->_http->getParam("tables")=="") ? array() : $this->_http->getParam("tables"); // Foreach tables, generate model foreach($tablesG as $tableG) { $db = Sls_String::substrBeforeFirstDelimiter($tableG,"."); $table = Sls_String::substrAfterFirstDelimiter($tableG,"."); // Change db if it's required if ($sql->getCurrentDb() != $db) $sql->changeDb($db); // If table exists if ($sql->tableExists($table)) { $columns = $sql->showColumns($table); $tableName = $table; $currentTable = array("table"=>$db.".".$tableName,"errors"=>array()); $fieldsOk = true; $className = ucfirst($db)."_".SLS_String::tableToClass($tableName); $fileName = ucfirst($db).".".SLS_String::tableToClass($table).".model.php"; for($i=0 ; $i<$count=count($columns) ; $i++) { // Check forbidden chars if (SLS_String::removePhpChars($columns[$i]->Field) != $columns[$i]->Field) { $error = array("column"=>$columns[$i]->Field,"column_clean"=>SLS_String::removePhpChars($columns[$i]->Field)); array_push($currentTable["errors"],$error); $fieldsOk = false; } } // If all ok with special chars for the current model if ($fieldsOk) { // Check real fks $create = array_shift($sql->select("SHOW CREATE TABLE `".$table."`")); $queries = array_map("trim",explode("\n",$create->{Create." ".Table})); foreach($queries as $query) { if (SLS_String::startsWith($query,"CONSTRAINT")) { $tableFk = strtolower($db."_".$tableName); $columnFk = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($query,"FOREIGN KEY (`"),"`)"); $tablePk = $db."_".SLS_String::tableToClass(SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($query,"REFERENCES `"),"`")); $onDelete = strtolower(SLS_String::stringToUrl(trim(SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($query,"ON DELETE"),"ON UPDATE")),"_")); $labelPk = ""; $columns = $sql->showColumns(SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($query,"REFERENCES `"),"`")); for($i=0 ; $i<$count=count($columns) ; $i++) { if ($columns[$i]->Key != "PRI" && $columns[$i]->Field != "pk_lang" && SLS_String::contains($columns[$i]->Type,"char")) { $labelPk = $columns[$i]->Field; break; } } if (empty($labelPk)) $labelPk = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($query,"REFERENCES `".SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($query,"REFERENCES `"),"`")."` (`"),"`)"); $xmlNode = '<entry tableFk="'.$tableFk.'" columnFk="'.$columnFk.'" multilanguage="false" ondelete="'.$onDelete.'" labelPk="'.$labelPk.'" tablePk="'.$tablePk.'" />'; $xmlFk = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml")); $result = $xmlFk->getTags("//sls_configs/entry[@tableFk='".$tableFk."' and @columnFk='".$columnFk."' and @tablePk='".$tablePk."']"); if (!empty($result)) { $xmlTmp = $xmlFk->deleteTags("//sls_configs/entry[@tableFk='".$tableFk."' and @columnFk='".$columnFk."' and @tablePk='".$tablePk."']"); $xmlFk->saveXML($this->_generic->getPathConfig("configSls")."/fks.xml",$xmlTmp); $xmlFk = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml")); } $xmlFk->appendXMLNode("//sls_configs",$xmlNode); $xmlFk->saveXML($this->_generic->getPathConfig("configSls")."/fks.xml",$xmlFk->getXML()); } } // Generate Model $contentM = $this->getModelSource($tableName,$db); $status = touch($this->_generic->getPathConfig("models")."/".$fileName); if ($status) file_put_contents($this->_generic->getPathConfig("models").$fileName,$contentM); // Create SQL $fileNameS = ucfirst($db).".".SLS_String::tableToClass($table).".sql.php"; $contentS = '<?php'."\n". '/**'."\n". '* Object '.$className.'Sql'."\n". '* @author SillySmart'."\n". '* @copyright SillySmart'."\n". '* @package Mvc.Models.Objects'."\n". '* @see Sls.Models.Core.SLS_FrontModel'."\n". '* @since 1.0'."\n". '*/'."\n". 'class '.$className.'Sql extends SLS_FrontModelSql'."\n". '{'."\n". ''."\n". '}'."\n". '?>'; if ($status) $status2 = touch($this->_generic->getPathConfig("modelsSql")."/".$fileNameS); if ($status2) file_put_contents($this->_generic->getPathConfig("modelsSql")."/".$fileNameS,$contentS); } else array_push($errors,$currentTable); } } // If no errors if (empty($errors)) { $controllers = $this->_generic->getTranslatedController("SLS_Bo","Models"); $this->_generic->redirect($controllers['controller']."/".$controllers['scontroller']); } else { // Get all models $models = array(); $handle = opendir($this->_generic->getPathConfig("models")); while (false !== ($file = readdir($handle))) if (!is_dir($this->_generic->getPathConfig("models")."/".$file) && substr($file, 0, 1) != ".") { $modelExploded = explode(".",$file); array_push($models,strtolower($modelExploded[0]).".".$modelExploded[1]); } // Form errors $xml->startTag("errors"); for($i=0 ; $i<$count=count($errors) ; $i++) { $xml->startTag("error"); $xml->addFullTag("table",SLS_String::substrAfterFirstDelimiter($errors[$i]["table"],"."),true); $xml->addFullTag("db",SLS_String::substrBeforeFirstDelimiter($errors[$i]["table"],"."),true); $xml->startTag("columns"); for($j=0 ; $j<$count2=count($errors[$i]["errors"]) ; $j++) { $xml->startTag("column"); $xml->addFullTag("old",$errors[$i]["errors"][$j]["column"],true); $xml->addFullTag("new",$errors[$i]["errors"][$j]["column_clean"],true); $xml->endTag("column"); } $xml->endTag("columns"); $xml->endTag("error"); } $xml->endTag("errors"); } } // Foreach db $dbs = $sql->getDbs(); $allDbs = array(); foreach($dbs as $db) { $allDbs[$db] = array(); // Change db $sql->changeDb($db); // Get all tables $tables = $sql->showTables(); for($i=0 ; $i<$count=count($tables) ; $i++) { $allDbs[$db][$tables[$i]->Name] = array("name" => $tables[$i]->Name, "existed" => (in_array($db.".".SLS_String::tableToClass($tables[$i]->Name),$models)) ? 'true' : 'false'); } } asort($allDbs,SORT_REGULAR); uksort($allDbs,array($this, 'unshiftDefaultDb')); $xml->startTag("dbs"); foreach($allDbs as $key => $db) { asort($db,SORT_REGULAR); $xml->startTag("db"); $xml->addFullTag("name",$key,true); $xml->startTag("tables"); foreach($db as $tableCur) { if (!SLS_String::startsWith(strtolower($tableCur["name"]),"sls_graph")) { $xml->startTag("table"); $xml->addFullTag("name",$tableCur["name"]); $xml->addFullTag("existed",$tableCur["existed"]); $xml->endTag("table"); } } $xml->endTag("tables"); $xml->endTag("db"); } $xml->endTag("dbs"); $this->saveXML($xml); }
public function action() { // Objects $xml = $this->getXML(); $user = $this->hasAuthorative(); $xml = $this->makeMenu($xml); $this->_generic->registerLink('Generate', 'SLS_Bo', 'GenerateBo'); $this->_generic->registerLink('Translation', 'SLS_Bo', 'GenerateBoAction', array("Actions" => "Boi18n")); $this->_generic->registerLink('FileUpload', 'SLS_Bo', 'GenerateBoAction', array("Actions" => "BoFileUpload")); $this->_generic->registerLink('ManageAdmin', 'SLS_Bo', 'GenerateBoAction', array("Actions" => "BoUserList|BoUserAdd|BoUserDelete|BoUserModify|BoUserStatus")); $this->_generic->registerLink('ProjectSettings', 'SLS_Bo', 'GenerateBoAction', array("Actions" => "BoProjectSettings")); $this->_generic->registerLink('Manage_Rights', 'SLS_Bo', 'ManageRights'); $this->_generic->registerLink('Manage_BoMenu', 'SLS_Bo', 'BoMenu'); $xml->addFullTag("delete",$this->_generic->getFullPath("SLS_Bo","DeleteBo",array(),false)); $xml->addFullTag("edit",$this->_generic->getFullPath("SLS_Bo","EditBo",array(),false)); $this->_xmlBo = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bo.xml")); $bos = array(); // Search for user back-office $controllersXML = $this->_generic->getControllersXML(); $controller = array_shift($controllersXML->getTags("//controllers/controller[@isBo='true']/@name")); if (!empty($controller)) { $models = $this->getAllModels(); for($i=0 ; $i<$count=count($models) ; $i++) { $model = SLS_String::substrAfterFirstDelimiter($models[$i],"."); $db = SLS_String::substrBeforeFirstDelimiter($models[$i],"."); if ($this->boActionExist($model,$db)) { $this->_generic->useModel($model,$db,"user"); $class = ucfirst($db)."_".SLS_String::tableToClass($model); $object = new $class(); $bos[$class] = array("db" => $db, "className" => $class, "tableName" => $object->getTable(), "nb_actions" => count($this->getActionsBo($model,$db))); } } } asort($bos,SORT_REGULAR); $xml->startTag("bos"); foreach($bos as $bo) { $categoryExists = $this->_xmlBo->getTag("//sls_configs/entry[@type='category' and entry[@type='table' and @name='".strtolower($bo["db"]."_".$bo["tableName"])."']]/@name"); $xml->startTag("bo"); $xml->addFullTag("db",strtolower($bo["db"]),true); $xml->addFullTag("class",$bo["className"],true); $xml->addFullTag("table",$bo["tableName"],true); $xml->addFullTag("category",(empty($categoryExists)) ? "X" : $categoryExists,true); $xml->addFullTag("nb_actions",$bo["nb_actions"],true); $xml->endTag("bo"); } $xml->endTag("bos"); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/rights.xml"); $xmlRights = new SLS_XMLToolbox($pathsHandle); $result = $xmlRights->getTags("//sls_configs/entry"); $xml->addFullTag("admins_exist",(!empty($result)) ? "true" : "false",true); $xml->startTag("actions"); $action = array_shift($controllersXML->getTags("//controllers/controller[@isBo='true']/scontrollers/scontroller[@name='Boi18n']")); $action2 = array_shift($controllersXML->getTags("//controllers/controller[@isBo='true']/scontrollers/scontroller[@name='BoFileUpload']")); $action3 = array_shift($controllersXML->getTags("//controllers/controller[@isBo='true']/scontrollers/scontroller[@name='BoUserList']")); $action4 = array_shift($controllersXML->getTags("//controllers/controller[@isBo='true']/scontrollers/scontroller[@name='BoProjectSettings']")); $xml->startTag("action"); $xml->addFullTag("name","Translation",true); $xml->addFullTag("icon","boi18n16.png",true); $xml->addFullTag("existed",(!empty($action)) ? "true" : "false",true); $xml->endTag("action"); $xml->startTag("action"); $xml->addFullTag("name","FileUpload",true); $xml->addFullTag("icon","boupload16.png",true); $xml->addFullTag("existed",(!empty($action2)) ? "true" : "false",true); $xml->endTag("action"); $xml->startTag("action"); $xml->addFullTag("name","ManageAdmin",true); $xml->addFullTag("icon","boadmin16.png",true); $xml->addFullTag("existed",(!empty($action3)) ? "true" : "false",true); $xml->endTag("action"); $xml->startTag("action"); $xml->addFullTag("name","ProjectSettings",true); $xml->addFullTag("icon","bosettings16.png",true); $xml->addFullTag("existed",(!empty($action4)) ? "true" : "false",true); $xml->endTag("action"); $xml->endTag("actions"); if (SLS_Sql::getInstance()->tableExists("sls_graph")) { $this->_generic->useModel("Sls_graph",$this->defaultDb,"sls"); $className = ucfirst($this->defaultDb)."_Sls_graph"; $slsGraph = new $className; $nbGraph = $slsGraph->countModels("sls_graph"); } else $nbGraph = 0; $xml->addFullTag("nb_reporting",$nbGraph,true); $xml->addFullTag("url_reporting",$this->_generic->getFullPath("SLS_Bo","ReportingBo"),true); $this->saveXML($xml); }
public function getXML() { # Objects $className = ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table); $this->_generic->useModel(SLS_String::tableToClass($this->_table),ucfirst(strtolower($this->_db_alias)),"user"); $this->_object = new $className(); $this->_table = $this->_object->getTable(); $this->_langsValues = array(); if ($this->_object->isMultilanguage()) { $this->_object->setModelLanguage($this->_lang->getLang()); foreach($this->_langs as $lang) $this->_langsValues[$lang] = array(); } else $this->_langsValues[$this->_defaultLang] = array(); $this->_boPath = "//sls_configs/entry[@type='table' and @name='".strtolower($className)."']"; $boExists = $this->_xmlBo->getTag($this->_boPath); if (empty($boExists)) $this->_boPath = "//sls_configs/entry/entry[@type='table' and @name='".strtolower($className)."']"; $this->_db->changeDb($this->_db_alias); $redirects = array("list","add","edit"); # /Objects # Model comment $this->_tableComment = $this->_object->getTableComment($this->_table,$this->_db_alias); if (SLS_String::startsWith($this->_tableComment,"sls:lang:")) { $key = strtoupper(SLS_String::substrAfterFirstDelimiter($this->_tableComment,"sls:lang:")); $this->_tableComment = (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key])) ? (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) ? $this->_table : $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) : $GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key]; } if (empty($this->_tableComment)) $this->_tableComment = $this->_table; # /Model comment # Params $this->_object_id = $this->_http->getParam("id"); # /Params # Columns definitions $this->_columns = array(); $this->_bearers = array(); $this->_children = array(); // Model exists ? if ($this->_object->getModel($this->_object_id) === false) $this->_generic->forward($this->_boController,"List".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)); // Columns $this->_columns = $this->getTableColumns($this->_db_alias,$this->_table,$this->_boPath,"",true); // Existing model $modelDatas = $this->_object->searchModels($this->_table,array(),array(0=>array("column"=>$this->_object->getPrimaryKey(),"value"=>$this->_object_id,"mode"=>"equal")),array(),array($this->_object->getPrimaryKey()=>"ASC")); for($i=0 ; $i<$count=count($modelDatas) ; $i++) { $lang = ($this->_object->isMultilanguage()) ? $modelDatas[$i]->pk_lang : $this->_defaultLang; foreach($modelDatas[$i] as $modelKey => $modelValue) { // If pk_lang if (in_array($modelKey,array("pk_lang"))) continue; // Files if (!empty($modelValue) && $this->_columns[$modelKey]["html_type"] == 'input_file') $modelValue = SLS_String::getUrlFile($modelValue); // MySQL Type Set if (!empty($modelValue) && $this->_columns[$modelKey]["html_type"] == 'input_checkbox') $modelValue = explode(",",$modelValue); // Fk if (!empty($modelValue) && $this->_columns[$modelKey]["html_type"] == 'input_ac') { $fkAlias = ucfirst(strtolower(SLS_String::substrBeforeFirstDelimiter($this->_columns[$modelKey]["ac_fk"],"_"))); $fkModel = SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($this->_columns[$modelKey]["ac_fk"],"_")); $fkClass = $fkAlias."_".$fkModel; $this->_generic->useModel($fkModel,$fkAlias,"user"); $fkObject = new $fkClass(); if ($fkObject->getModel($modelValue) == true) { $replacements = $fkObject->getParams(); $fkLabel = $this->_columns[$modelKey]["ac_pattern"]; foreach($replacements as $keyFk => $valueFk) $fkLabel = str_replace($keyFk, $valueFk, $fkLabel); $this->_columns[$modelKey]["values"][$lang][] = array("label" => $fkLabel, "value" => $modelValue); } else $this->_columns[$modelKey]["values"][$lang][] = ""; } else { if (!empty($modelValue) && $this->_columns[$modelKey]["html_type"] == 'input_checkbox') $this->_columns[$modelKey]["values"][$lang] = $modelValue; else { if ($this->_columns[$modelKey]["html_type"] == 'input_password') $this->_columns[$modelKey]["values"][$lang][] = ""; else $this->_columns[$modelKey]["values"][$lang][] = $modelValue; } } } } // Bearers $bearers = $this->_xmlBearer->getTagsAttributes("//sls_configs/entry[@table1='".$className."']",array("tableBearer","table2")); if (!empty($bearers)) { for($i=0 ; $i<$count=count($bearers) ; $i++) { $bearerDb = ucfirst(SLS_String::substrBeforeFirstDelimiter($bearers[$i]["attributes"][0]["value"],"_")); $bearerTable = SLS_String::substrAfterFirstDelimiter($bearers[$i]["attributes"][0]["value"],"_"); $bearerClass = $bearers[$i]["attributes"][0]["value"]; $bearerTargetDb = ucfirst(SLS_String::substrBeforeFirstDelimiter($bearers[$i]["attributes"][1]["value"],"_")); $bearerTargetUse = SLS_String::substrAfterFirstDelimiter($bearers[$i]["attributes"][1]["value"],"_"); $bearerTargetClass = $bearers[$i]["attributes"][1]["value"]; $this->_generic->useModel($bearerTable,$bearerDb,"user"); $this->_generic->useModel($bearerTargetUse,$bearerTargetDb,"user"); $bearerObject = new $bearerClass(); $bearerTargetObject = new $bearerTargetClass(); $bearerTargetPk = $bearerTargetObject->getPrimaryKey(); $resultFk = array_shift($this->_xmlFk->getTagsAttribute("//sls_configs/entry[@tableFk='".strtolower($bearerClass)."' and @columnFk='".$bearerTargetObject->getPrimaryKey()."' and @tablePk = '".strtolower($bearerTargetDb)."_".$bearerTargetUse."']","labelPk")); $labelFk = (empty($resultFk)) ? $bearerTargetObject->getPrimaryKey() : $resultFk["attribute"]; $labelFkReal = $labelFk; $str = $labelFk; $values = array(); $masks = array(); foreach($bearerTargetObject->getParams() as $key => $value) array_push($masks,$key); foreach($bearerTargetObject->getParams() as $key => $value) if (SLS_String::contains($labelFk,$key)) $labelFk = str_replace($key,$bearerTargetObject->getColumnComment($key),$labelFk); $this->_bearers[$bearerObject->getTable()] = array("table" => $bearerObject->getTable(), "name" => $bearerTargetPk, "label" => $bearerObject->getTableComment($bearerObject->getTable(),$bearerDb), "multilanguage" => "false", "native_type" => "int", "html_type" => "input_ac", "specific_type" => "", "specific_type_extended" => "", "file_uid" => uniqid(), "image_ratio" => "*", "image_min_width" => "*", "image_min_height" => "*", "html" => "false", "choices" => array(), "values" => array(), "errors" => array(), "required" => "false", "unique" => "false", "default" => "", "ac_db" => strtolower($bearerDb), "ac_entity" => strtolower($bearerTable), "ac_fk" => $bearerTargetClass, "ac_column" => $bearerTargetPk, "ac_label" => $labelFk, "ac_pattern" => $labelFkReal, "ac_multiple" => "true", "min_length" => "", "max_length" => "", "filters" => ""); // Existing bearers $columnFkSource = $this->_xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($bearerClass)."' and @tablePk = '".$this->_db_alias."_".SLS_String::tableToClass($this->_table)."']/@columnFk"); $columnFkTarget = $this->_xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($bearerClass)."' and @tablePk = '".$this->_db_alias."_".SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($bearerTargetClass,"_"))."']/@columnFk"); $clause = array(0=>array("column"=>$bearerObject->getTable().".".$columnFkSource,"value"=>$this->_object_id,"mode"=>"equal")); if ($bearerTargetObject->isMultilanguage()) $clause[] = array("column"=>$bearerTargetObject->getTable().".pk_lang","value" => $this->_defaultLang,"mode"=>"equal"); $bearerRecordsets = $bearerObject->searchModels($bearerObject->getTable(),array(0=>array("table"=>$bearerTargetObject->getTable(),"column"=>$columnFkTarget,"mode"=>"inner")),$clause,array(),array($bearerObject->getPrimaryKey()=>"ASC")); for($j=0 ; $j<$countJ=count($bearerRecordsets) ; $j++) { $bearerLabel = $labelFkReal; foreach($bearerRecordsets[$j] as $keyBearer => $valueBearer) $bearerLabel = str_replace($keyBearer, $valueBearer, $bearerLabel); $this->_bearers[$bearerObject->getTable()]["values"][] = array("label" => $bearerLabel, "value" => $bearerRecordsets[$j]->{$bearerTargetObject->getPrimaryKey()}); } } } // Children $children = $this->_xmlBo->getTagsAttributes($this->_boPath."/children/child",array("table","column")); for($i=0 ; $i<$count=count($children) ; $i++) { $childTable = SLS_String::substrAfterFirstDelimiter($children[$i]["attributes"][0]["value"],"_"); $childDb = ucfirst(strtolower(SLS_String::substrBeforeFirstDelimiter($children[$i]["attributes"][0]["value"],"_"))); if ($this->_db->tableExists($childTable)) { $this->_generic->useModel(SLS_String::tableToClass($childTable),$childDb,"user"); $childClassName = $childDb."_".SLS_String::tableToClass($childTable); $childObject = new $childClassName(); $childPath = "//sls_configs/entry[@type='table' and @name='".strtolower($childClassName)."']"; $childExists = $this->_xmlBo->getTag($childPath); if (empty($childExists)) $childPath = "//sls_configs/entry/entry[@type='table' and @name='".strtolower($childClassName)."']"; $childComment = $this->_object->getTableComment($childTable,$this->_db_alias); if (SLS_String::startsWith($childComment,"sls:lang:")) { $key = strtoupper(SLS_String::substrAfterFirstDelimiter($childComment,"sls:lang:")); $childComment = (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key])) ? (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) ? $childTable : $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) : $GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key]; } if (empty($childComment)) $childComment = $childTable; $this->_children[$childTable] = array("model" => array("db" => strtolower($childDb), "table" => $childTable, "label" => $childComment, "nbChildren" => 0, "multilanguage" => ($childObject->isMultilanguage()) ? "true" : "false", "pk" => $childObject->getPrimaryKey()), "urls" => array("list" => array("url" => ($this->_generic->getActionId($this->_boController,"List".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable)) != null) ? $this->_generic->getFullPath($this->_boController,"List".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable),array(),true) : "", "authorized" => (SLS_BoRights::isAuthorized("read",ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable))) ? "true" : "false"), "add" => array("url" => ($this->_generic->getActionId($this->_boController,"Add".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable)) != null) ? $this->_generic->getFullPath($this->_boController,"Add".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable),array(),true) : "", "authorized" => (SLS_BoRights::isAuthorized("add",ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable))) ? "true" : "false"), "populate" => array("url" => ($this->_generic->getActionId($this->_boController,"BoPopulate".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable)) != null) ? $this->_generic->getFullPath($this->_boController,"Populate".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable),array(),true) : "", "authorized" => (SLS_BoRights::getAdminType() == "developer") ? "true" : "false"), "edit" => array("url" => ($this->_generic->getActionId($this->_boController,"Modify".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable)) != null) ? $this->_generic->getFullPath($this->_boController,"Modify".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable),array("id"=>""),false) : "", "authorized" => (SLS_BoRights::isAuthorized("edit",ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable))) ? "true" : "false"), "clone" => array("url" => ($this->_generic->getActionId($this->_boController,"Clone".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable)) != null) ? $this->_generic->getFullPath($this->_boController,"Clone".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable),array("id"=>""),false) : "", "authorized" => (SLS_BoRights::isAuthorized("clone",ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable))) ? "true" : "false"), "delete" => array("url" => ($this->_generic->getActionId($this->_boController,"Delete".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable)) != null) ? $this->_generic->getFullPath($this->_boController,"Delete".ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable),array("id"=>""),false) : "", "authorized" => (SLS_BoRights::isAuthorized("delete",ucfirst(strtolower($childDb))."_".SLS_String::tableToClass($childTable))) ? "true" : "false")), "columns" => $this->getTableColumns($this->_db_alias,$childTable,$childPath,$className,true), "bearers" => array()); // Existing children $columnFk = $this->_xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($childClassName)."' and @tablePk = '".$this->_db_alias."_".SLS_String::tableToClass($this->_table)."']/@columnFk"); $childrenRecordsets = $childObject->searchModels($childObject->getTable(),array(),array(0=>array("column"=>$columnFk,"value"=>$this->_object_id,"mode"=>"equal")),array(),array($childObject->getPrimaryKey()=>"ASC")); $this->_children[$childTable]["model"]["nbChildren"] = ($childObject->isMultilanguage()) ? count($childrenRecordsets) / count($this->_langs) : count($childrenRecordsets); $childrenIds = array(); for($j=0 ; $j<$countJ=count($childrenRecordsets) ; $j++) { $lang = ($childObject->isMultilanguage()) ? $childrenRecordsets[$j]->pk_lang : $this->_defaultLang; if (!in_array($childrenRecordsets[$j]->{$childObject->getPrimaryKey()},$childrenIds)) $childrenIds[] = $childrenRecordsets[$j]->{$childObject->getPrimaryKey()}; $childrenItem = array_shift(array_keys($childrenIds,$childrenRecordsets[$j]->{$childObject->getPrimaryKey()})); foreach($childrenRecordsets[$j] as $childRecordKey => $childRecordValue) { // If pk_lang or current father fk, skip if (in_array($childRecordKey,array("pk_lang",$columnFk))) continue; // Files if (!empty($childRecordValue) && $this->_children[$childTable]["columns"][$childRecordKey]["html_type"] == 'input_file') $childRecordValue = SLS_String::getUrlFile($childRecordValue); // MySQL Type Set if (!empty($childRecordValue) && $this->_children[$childTable]["columns"][$childRecordKey]["html_type"] == 'input_checkbox') $childRecordValue = explode(",",$childRecordValue); // Fk if (!empty($childRecordValue) && $this->_children[$childTable]["columns"][$childRecordKey]["html_type"] == 'input_ac') { $fkAlias = ucfirst(strtolower(SLS_String::substrBeforeFirstDelimiter($this->_children[$childTable]["columns"][$childRecordKey]["ac_fk"],"_"))); $fkModel = SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($this->_children[$childTable]["columns"][$childRecordKey]["ac_fk"],"_")); $fkClass = $fkAlias."_".$fkModel; $this->_generic->useModel($fkModel,$fkAlias,"user"); $fkObject = new $fkClass(); if ($fkObject->getModel($childRecordValue) == true) { $replacements = $fkObject->getParams(); $fkLabel = $this->_children[$childTable]["columns"][$childRecordKey]["ac_pattern"]; foreach($replacements as $keyFk => $valueFk) $fkLabel = str_replace($keyFk, $valueFk, $fkLabel); $this->_children[$childTable]["columns"][$childRecordKey]["values"][$childrenItem][$lang][] = array("label" => $fkLabel, "value" => $childRecordValue); } else $this->_children[$childTable]["columns"][$childRecordKey]["values"][$childrenItem][$lang][] = ""; } else { if (!empty($childRecordValue) && $this->_children[$childTable]["columns"][$childRecordKey]["html_type"] == 'input_checkbox') $this->_children[$childTable]["columns"][$childRecordKey]["values"][$childrenItem][$lang] = $childRecordValue; else $this->_children[$childTable]["columns"][$childRecordKey]["values"][$childrenItem][$lang][] = $childRecordValue; } } } // Bearers $bearers = $this->_xmlBearer->getTagsAttributes("//sls_configs/entry[@table1='".$childClassName."']",array("tableBearer","table2")); if (!empty($bearers)) { for($i=0 ; $i<$count=count($bearers) ; $i++) { $bearerDb = ucfirst(SLS_String::substrBeforeFirstDelimiter($bearers[$i]["attributes"][0]["value"],"_")); $bearerTable = SLS_String::substrAfterFirstDelimiter($bearers[$i]["attributes"][0]["value"],"_"); $bearerClass = $bearers[$i]["attributes"][0]["value"]; $bearerTargetDb = ucfirst(SLS_String::substrBeforeFirstDelimiter($bearers[$i]["attributes"][1]["value"],"_")); $bearerTargetUse = SLS_String::substrAfterFirstDelimiter($bearers[$i]["attributes"][1]["value"],"_"); $bearerTargetClass = $bearers[$i]["attributes"][1]["value"]; $this->_generic->useModel($bearerTable,$bearerDb,"user"); $this->_generic->useModel($bearerTargetUse,$bearerTargetDb,"user"); $bearerObject = new $bearerClass(); $bearerTargetObject = new $bearerTargetClass(); $bearerTargetPk = $bearerTargetObject->getPrimaryKey(); $resultFk = array_shift($this->_xmlFk->getTagsAttribute("//sls_configs/entry[@tableFk='".strtolower($bearerClass)."' and @columnFk='".$bearerTargetObject->getPrimaryKey()."' and @tablePk = '".strtolower($bearerTargetDb)."_".$bearerTargetUse."']","labelPk")); $labelFk = (empty($resultFk)) ? $bearerTargetObject->getPrimaryKey() : $resultFk["attribute"]; $labelFkReal = $labelFk; $str = $labelFk; $values = array(); $masks = array(); foreach($bearerTargetObject->getParams() as $key => $value) array_push($masks,$key); foreach($bearerTargetObject->getParams() as $key => $value) if (SLS_String::contains($labelFk,$key)) $labelFk = str_replace($key,$bearerTargetObject->getColumnComment($key),$labelFk); $this->_children[$childTable]["bearers"][$bearerObject->getTable()] = array("table" => $bearerObject->getTable(), "name" => $bearerTargetPk, "label" => $bearerObject->getTableComment($bearerObject->getTable(),$bearerDb), "multilanguage" => "false", "native_type" => "int", "html_type" => "input_ac", "specific_type" => "", "specific_type_extended" => "", "file_uid" => uniqid(), "image_ratio" => "*", "image_min_width" => "*", "image_min_height" => "*", "html" => "false", "choices" => array(), "values" => array(), "errors" => array(), "required" => "false", "unique" => "false", "default" => "", "ac_db" => strtolower($bearerDb), "ac_entity" => strtolower($bearerTable), "ac_fk" => $bearerTargetClass, "ac_column" => $bearerTargetPk, "ac_label" => $labelFk, "ac_pattern" => $labelFkReal, "ac_multiple" => "true", "min_length" => "", "max_length" => "", "filters" => ""); $columnFkSource = $this->_xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($bearerClass)."' and @tablePk = '".$this->_db_alias."_".SLS_String::tableToClass($childObject->getTable())."']/@columnFk"); $columnFkTarget = $this->_xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($bearerClass)."' and @tablePk = '".$this->_db_alias."_".SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($bearerTargetClass,"_"))."']/@columnFk"); $clause = (!empty($childrenIds)) ? array(0=>array("column"=>$bearerObject->getTable().".".$columnFkSource,"value"=>$childrenIds,"mode"=>"in")) : array(); if ($bearerTargetObject->isMultilanguage()) $clause[] = array("column"=>$bearerTargetObject->getTable().".pk_lang","value" => $this->_defaultLang,"mode"=>"equal"); $bearerRecordsets = $bearerObject->searchModels($bearerObject->getTable(),array(0=>array("table"=>$bearerTargetObject->getTable(),"column"=>$columnFkTarget,"mode"=>"inner")),$clause,array(),array($bearerObject->getPrimaryKey()=>"ASC")); for($j=0 ; $j<$countJ=count($bearerRecordsets) ; $j++) { $bearerLabel = $labelFkReal; foreach($bearerRecordsets[$j] as $keyBearer => $valueBearer) $bearerLabel = str_replace($keyBearer, $valueBearer, $bearerLabel); $this->_children[$childTable]["bearers"][$bearerObject->getTable()]["values"][array_shift(array_keys($childrenIds,$bearerRecordsets[$j]->{$columnFkSource}))][] = array("label" => $bearerLabel, "value" => $bearerRecordsets[$j]->{$bearerTargetObject->getPrimaryKey()}); } } } } } # /Columns definitions # Reload $this->_error = false; $this->_recordsets = array(); if ($this->_http->getParam("reload-edit") == "true") { $modelParams = (is_array($this->_http->getParam($this->_table))) ? $this->_http->getParam($this->_table) : array(); $properties = (is_array($modelParams["properties"])) ? $modelParams["properties"] : array(); $bearers = (is_array($modelParams["bearers"])) ? $modelParams["bearers"] : array(); $children = (is_array($modelParams["children"])) ? $modelParams["children"] : array(); $childrenToDelete = (is_array($modelParams["children-to-delete"])) ? $modelParams["children-to-delete"] : array(); $redirect = (in_array(strtolower($this->_http->getParam("redirect")),$redirects)) ? strtolower($this->_http->getParam("redirect")) : array_shift($redirects); # MAIN MODEL uksort($properties,array($this, 'unshiftDefaultLang')); foreach($properties as $lang => $columns) { $this->_object->setModelLanguage($lang); if (!empty($columns)) { foreach(((is_array($columns)) ? $columns : array($columns)) as $column => $value) { // Reset old value $this->_columns[$column]["values"][$lang] = array(); $functionName = "set".SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(str_replace("_"," ",$column)," ",false)),""); // Remember values if (is_array($value) && array_key_exists("file",$value)) { $value = $value["file"]; if (!is_array($value)) $value = SLS_String::substrAfterFirstDelimiter($value,$this->_generic->getPathConfig("files")); } else if (is_array($value)) { $this->_columns[$column]["values"][$lang] = $value; // MySQL Type Set if ($this->_columns[$column]["specific_type"] != 'file') $value = implode(",",$value); } else { // Check FK if (!empty($value) && $this->_columns[$column]["html_type"] == 'input_ac') { $fkAlias = ucfirst(strtolower(SLS_String::substrBeforeFirstDelimiter($this->_columns[$column]["ac_fk"],"_"))); $fkModel = SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($this->_columns[$column]["ac_fk"],"_")); $fkClass = $fkAlias."_".$fkModel; $this->_generic->useModel($fkModel,$fkAlias,"user"); $fkObject = new $fkClass(); if ($fkObject->getModel($value) == true) { $replacements = $fkObject->getParams(); $fkLabel = $this->_columns[$column]["ac_pattern"]; foreach($replacements as $keyFk => $valueFk) $fkLabel = str_replace($keyFk, $valueFk, $fkLabel); $this->_columns[$column]["values"][$lang][] = array("label" => $fkLabel, "value" => $value); } else $this->_columns[$column]["values"][$lang][] = ""; } else $this->_columns[$column]["values"][$lang][] = $value; } // Setter if (!$this->_object->$functionName($value)) { $this->_error = true; $this->_columns[$column]["errors"][$lang] = $this->_object->getError($column); if ($this->_async) $this->_render["errors"][$column] = $this->_columns[$column]["label"]." ".$GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_'.strtoupper($this->_columns[$column]["errors"][$lang])]; } // Remember value type file if ($this->_columns[$column]["html_type"] == 'input_file') { // No error, take model value if (empty($this->_columns[$column]["errors"][$lang])) { $fileValue = $this->_object->__get($column); $this->_columns[$column]["values"][$lang][] = (!empty($fileValue)) ? SLS_String::getUrlFile($fileValue) : ""; } // Else, take uploaded file else { // Modern browsers if (array_key_exists("data",$value)) $value = $value["data"]; if (is_array($value) && array_key_exists("tmp_name",$value)) $this->_columns[$column]["values"][$lang][] = $this->_generic->getSiteConfig("protocol")."://".$this->_generic->getSiteConfig("domainName")."/".$value["tmp_name"]; } } } } $this->_object->save(); } # /MAIN MODEL # CHILDREN foreach($children as $childTable => $childValues) { $this->_generic->useModel(SLS_String::tableToClass($childTable),$this->_db_alias,"user"); $childClassName = $this->_db_alias."_".SLS_String::tableToClass($childTable); $childObject = new $childClassName(); $this->_recordsets[$childTable]["pk"] = $childObject->getPrimaryKey(); $this->_children[$childTable]["model"]["nbChildren"] = (is_array($childValues)) ? count($childValues) : 1; foreach(((is_array($childValues)) ? $childValues : array($childValues)) as $childItem => $infos) { // Child $properties = (is_array($infos["properties"])) ? $infos["properties"] : array($infos["properties"]); uksort($properties,array($this, 'unshiftDefaultLang')); $childId = $properties[$this->_defaultLang][$childObject->getPrimaryKey()]; $needToCreate = (empty($childId)) ? true : false; if ($needToCreate) $this->_recordsets[$childTable]["ids"][] = $childId = $childObject->giveNextId(); foreach($properties as $lang => $columns) { $childObject->setModelLanguage($lang); if (!$needToCreate) $childObject->getModel($childId); foreach(((is_array($columns)) ? $columns : array($columns)) as $column => $value) { // Exclude pk if existed (update) if ($column == $this->_recordsets[$childTable]["pk"]) continue; $functionName = "set".SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(str_replace("_"," ",$column)," ",false)),""); // Remember values if (is_array($value) && array_key_exists("file",$value)) { $value = $value["file"]; if (!is_array($value)) $value = SLS_String::substrAfterFirstDelimiter($value,$this->_generic->getPathConfig("files")); } else if (is_array($value)) { $this->_children[$childTable]["columns"][$column]["values"][$childItem][$lang] = $value; // MySQL Type Set if ($this->_children[$childTable]["columns"][$column]["specific_type"] != 'file') $value = implode(",",$value); } else { // Check FK if (!empty($value) && $this->_children[$childTable]["columns"][$column]["html_type"] == 'input_ac') { $fkAlias = ucfirst(strtolower(SLS_String::substrBeforeFirstDelimiter($this->_children[$childTable]["columns"][$column]["ac_fk"],"_"))); $fkModel = SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($this->_children[$childTable]["columns"][$column]["ac_fk"],"_")); $fkClass = $fkAlias."_".$fkModel; $this->_generic->useModel($fkModel,$fkAlias,"user"); $fkObject = new $fkClass(); if ($fkObject->getModel($value) == true) { $replacements = $fkObject->getParams(); $fkLabel = $this->_children[$childTable]["columns"][$column]["ac_pattern"]; foreach($replacements as $keyFk => $valueFk) $fkLabel = str_replace($keyFk, $valueFk, $fkLabel); $this->_children[$childTable]["columns"][$column]["values"][$childItem][$lang][] = array("label" => $fkLabel, "value" => $value); } else $this->_children[$childTable]["columns"][$column]["values"][$childItem][$lang][] = ""; } else $this->_children[$childTable]["columns"][$column]["values"][$childItem][$lang][] = $value; } // Setter if (!$childObject->$functionName($value)) { $this->_error = true; $this->_children[$childTable]["columns"][$column]["errors"][$childItem][$lang] = $childObject->getError($column); } else $this->_children[$childTable]["columns"][$column]["errors"][$childItem][$lang] = ""; // Remember value type file if ($this->_children[$childTable]["columns"][$column]["html_type"] == 'input_file') { // No error, take model value if (empty($this->_children[$childTable]["columns"][$column]["errors"][$childItem][$lang])) { $fileValue = $childObject->__get($column); $this->_children[$childTable]["columns"][$column]["values"][$childItem][$lang][] = (!empty($fileValue)) ? SLS_String::getUrlFile($fileValue) : ""; } // Else, take uploaded file else { // Modern browsers if (is_array($value) && array_key_exists("data",$value)) $value = $value["data"]; if (is_array($value) && array_key_exists("tmp_name",$value)) $this->_children[$childTable]["columns"][$column]["values"][$childItem][$lang][] = $this->_generic->getSiteConfig("protocol")."://".$this->_generic->getSiteConfig("domainName")."/".$value["tmp_name"]; else $this->_children[$childTable]["columns"][$column]["values"][$childItem][$lang][] = ""; } } } // Force fk setter $fkColumn = $this->_xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($childClassName)."' and @tablePk='".$this->_db_alias."_".SLS_String::tableToClass($this->_table)."']/@columnFk"); if (!empty($fkColumn)) { $functionName = "set".SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(str_replace("_"," ",$fkColumn)," ",false)),""); $childObject->$functionName($this->_object_id); } // Create or save if ($needToCreate) $childObject->create(); else $childObject->save(); } $childObject->clear(); // Bearers $childBearers = (!empty($infos["bearers"])) ? ((is_array($infos["bearers"])) ? $infos["bearers"] : array($infos["bearers"])) : array(); foreach($childBearers as $bearerTable => $bearerValues) { // Bearer object $bearerClass = ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($bearerTable); $bearerAttributes = array_shift($this->_xmlBearer->getTagsAttributes("//sls_configs/entry[@tableBearer='".$bearerClass."']",array("table1","table2"))); $this->_generic->useModel(SLS_String::tableToClass($bearerTable),$this->_db_alias,"user"); $this->_generic->useModel(SLS_String::substrAfterFirstDelimiter($bearerAttributes["attributes"][0]["value"],"_"),SLS_String::substrBeforeFirstDelimiter($bearerAttributes["attributes"][0]["value"],"_")); $this->_generic->useModel(SLS_String::substrAfterFirstDelimiter($bearerAttributes["attributes"][1]["value"],"_"),SLS_String::substrBeforeFirstDelimiter($bearerAttributes["attributes"][1]["value"],"_")); $bearerObject = new $bearerClass(); $this->_recordsets[$bearerObject->getTable()]["pk"] = $bearerObject->getPrimaryKey(); $objectBearerTarget1 = new $bearerAttributes["attributes"][0]["value"](); $objectBearerTarget2 = new $bearerAttributes["attributes"][1]["value"](); $setterBearerTarget1 = "set".SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(str_replace("_"," ",$objectBearerTarget1->getPrimaryKey())," ",false)),""); $setterBearerTarget2 = "set".SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(str_replace("_"," ",$objectBearerTarget2->getPrimaryKey())," ",false)),""); $fkColumn = $this->_xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($bearerObject->getDatabase())."_".$bearerObject->getTable()."' and @tablePk='".strtolower($bearerObject->getDatabase())."_".SLS_String::substrAfterFirstDelimiter($bearerAttributes["attributes"][0]["value"],"_")."']/@columnFk"); // Delete old bearers $bearerObject->deleteModels($bearerObject->getTable(),array(),array(0=>array("column"=>$fkColumn,"value"=>$childId,"mode"=>"equal"))); // Save new bearers foreach($bearerValues as $bearerValue) { if ($objectBearerTarget2->getModel($bearerValue) === true) { $replacements = $objectBearerTarget2->getParams(); $bearerLabel = $this->_children[$childTable]["bearers"][$bearerObject->getTable()]["ac_pattern"]; foreach($replacements as $keyBearer => $valueBearer) $bearerLabel = str_replace($keyBearer, $valueBearer, $bearerLabel); $this->_children[$childTable]["bearers"][$bearerObject->getTable()]["values"][$childItem][] = array("label" => $bearerLabel, "value" => $bearerValue); if (!$this->_error) { $bearerObject->$setterBearerTarget1($childId); $bearerObject->$setterBearerTarget2($bearerValue); $bearerObjectId = $bearerObject->create(); $this->_recordsets[$bearerObject->getTable()]["ids"][] = $bearerObjectId; $bearerObject->clear(); } } } } } } # /CHILDREN # BEARERS foreach($bearers as $bearerTable => $bearerValues) { // Bearer object $bearerClass = ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($bearerTable); $bearerAttributes = array_shift($this->_xmlBearer->getTagsAttributes("//sls_configs/entry[@tableBearer='".$bearerClass."']",array("table1","table2"))); $this->_generic->useModel(SLS_String::tableToClass($bearerTable),$this->_db_alias,"user"); $this->_generic->useModel(SLS_String::substrAfterFirstDelimiter($bearerAttributes["attributes"][0]["value"],"_"),SLS_String::substrBeforeFirstDelimiter($bearerAttributes["attributes"][0]["value"],"_")); $this->_generic->useModel(SLS_String::substrAfterFirstDelimiter($bearerAttributes["attributes"][1]["value"],"_"),SLS_String::substrBeforeFirstDelimiter($bearerAttributes["attributes"][1]["value"],"_")); $bearerObject = new $bearerClass(); $this->_recordsets[$bearerObject->getTable()]["pk"] = $bearerObject->getPrimaryKey(); $objectBearerTarget1 = new $bearerAttributes["attributes"][0]["value"](); $objectBearerTarget2 = new $bearerAttributes["attributes"][1]["value"](); $setterBearerTarget1 = "set".SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(str_replace("_"," ",$objectBearerTarget1->getPrimaryKey())," ",false)),""); $setterBearerTarget2 = "set".SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(str_replace("_"," ",$objectBearerTarget2->getPrimaryKey())," ",false)),""); $fkColumn = $this->_xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($bearerObject->getDatabase())."_".$bearerObject->getTable()."' and @tablePk='".strtolower($bearerObject->getDatabase())."_".SLS_String::substrAfterFirstDelimiter($bearerAttributes["attributes"][0]["value"],"_")."']/@columnFk"); // Delete old bearers $bearerObject->deleteModels($bearerObject->getTable(),array(),array(0=>array("column"=>$fkColumn,"value"=>$this->_object_id,"mode"=>"equal"))); // Save new bearers foreach($bearerValues as $bearerValue) { if ($objectBearerTarget2->getModel($bearerValue) === true) { $replacements = $objectBearerTarget2->getParams(); $bearerLabel = $this->_bearers[$bearerObject->getTable()]["ac_pattern"]; foreach($replacements as $keyBearer => $valueBearer) $bearerLabel = str_replace($keyBearer, $valueBearer, $bearerLabel); $this->_bearers[$bearerObject->getTable()]["values"][] = array("label" => $bearerLabel, "value" => $bearerValue); if (!$this->_error) { $bearerObject->$setterBearerTarget1($this->_object_id); $bearerObject->$setterBearerTarget2($bearerValue); $bearerObjectId = $bearerObject->create(); $this->_recordsets[$bearerObject->getTable()]["ids"][] = $bearerObjectId; $bearerObject->clear(); } } } } # /BEARERS # CHILDREN-TO-DELETE foreach($childrenToDelete as $childTable => $childValues) { $this->_generic->useModel(SLS_String::tableToClass($childTable),$this->_db_alias,"user"); $childClassName = $this->_db_alias."_".SLS_String::tableToClass($childTable); $childObject = new $childClassName(); foreach(((is_array($childValues)) ? $childValues : array($childValues)) as $childToDelete) { if ($childObject->getModel($childToDelete) === true) $childObject->delete(true); } } # /CHILDREN-TO-DELETE # If error, delete model & linked recordsets if ($this->_error && $this->_object->getModel($this->_object_id)) { if ($this->_async) { $this->_render["message"] = sprintf($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_ERROR'],$this->_lang->getLang()); // Render echo json_encode($this->_render); die(); } } # /Errors # All good dude ! if (!$this->_error) { if ($this->_async) { $this->_render["status"] = "OK"; $this->_render["message"] = $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_GENERIC_SUBMIT_SUCCESS_EDIT']; } else { $this->pushNotif("success",$GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_GENERIC_SUBMIT_SUCCESS_EDIT']); if ($this->_forward) { switch ($redirect) { case "edit": # Remember admin settings $nodeExists = $this->_xmlRight->getTag("//sls_configs/entry[@login='******']/@login"); if (!empty($nodeExists)) { $this->_xmlRight->setTag("//sls_configs/entry[@login='******']/settings/setting[@key='edit_callback']","edit"); $this->_xmlRight->saveXML($this->_generic->getPathConfig("configSls")."/rights.xml"); $this->_xmlRight->refresh(); } # /Remember admin settings $this->_generic->forward($this->_boController,"Modify".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table),array("id"=>$this->_object_id)); break; case "list": # Remember admin settings $nodeExists = $this->_xmlRight->getTag("//sls_configs/entry[@login='******']/@login"); if (!empty($nodeExists)) { $this->_xmlRight->setTag("//sls_configs/entry[@login='******']/settings/setting[@key='edit_callback']","list"); $this->_xmlRight->saveXML($this->_generic->getPathConfig("configSls")."/rights.xml"); $this->_xmlRight->refresh(); } # /Remember admin settings $rememberList = (is_array($this->_session->getParam("SLS_BO_LIST"))) ? $this->_session->getParam("SLS_BO_LIST") : array(); if (array_key_exists($this->_db_alias."_".$this->_table,$rememberList) && !empty($rememberList[$this->_db_alias."_".$this->_table])) $this->_generic->redirect($rememberList[$this->_db_alias."_".$this->_table]); else $this->_generic->forward($this->_boController,"List".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)); break; } } } } # /All good dude ! } # /Reload # Page infos $langsError = array(); $columnValues = array(); $this->_xml->startTag("page"); $this->_xml->startTag("model"); $this->_xml->addFullTag("db",$this->_db_alias,true); $this->_xml->addFullTag("table",$this->_table,true); $this->_xml->addFullTag("label",$this->_tableComment,true); $this->_xml->addFullTag("multilanguage",($this->_object->isMultilanguage()) ? "true" : "false",true); $this->_xml->addFullTag("pk",$this->_object->getPrimaryKey(),true); $this->_xml->endTag("model"); $this->_xml->startTag("urls"); $this->_xml->addFullTag("list",($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"List".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)))) ? $this->_generic->getFullPath($this->_boController,"List".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)) : "",true,array("authorized" => (SLS_BoRights::isAuthorized("read",ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table))) ? "true" : "false")); $this->_xml->addFullTag("add",($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"Add".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)))) ? $this->_generic->getFullPath($this->_boController,"Add".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)) : "",true,array("authorized" => (SLS_BoRights::isAuthorized("add",ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table))) ? "true" : "false")); $this->_xml->addFullTag("populate",$this->_generic->getFullPath($this->_boController,"BoPopulate",array("Db" => ucfirst(strtolower($this->_db_alias)), "Table" => $this->_table)),true,array("authorized" => (SLS_BoRights::getAdminType() == "developer") ? "true" : "false")); $this->_xml->addFullTag("edit",($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"Modify".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)))) ? $this->_generic->getFullPath($this->_boController,"Modify".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table),array("id" => ""),false) : "",true,array("authorized" => (SLS_BoRights::isAuthorized("edit",ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table))) ? "true" : "false")); $this->_xml->addFullTag("clone",($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"Clone".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)))) ? $this->_generic->getFullPath($this->_boController,"Clone".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table),array("id" => ""),false) : "",true,array("authorized" => (SLS_BoRights::isAuthorized("clone",ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table))) ? "true" : "false")); $this->_xml->addFullTag("delete",($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"Delete".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)))) ? $this->_generic->getFullPath($this->_boController,"Delete".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table),array("id" => ""),false) : "",true,array("authorized" => (SLS_BoRights::isAuthorized("delete",ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table))) ? "true" : "false")); $this->_xml->endTag("urls"); $this->_xml->startTag("columns"); foreach($this->_columns as $columnName => $infosColumn) { $this->_xml->startTag("column"); foreach($infosColumn as $key => $value) { if (is_array($value) && !in_array($key,array("choices","values","errors"))) continue; if ($key == "choices") { $this->_xml->startTag("choices"); foreach($value as $currentValue) $this->_xml->addFullTag("choice",$currentValue,true); $this->_xml->endTag("choices"); } else if ($key == "values") { $this->_xml->startTag("values"); foreach($value as $currentLang => $values) { if ($this->_async) { if (empty($columnValues[$columnName])) { if ($this->_object->isMultilanguage() && $this->_columns[$columnName]["multilanguage"] == "true" && $currentLang == $this->_lang->getLang()) { $columnValues[$columnName] = ($columnName == "pk_lang") ? $this->_lang->getLang() : $values; } else if ($currentLang == $this->_defaultLang) { $columnValues[$columnName] = ($columnName == "pk_lang") ? $this->_lang->getLang() : $values; } } } foreach($values as $currentValue) { if (is_array($currentValue)) $this->_xml->addFullTag("value",$currentValue["value"],true,array("lang"=>$currentLang,"label"=>$currentValue["label"])); else { if ($this->_columns[$columnName]["specific_type"] == 'file' && $this->_columns[$columnName]["specific_type_extended"] == 'all') { $img = "false"; if (file_exists($this->_generic->getPathConfig("coreImg")."BO-2014/Mime-Types/".strtolower(str_replace("/","-",SLS_String::getExtensionMimeType(SLS_String::substrAfterLastDelimiter($currentValue,"."))).".png"))) { $mime = $this->_generic->getSiteConfig("protocol")."://".$this->_generic->getSiteConfig("domainName")."/".$this->_generic->getPathConfig("coreImg")."BO-2014/Mime-Types/".strtolower(str_replace("/","-",SLS_String::getExtensionMimeType(SLS_String::substrAfterLastDelimiter($currentValue,"."))).".png"); if (SLS_String::startsWith(SLS_String::getExtensionMimeType(SLS_String::substrAfterLastDelimiter($currentValue,".")),"image/")) $img = "true"; } else $mime = $this->_generic->getSiteConfig("protocol")."://".$this->_generic->getSiteConfig("domainName")."/".$this->_generic->getPathConfig("coreImg")."BO-2014/Mime-Types/application-octet-stream.png"; $this->_xml->addFullTag("value",$currentValue,true,array("lang"=>$currentLang,"img"=>$img,"mime"=>$mime)); } else if ($this->_columns[$columnName]["specific_type"] == 'file' && $this->_columns[$columnName]["specific_type_extended"] == 'img') { $image = $currentValue; if (SLS_String::contains($image,$this->_generic->getSiteConfig("domainName")."/")) $image = SLS_String::substrAfterFirstDelimiter($image,$this->_generic->getSiteConfig("domainName")."/"); $this->_xml->addFullTag("value",$currentValue,true,array("lang"=>$currentLang,"size"=>(file_exists($image)) ? filesize($image) : 0)); } else $this->_xml->addFullTag("value",$currentValue,true,array("lang"=>$currentLang)); } } } $this->_xml->endTag("values"); } else if ($key == "errors") { $this->_xml->startTag("errors"); foreach($value as $currentLang => $currentValue) { $this->_xml->addFullTag("error",$infosColumn["label"]." ".$GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_'.strtoupper($currentValue)],true,array("lang"=>$currentLang)); if (!in_array($currentLang,$langsError)) { $this->pushNotif("error",sprintf($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_ERROR'],$currentLang)); $langsError[] = $currentLang; } } $this->_xml->endTag("errors"); } else $this->_xml->addFullTag($key,$value,true); } $this->_xml->endTag("column"); } $this->_xml->endTag("columns"); // If quick-edit view if ($this->_async) { // Render $this->_render["status"] = "OK"; $this->_render["result"] = $columnValues; echo json_encode($this->_render); die(); } $this->_xml->startTag("bearers"); foreach($this->_bearers as $bearerTable => $infosColumn) { $this->_xml->startTag("column"); foreach($infosColumn as $key => $value) { if (is_array($value) && !in_array($key,array("choices","values"))) continue; if ($key == "choices") { $this->_xml->startTag("choices"); foreach($value as $currentValue) $this->_xml->addFullTag("choice",$currentValue,true); $this->_xml->endTag("choices"); } else if ($key == "values") { $this->_xml->startTag("values"); foreach($value as $currentValue => $currentValues) $this->_xml->addFullTag("value",$currentValues["value"],true,array("lang"=>$this->_defaultLang,"label"=>$currentValues["label"])); $this->_xml->endTag("values"); } else $this->_xml->addFullTag($key,$value,true); } $this->_xml->endTag("column"); } $this->_xml->endTag("bearers"); $this->_xml->startTag("children"); foreach($this->_children as $childTable => $childInfos) { $this->_xml->startTag("child"); $this->_xml->startTag("model"); foreach($childInfos["model"] as $key => $value) $this->_xml->addFullTag($key,$value,true); $this->_xml->endTag("model"); $this->_xml->startTag("urls"); foreach($childInfos["urls"] as $key => $value) $this->_xml->addFullTag($key,$value["url"],true,array("authorized" => $value["authorized"])); $this->_xml->endTag("urls"); $this->_xml->startTag("columns"); foreach($childInfos["columns"] as $columnName => $infosColumn) { $this->_xml->startTag("column"); foreach($infosColumn as $key => $value) { if (is_array($value) && !in_array($key,array("choices","values","errors"))) continue; if ($key == "choices") { $this->_xml->startTag("choices"); foreach($value as $currentValue) $this->_xml->addFullTag("choice",$currentValue,true); $this->_xml->endTag("choices"); } else if ($key == "values") { $this->_xml->startTag("values"); foreach($value as $offset => $valuesChildren) { $this->_xml->startTag("record"); foreach($valuesChildren as $currentLang => $values) { foreach($values as $currentValue) { if (is_array($currentValue)) $this->_xml->addFullTag("value",$currentValue["value"],true,array("lang"=>$currentLang,"label"=>$currentValue["label"])); else { if ($this->_children[$childTable]["columns"][$columnName]["specific_type"] == 'file' && $this->_children[$childTable]["columns"][$columnName]["specific_type_extended"] == 'all') { $img = "false"; if (file_exists($this->_generic->getPathConfig("coreImg")."BO-2014/Mime-Types/".strtolower(str_replace("/","-",SLS_String::getExtensionMimeType(SLS_String::substrAfterLastDelimiter($currentValue,"."))).".png"))) { $mime = $this->_generic->getSiteConfig("protocol")."://".$this->_generic->getSiteConfig("domainName")."/".$this->_generic->getPathConfig("coreImg")."BO-2014/Mime-Types/".strtolower(str_replace("/","-",SLS_String::getExtensionMimeType(SLS_String::substrAfterLastDelimiter($currentValue,"."))).".png"); if (SLS_String::startsWith(SLS_String::getExtensionMimeType(SLS_String::substrAfterLastDelimiter($currentValue,".")),"image/")) $img = "true"; } else $mime = $this->_generic->getSiteConfig("protocol")."://".$this->_generic->getSiteConfig("domainName")."/".$this->_generic->getPathConfig("coreImg")."BO-2014/Mime-Types/application-octet-stream.png"; $this->_xml->addFullTag("value",$currentValue,true,array("lang"=>$currentLang,"img"=>$img,"mime"=>$mime)); } else if ($this->_children[$childTable]["columns"][$columnName]["specific_type"] == 'file' && $this->_children[$childTable]["columns"][$columnName]["specific_type_extended"] == 'img') { $image = $currentValue; if (SLS_String::contains($image,$this->_generic->getSiteConfig("domainName")."/")) $image = SLS_String::substrAfterFirstDelimiter($image,$this->_generic->getSiteConfig("domainName")."/"); $this->_xml->addFullTag("value",$currentValue,true,array("lang"=>$currentLang,"size"=>(file_exists($image)) ? filesize($image) : 0)); } else $this->_xml->addFullTag("value",$currentValue,true,array("lang"=>$currentLang)); } } } $this->_xml->endTag("record"); } $this->_xml->endTag("values"); } else if ($key == "errors") { $this->_xml->startTag("errors"); foreach($value as $currentLang => $currentValues) { $this->_xml->startTag("record"); foreach($currentValues as $currentLang => $currentValue) { if (!empty($currentValue)) { $this->_xml->addFullTag("error",$infosColumn["label"]." ".$GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_'.strtoupper($currentValue)],true,array("lang"=>$currentLang)); if (!in_array($currentLang,$langsError)) { $this->pushNotif("error",sprintf($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_ERROR'],$currentLang)); $langsError[] = $currentLang; } } else $this->_xml->addFullTag("error","",true,array("lang"=>$currentLang)); } $this->_xml->endTag("record"); } $this->_xml->endTag("errors"); } else $this->_xml->addFullTag($key,$value,true); } $this->_xml->endTag("column"); } $this->_xml->endTag("columns"); $this->_xml->startTag("bearers"); foreach($this->_children[$childTable]["bearers"] as $bearerTable => $infosColumn) { $this->_xml->startTag("column"); foreach($infosColumn as $key => $value) { if (is_array($value) && !in_array($key,array("choices","values"))) continue; if ($key == "choices") { $this->_xml->startTag("choices"); foreach($value as $currentValue) $this->_xml->addFullTag("choice",$currentValue,true); $this->_xml->endTag("choices"); } else if ($key == "values") { $this->_xml->startTag("values"); foreach($value as $childItem => $values) { $this->_xml->startTag("record"); foreach($values as $currentValue => $currentValues) $this->_xml->addFullTag("value",$currentValues["value"],true,array("lang"=>$this->_defaultLang,"label"=>$currentValues["label"])); $this->_xml->endTag("record"); } $this->_xml->endTag("values"); } else $this->_xml->addFullTag($key,$value,true); } $this->_xml->endTag("column"); } $this->_xml->endTag("bearers"); $this->_xml->endTag("child"); } $this->_xml->endTag("children"); $this->_xml->endTag("page"); # /Page infos return $this->_xml; }
public function action() { $user = $this->hasAuthorative(); // Objects $sql = SLS_Sql::getInstance(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); // Actions $xml->addFullTag("delete",$this->_generic->getFullPath("SLS_Bo","DeleteModel",array(),false)); $xml->addFullTag("delete_bearer",$this->_generic->getFullPath("SLS_Bo","DeleteBearerTable",array(),false)); $xml->addFullTag("delete_type",$this->_generic->getFullPath("SLS_Bo","DeleteType",array(),false)); $xml->addFullTag("edit_type",$this->_generic->getFullPath("SLS_Bo","EditType",array(),false)); $xml->addFullTag("delete_fk",$this->_generic->getFullPath("SLS_Bo","DeleteForeignKey",array(),false)); $xml->addFullTag("edit_fk",$this->_generic->getFullPath("SLS_Bo","EditForeignKey",array(),false)); $xml->addFullTag("update",$this->_generic->getFullPath("SLS_Bo","UpdateModel",array(),false)); $xml->addFullTag("descriptions",$this->_generic->getFullPath("SLS_Bo","UpdateDescription",array(),false)); // Get the table & class name $table = SLS_String::substrAfterFirstDelimiter($this->_http->getParam("name"),"_"); $db = SLS_String::substrBeforeFirstDelimiter($this->_http->getParam("name"),"_"); $class = ucfirst($db)."_".SLS_String::tableToClass($table); $file = ucfirst($db).".".SLS_String::tableToClass($table); // If current db is not this one if ($sql->getCurrentDb() != $db) $sql->changeDb($db); // Get generic object $this->_generic->useModel(SLS_String::tableToClass($table),$db,"user"); $object = new $class(); // Get description's table $description = $object->getTableComment($table); $columnsInfos = $sql->showColumns($table); // Get object's infos $columns = array(); $columnsP = $object->getParams(); $pk = $object->getPrimaryKey(); $multilanguage = $object->isMultilanguage(); $xml->startTag("model"); $xml->addFullTag("table",$table,true); $xml->addFullTag("description",(SLS_String::contains($description,"InnoDB free")) ? SLS_String::substrBeforeFirstDelimiter($description,"; InnoDB free") : $description,true); $xml->addFullTag("db",$db,true); $xml->addFullTag("class",$class,true); $xml->addFullTag("pk",$pk,true); $xml->addFullTag("multilanguage",($multilanguage) ? "true" : "false",true); $xml->startTag("columns"); $cursor = 0; foreach($columnsP as $column => $value) { $xml->startTag("column"); $xml->addFullTag("name",$column,true); array_push($columns,$column); $fk = ""; $sType = ""; $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml"); $xmlFk = new SLS_XMLToolbox($pathsHandle); $res = $xmlFk->getTagsByAttributes("//sls_configs/entry",array("tableFk","columnFk"),array($db."_".$table,$column)); if (!empty($res)) { $tableTmp = substr($res,(strpos($res,'tablePk="')+9),(strpos($res,'"/>')-(strpos($res,'tablePk="')+9))); $fk = SLS_String::substrAfterFirstDelimiter($tableTmp,"_"); } $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml"); $xmlType = new SLS_XMLToolbox($pathsHandle); $res = $xmlType->getTagsByAttributes("//sls_configs/entry",array("table","column"),array($db."_".$table,$column)); if (!empty($res)) { $sType = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($res,'type="'),'"/>'); // If specific type numeric and native type too if (SLS_String::startsWith($sType,"num_") && $this->containsRecursive($columnsInfos[$cursor]->Type,array("int","float","double","decimal","real"))) $xml->addFullTag("allow_to_delete_type","false",true); } $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/filters.xml"); $xmlFilter = new SLS_XMLToolbox($pathsHandle); $results = $xmlFilter->getTagsAttributes("//sls_configs/entry[@table='".$db."_".$table."' and @column='".$column."']",array("filter","hash")); $xml->startTag("filters"); for($i=0 ; $i<$count=count($results) ; $i++) { $filter = $results[$i]["attributes"][0]["value"]; $result = $results[$i]["attributes"][1]["value"]; $xml->startTag("filter"); $xml->addFullTag("name",$filter.((!empty($result)) ? ' ['.$result.']' : ''),true); $xml->addFullTag("url_delete",$this->_generic->getFullPath("SLS_Bo","DeleteFilter",array(array("key"=>"table","value"=>$this->_http->getParam("name")),array("key"=>"column","value"=>$column),array("key"=>"filter","value"=>$filter))),true); $xml->endTag("filter"); } $xml->endTag("filters"); $xml->addFullTag("fk",$fk,true); $xml->addFullTag("type",ucfirst($sType),true); $xml->addFullTag("comment",$object->getColumnComment($column),true); $xml->endTag("column"); $cursor++; } $xml->endTag("columns"); $xml->addFullTag("url_add_type",$this->_generic->getFullPath("SLS_Bo","AddType",array(0=>array("key"=>"name","value"=>$db."_".$table))),true); $xml->addFullTag("url_add_filter",$this->_generic->getFullPath("SLS_Bo","AddFilter",array(0=>array("key"=>"name","value"=>$db."_".$table))),true); $xml->addFullTag("url_add_fk",$this->_generic->getFullPath("SLS_Bo","AddForeignKey",array(0=>array("key"=>"name","value"=>$db."_".$table))),true); // Get the source of the current model $xml->addFullTag("current_source",str_replace("\t"," ",file_get_contents($this->_generic->getPathConfig("models").$file.".model.php")),true); // Get the source of the current table if (!$sql->tableExists($table)) $xml->addFullTag("current_table",-1,true); else { $columns = $sql->showColumns($table); $tableName = $table; $currentTable = array("table"=>$db.".".$tableName,"errors"=>array()); $className = ucfirst($db)."_".SLS_String::tableToClass($tableName); $fileName = ucfirst($db).".".SLS_String::tableToClass($table).".model.php"; $primaryKey = ""; $multiLanguage = 'false'; $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml"); $xmlType = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml"); $xmlFk = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/filters.xml"); $xmlFilter = new SLS_XMLToolbox($pathsHandle); // Get source $contentM = $this->getModelSource($tableName,$db); // Is data bearer $xmlBearer = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bearers.xml")); $result = array_shift($xmlBearer->getTagsAttributes("//sls_configs/entry[@tableBearer='".$class."']",array("table1"))); $xml->addFullTag("is_data_bearer",(!empty($result)) ? $result["attributes"][0]["value"] : "false",true); // Save the new source $xml->addFullTag("current_table",str_replace("\t"," ",$contentM),true); $xml->addFullTag("url_data_bearer",$this->_generic->getFullPath("SLS_Bo","AddBearerTable",array(array("key"=>"name","value"=>$this->_http->getParam("name")))),true); } $xml->endTag("model"); $this->saveXML($xml); }
public function getXML() { # Objects $className = ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table); $this->_generic->useModel(SLS_String::tableToClass($this->_table),ucfirst(strtolower($this->_db_alias)),"user"); $this->_object = new $className(); $this->_table = $this->_object->getTable(); $this->_gap = 0; $boPath = "//sls_configs/entry[@type='table' and @name='".strtolower($className)."']"; $boExists = $this->_xmlBo->getTag($boPath."/@type"); if (empty($boExists)) $boPath = "//sls_configs/entry/entry[@type='table' and @name='".strtolower($className)."']"; # /Objects # User params $this->_join = array(); $this->_where = array(); $this->_group = array(); $this->_order = array(); $this->_limit = array(); $this->_reload = ($this->_http->getParam("reload-filters") == "true") ? true : false; $joins = $this->_xmlBo->getTagsAttributes($boPath."/joins/join",array("table","column")); $wheres = $this->_xmlBo->getTagsAttributes($boPath."/wheres/where",array("table","column","value","mode")); $groups = $this->_xmlBo->getTagsAttributes($boPath."/groups/group",array("table","column")); $orders = $this->_xmlBo->getTagsAttributes($boPath."/orders/order",array("table","column","order")); $limits = array_shift($this->_xmlBo->getTagsAttributes($boPath."/limits/limit",array("start","length"))); if (!empty($joins)) for($i=0 ; $i<$count=count($joins) ; $i++) $this->_join[] = array("table" => SLS_String::substrAfterFirstDelimiter($joins[$i]["attributes"][0]["value"],"_"), "column" => $joins[$i]["attributes"][1]["value"], "mode" => "left"); if (!empty($wheres) && !$this->_reload) for($i=0 ; $i<$count=count($wheres) ; $i++) $this->_where[] = array("column" => SLS_String::substrAfterFirstDelimiter($wheres[$i]["attributes"][0]["value"],"_").".".$wheres[$i]["attributes"][1]["value"], "value" => $wheres[$i]["attributes"][2]["value"], "mode" => $wheres[$i]["attributes"][3]["value"]); if (!empty($groups)) for($i=0 ; $i<$count=count($groups) ; $i++) $this->_group[] = SLS_String::substrAfterFirstDelimiter($groups[$i]["attributes"][0]["value"],"_").".".$groups[$i]["attributes"][1]["value"]; if (!empty($orders)) for($i=0 ; $i<$count=count($orders) ; $i++) $this->_order[] = array("column" => SLS_String::substrAfterFirstDelimiter($orders[$i]["attributes"][0]["value"],"_").".".$orders[$i]["attributes"][1]["value"], "order" => $orders[$i]["attributes"][2]["value"]); if (!empty($limits)) { $this->_limit["start"] = $limits["attributes"][0]["value"]; $this->_limit["length"] = $limits["attributes"][1]["value"]; } # /User params # Comments $this->_comments = array(); $this->_types = array(); $commentsTable = array(); $tables = array($this->_table); foreach($this->_join as $joinTable) $tables[] = $joinTable["table"]; foreach($tables as $commentTable) { if (!array_key_exists($commentTable,$commentsTable)) { $comment = $this->_object->getTableComment($commentTable,$this->_db_alias); if (empty($comment)) $comment = $commentTable; if (SLS_String::startsWith($comment,"sls:lang:")) { $key = strtoupper(SLS_String::substrAfterFirstDelimiter($comment,"sls:lang:")); $comment = (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key])) ? (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) ? $commentTable : $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) : $GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key]; } $commentsTable[$commentTable] = $comment; } } # /Comments # Columns $this->_columns = array(); $this->_columns = array_merge($this->_columns, $this->getTableColumns($this->_db_alias,$this->_table,$boPath,"",true,true)); foreach($this->_join as $joinTable) $this->_columns = array_merge($this->_columns, $this->getTableColumns($this->_db_alias,$joinTable["table"],$boPath,"",false,true)); $this->_xml->startTag("columns"); foreach($this->_columns as $columnName => $infosColumn) { $this->_xml->startTag("column"); foreach($infosColumn as $key => $value) { if ((is_array($value) && !in_array($key,array("choices","values","errors"))) || in_array($key,array("values","errors"))) continue; if ($key == "choices") { $this->_xml->startTag("choices"); foreach($value as $currentValue) $this->_xml->addFullTag("choice",$currentValue,true); $this->_xml->endTag("choices"); } else if ($key == "label") { $this->_xml->addFullTag($key,$value,true); $this->_xml->startTag("labels_html"); $labels = explode(" ",trim($value)); foreach($labels as $label) $this->_xml->addFullTag("label_html",$label,true); $this->_xml->endTag("labels_html"); } else $this->_xml->addFullTag($key,$value,true); } $this->_xml->endTag("column"); } $this->_xml->endTag("columns"); # /Columns # Reload params // Where $filters = $this->_http->getParam("filters"); if (is_array($filters)) { foreach($filters as $filterTable => $filterColumns) { foreach($filterColumns as $filterColumn => $infos) { $values = (is_array($infos["values"]) && $this->_columns[$filterColumn]["html_type"] != 'input_checkbox') ? $infos["values"] : array($infos["values"]); $modes = (is_array($infos["mode"])) ? $infos["mode"] : array($infos["mode"]); for($i=0 ; $i<$count=count($values) ; $i++) { $value = $values[$i]; $mode = (isset($modes[$i])) ? $modes[$i] : ((isset($modes[0])) ? ($modes[0]) : ""); $mode = (empty($mode)) ? "equal" : $mode; if (is_array($value) && $this->_columns[$filterColumn]["html_type"] == 'input_checkbox') $mode = "in"; if (in_array($mode,array("null","notnull")) || (!in_array($mode,array("null","notnull")) && !empty($value))) { $whereFound = false; foreach($this->_where as $where) { if (SLS_String::contains($where["column"],$filterColumn) && $where["value"] == $value && $where["mode"] == $mode) { $whereFound = true; break; } } if (!$whereFound) $this->_where[] = array("column" => $filterTable.".".$filterColumn, "value" => $value, "mode" => $mode); } } } } } // Order $orderP = $this->_http->getParam("Order"); if (!empty($orderP)) { $orderWays = array("ASC","DESC"); $orderColumn = SLS_String::substrBeforeLastDelimiter($orderP,"_"); $orderWay = SLS_String::substrAfterLastDelimiter($orderP,"_"); if (array_key_exists($orderColumn,$this->_columns)) { if (!in_array(strtoupper($orderWay),$orderWays)) $orderWay = array_shift($orderWays); $this->_order = array(array("column" => $orderColumn, "order" => $orderWay)); } } // Limit $length = $this->_http->getParam("Length"); if (!empty($length) && $length > 0) $this->_limit["length"] = $length; # /Reload params # Default params $positionExists = $this->_xmlType->getTag("//sls_configs/entry[@table='".$this->_table."' and @type='position']/@column"); $lengthExists = $this->_xmlRight->getTag("//sls_configs/entry[@login='******']/settings/setting[@key='list_nb_by_page']"); $fkRecursiveExists = $this->_xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($this->_db_alias."_".$this->_table)."' and @tablePk='".strtolower($this->_db_alias)."_".SLS_String::tableToClass($this->_table)."']/@columnFk"); // i18n > restrict on current language if ($this->_object->isMultilanguage()) { $whereLang = false; foreach($this->_where as $where) { if (SLS_String::contains($where["column"],"pk_lang")) { $whereLang = true; break; } } if (!$whereLang) array_unshift($this->_where, array("column" => $this->_table.".pk_lang", "value" => $this->_lang->getLang(), "mode" => "equal")); if (!empty($this->_join)) { foreach($this->_join as $join) { $join = (is_array($join) && array_key_exists("table",$join)) ? $join["table"] : $join; $this->_generic->useModel(SLS_String::tableToClass($join),$this->_db_alias,"user"); $joinClass = ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($join); $joinObject = new $joinClass(); $joinColumns = $joinObject->getColumns(); if (is_array($joinColumns) && in_array("pk_lang",$joinColumns)) array_push($this->_where, array("column" => $join.".pk_lang", "value" => $this->_lang->getLang(), "mode" => "equal")); } } } // fk on the same model if (!empty($fkRecursiveExists)) $this->_where[] = array("column" => $this->_table.".".$fkRecursiveExists, "value" => "", "mode" => "null"); // group by PK if (empty($this->_group)) $this->_group = array($this->_object->getPrimaryKey()); // order by position asc or PK desc if (empty($this->_order)) $this->_order = (empty($positionExists)) ? array(array("column" => $this->_object->getPrimaryKey(), "order" => "DESC")) : array(array("column" => $positionExists, "order" => "ASC")); // limit at 0, 20 if (empty($this->_limit)) { if (!empty($lengthExists) && $lengthExists > 0) $this->_limit = array("start" => "0", "length" => $lengthExists); else $this->_limit = array("start" => "0", "length" => "20"); } # /Default params # Page infos $this->_xml->startTag("page"); $this->_xml->startTag("model"); $this->_xml->addFullTag("db",$this->_db_alias,true); $this->_xml->addFullTag("table",$this->_table,true); $this->_xml->addFullTag("label",$comment = trim((empty($commentsTable[$this->_table])) ? $this->_table : $commentsTable[$this->_table]),true); $this->_xml->startTag("labels_html"); $comments = explode(" ",$comment); foreach($comments as $comment) $this->_xml->addFullTag("label_html",$comment,true); $this->_xml->endTag("labels_html"); $this->_xml->addFullTag("pk",$this->_object->getPrimaryKey(),true); $this->_xml->endTag("model"); $this->_xml->startTag("joins"); foreach($this->_join as $joinTable) { $this->_xml->startTag("join"); $this->_xml->addFullTag("db",$this->_db_alias,true); $this->_xml->addFullTag("table",$joinTable["table"],true); $this->_xml->addFullTag("column",$joinTable["column"],true); $this->_xml->addFullTag("label",$comment = trim((empty($commentsTable[$joinTable["table"]])) ? $joinTable["table"] : $commentsTable[$joinTable["table"]]),true); $this->_xml->startTag("labels_html"); $comments = explode(" ",$comment); foreach($comments as $comment) $this->_xml->addFullTag("label_html",$comment,true); $this->_xml->endTag("labels_html"); $this->_xml->endTag("join"); } $this->_xml->endTag("joins"); $pkLangWhereFound = false; $this->_xml->startTag("wheres"); foreach($this->_where as $clause) { $table = (SLS_String::contains($clause["column"],".")) ? SLS_String::substrBeforeFirstDelimiter($clause["column"],".") : $this->_table; $column = (SLS_String::contains($clause["column"],".")) ? SLS_String::substrAfterFirstDelimiter($clause["column"],".") : $clause["column"]; if ($column != "pk_lang" || ($column == "pk_lang" && !$pkLangWhereFound)) { if ($column == "pk_lang" && !$pkLangWhereFound) $pkLangWhereFound = true; $this->_xml->startTag("where"); $this->_xml->addFullTag("table",$table,true); $this->_xml->addFullTag("column",$column,true); $this->_xml->startTag("values"); if (is_array($clause["value"])) { foreach($clause["value"] as $clauseValue) $this->_xml->addFullTag("value",$clauseValue,true); } else $this->_xml->addFullTag("value",$clause["value"],true); $this->_xml->endTag("values"); $this->_xml->addFullTag("mode",$clause["mode"],true); $this->_xml->endTag("where"); } } $this->_xml->endTag("wheres"); $this->_xml->startTag("groups"); foreach($this->_group as $groupColumn) $this->_xml->addFullTag("group",(SLS_String::contains($groupColumn,".")) ? SLS_String::substrAfterFirstDelimiter($groupColumn,".") : $groupColumn,true); $this->_xml->endTag("groups"); $this->_xml->startTag("order"); $this->_xml->addFullTag("column",(SLS_String::contains($this->_order[0]["column"],".")) ? SLS_String::substrAfterFirstDelimiter($this->_order[0]["column"],".") : $this->_order[0]["column"],true); $this->_xml->addFullTag("way",$this->_order[0]["order"],true); $this->_xml->endTag("order"); $page = ($this->_http->getParam("page") > 1) ? $this->_http->getParam("page") : 1; $this->_xml->startTag("limit"); $this->_xml->addFullTag("start",$this->_limit["start"] = ($page < 2) ? 0 : (($page-1) * $this->_limit["length"]),true); $this->_xml->addFullTag("length",$this->_limit["length"],true); $this->_xml->endTag("limit"); $countWhere = $this->_where; if (!empty($fkRecursiveExists)) { for($i=0 ; $i<$count=count($countWhere) ; $i++) { if ($countWhere[$i]["column"] == $this->_table.".".$fkRecursiveExists) { unset($countWhere[$i]); break; } } } $this->_xml->addFullTag("total",$this->_object->countModels($this->_table,$this->_join,$countWhere,$this->_group),true); $this->_xml->endTag("page"); # /Page infos # Recordsets $recordsets = $this->_object->searchModels($this->_table,$this->_join,$this->_where,$this->_group,$this->_order,$this->_limit); $this->_xml = $this->formatRecordsets($this->_xml,$recordsets,$fkRecursiveExists); # Recordsets # Urls $this->_xml->startTag("urls"); $this->_xml->addFullTag("list",($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"List".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)))) ? $this->_generic->getFullPath($this->_boController,"List".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)) : "",true,array("authorized" => (SLS_BoRights::isAuthorized("read",ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table))) ? "true" : "false")); $this->_xml->addFullTag("add",($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"Add".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)))) ? $this->_generic->getFullPath($this->_boController,"Add".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)) : "",true,array("authorized" => (SLS_BoRights::isAuthorized("add",ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table))) ? "true" : "false")); $this->_xml->addFullTag("populate",$this->_generic->getFullPath($this->_boController,"BoPopulate",array("Db" => ucfirst(strtolower($this->_db_alias)), "Table" => $this->_table)),true,array("authorized" => (SLS_BoRights::getAdminType() == "developer") ? "true" : "false")); $this->_xml->addFullTag("edit",($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"Modify".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)))) ? $this->_generic->getFullPath($this->_boController,"Modify".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table),array("id" => ""),false) : "",true,array("authorized" => (SLS_BoRights::isAuthorized("edit",ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table))) ? "true" : "false")); $this->_xml->addFullTag("clone",($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"Clone".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)))) ? $this->_generic->getFullPath($this->_boController,"Clone".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table),array("id" => ""),false) : "",true,array("authorized" => (SLS_BoRights::isAuthorized("clone",ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table))) ? "true" : "false")); $this->_xml->addFullTag("delete",($this->_generic->actionIdExists($this->_generic->getActionId($this->_boController,"Delete".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)))) ? $this->_generic->getFullPath($this->_boController,"Delete".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table),array("id" => ""),false) : "",true,array("authorized" => (SLS_BoRights::isAuthorized("delete",ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table))) ? "true" : "false")); $this->_xml->endTag("urls"); # /Urls # Remember admin settings $nodeExists = $this->_xmlRight->getTag("//sls_configs/entry[@login='******']/@login"); if (!empty($nodeExists)) { $this->_xmlRight->setTag("//sls_configs/entry[@login='******']/settings/setting[@key='list_nb_by_page']",$this->_limit["length"]); $this->_xmlRight->saveXML($this->_generic->getPathConfig("configSls")."/rights.xml"); $this->_xmlRight->refresh(); } # /Remember admin settings # Session remember $rememberList = $this->_session->getParam("SLS_BO_LIST"); if (empty($rememberList)) $rememberList = array(); $url = SLS_String::substrAfterFirstDelimiter($_SERVER["REQUEST_URI"],(($_SERVER['SCRIPT_NAME'] != "/index.php") ? SLS_String::substrBeforeFirstDelimiter($_SERVER['SCRIPT_NAME'],"/index.php")."/" : "/")); if (SLS_String::endsWith($url,$this->_generic->getSiteConfig("defaultExtension"))) $url = SLS_String::substrBeforeLastDelimiter($url,".".$this->_generic->getSiteConfig("defaultExtension")); $query = http_build_query($_POST,"","/"); $query = str_replace(array("%5B","%5D","=/","="),array("[","]","=|sls_empty|/","/"),preg_replace('/%5B[0-9]+%5D/simU', '%5B%5D', $query)); if (SLS_String::endsWith(trim($query),"/")) $query = SLS_String::substrBeforeLastDelimiter(trim($query),"/"); if (!empty($query)) $url .= "/".$query.((count(explode("/",$query))%2 != 0) ? "/|sls_empty|" : ""); if (SLS_String::endsWith($url,"/")) $url = SLS_String::substrBeforeLastDelimiter($url,"/"); $url .= ".".$this->_generic->getSiteConfig("defaultExtension"); $rememberList[$this->_db_alias."_".$this->_table] = $url; $this->_session->setParam("SLS_BO_LIST",$rememberList); # /Session remember return $this->_xml; }
/** * Update one table * * @access public * @param string $table table name * @param int $id the pk * @param array $array the values * @return bool $updated true if updated, else false * @since 1.0 */ public function updateTable($table, $id, $array) { if ($this->_generic->useModel(SLS_String::tableToClass($table),$this->_db->getCurrentDb(),"user") || $this->_generic->useModel(SLS_String::tableToClass($table),$this->_db->getCurrentDb(),"sls")) { $className = ucfirst(strtolower($this->_db->getCurrentDb()))."_".SLS_String::tableToClass($table); $object = new $className(); $cols = array(); foreach($object->getParams() as $key => $value) array_push($cols,$key); } else return false; if ($object->getModel($id) === false) return false; if (!is_array($array) || count($array) == 0) return false; $insertSql = ''; foreach ($array as $key => $value) $insertSql .= ' `'.$key.'` = '.$this->quote($value).','; if (!empty($insertSql)) { $insertSql = substr($insertSql, 0, (strlen($insertSql)-1)); $sql = "UPDATE "."\n". " `".$table."` "."\n". "SET "."\n". " ".$insertSql."\n". "WHERE "."\n". " `".$cols[0]."` = ".$this->quote($id)."\n". "LIMIT "."\n". " 0, 1"; try { $this->update($sql); } catch (Exception $e) { SLS_Tracing::addTrace($e,true); return false; } } return true; }
/** * Get foreign key recordsets of a given table * * @param string $tableSource * @param string $tableFk * @param string $pkFk * @param array $columnsToSelect * @param string $clause * @param string $lang * @param string $value * @param int $nb * @param int $id * @since 1.0.6 */ public function fkAC($tableSource,$tableFk,$pkFk,$columnsToSelect,$clause="",$lang="",$value="",$nb=10,$id=0) { $xmlFk = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."fks.xml")); $currentDb = $this->_db->getCurrentDb(); if (!empty($id)) { $sql = "SELECT * FROM "; for($i=0 ; $i<$count=count($tableFk) ; $i++) { if(!$this->_db->tableExists($tableFk[$i])) continue; if ($i> 0) { $currentFkTable = $tableFk[$i]; $sourceFkTable = ($i==0) ? $tableSource : $tableFk[0]; $columnFk = $xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($currentDb."_".$sourceFkTable)."' and @tablePk='".strtolower($currentDb)."_".SLS_String::tableToClass($currentFkTable)."']/@columnFk"); $this->_generic->useModel(SLS_String::tableToClass($currentFkTable), $currentDb); $currentFkClass = ucfirst(strtolower($currentDb))."_".SLS_String::tableToClass($currentFkTable); $currentFkObject = new $currentFkClass(); $sql .= "LEFT JOIN `".$tableFk[$i]."` "; } $sql .= "`".$tableFk[$i]."` "; if ($i > 0 && !empty($columnFk)) { $sql .= "ON `".$tableFk[0]."`.`".$columnFk."` = `".$tableFk[$i]."`.`".$currentFkObject->getPrimaryKey()."` "; } } $tableAlias = (!empty($tableFk)) ? "`".$tableFk[0]."`." : ""; $sql .= "WHERE ".$tableAlias."`".$pkFk."` = ".$id." "; if (!empty($lang)) $sql .= "AND ".$tableAlias."`pk_lang` = ".$this->_db->quote($lang)." "; $sql .= "GROUP BY ".$tableAlias."`".$pkFk."` ORDER BY ".$clause." ASC LIMIT 0,".$nb; $results = $this->_db->select($sql); } else { if (empty($clause) || empty($value)) { $sql = "SELECT COUNT(*) AS total, ".implode(',',$columnsToSelect)." FROM `".$tableSource."` "; for($i=0 ; $i<$count=count($tableFk) ; $i++) { if(!$this->_db->tableExists($tableFk[$i])) continue; $currentFkTable = $tableFk[$i]; $sourceFkTable = ($i==0) ? $tableSource : $tableFk[0]; $columnFk = $xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($currentDb."_".$sourceFkTable)."' and @tablePk='".strtolower($currentDb)."_".SLS_String::tableToClass($currentFkTable)."']/@columnFk"); $this->_generic->useModel(SLS_String::tableToClass($currentFkTable), $currentDb); $currentFkClass = ucfirst(strtolower($currentDb))."_".SLS_String::tableToClass($currentFkTable); $currentFkObject = new $currentFkClass(); $sql .= "LEFT JOIN `".$tableFk[$i]."` ON `".$sourceFkTable."`.`".$columnFk."` = `".$tableFk[$i]."`.`".$currentFkObject->getPrimaryKey()."` "; } $tableAlias = (!empty($tableFk)) ? "`".$tableFk[0]."`." : ""; if (!empty($lang)) $sql .= "WHERE ".$tableAlias."`pk_lang` = ".$this->_db->quote($lang)." "; $sql .= "GROUP BY ".$tableAlias."`".$pkFk."` LIMIT 0,".$nb; $results = $this->_db->select($sql); $nbResults = count($results); if ($nbResults < $nb && count($tableFk) > 0) { $pks = array(); for($i=0 ; $i<$count=count($results) ; $i++) $pks[] = $results[$i]->{$pkFk}; $table = array_shift($tableFk); $sql = "SELECT 0 AS total, ".implode(',',$columnsToSelect)." FROM `".$table."` "; for($i=0 ; $i<$count=count($tableFk) ; $i++) { if(!$this->_db->tableExists($tableFk[$i])) continue; $currentFkTable = $tableFk[$i]; $sourceFkTable = $table; $columnFk = $xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($currentDb."_".$sourceFkTable)."' and @tablePk='".strtolower($currentDb)."_".SLS_String::tableToClass($currentFkTable)."']/@columnFk"); $this->_generic->useModel(SLS_String::tableToClass($currentFkTable), $currentDb); $currentFkClass = ucfirst(strtolower($currentDb))."_".SLS_String::tableToClass($currentFkTable); $currentFkObject = new $currentFkClass(); $sql .= "LEFT JOIN `".$tableFk[$i]."` ON `".$sourceFkTable."`.`".$columnFk."` = `".$tableFk[$i]."`.`".$currentFkObject->getPrimaryKey()."` "; } $tableAlias = (!empty($table)) ? "`".$table."`." : ""; $sql .= "WHERE 1=1 "; if (!empty($lang)) $sql .= "AND ".$tableAlias."`pk_lang` = ".$this->_db->quote($lang)." "; if (!empty($pks)) $sql .= "AND ".$tableAlias."`".$pkFk."` NOT IN (".implode(',',$pks).") "; $sql .= "GROUP BY ".$tableAlias."`".$pkFk."` LIMIT 0,".($nb - $nbResults); $results = array_merge($results,$this->_db->select($sql)); } } else { $sql = "SELECT * FROM "; for($i=0 ; $i<$count=count($tableFk) ; $i++) { if(!$this->_db->tableExists($tableFk[$i])) continue; if ($i> 0) { $currentFkTable = $tableFk[$i]; $sourceFkTable = $tableFk[0]; $columnFk = $xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($currentDb."_".$sourceFkTable)."' and @tablePk='".strtolower($currentDb)."_".SLS_String::tableToClass($currentFkTable)."']/@columnFk"); $sql .= (!empty($columnFk)) ? "LEFT JOIN " : "NATURAL JOIN "; } $sql .= "`".$tableFk[$i]."` "; if ($i > 0 && !empty($columnFk)) { $this->_generic->useModel(SLS_String::tableToClass($currentFkTable), $currentDb); $currentFkClass = ucfirst(strtolower($currentDb))."_".SLS_String::tableToClass($currentFkTable); $currentFkObject = new $currentFkClass(); $sql .= "ON `".$tableFk[0]."`.`".$columnFk."` = `".$tableFk[$i]."`.`".$currentFkObject->getPrimaryKey()."` "; } } $tableAlias = (!empty($tableFk)) ? "`".$tableFk[0]."`." : ""; $sql .= "WHERE ".$clause." LIKE LOWER(".$this->_db->quote("%".$value."%").") "; if (!empty($lang)) $sql .= "AND ".$tableAlias."`pk_lang` = ".$this->_db->quote($lang)." "; $sql .= "GROUP BY ".$tableAlias."`".$pkFk."` ORDER BY ".$clause." ASC LIMIT 0,".$nb; $results = $this->_db->select($sql); } } return $results; }
/** * Get the source code of a model from his table * * @param string $tableName the table name * @param string $db the alias of the database on which the model is located * @return string $contentM the source code */ protected function getModelSource($tableName,$db) { $arrayConvertTypes = array( 'varchar' => 'string', 'tinyint' => 'int', 'text' => 'string', 'date' => 'string', 'smallint' => 'int', 'mediumint' => 'int', 'int' => 'int', 'bigint' => 'int', 'float' => 'float | int', 'double' => 'float | int', 'decimal' => 'float', 'datetime' => 'string', 'timestamp' => 'int', 'time' => 'string | int', 'year' => 'int', 'char' => 'string', 'tinyblob' => 'string', 'tinytext' => 'string', 'blob' => 'string', 'mediumblob'=> 'string', 'mediumtext'=> 'string', 'longblob' => 'string', 'longtext' => 'string', 'enum' => 'string', 'set' => 'string', 'bool' => 'int', 'binary' => 'string', 'varbinary' => 'string' ); $sql = SLS_Sql::getInstance(); $className = ucfirst($db)."_".SLS_String::tableToClass($tableName); $file = ucfirst($db).".".SLS_String::tableToClass($tableName); // Create empty source $contentM = ""; $primaryKey = ""; $multiLanguage = 'false'; $sql->changeDb($db); $columns = $sql->showColumns($tableName); $fileName = ucfirst($db).".".SLS_String::tableToClass($tableName).".model.php"; $primaryKey = ""; $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml"); $xmlType = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml"); $xmlFk = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/filters.xml"); $xmlFilter = new SLS_XMLToolbox($pathsHandle); $fkMethods = array(); $uniquesMultilang = array(); // Create Model $contentM = '<?php'."\n". '/**'."\n". ' * Object '.$className.''."\n". ' * @author SillySmart'."\n". ' * @copyright SillySmart'."\n". ' * @package Mvc.Models.Objects'."\n". ' * @see Sls.Models.Core.SLS_FrontModel'."\n". ' * @since 1.0'."\n". ' */'."\n". 'class '.$className.' extends SLS_FrontModel'."\n". '{'."\n". t(1).'/**'."\n". t(1).' * Class variables'."\n". t(1).' */'."\n"; $pkFound = false; for($i=0 ; $i<$count=count($columns) ; $i++) { if (!$pkFound && $columns[$i]->Key == "PRI") { $primaryKey = SLS_String::removePhpChars($columns[$i]->Field); $pkFound = true; } if ($columns[$i]->Field == "pk_lang" && $columns[$i]->Key == "PRI") $multiLanguage = 'true'; $contentM .= t(1).'protected $__'.SLS_String::removePhpChars($columns[$i]->Field).';'."\n"; } $contentM .= t(1).'protected $_table = "'.$tableName.'";'."\n". t(1).'protected $_db = "'.$db.'";'."\n". t(1).'protected $_primaryKey = "'.$primaryKey.'";'."\n"; // Show create table if ($multiLanguage == 'true') { $create = array_shift($sql->select("SHOW CREATE TABLE `".$tableName."`")); $instructions = array_map("trim",explode("\n",$create->{Create." ".Table})); foreach($instructions as $instruction) { if (SLS_String::startsWith($instruction,"UNIQUE KEY")) { $uniqueColumns = explode(",",SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($instruction,"("),")")); if (count($uniqueColumns) == 2 && in_array("`pk_lang`",$uniqueColumns)) { $uniqueColumn = array_shift($uniqueColumns); if ($uniqueColumn == "`pk_lang`") $uniqueColumn = array_shift($uniqueColumns); $uniquesMultilang[] = str_replace("`","",$uniqueColumn); } } } } // Get FKs to create access reference functions $fks = $xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".$db."_".$tableName."']",array("columnFk","tablePk")); $fkFunctions = ""; $fkCursor = ""; for($i=0 ; $i<$count=count($fks) ; $i++) { $tablePk = $fks[$i]["attributes"][1]["value"]; $functionName = SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($tablePk,"_"))," ",false)),""); $functionName{0} = strtolower($functionName{0}); $functionNameModified = $functionName; while(in_array($functionNameModified,$fkMethods)) $functionNameModified = $functionName."_".($fkCursor = (empty($fkCursor)) ? 2 : $fkCursor+1); $fkMethods[] = $functionNameModified; $fkFunctions .= "'".$functionNameModified."'"; if ($i < ($count - 1)) $fkFunctions .= ", "; } $contentM .= t(1).'protected $_fks = array('.$fkFunctions.');'."\n"; $contentM .= t(1).'public $_typeErrors = array();'."\n\n". t(1).'/**'."\n". t(1).' * Constructor '.$className.''."\n". t(1).' * @author SillySmart'."\n". t(1).' * @copyright SillySmart'."\n". t(1).' * @param bool $mutlilanguage true if multilanguage content, else false'."\n". t(1).' */'."\n". t(1).'public function __construct($multilanguage='.$multiLanguage.')'."\n". t(1).'{'."\n". t(2).'parent::__construct($multilanguage);'."\n". t(2).'$this->buildDefaultValues();'."\n". t(1).'}'."\n\n"; $contentM .= t(1).'/**'."\n". t(1).' * Build default values for specific columns'."\n". t(1).' * @author SillySmart'."\n". t(1).' * @copyright SillySmart'."\n". t(1).' */'."\n". t(1).'public function buildDefaultValues()'."\n". t(1).'{'."\n"; for($i=0 ; $i<$count=count($columns) ; $i++) { $columnType = (strpos($columns[$i]->Type, "(")) ? SLS_String::substrBeforeFirstDelimiter(strtolower($columns[$i]->Type), "(") : $columns[$i]->Type; $functionName = "set".SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(str_replace("_"," ",SLS_String::removePhpChars($columns[$i]->Field))," ",false)),""); if ($columns[$i]->Null == "NO") { // Dates if ($columnType == "date" || $columnType == "datetime" || $columnType == "timestamp" || $columnType == "year" || $columnType == "time") { switch ($columnType) { case "date": $contentM .= t(2).'$this->__'.$columns[$i]->Field.' = date("Y-m-d");'."\n"; break; case "time": $contentM .= t(2).'$this->__'.$columns[$i]->Field.' = date("H:i:s");'."\n"; break; case "datetime": $contentM .= t(2).'$this->__'.$columns[$i]->Field.' = date("Y-m-d H:i:s");'."\n"; break; case "timestamp": $contentM .= t(2).'$this->__'.$columns[$i]->Field.' = date("Y-m-d H:i:s");'."\n"; break; case "year": $contentM .= t(2).'$this->__'.$columns[$i]->Field.' = date("Y");'."\n"; break; } } // Uniqid $result = $xmlType->getTags("//sls_configs/entry[@table='".$db."_".$tableName."' and @column='".SLS_String::removePhpChars($columns[$i]->Field)."' and @type='uniqid']"); if (!empty($result)) { $contentM .= t(2).'$this->__'.$columns[$i]->Field.' = substr(md5(time().substr(sha1(microtime()),0,rand(12,25))),mt_rand(1,20),40);'."\n"; } // IP Address $result = array_shift($xmlType->getTags("//sls_configs/entry[@table='".$db."_".$tableName."' and @column='".SLS_String::removePhpChars($columns[$i]->Field)."' and (@type='ip_both' or @type='ip_v4' or @type='ip_v6')]/@type")); if (!empty($result)) { $contentM .= t(2).'$this->__'.$columns[$i]->Field.' = $_SERVER["REMOTE_ADDR"];'."\n"; } } } $contentM .= t(1).'}'."\n\n"; for($i=0 ; $i<$count=count($columns) ; $i++) { $isPassword = false; if ($columns[$i]->Key != "PRI") { $column = SLS_String::removePhpChars($columns[$i]->Field); $columnType = (strpos($columns[$i]->Type, "(")) ? SLS_String::substrBeforeFirstDelimiter(strtolower($columns[$i]->Type), "(") : $columns[$i]->Type; $functionName = "set".SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(str_replace("_"," ",$column)," ",false)),""); $contentM .= t(1).'/**'."\n". t(1).' * Set the value of '.$column.''."\n". t(1).' * Errors can be catched with the public variable $this->_typeErrors[\''.$column.'\']'."\n". t(1).' * @author SillySmart'."\n". t(1).' * @copyright SillySmart'."\n". t(1).' * @param '.$arrayConvertTypes[$columnType].' $value'."\n". t(1).' * @return bool true if updated, false if not'."\n". t(1).' */'."\n". t(1).'public function '.$functionName.'($value'; if ($columns[$i]->Default !== null) $contentM .= '="'.SLS_String::addSlashesToString($columns[$i]->Default,false).'"'; $contentM .= ')'."\n"; $contentM .= t(1).'{'."\n"; // Nullable case if ($columns[$i]->Null == "YES") { $contentM .= t(2).'if (empty($value))'."\n". t(2).'{'."\n". t(3).'$this->__set(\''.$column.'\', $value);'."\n". t(3).'$this->flushError(\''.$column.'\');'."\n". t(3).'return true;'."\n". t(2).'}'."\n\n"; } // Recover Fk $res = $xmlFk->getTagsByAttributes("//sls_configs/entry",array("tableFk","columnFk"),array($db."_".$tableName,$column)); if (!empty($res)) { $tableTm = substr($res,(strpos($res,'tablePk="')+9),(strpos($res,'"/>')-(strpos($res,'tablePk="')+9))); $tablePk = SLS_String::substrAfterFirstDelimiter($tableTm,"_"); $dbPk = SLS_String::substrBeforeFirstDelimiter($tableTm,"_"); $contentM .= t(2).'$this->_generic->useModel("'.SLS_String::tableToClass($tablePk).'","'.$dbPk.'","user");'."\n". t(2).'$object = new '.ucfirst($dbPk).'_'.SLS_String::tableToClass($tablePk).'();'."\n". t(2).'if ($object->getModel($value) === false)'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_KEY";'."\n". t(3).'return false;'."\n". t(2).'}'."\n". t(2).'$this->__set(\''.$column.'\', $value);'."\n". t(2).'$this->flushError(\''.$column.'\');'."\n". t(2).'return true;'."\n". t(1).'}'."\n\n"; } // If not a fk else { // Check filters $results = $xmlFilter->getTags("//sls_configs/entry[@table='".$db."_".$tableName."' and @column='".$column."']/@filter"); for($j=0 ; $j<$countJ=count($results) ; $j++) { switch($results[$j]) { case "hash": $isPassword = true; $contentM .= t(2).'if (empty($value))'."\n". t(3).'$value = $this->__'.$column.';'."\n"; break; default: $contentM .= t(2).'$value = SLS_String::filter($value,"'.$results[$j].'");'."\n"; break; } } if (count($results) > 0) $contentM .= "\n"; $result = $xmlType->getTags("//sls_configs/entry[@table='".$db."_".$tableName."' and @column='".$column."']"); // Force specific type numeric if ($this->containsRecursive($columnType,array("int","float","double","decimal","real"))) { $typeExists =($xmlType->getTag("//sls_configs/entry[@table='".$db."_".$tableName."' and @column='".$column."']/@type")); if (empty($typeExists)) { file_get_contents($this->_generic->getFullPath("SLS_Bo", "AddType", array("name" => strtolower($db."_".$tableName), "column" => $column, "reload" => "true", "type" => "num", "num" => (SLS_String::contains($columns[$i]->Type,"unsigned")) ? "gte" : "all", "token" => sha1(substr($this->_generic->getSiteConfig("privateKey"), 0, 3).substr($this->_generic->getSiteConfig("privateKey"), strlen($this->_generic->getSiteConfig("privateKey"))-3))), true)); $xmlType->refresh(); } } if (!empty($result)) { $type = ""; $array = array('color','uniqid','email','ip_both','ip_v4','ip_v6','url','file_all','file_img','position','num_all','num_gt','num_gte','num_lt','num_lte','complexity'); for($j=0 ; $j<count($array) ; $j++) { $result = $xmlType->getTags("//sls_configs/entry[@table='".$db."_".$tableName."' and @column='".$column."' and @type='".$array[$j]."']"); if (!empty($result)) { $type = $array[$j]; switch($type) { case "position": $contentM .= t(2).'if ($value == "" || $value == null || !is_int(intval($value)) || intval($value) < 0)'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n". t(2).'$qbd = new SLS_QueryBuilder();'."\n". t(2).'$old_'.$column.' = $this->__'.$column.';'."\n". t(2).'if (empty($old_'.$column.'))'."\n". t(2).'{'."\n". t(3).'$qbd->update()'."\n". t(4).'->from("'.$tableName.'")'."\n". t(4).'->set("`'.$column.'` = `'.$column.'` + 1")'."\n". t(4).'->where($qbd->expr()->gte("'.$column.'",$value))'."\n". t(4).'->groupBy("`'.$primaryKey.'`")'."\n". t(4).'->execute();'."\n". t(2).'}'."\n". t(2).'else'."\n". t(2).'{'."\n". t(3).'if ($old_'.$column.' != $value)'."\n". t(3).'{'."\n". t(4).'$qbd->update()'."\n". t(5).'->from("'.$tableName.'")'."\n". t(5).'->set("`'.$column.'` = `'.$column.'` ".(($old_'.$column.' < $value) ? "-" : "+")." 1")'."\n". t(5).'->where($qbd->expr()->{($old_'.$column.' < $value) ? "gt" : "gte"}("'.$column.'",($old_'.$column.' < $value) ? $old_'.$column.' : $value))'."\n". t(5).'->whereAnd($qbd->expr()->{($old_'.$column.' < $value) ? "lte" : "lt"}("'.$column.'",($old_'.$column.' < $value) ? $value : $old_'.$column.'))'."\n". t(5).'->groupBy("`'.$primaryKey.'`")'."\n". t(5).'->execute();'."\n". t(4).'$qbd->update()'."\n". t(5).'->from("'.$tableName.'")'."\n". t(5).'->set($qbd->expr()->eq("'.$column.'",$value))'."\n". t(5).'->where($qbd->expr()->eq("'.$primaryKey.'",$this->__'.$primaryKey.'))'."\n". t(5).'->groupBy("`'.$primaryKey.'`")'."\n". t(5).'->execute();'."\n". t(3).'}'."\n". t(2).'}'."\n\n"; break; case "color": $contentM .= t(2).'if (!ctype_xdigit($value))'."\n"; $contentM .= t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; break; case "uniqid": $contentM .= t(2).'if (empty($value))'."\n". t(3).'$value = substr(md5(time().substr(sha1(microtime()),0,rand(12,25))),mt_rand(1,20),40);'."\n\n"; break; case "email": $contentM .= t(2).'if (!SLS_String::validateEmail($value))'."\n"; $contentM .= t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; break; case "url": $contentM .= t(2).'if (!SLS_String::isValidUrl($value))'."\n"; $contentM .= t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; break; case (in_array($type,array("ip_both","ip_v4","ip_v6"))): $type = SLS_String::substrAfterLastDelimiter($type,"_"); $contentM .= t(2).'if (empty($value))'."\n". t(3).'$value = $_SERVER["REMOTE_ADDR"];'."\n\n"; $contentM .= t(2).'if (!SLS_String::isIp($value,"'.$type.'"))'."\n"; $contentM .= t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; break; case (in_array($type,array("num_all","num_gt","num_gte","num_lt","num_lte"))): $type = SLS_String::substrAfterLastDelimiter($type,"_"); switch($type) { case "gt": $operator = "<="; break; case "gte": $operator = "<"; break; case "lt": $operator = ">="; break; case "lte": $operator = ">"; break; } if ($type != 'all') { $contentM .= t(2).'if ($value '.$operator.' 0)'."\n"; $contentM .= t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; } break; case "complexity": $rules = $xmlType->getTag("//sls_configs/entry[@table='".$db."_".$tableName."' and @column='".$column."']/@rules"); $rules = explode("|",$rules); $complexityMin = false; foreach($rules as $rule) { if (SLS_String::startsWith($rule,"min")) { $complexityMin = SLS_String::substrAfterFirstDelimiter($rule,"min"); unset($rules[array_shift(array_keys($rules,$rule))]); } else $rules[array_shift(array_keys($rules,$rule))] = '"'.$rule.'"'; } $rules = implode(",",$rules); $contentM .= t(2).'$complexity = array('.$rules.');'."\n". t(2).'if ((in_array("lc",$complexity) && preg_match(\'`[[:lower:]]`\', $value) === 0) || (in_array("uc",$complexity) && preg_match(\'`[[:upper:]]`\', $value) === 0) || (in_array("digit",$complexity) && preg_match(\'`[[:digit:]]`\', $value) === 0) || (in_array("wild",$complexity) && preg_match(\'`[^a-zA-Z0-9]`\', $value) === 0))'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_COMPLEXITY";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; if (is_numeric($complexityMin)) $contentM .= t(2).'if (strlen(utf8_decode($value)) < '.$complexityMin.')'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_LENGTH";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; break; case "file_all": $contentM .= t(2).'if (!empty($this->__'.$column.') && $this->__'.$column.' != "'.$columns[$i]->Default.'" && $this->__'.$column.' != $value && SLS_String::startsWith((is_array($value)) ? ((array_key_exists("data",$value)) ? $value["data"]["tmp_name"] : $value["tmp_name"]) : $value, $this->getTable()."/"))'."\n". t(2).'{'."\n". t(3).'$this->deleteFiles(array("'.$column.'"));'."\n". t(3).'$this->__'.$column.' = "__Uploads/__Deprecated/".$this->__'.$column.';'."\n". t(3).'$this->save();'."\n". t(2).'}'."\n\n". t(2).'if (is_array($value))'."\n". t(2).'{'."\n". t(3).'if (array_key_exists("size",$value) && is_array($value["size"]))'."\n". t(4).'$size = $value["size"];'."\n". t(3).'if (array_key_exists("data",$value))'."\n". t(4).'$value = $value["data"];'."\n"; if ($columns[$i]->Null == "YES") $contentM .= t(3).'if ($value["error"] == 4)'."\n". t(3).'{'."\n". t(4).'$this->__set(\''.$column.'\',(empty($this->__'.$column.')) ? "" : $this->__'.$column.');'."\n". t(4).'$this->flushError(\''.$column.'\');'."\n". t(4).'return true;'."\n". t(3).'}'."\n"; $contentM .= t(3).'if ($value["error"] == 1 || $value["error"] == 2)'."\n". t(3).'{'."\n". t(4).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_SIZE";'."\n". t(4).'return false;'."\n". t(3).'}'."\n". t(3).'else'."\n". t(3).'{'."\n". t(4).'try {'."\n". t(5).'if (!file_exists($this->_generic->getPathConfig("files").$this->_table))'."\n". t(6).'mkdir($this->_generic->getPathConfig("files").$this->_table,0755);'."\n\n". t(5).'$token = substr(md5(time().substr(sha1(microtime()),0,rand(5,12))),mt_rand(1,20),10);'."\n". t(5).'$fileName = SLS_String::sanitize(SLS_String::substrBeforeLastDelimiter($value["name"],"."),"_")."_".$token.".".SLS_String::substrAfterLastDelimiter($value["name"],".");'."\n". t(5).'rename($value["tmp_name"],$this->_generic->getPathConfig("files").$this->_table."/".$fileName);'."\n". t(5).'$value = $this->_table."/".$fileName;'."\n". t(4).'}'."\n". t(4).'catch (Exception $e) {'."\n". t(5).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_WRITE";'."\n". t(5).'return false;'."\n". t(4).'}'."\n". t(3).'}'."\n". t(2).'}'."\n\n"; break; case "file_img": $contentM .= t(2).'if (!empty($this->__'.$column.') && $this->__'.$column.' != "'.$columns[$i]->Default.'" && $this->__'.$column.' != $value && SLS_String::startsWith((is_array($value)) ? ((array_key_exists("data",$value)) ? $value["data"]["tmp_name"] : $value["tmp_name"]) : $value, $this->getTable()."/"))'."\n". t(2).'{'."\n". t(3).'$this->deleteFiles(array("'.$column.'"));'."\n". t(3).'$this->__'.$column.' = "__Uploads/__Deprecated/".$this->__'.$column.';'."\n". t(3).'$this->save();'."\n". t(2).'}'."\n\n". t(2).'if (is_array($value))'."\n". t(2).'{'."\n". t(3).'if (array_key_exists("size",$value) && is_array($value["size"]))'."\n". t(4).'$size = $value["size"];'."\n". t(3).'if (array_key_exists("data",$value))'."\n". t(4).'$value = $value["data"];'."\n"; if ($columns[$i]->Null == "YES") $contentM .= t(3).'if ($value["error"] == 4)'."\n". t(3).'{'."\n". t(4).'$this->__set(\''.$column.'\',(empty($this->__'.$column.')) ? "" : $this->__'.$column.');'."\n". t(4).'$this->flushError(\''.$column.'\');'."\n". t(4).'return true;'."\n". t(3).'}'."\n"; $contentM .= t(3).'if ($value["error"] == 1 || $value["error"] == 2)'."\n". t(3).'{'."\n". t(4).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_SIZE";'."\n". t(4).'return false;'."\n". t(3).'}'."\n". t(3).'else'."\n". t(3).'{'."\n". t(4).'try {'."\n". t(5).'if (!file_exists($this->_generic->getPathConfig("files").$this->_table))'."\n". t(6).'mkdir($this->_generic->getPathConfig("files").$this->_table,0755);'."\n\n". t(5).'$tmpName = $value["tmp_name"];'."\n". t(5).'if (!SLS_String::startsWith($tmpName,$this->_generic->getPathConfig("files")) || !SLS_String::contains($tmpName,"."))'."\n". t(5).'{'."\n". t(6).'if (!file_exists($this->_generic->getPathConfig("files")."__Uploads"))'."\n". t(7).'@mkdir($this->_generic->getPathConfig("files")."__Uploads");'."\n". t(6).'if (!file_exists($this->_generic->getPathConfig("files")."__Uploads/__Deprecated"))'."\n". t(7).'@mkdir($this->_generic->getPathConfig("files")."__Uploads/__Deprecated");'."\n". t(6).'$newName = $this->_generic->getPathConfig("files")."__Uploads/__Deprecated/".SLS_String::substrAfterLastDelimiter($tmpName,"/").((!SLS_String::contains($tmpName,".")) ? ".".SLS_String::substrAfterLastDelimiter($value["name"],".") : "");'."\n". t(6).'rename($tmpName,$newName);'."\n". t(6).'$tmpName = $newName;'."\n". t(5).'}'."\n". t(5).'$token = substr(md5(time().substr(sha1(microtime()),0,rand(5,12))),mt_rand(1,20),10);'."\n". t(5).'$fileName = SLS_String::sanitize(SLS_String::substrBeforeLastDelimiter($value["name"],"."),"_")."_".$token;'."\n". t(5).'$extension = pathinfo($tmpName, PATHINFO_EXTENSION);'."\n\n". t(5).'// Check img'."\n". t(5).'$img = new SLS_Image($tmpName);'."\n". t(5).'if ($img->getParam("existed"))'."\n". t(5).'{'."\n". t(6).'// Default crop'."\n". t(6).'if (empty($size))'."\n". t(7).'$size = array("x" => "0", "y" => "0", "w" => $img->getParam("width"), "h" => $img->getParam("height"));'."\n\n". t(6).'// Crop image'."\n". t(6).'$img->crop($size["x"],$size["y"],$size["w"],$size["h"]);'."\n". t(6).'// Check thumbs'."\n". t(6).'$xmlType = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml"));'."\n". t(6).'$result = array_shift($xmlType->getTagsAttribute("//sls_configs/entry[@table=\'".$this->getDatabase()."_".$this->getTable()."\' and @column=\''.$column.'\' and @type=\'file_img\']","thumbs"));'."\n". t(6).'$thumbs = unserialize(str_replace("||#||",\'"\',$result["attribute"]));'."\n". t(6).'if (!empty($thumbs))'."\n". t(6).'{'."\n". t(7).'for($i=0 ; $i<$count=count($thumbs) ; $i++)'."\n". t(7).'{'."\n". t(8).'$img->transform($thumbs[$i]["width"],$thumbs[$i]["height"],$this->_generic->getPathConfig("files").$this->_table."/".$fileName.$thumbs[$i]["suffix"].".".$extension,$extension);'."\n". t(7).'}'."\n". t(6).'}'."\n\n". t(6).'// Move original'."\n". t(6).'rename($tmpName,$this->_generic->getPathConfig("files").$this->_table."/".$fileName.".".$extension);'."\n". t(5).'}'."\n". t(5).'else'."\n". t(5).'{'."\n". t(6).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(6).'return false;'."\n". t(5).'}'."\n". t(5).'$value = $this->_table."/".$fileName.".".$extension;'."\n". t(4).'}'."\n". t(4).'catch (Exception $e) {'."\n". t(5).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_WRITE";'."\n". t(5).'return false;'."\n". t(4).'}'."\n". t(3).'}'."\n". t(2).'}'."\n\n"; break; } break; } } } // Not Nullable if ($columns[$i]->Null == "NO") { $contentM .= t(2).'if ($value === "")'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_EMPTY";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; } if ($isPassword) { $result = array_shift($xmlFilter->getTagsAttribute("//sls_configs/entry[@table='".$db."_".$tableName."' and @column='".$column."']","hash")); $hash = (empty($result["attribute"])) ? "sha1" : $result["attribute"]; $contentM .= t(2).'if ($value != $this->__'.$column.')'."\n". t(3).'$value = SLS_String::filter($value,"hash","'.$hash.'");'."\n\n"; } // Not Nullable if ($columns[$i]->Null == "NO") { $contentM .= t(2).'if (is_null($value))'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_NULL";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; } // Check change $contentM .= t(2).'if ($this->__'.$column.' == $value)'."\n". t(2).'{'."\n". t(3).'$this->flushError(\''.$column.'\');'."\n". t(3).'return true;'."\n". t(2).'}'."\n\n"; // Unique if ($columns[$i]->Key == "UNI" || in_array($column,$uniquesMultilang)) { $contentM .= t(2).'if (!$this->isUnique(\''.SLS_String::addSlashes($column, 'QUOTES').'\',$value))'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_UNIQUE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; } // Float types if (SLS_String::startsWith($columnType,"float") || SLS_String::startsWith($columnType,"double") || SLS_String::startsWith($columnType,"decimal")) { $length = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter(SLS_String::substrBeforeLastDelimiter($columns[$i]->Type, ')'), '('), ","); if (empty($length)) $length = "25"; $contentM .= t(2).'$decimal = (strpos($value, \',\')) ? str_replace(\',\', \'.\', $value) : (!strpos($value, \'.\')) ? $value.\'.0\' : $value;'."\n". t(2).'if (!is_numeric($decimal))'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n". t(2).'if ((strlen($decimal)-1) > '.$length.')'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_LENGTH";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; } // Enum types else if ($columnType == "enum" || $columnType == "set") { $values = SLS_String::substrAfterFirstDelimiter(SLS_String::substrBeforeLastDelimiter($columns[$i]->Type, "')"), "('"); if ($columnType == "enum") { $contentM .= t(2).'$values = explode("\',\'", "'.str_replace("''", "\'", $values).'");'."\n". t(2).'if (!in_array($value, $values))'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_CONTENT";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; } else { $contentM .= t(2).'$values = explode("\',\'", "'.str_replace("''", "\'", $values).'");'."\n". t(2).'$valueE = explode(",",$value);'."\n". t(2).'foreach($valueE as $set)'."\n". t(2).'{'."\n". t(3).'if (!in_array($set, $values))'."\n". t(3).'{'."\n". t(4).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_CONTENT";'."\n". t(4).'return false;'."\n". t(3).'}'."\n". t(2).'}'."\n\n"; } } else { if (strpos($columns[$i]->Type, "(")) { $length = SLS_String::substrAfterFirstDelimiter(SLS_String::substrBeforeLastDelimiter($columns[$i]->Type, ")"), "("); $contentM .= t(2).'if (strlen(utf8_decode($value)) > '.$length.')'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_LENGTH";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; } if(SLS_String::endsWith($columnType, "int")) { $contentM .= t(2).'if (!is_numeric($value))'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; } else if ($columnType == "date" || $columnType == "datetime" || $columnType == "timestamp") { switch ($columnType) { case "date": $contentM .= t(2).'if (!SLS_Date::isDate($value))'."\n"; break; case "datetime": $contentM .= t(2).'if (!SLS_Date::isDateTime($value))'."\n"; break; case "timestamp": $contentM .= t(2).'if (!SLS_Date::isDateTime($value))'."\n"; break; } $contentM .= t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; } else if ($columnType == "time" || $columnType == "year") { switch ($columnType) { case "time": $contentM .= t(2).'if (strpos(\':\', $value) && substr_count($value, \':\') != 2)'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n". t(2).'$check = explode(\':\', $value);'."\n". t(2).'if (count($check) == 1 && !is_numeric($check[0]))'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n". t(2).'else if ((count($check) > 1) && (!is_numeric($check[0]) || (!is_numeric($check[1]) || strlen($check[1]) > 2) || (!is_numeric($check[2]) || strlen($check[2]) > 2)))'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; break; case "year": $contentM .= t(2).'if (!mktime(0, 0, 0, 0, 0, $value))'."\n". t(2).'{'."\n". t(3).'$this->_typeErrors[\''.SLS_String::addSlashes($column, 'QUOTES').'\'] = "E_TYPE";'."\n". t(3).'return false;'."\n". t(2).'}'."\n\n"; break; } } } $contentM .= t(2).'$this->__set(\''.$column.'\', $value);'."\n". t(2).'$this->flushError(\''.$column.'\');'."\n". t(2).'return true;'."\n". t(1).'}'."\n\n"; } } } // Get FKs to create access reference functions $fks = $xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".$db."_".$tableName."']",array("columnFk","tablePk")); $fkMethods = array(); $fkCursor = ""; for($i=0 ; $i<$count=count($fks) ; $i++) { $columnFk = $fks[$i]["attributes"][0]["value"]; $tablePk = $fks[$i]["attributes"][1]["value"]; $functionName = SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($tablePk,"_"))," ",false)),""); $functionName{0} = strtolower($functionName{0}); $functionNameModified = $functionName; while(in_array($functionNameModified,$fkMethods)) $functionNameModified = $functionName."_".($fkCursor = (empty($fkCursor)) ? 2 : $fkCursor+1); $fkMethods[] = $functionNameModified; $contentM .= t(1).'/**'."\n". t(1).' * Get the instance of '.SLS_String::substrAfterFirstDelimiter($tablePk,"_").'\'s Model described by '.$columnFk.''."\n". t(1).' * @author SillySmart'."\n". t(1).' * @copyright SillySmart'."\n". t(1).' * @return '.SLS_String::tableToClass($tablePk).' $object the instance of '.SLS_String::substrAfterFirstDelimiter($tablePk,"_").'\'s Model'."\n". t(1).' */'."\n". t(1).'public function '.$functionNameModified.'()'."\n". t(1).'{'."\n". t(2).'$this->_generic->useModel("'.SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($tablePk,"_")).'","'.SLS_String::substrBeforeFirstDelimiter($tablePk,"_").'","user");'."\n". t(2).'$object = new '.ucfirst(SLS_String::substrBeforeFirstDelimiter($tablePk,"_")).'_'.SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($tablePk,"_")).'();'."\n". t(2).'$object->getModel($this->__'.$columnFk.');'."\n". t(2).'return $object;'."\n". t(1).'}'; $contentM .= ($i == ($count-1)) ? "\n" : "\n\n"; } $contentM .= '}'."\n". '?>'; return $contentM; }
/** * Get columns of a given table * * @param string $db the db alias of the table * @param string $table the wanted table you want to extract columns infos * @param string $boPath xPath of the table in bo.xml * @param string $classFather the father model (if children) * @param bool $needPk if you want primary_key * @param bool $needBoSettings if you want bo listing privileges (list|edit|filter) * @return array $columns columns of the table */ public function getTableColumns($db,$table,$boPath="",$classFather="",$needPk=false,$needBoSettings=false) { $infosTable = $this->_db->showColumns($table); $isMultilanguage = false; $uniquesMultilang = array(); $columns = array(); foreach((is_array($infosTable)) ? $infosTable : array($infosTable) as $infoTable) { if ($infoTable->Key == "PRI" && $infoTable->Field == "pk_lang") { $isMultilanguage = true; break; } } // Show create table if ($isMultilanguage) { $create = array_shift($this->_db->select("SHOW CREATE TABLE `".$table."`")); $instructions = array_map("trim",explode("\n",$create->{Create." ".Table})); foreach($instructions as $instruction) { if (SLS_String::startsWith($instruction,"UNIQUE KEY")) { $uniqueColumns = explode(",",SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($instruction,"("),")")); if (count($uniqueColumns) == 2 && in_array("`pk_lang`",$uniqueColumns)) { $uniqueColumn = array_shift($uniqueColumns); if ($uniqueColumn == "`pk_lang`") $uniqueColumn = array_shift($uniqueColumns); $uniquesMultilang[] = str_replace("`","",$uniqueColumn); } } } } // Get columns if (is_array($infosTable)) { foreach($infosTable as $infoTable) { $pk = "false"; // Switch primary keys if ($infoTable->Key == "PRI") { if (!$needPk) continue; else $pk = "true"; } // Column $column = array("db" => $db, "table" => $table, "name" => $infoTable->Field, "pk" => $pk, "label" => $infoTable->Field, "multilanguage" => ($this->_object->isMultilanguage()) ? "true" : "false", "native_type" => "string", "html_type" => "input_text", "specific_type" => "", "specific_type_extended" => "", "file_uid" => uniqid(), "image_ratio" => "*", "image_thumb" => "", "image_min_width" => "*", "image_min_height" => "*", "html" => "false", "choices" => array(), "values" => (empty($classFather)) ? $this->_langsValues : array(), "errors" => array(), "required" => "true", "unique" => "false", "default" => "", "ac_db" => "", "ac_entity" => "", "ac_fk" => "", "ac_column" => "", "ac_label" => "", "ac_pattern" => "", "ac_multiple" => "", "min_length" => "", "max_length" => "", "filters" => ""); if ($needBoSettings) { $column["list"] = "true"; $column["edit"] = "false"; $column["filter"] = "true"; if (!empty($boPath)) { $columnBoAttributes = array_shift($this->_xmlBo->getTagsAttributes($boPath."/columns/column[@name='".$column["name"]."']",array("displayList","allowEdit","displayFilter"))); if (!empty($columnBoAttributes)) { $columnBoAttributesOptions = array("true","false"); $column["list"] = (in_array($columnBoAttributes["attributes"][0]["value"],$columnBoAttributesOptions)) ? $columnBoAttributes["attributes"][0]["value"] : "true"; $column["edit"] = (in_array($columnBoAttributes["attributes"][1]["value"],$columnBoAttributesOptions)) ? $columnBoAttributes["attributes"][1]["value"] : "false"; $column["filter"] = (in_array($columnBoAttributes["attributes"][2]["value"],$columnBoAttributesOptions)) ? $columnBoAttributes["attributes"][2]["value"] : "true"; } } } // Comment $comment = empty($infoTable->Comment) ? $infoTable->Field : $infoTable->Comment; if (SLS_String::startsWith($comment,"sls:lang:")) { $key = strtoupper(SLS_String::substrAfterFirstDelimiter($comment,"sls:lang:")); $comment = (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key])) ? (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) ? $infoTable->Field : $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$key]) : $GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$key]; } if (!empty($comment)) $column["label"] = $comment; // Native type, possible choices $nativeType = $infoTable->Type; $columnValues = array(); switch($nativeType) { case (false !== $typeMatch = $this->containsRecursive($nativeType,array("int"))): $columnType = "int"; $column["html_type"] = "input_number"; break; case (false !== $typeMatch = $this->containsRecursive($nativeType,array("float","double","decimal","real"))): $columnType = "float"; $column["html_type"] = "input_number"; break; case (false !== $typeMatch = $this->containsRecursive($nativeType,array("year","datetime","timestamp","time","date"))): $columnType = ($typeMatch == "timestamp") ? "datetime" : $typeMatch; $column["html_type"] = "input_".$typeMatch; if ($infoTable->Null == "NO") { switch ($typeMatch) { case "year": $column["default"] = date("Y"); break; case "time": $column["default"] = date("H:i:s"); break; case "date": $column["default"] = date("Y-m-d"); break; default: $column["default"] = date("Y-m-d H:i:s"); break; } } break; case (false !== $typeMatch = $this->containsRecursive($nativeType,array("enum","set"))): $columnType = "string"; $column["html_type"] = ($typeMatch == "enum") ? "input_radio" : "input_checkbox"; $columnValues = explode("','",SLS_String::substrAfterFirstDelimiter(SLS_String::substrBeforeLastDelimiter($nativeType, "')"), "('")); break; case (false !== $typeMatch = $this->containsRecursive($nativeType,array("text"))): $columnType = "string"; $column["html_type"] = "input_textarea"; break; default: $columnType = "string"; $column["html_type"] = "input_text"; break; } $column["native_type"] = $columnType; $column["choices"] = $columnValues; // MaxLength if (SLS_String::contains($infoTable->Type,"(") && SLS_String::endsWith(trim($infoTable->Type),")")) { $maxLength = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($infoTable->Type,"("),")"); $column["max_length"] = (is_numeric($maxLength) && $maxLength > 0) ? $maxLength : ""; } // Nullable ? unique ? default value ? $column["required"] = ($infoTable->Null == "NO") ? "true" : "false"; $column["unique"] = ($infoTable->Key == "UNI" || in_array($column["name"],$uniquesMultilang)) ? "true" : "false"; if (empty($column["default"])) $column["default"] = (empty($infoTable->Default)) ? "" : $infoTable->Default; // Allow HTML & i18n if (!empty($boPath)) { $columnBoAttributes = array_shift($this->_xmlBo->getTagsAttributes($boPath."/columns/column[@name='".$column["name"]."']",array("allowHtml","multilanguage"))); if (!empty($columnBoAttributes)) { $allowHtml = $columnBoAttributes["attributes"][0]["value"]; $isMultilang = $columnBoAttributes["attributes"][1]["value"]; $column["html"] = ($allowHtml == "true") ? "true" : "false"; $column["multilanguage"] = ($isMultilang == "true") ? "true" : "false"; } } // Specific type & extended $typeExists = array_shift($this->_xmlType->getTagsAttributes("//sls_configs/entry[@table='".$this->_db_alias."_".$table."' and @column='".$column["name"]."']",array("type","rules","thumbs"))); if (!empty($typeExists)) { $specificType = $typeExists["attributes"][0]["value"]; $specificRules = $typeExists["attributes"][1]["value"]; $specificThumbs = unserialize(str_replace("||#||",'"',$typeExists["attributes"][2]["value"])); $specificTypeExtended = ""; switch($specificType) { case "address": /* Nothing */ break; case "color": /* Nothing */ break; case "email": /* Nothing */ break; case "url": /* Nothing */ break; case "position": $record = array_shift($this->_db->select("SELECT MAX(`".$column["name"]."`) AS max_position FROM `".$table."` ")); $column["default"] = (!empty($record->max_position) && is_numeric($record->max_position) && $record->max_position > 0) ? ($record->max_position+1) : 1; break; case "uniqid": // Generate uid $column["default"] = substr(md5(time().substr(sha1(microtime()),0,rand(12,25))),mt_rand(1,20),(!empty($column["max_length"])) ? $column["max_length"] : 40); break; case (SLS_String::startsWith($specificType,"num_")): // Get numeric settings $specificTypeExtended = SLS_String::substrAfterFirstDelimiter($specificType,"num_"); $specificType = "numeric"; break; case (SLS_String::startsWith($specificType,"ip_")): // Get IP settings $specificTypeExtended = SLS_String::substrAfterFirstDelimiter($specificType,"ip_"); $specificType = "ip"; $column["default"] = $_SERVER['REMOTE_ADDR']; break; case (SLS_String::startsWith($specificType,"file_")): // Get file settings $specificTypeExtended = SLS_String::substrAfterFirstDelimiter($specificType,"file_"); $specificType = "file"; $column["html_type"] = "input_file"; if ($specificTypeExtended == "img") { if (!empty($specificThumbs)) { usort($specificThumbs,array($this,'sortThumbsMin')); $thumb = array_shift($specificThumbs); if (!empty($thumb["suffix"])) $column["image_thumb"] = $thumb["suffix"]; } $column["image_ratio"] = SLS_String::substrBeforeFirstDelimiter($specificRules,"|"); $column["image_min_width"] = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($specificRules,"|"),"|"); $column["image_min_height"] = SLS_String::substrAfterLastDelimiter($specificRules,"|"); } break; case ($specificType == "complexity" && (!empty($specificRules))): // Get complexity settings & minLength if (SLS_String::contains($specificRules,"min")) { $column["min_length"] = SLS_String::substrAfterFirstDelimiter($specificRules,"min"); $specificRules = SLS_String::substrBeforeFirstDelimiter($specificRules,"min"); if (SLS_String::endsWith($specificRules,"|")) $specificRules = SLS_String::substrBeforeLastDelimiter($specificRules,"|"); } $specificTypeExtended = $specificRules; break; default: $specificType = ""; break; } $column["specific_type"] = $specificType; $column["specific_type_extended"] = $specificTypeExtended; } if (!empty($column["default"]) && SLS_String::startsWith($column["html_type"],"input_file")) $column["default"] = (file_exists($this->_generic->getPathConfig("files").$column["default"])) ? SLS_String::getUrlFile($column["default"]) : ""; // Filters $filters = $this->_xmlFilter->getTags("//sls_configs/entry[@table='".$this->_db_alias."_".$table."' and @column='".$column["name"]."']/@filter"); for($i=0 ; $i<$count=count($filters) ; $i++) { if ($filters[$i] == "hash") $column["html_type"] = "input_password"; else $column["filters"] .= (((!empty($column["filters"])) ? "|" : "").$filters[$i]); } // pk_lang if ($needPk && $isMultilanguage && $infoTable->Field == "pk_lang") { $column["html_type"] = "input_radio"; $column["choices"] = $this->_lang->getSiteLangs(); } // Fk $columnFk = array(); $fkExists = array_shift($this->_xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".$this->_db_alias."_".$table."' and @columnFk='".$column["name"]."']",array("tablePk","labelPk"))); if (!empty($fkExists)) { $tableAlias = $this->_db_alias; $tableFk = $table; $tablePk = $fkExists["attributes"][0]["value"]; $labelPk = $fkExists["attributes"][1]["value"]; $this->_generic->useModel(SLS_String::substrAfterFirstDelimiter($tablePk,"_"),$tableAlias,"user"); $classFk = ucfirst($tableAlias)."_".SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($tablePk,"_")); $objectFk = new $classFk(); $pk = $objectFk->getPrimaryKey(); $str = $labelPk; $labelPkReal = $labelPk; $params = $objectFk->getParams(true,true); foreach($params as $key => $value) { if (is_array($value)) { foreach($value as $key2 => $value2) { if (SLS_String::contains($str,$key2)) { $this->_generic->useModel($key,$tableAlias,"user"); $classFk2 = ucfirst($tableAlias)."_".SLS_String::tableToClass($key); $object2 = new $classFk2(); $str = str_replace($key2,$object2->getColumnComment($key2),$str); } } } else { if (SLS_String::contains($str,$key)) $str = str_replace($key,$objectFk->getColumnComment($key),$str); } } $labelPk = $str; $column["html_type"] = "input_ac"; $column["ac_db"] = strtolower($tableAlias); $column["ac_entity"] = strtolower($tableFk); $column["ac_fk"] = $tablePk; $column["ac_column"] = $column["name"]; if (SLS_String::startsWith($labelPk,"sls:lang:")) { $globalKey = strtoupper(SLS_String::substrAfterFirstDelimiter($labelPk,"sls:lang:")); $labelPk = (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$globalKey])) ? (empty($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$globalKey]) ? $labelPk : $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS'][$globalKey]) : $GLOBALS[$GLOBALS['PROJECT_NAME']]['XSL'][$globalKey]; } $column["ac_label"] = $labelPk; $column["ac_pattern"] = $labelPkReal; $column["ac_multiple"] = "false"; if ($column["required"] == "false") $column["default"] = "0"; } else $tablePk = null; if (empty($classFather) || (!empty($classFather) && $classFather != ucfirst($tablePk))) $columns[$column["name"]] = $column; } } return $columns; }
public function action() { $user = $this->hasAuthorative(); $param = $this->_http->getParam("class"); $model = SLS_String::substrAfterFirstDelimiter($param,"_"); $alias = SLS_String::substrBeforeFirstDelimiter($param,"_"); $filters = $this->_http->getParam("filters"); $columns = $this->_http->getParam("columns"); $column = $this->_http->getParam("column"); $group = $this->_http->getParam("group"); $order = $this->_http->getParam("order"); $start = $this->_http->getParam("start"); $length = $this->_http->getParam("length"); $action_add = $this->_http->getParam("action_add"); $action_modify = $this->_http->getParam("action_modify"); $action_delete = $this->_http->getParam("action_delete"); $action_clone = $this->_http->getParam("action_clone"); $action_email = $this->_http->getParam("action_email"); $join = $this->_http->getParam("join"); if (!empty($order) && !empty($column)) { $orderA = array("column" => $column, "order" => $order); } else $orderA = array(); if (is_numeric($start) && is_numeric($length) && $start >= 0 && $length > 0) { $limitA = array("start" => $start, "length" => $length); } else $limitA = array(); if (is_array($join)) { $newJoin = array(); foreach($join as $cur_join) { $this->_generic->useModel(SLS_String::tableToClass($cur_join),$alias,"user"); $class = ucfirst($alias)."_".SLS_String::tableToClass($cur_join); $object = new $class(); $newJoin[] = array("table" => $cur_join, "column" => $object->getPrimaryKey(), "mode" => "left"); } $join = $newJoin; } $join = (empty($join)) ? "" : (is_array($join) ? $join : ""); $actions = array("add" => ($action_add == "true") ? true : false, "modify" => ($action_modify == "true") ? true : false, "delete" => ($action_delete == "true") ? true : false, "clone" => ($action_clone == "true") ? true : false, "email" => ($action_email == "true") ? true : false); $controllersXML = $this->_generic->getControllersXML(); $controller = array_shift($controllersXML->getTags("//controllers/controller[@isBo='true']/@name")); $this->createActionBoList($controller,$model,$alias,$columns,$filters,$group,$orderA,$limitA,$join,$actions); $controllers = $this->_generic->getTranslatedController("SLS_Bo","EditBo"); $this->_generic->redirect($controllers["controller"]."/".$controllers["scontroller"]."/name/".$param.".sls"); }
public function action() { $user = $this->hasAuthorative(); $sql = SLS_Sql::getInstance(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $errors = array(); // Get the table name $table = SLS_String::substrAfterFirstDelimiter($this->_http->getParam("name"),"_"); $db = SLS_String::substrBeforeFirstDelimiter($this->_http->getParam("name"),"_"); $class = ucfirst($db)."_".SLS_String::tableToClass($table); $file = ucfirst($db).".".SLS_String::tableToClass($table); // If current db is not this one if ($sql->getCurrentDb() != $db) $sql->changeDb($db); if ($sql->tableExists($table)) { if ($this->_http->getParam("reload") == "true") { $columnWanted = $this->_http->getParam("column"); $filterWanted = $this->_http->getParam("filter"); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml"); $xmlFk = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml"); $xmlType = new SLS_XMLToolbox($pathsHandle); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/filters.xml"); $xmlFilter = new SLS_XMLToolbox($pathsHandle); $result = $xmlFilter->getTags("//sls_configs/entry[@table='".$db."_".$table."' and @column='".$columnWanted."' and @filter='".$filterWanted."']"); // If an entry already exists in the XML, delete this record if (!empty($result)) { $xmlTmp = $xmlFilter->deleteTags("//sls_configs/entry[@table='".$db."_".$table."' and @column='".$columnWanted."' and @filter='".$filterWanted."']"); $xmlFilter->saveXML($this->_generic->getPathConfig("configSls")."/filters.xml",$xmlTmp); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/filters.xml"); $xmlFilter = new SLS_XMLToolbox($pathsHandle); } if ($filterWanted == "hash") { $passwordHash = $this->_http->getParam("hash"); // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" hash="'.$passwordHash.'" filter="'.$filterWanted.'" />'; $xmlFilter->appendXMLNode("//sls_configs",$xmlNode); $xmlFilter->saveXML($this->_generic->getPathConfig("configSls")."/filters.xml",$xmlFilter->getXML()); } else { // Save it into the XML $xmlNode = '<entry table="'.$db.'_'.$table.'" column="'.$columnWanted.'" filter="'.$filterWanted.'" />'; $xmlFilter->appendXMLNode("//sls_configs",$xmlNode); $xmlFilter->saveXML($this->_generic->getPathConfig("configSls")."/filters.xml",$xmlFilter->getXML()); } // Update model $this->_generic->goDirectTo("SLS_Bo","UpdateModel",array(array("key"=>"name","value"=>$this->_http->getParam("name")))); } // Get generic object $this->_generic->useModel($table,$db,"user"); $object = new $class(); // Get object's infos $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml"); $xmlFk = new SLS_XMLToolbox($pathsHandle); $columnsP = $object->getParams(); $pk = $object->getPrimaryKey(); $multilanguage = $object->isMultilanguage(); $xml->startTag("model"); $xml->addFullTag("table",$table,true); $xml->addFullTag("db",$db,true); $xml->addFullTag("class",$class,true); $xml->addFullTag("pk",$pk,true); $xml->addFullTag("multilanguage",($multilanguage) ? "true" : "false",true); $xml->startTag("columns"); foreach($columnsP as $column => $value) { $res = $xmlFk->getTags("//sls_configs/entry[@tableFk='".$db."_".$table."' and @columnFk='".$column."']/@tablePk"); if ($object->getPrimaryKey() != $column && $column != "pk_lang" && empty($res)) $xml->addFullTag("column",$column,true); } $xml->endTag("columns"); $xml->endTag("model"); } else { $xml->addFullTag("error","Sorry this table doesn't exist anymore",true); } $this->saveXML($xml); }
/** * Check if a recordset described by a column doesn't already exists * * @access public * @param string $column the column name * @param string $value the column value * @param string $table the table to check (current table model if empty) * @param string $excludedColumn the column name to exclude * @param string $excludedValue the column value to exclude * @return bool $isUnique true if no recordset has been found, else false * @since 1.0 */ public function isUnique($column,$value,$table="",$excludedColumn="",$excludedValue="") { $table = (empty($table)) ? $this->_table : $table; $columns = array(); if ($this->_generic->useModel(SLS_String::tableToClass($table),$this->_db,"user") || $this->_generic->useModel(SLS_String::tableToClass($table),$this->_db,"sls")) { $className = ucfirst(strtolower($this->_db))."_".SLS_String::tableToClass($table); $object = new $className(); foreach($object->getParams() as $key => $cur_value) array_push($columns,$key); } if (!in_array($column,$columns)) { SLS_Tracing::addTrace(new Exception("Error: Column ".$column." doesn't exist in table `".$table."`"),true); return false; } if (!empty($excludedColumn) && !empty($excludedValue)) { if (!in_array($excludedColumn,$columns)) { $excludedColumn = ""; $excludedValue = ""; SLS_Tracing::addTrace(new Exception("Warning: Column ".$excludedColumn." to exclude for the unique recordset test doesn't exist in table `".$table."` - exclude ommited"),true); } } return ($this->_sql->isUnique($column,$value,$table,$excludedColumn,$excludedValue)==0) ? true : false; }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); # Params $tableName = $this->_http->getParam('name'); $this->_db_alias = SLS_String::substrBeforeFirstDelimiter($tableName, "_"); $this->_table = SLS_String::substrAfterFirstDelimiter($tableName, "_"); # /Params # Objects $errors = array(); $operators = array('like','notlike','startwith','endwith','equal','notequal','in','notin','lt','lte','gt','gte','null','notnull'); $operatorsNeedValue = array('like','notlike','startwith','endwith','equal','notequal','in','notin','lt','lte','gt','gte'); $orders = array( 'desc', 'asc'); $limits = array( '20', '50', '100', '250', '500', '1000'); $this->_db = new SLS_Sql(); $this->_db->changeDb($this->_db_alias); if(!$this->_db->tableExists($this->_table)) $this->forward('SLS_Default', 'UrlError'); $className = ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table); $this->_generic->useModel(SLS_String::tableToClass($this->_table),ucfirst(strtolower($this->_db_alias)), "user"); $this->_object = new $className(); $this->_xmlFk = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml")); $this->_xmlType = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml")); $this->_xmlBearers = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bearers.xml")); $this->_xmlBo = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bo.xml")); $boPath = "//sls_configs/entry[@type='table' and @name='".strtolower($className)."']"; $boExists = $this->_xmlBo->getTag($boPath."/@type"); if (empty($boExists)) $boPath = "//sls_configs/entry/entry[@type='table' and @name='".strtolower($className)."']"; # /Objects $menuCategories = $this->_xmlBo->getTags("//sls_configs/entry[@type='category']/@name"); $xml->startTag("categories"); for($i=0 ; $i<$count=count($menuCategories) ; $i++) $xml->addFullTag("category",$menuCategories[$i],true); $xml->endTag("categories"); $tableAttributes = array_shift($this->_xmlBo->getTagsAttributes($boPath, array('multilanguage'))); # reload if($this->_http->getParam('reload') == 'true') { $boData = $this->_http->getParam('bo'); $newCategory = $this->_http->getParam('category'); $results = $this->_xmlBo->getTagsAttributes($boPath.'/joins/join', array('table', 'column')); $joinsNews = !empty($boData['joins']) ? $boData['joins'] : array(); $joinsOld = array(); foreach($results as $result) array_push($joinsOld, SLS_String::substrAfterFirstDelimiter($result['attributes'][0]['value'], '_')); $joinsToDelete = array_diff($joinsOld, $joinsNews); $joinsToAdd = array_diff($joinsNews, $joinsOld); $xmlNew = ''; # columns # add columns of news join tables if(!empty($joinsToAdd)) { foreach($joinsToAdd as $join) { $tableColumns = $this->_db->showColumns($join); if(!empty($tableColumns)) { foreach($tableColumns as $tableColumn) { if(!in_array($tableColumn, array('pk_lang'))) { array_push($boData['columns'], array( 'table' => $join, 'column_value' => $join.'.'.$tableColumn->Field, 'column_label' => $join.' / '.$tableColumn->Field, 'display_filter' => 'on', 'display_list' => 'off', 'allow_edit' => 'off', 'allow_html' => 'off', 'multilanguage' => 'off', )); } } } } } $xmlNew .= '<columns>'; if(!empty($boData['columns'])) { foreach($boData['columns'] as $index => $column) { $table = $this->_db_alias.'_'.$column['table']; $name = SLS_String::substrAfterLastDelimiter($column['column_value'], '.'); $multilanguage = $column['multilanguage'] == 'on' ? 'true' : 'false'; $displayFilter = $column['display_filter'] == 'on' ? 'true' : 'false'; $displayList = $column['display_list'] == 'on' ? 'true' : 'false'; $allowEdit = $column['allow_edit'] == 'on' ? 'true' : 'false'; $allowHtml = $column['allow_html'] == 'on' ? 'true' : 'false'; if($table == $tableName || (is_array($joinsNews) && in_array($column['table'], $joinsNews))) $xmlNew .= '<column table="'.$table.'" name="'.$name.'" multilanguage="'.$multilanguage.'" displayFilter="'.$displayFilter.'" displayList="'.$displayList.'" allowEdit="'.$allowEdit.'" allowHtml="'.$allowHtml.'" />'; else unset($boData['columns'][$index]); } } $xmlNew .= '</columns>'; # /columns # joins $xmlNew .= '<joins>'; if(!empty($boData['joins'])) { foreach($boData['joins'] as $index => $join) { $tablePk = $this->_db_alias.'_'.ucfirst($join); $res = array_shift($this->_xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".$tableName."' and @tablePk='".$tablePk."']",array("columnFk"))); $table = $this->_db_alias.'_'.$join; $column = $res['attributes'][0]['value']; if($table == $tableName || (is_array($joinsNews) && in_array($join, $joinsNews))) $xmlNew .= '<join table="'.$table.'" column="'.$column.'" />'; else unset($boData['joins'][$index]); } } $xmlNew .= '</joins>'; # /joins # wheres $xmlNew .= '<wheres>'; if(!empty($boData['wheres'])) { foreach($boData['wheres'] as $index => $where) { $table = $this->_db_alias.'_'.SLS_String::substrBeforeFirstDelimiter($where['column'], '.'); $column = SLS_String::substrAfterFirstDelimiter($where['column'], '.'); $value = in_array($where['mode'], $operatorsNeedValue) ? $where['value'] : ''; $mode = $where['mode']; if($table == $tableName || (is_array($joinsNews) && in_array(SLS_String::substrBeforeFirstDelimiter($where['column'], '.'), $joinsNews))) $xmlNew .= '<where table="'.$table.'" column="'.$column.'" value="'.$value.'" mode="'.$mode.'" />'; else unset($boData['wheres'][$index]); } } $xmlNew .= '</wheres>'; # /wheres # groups $xmlNew .= '<groups>'; if(!empty($boData['groups'])) { foreach($boData['groups'] as $index => $group) { $table = $this->_db_alias.'_'.SLS_String::substrBeforeFirstDelimiter($group, '.'); $column = SLS_String::substrAfterFirstDelimiter($group, '.'); if($table == $tableName || (is_array($joinsNews) && in_array(SLS_String::substrBeforeFirstDelimiter($group, '.'), $joinsNews))) $xmlNew .= '<group table="'.$table.'" column="'.$column.'" />'; else unset($boData['groups'][$index]); } } $xmlNew .= '</groups>'; # /groups # orders $xmlNew .= '<orders>'; if(!empty($boData['orders'])) { foreach($boData['orders'] as $index => $order) { $table = $this->_db_alias.'_'.SLS_String::substrBeforeFirstDelimiter($order['column'], '.'); $column = SLS_String::substrAfterFirstDelimiter($order['column'], '.'); $orderValue = $order['order']; if($table == $tableName || (is_array($joinsNews) && in_array(SLS_String::substrBeforeFirstDelimiter($order['column'], '.'), $joinsNews))) $xmlNew .= '<order table="'.$table.'" column="'.$column.'" order="'.$orderValue.'" />'; else unset($boData['orders'][$index]); } } $xmlNew .= '</orders>'; # /orders # limits $xmlNew .= '<limits>'; if(!empty($boData['limits'])) { foreach($boData['limits'] as $index => $limit) { $length = $limit['length']; $xmlNew .= '<limit start="0" length="'.$length.'" />'; } } $xmlNew .= '</limits>'; # limits # children $xmlNew .= '<children>'; if(!empty($boData['children'])) { foreach($boData['children'] as $index => $child) { $this->_generic->useModel($child, $this->_db_alias, 'user'); try { $className = ucfirst($this->_db_alias.'_'.ucfirst($child)); $classObject = new $className(); $column = $classObject->getPrimaryKey(); $table = strtolower($className); $xmlNew .= '<child table="'.$table.'" column="'.$column.'" />'; } catch (Exception $e){} } } $xmlNew .= '</children>'; # /children $newPath = (empty($newCategory)) ? '//sls_configs' : '//sls_configs/entry[@type="category" and @name="'.$newCategory.'"]'; $this->_xmlBo->deleteTags($boPath); $this->_xmlBo->appendXMLNode($newPath, '<entry type="table" name="'.strtolower($this->_db_alias.'_'.$this->_table).'" multilanguage="'.($this->_object->isMultilanguage() ? 'true' : 'false').'">'.$xmlNew.'</entry>'); $this->_xmlBo->saveXML($this->_generic->getPathConfig("configSls")."/bo.xml"); $this->_xmlBo->refresh(); // Crappy hack to force reload $this->_generic->forward("SLS_Bo","EditBo",array("name"=>$this->_http->getParam('name'))); } # /reload else { $tempData = array( 'columns' => $this->_xmlBo->getTagsAttributes($boPath."/columns/column",array("table","name","multilanguage","displayFilter", "displayList", "allowEdit", "allowHtml")), 'joins' => $this->_xmlBo->getTagsAttributes($boPath."/joins/join",array("table")), 'wheres' => $this->_xmlBo->getTagsAttributes($boPath."/wheres/where",array("table","column","value","mode")), 'groups' => $this->_xmlBo->getTagsAttributes($boPath."/groups/group",array("table","column")), 'orders' => $this->_xmlBo->getTagsAttributes($boPath."/orders/order",array("table","column","order")), 'limits' => $this->_xmlBo->getTagsAttributes($boPath."/limits/limit",array("start","length")), 'children' => $this->_xmlBo->getTagsAttributes($boPath."/children/child",array("table","column")) ); # columns $boData['columns'] = array(); $position = 1; $strings = array(); foreach($tempData['columns'] as $column) { $table = SLS_String::substrAfterFirstDelimiter($column['attributes'][0]['value'], '_'); // Avoid pk $class = ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($table); $this->_generic->useModel(SLS_String::tableToClass($table),$this->_db_alias,"user"); $object = new $class(); // String type ? if (!array_key_exists($table,$strings)) { $columns = $this->_db->showColumns($table); for($i=0 ; $i<$count=count($columns) ; $i++) { $strings[$table][$columns[$i]->Field] = (SLS_String::contains($columns[$i]->Type,"text") || SLS_String::contains($columns[$i]->Type,"char")) ? true : false; } } // Avoid fk $isFk = $this->_xmlFk->getTags("//sls_configs/entry[@tableFk='".strtolower($this->_db_alias."_".$table)."' and @columnFk='".$column['attributes'][1]['value']."']/@tablePk"); // Avoid quick edit on type file $specificTypeFileExists = $this->_xmlType->getTag("//sls_configs/entry[@table='".$column['attributes'][0]['value']."' and @column='".$column['attributes'][1]['value']."' and (@type='file_all' or @type='file_img')]/@column"); array_push($boData['columns'], array( 'table' => $table, 'column_value' => $table.'.'.$column['attributes'][1]['value'], 'column_label' => $table.' / '.$column['attributes'][1]['value'], 'display_filter' => ($column['attributes'][3]['value'] == 'true') ? 'on' : 'off', 'display_list' => ($column['attributes'][4]['value'] == 'true') ? 'on' : 'off', 'allow_edit' => ($column['attributes'][5]['value'] == 'true') ? 'on' : 'off', 'allow_html' => ($column['attributes'][6]['value'] == 'true') ? 'on' : 'off', 'multilanguage' => ($column['attributes'][2]['value'] == 'true') ? 'on' : 'off', 'type_file' => (!empty($specificTypeFileExists)) ? "true" : "false", 'type_pk' => ($column['attributes'][1]['value'] == $object->getPrimaryKey() || $column['attributes'][1]['value'] == "pk_lang") ? "true" : "false", 'type_fk' => ($isFk) ? "true" : "false", 'type_string' => ($strings[$table][$column['attributes'][1]['value']]) ? "true" : "false" )); $position++; } # /columns # joins $boData['joins'] = array(); foreach($tempData['joins'] as $join) array_push($boData['joins'], SLS_String::substrAfterFirstDelimiter($join['attributes'][0]['value'], '_')); # /joins # wheres $boData['wheres'] = array(); foreach($tempData['wheres'] as $where) { array_push($boData['wheres'], array( 'column' => SLS_String::substrAfterFirstDelimiter($where['attributes'][0]['value'], '_').'.'.$where['attributes'][1]['value'], 'mode' => $where['attributes'][3]['value'], 'value' => $where['attributes'][2]['value'] )); } # /wheres # groups $boData['groups'] = array(); foreach($tempData['groups'] as $group) array_push($boData['groups'], SLS_String::substrAfterFirstDelimiter($group['attributes'][0]['value'], '_').'.'.$group['attributes'][1]['value']); # /groups # orders $boData['orders'] = array(); foreach($tempData['orders'] as $order) { array_push($boData['orders'], array( 'column' => SLS_String::substrAfterFirstDelimiter($order['attributes'][0]['value'], '_').'.'.$order['attributes'][1]['value'], 'order' => $order['attributes'][2]['value'] )); } # /orders # limits $boData['limits'] = array(); foreach($tempData['limits'] as $limit) { array_push($boData['limits'], array( 'length' => $limit['attributes'][1]['value'] )); } # /limits # children $boData['children'] = array(); foreach($tempData['children'] as $child) array_push($boData['children'], SLS_String::substrAfterFirstDelimiter($child['attributes'][0]['value'], '_')); # /children } $xml->addFullTag("delete",$this->_generic->getFullPath("SLS_Bo","DeleteBo",array(),false)); $menuCategoryExist = $this->_xmlBo->getTag("//sls_configs/entry[@type='category' and entry[@type='table' and @name='".strtolower($className)."']]/@name"); $xml->startTag('bo'); $xml->addFullTag('table', $this->_table, true); $xml->addFullTag('db_alias', $this->_db_alias, true); $xml->addFullTag('category', $menuCategoryExist, true); $xml->addFullTag('multilanguage', $tableAttributes['attributes'][0]['value'], true); $xml->addFullTag('class', $className, true); if(!empty($boData)) { foreach($boData as $key => $values) { $xml->startTag($key); if(!empty($values) && is_array($values)) { foreach($values as $value) { if(is_array($value)) { $xml->startTag('line'); foreach($value as $col => $val) $xml->addFullTag($col, $val, true); if($key == 'columns' && is_array($boData['groups']) && in_array($value['column_value'] , $boData['groups'])) $xml->addFullTag('column_group', 'true', true); $xml->endTag('line'); } else $xml->addFullTag('line', $value, true); } } $xml->endTag($key); } } $xml->endTag('bo'); $children = $this->_xmlFk->getTagsAttributes("//sls_configs/entry[@tablePk='".(SLS_String::substrBeforeFirstDelimiter($tableName, '_').'_'.ucfirst(SLS_String::substrAfterFirstDelimiter($tableName, '_')))."']",array("tableFk", 'columnFk')); $xml->startTag('children'); $childrenFound = array(); if(!empty($children)) { foreach($children as $child) { $bearerExists = $this->_xmlBearers->getTag("//sls_configs/entry[@tableBearer='".ucfirst(strtolower(SLS_String::substrBeforeFirstDelimiter($child['attributes'][0]['value'],"_")))."_".SLS_String::tableToClass(SLS_String::substrAfterFirstDelimiter($child['attributes'][0]['value'],"_"))."']/@tableBearer"); if (empty($bearerExists) && !in_array($child['attributes'][0]['value'],$childrenFound)) { $xml->startTag('child'); $tmp = SLS_String::substrAfterFirstDelimiter($child['attributes'][0]['value'], '_'); $xml->addFullTag('child_selected', is_array($boData['children']) && in_array($tmp, $boData['children']) ? 'true' : 'false', true); $xml->addFullTag('child_value', $tmp, true); $xml->endTag('child'); $childrenFound[] = $child['attributes'][0]['value']; } } } $xml->endTag('children'); $joins = $this->_xmlFk->getTagsAttributes("//sls_configs/entry[@tableFk='".$tableName."']",array("tablePk", "columnFk")); $xml->startTag('joins'); if(!empty($joins)) { foreach($joins as $join) { $tableTmp = $join['attributes'][0]['value']; $tableLowerTmp = strtolower($join['attributes'][0]['value']); $tableNameLowerTmp = SLS_String::substrAfterFirstDelimiter($tableLowerTmp, '_'); $columnTmp = $join['attributes'][1]['value']; $classNameTmp = ucfirst($tableTmp); $this->_generic->useModel($tableNameLowerTmp, $this->_db_alias, "user"); $classObject = new $classNameTmp(); if($classObject->getPrimaryKey() == $columnTmp) { $xml->addFullTag('join', $tableNameLowerTmp, true); } } } $xml->endTag('joins'); $labels = array( 'OPERATOR_LIKE' => "LIKE", 'OPERATOR_NOTLIKE' => "NOT LIKE", 'OPERATOR_STARTWITH' => "START WITH", 'OPERATOR_ENDWITH' => "END WITH", 'OPERATOR_EQUAL' => "EQUAL", 'OPERATOR_NOTEQUAL' => "NOT EQUAL", 'OPERATOR_IN' => "IN", 'OPERATOR_NOTIN' => "NOT IN", 'OPERATOR_LT' => "LESS THAN", 'OPERATOR_LTE' => "LESS THAN EQUAL", 'OPERATOR_GT' => "GREATER THAN", 'OPERATOR_GTE' => "GREATER THAN EQUAL", 'OPERATOR_NULL' => "IS NULL", 'OPERATOR_NOTNULL' => "IS NOT NULL", 'ORDER_ASC' => 'ASC', 'ORDER_DESC' => 'DESC' ); # operators $xml->startTag('operators'); if(!empty($operators)) { foreach($operators as $operator) { $xml->startTag('operator'); $xml->addFullTag('operator_need_value', (is_array($operatorsNeedValue) && in_array($operator, $operatorsNeedValue)) ? 'true' : 'false', true); $xml->addFullTag('operator_value', $operator, true); $xml->addFullTag('operator_label', $labels['OPERATOR_'.mb_strtoupper($operator, 'UTF-8')], true); $xml->endTag('operator'); } } $xml->endTag('operators'); # /operators # orders $xml->startTag('orders'); if(!empty($orders)) { foreach($orders as $order) { $xml->startTag('order'); $xml->addFullTag('order_value', $order, true); $xml->addFullTag('order_label', $labels['ORDER_'.mb_strtoupper($order, 'UTF-8')], true); $xml->endTag('order'); } } $xml->endTag('orders'); # /orders # limits $xml->startTag('limits'); if(!empty($limits)) { foreach($limits as $limit) $xml->addFullTag('limit', $limit, true); } $xml->endTag('limits'); # /limits $xml->addFullTag("url_add_category",$this->_generic->getFullPath("SLS_Bo","AddBoCategory",array("name" => $this->_http->getParam("name"))),true); $xml->addFullTag("url_delete",$this->_generic->getFullPath("SLS_Bo","DeleteBo",array("name" => $this->_db_alias."_".$this->_table)),true); $this->saveXML($xml); }
/** * Constructor * * @access public * @since 1.0 */ public function __construct($xml,$db,$table,$forward=true) { parent::__construct(); $this->_xml = $xml; $this->_db_alias = $db; $this->_table = $table; $this->_forward = $forward; # Objects $className = ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table); $this->_generic->useModel(SLS_String::tableToClass($this->_table),ucfirst(strtolower($this->_db_alias)),"user"); $this->_object = new $className(); $this->_table = $this->_object->getTable(); $this->_clone = new $className(); $this->_columns = array(); $this->_filters = array(); $this->_types = array(); # /Objects # Params $ids = $this->_http->getParam("id"); $ids = (SLS_String::contains($ids,"|")) ? explode("|",$ids) : array($ids); # /Params # Types $types = $this->_db->showColumns($this->_table); for($i=0 ; $i<$count=count($types) ; $i++) { $nativeType = "text"; switch($types[$i]->Type) { case (false !== $typeMatch = $this->containsRecursive($types[$i]->Type,array("int","float","double","decimal","real"))): $nativeType = "number"; break; case (false !== $typeMatch = $this->containsRecursive($types[$i]->Type,array("year","datetime","timestamp","time","date"))): $nativeType = "date_".$typeMatch; break; } $this->_types[$types[$i]->Field] = $nativeType; } # /Types # Blocking specificities $specificities = $this->_xmlType->getTagsAttributes("//sls_configs/entry[@table='".$this->_db_alias."_".$this->_table."' and (@type='position' or @type='uniqid' or @type='email')]",array("column","type")); for($i=0 ; $i<$count=count($specificities) ; $i++) { $column = $specificities[$i]["attributes"][0]["value"]; $type = $specificities[$i]["attributes"][1]["value"]; if (!array_key_exists($column,$this->_columns)) $this->_columns[$column] = $type; } $filters = $this->_xmlFilter->getTags("//sls_configs/entry[@table='".$this->_db_alias."_".$this->_table."' and @filter='hash']/@column"); # Blocking specificities # Perform clone if ($this->_object->isMultilanguage()) { $siteLangs = $this->_lang->getSiteLangs(); unset($siteLangs[array_search($this->_defaultLang,$siteLangs)]); array_unshift($siteLangs,$this->_defaultLang); $langs = $siteLangs; } else $langs = array($this->_defaultLang); // Recordsets to clone $nbClone = 0; foreach($ids as $id) { // Next id $cloneId = $this->_object->giveNextId(); // Each lang foreach($langs as $lang) { if ($this->_object->isMultilanguage()) $this->_clone->setModelLanguage($lang); // Get recordset if ($this->_object->getModel($id) === true) { // Foreach column foreach($this->_object->getParams() as $key => $value) { if ($key == $this->_object->getPrimaryKey() || $key == "pk_lang") continue; // Setter $functionName = "set".SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(str_replace("_"," ",$key)," ",false)),""); // Specific type ? if (array_key_exists($key,$this->_columns) && $this->_columns[$key] != "email") { // Default lang if ($lang == $this->_defaultLang && in_array($this->_columns[$key],array("uniqid","position"))) { // Regenerate uniqid if ($this->_columns[$key] == "uniqid") $value = substr(md5(time().substr(sha1(microtime()),0,rand(12,25))),mt_rand(1,20),40); // Get next position else if ($this->_columns[$key] == "position") { $record = array_shift($this->_db->select("SELECT MAX(`".$key."`) AS max_position FROM `".$this->_table."` ")); $value = (!empty($record->max_position) && is_numeric($record->max_position) && $record->max_position > 0) ? ($record->max_position+1) : 1; } } // Take the default lang value else $value = $this->_clone->__get($key); } // Set if (in_array($key,$filters)) $this->_clone->__set($key,$value); else $this->_clone->$functionName($value); // Unique error ? if ($this->_clone->getError($key) == "E_UNIQUE") { if (array_key_exists($key,$this->_columns) && $this->_columns[$key] == "email") $value = "clone_".time()."@".((substr_count($this->_generic->getSiteConfig("domainName"),".") > 1) ? SLS_String::substrAfterLastDelimiter(SLS_String::substrBeforeLastDelimiter($this->_generic->getSiteConfig("domainName"),"."),".").".".SLS_String::substrAfterLastDelimiter($this->_generic->getSiteConfig("domainName"),".") : $this->_generic->getSiteConfig("domainName")); else { switch($this->_types[$key]) { case "number": $record = array_shift($this->_db->select("SELECT MAX(`".$key."`) AS max_nb FROM `".$this->_table."` ")); $value = (!empty($record->max_nb) && is_numeric($record->max_nb)) ? ($record->max_nb+1) : 1; break; case (SLS_String::startsWith($this->_types[$key],"date_")): $record = array_shift($this->_db->select("SELECT MAX(`".$key."`) AS max_date FROM `".$this->_table."` ")); $value = (!empty($record->max_date)) ? ($record->max_date) : ""; $dateType = SLS_String::substrAfterFirstDelimiter($this->_types[$key],"date_"); switch($dateType) { case (in_array($dateType,array("year","timestamp"))): $value = $value + 1; break; case "date": $value = SLS_Date::timestampToDate(strtotime("+ 1 second",SLS_Date::dateToTimestamp($value))); break; case "datetime": $value = SLS_Date::timestampToDateTime(strtotime("+ 1 second",SLS_Date::dateTimeToTimestamp($value))); break; case "time": $value = sls_string::substrAfterFirstDelimiter(SLS_Date::timestampToDateTime(strtotime("+ 1 second",SLS_Date::dateTimeToTimestamp(date("Y-m-d")." ".$value)))," "); break; } break; default: $value = substr(md5(time().substr(sha1(microtime()),0,rand(12,5))),mt_rand(1,5),10); break; } } $this->_clone->$functionName($value); } } $errors = $this->_clone->getErrors(); if (empty($errors)) { $this->_clone->create($cloneId); $nbClone += 1; } } } $this->_clone->clear(); } if ($this->_object->isMultilanguage() && is_numeric($nbClone) && $nbClone > 0) $nbClone = floor($nbClone / count($langs)); # Perform clone # Notif if (!empty($nbClone) && $nbClone !== false && is_numeric($nbClone)) $this->pushNotif("success",($nbClone==1) ? $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_GENERIC_SUBMIT_SUCCESS_CLONE'] : sprintf($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_GENERIC_SUBMIT_SUCCESS_CLONES'],$nbClone)); else $this->pushNotif("error",$GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_GENERIC_SUBMIT_ERROR_CLONE']); # /Notif if ($this->_async) { if ($nbClone !== false && is_numeric($nbClone) && $nbClone > 0) { $this->_render["status"] = "OK"; $this->_render["result"]["message"] = ($nbClone==1) ? $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_GENERIC_SUBMIT_SUCCESS_CLONE'] : sprintf($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_GENERIC_SUBMIT_SUCCESS_CLONES'],$nbClone); $rememberList = (is_array($this->_session->getParam("SLS_BO_LIST"))) ? $this->_session->getParam("SLS_BO_LIST") : array(); if (array_key_exists($this->_db_alias."_".$this->_table,$rememberList) && !empty($rememberList[$this->_db_alias."_".$this->_table])) $this->_render["forward"] = $this->_generic->getSiteConfig("protocol")."://".$this->_generic->getSiteConfig("domainName")."/".$rememberList[$this->_db_alias."_".$this->_table]; else $this->_render["forward"] = $this->_generic->getFullPath($this->_boController,"List".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)); } else $this->_render["result"]["message"] = $GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_BO_ASYNC_ERROR']; echo json_encode($this->_render); die(); } else { # Forward if ($this->_forward) { $rememberList = (is_array($this->_session->getParam("SLS_BO_LIST"))) ? $this->_session->getParam("SLS_BO_LIST") : array(); if (array_key_exists($this->_db_alias."_".$this->_table,$rememberList) && !empty($rememberList[$this->_db_alias."_".$this->_table])) $this->_generic->redirect($rememberList[$this->_db_alias."_".$this->_table]); else $this->_generic->forward($this->_boController,"List".ucfirst(strtolower($this->_db_alias))."_".SLS_String::tableToClass($this->_table)); } # /Forward } }
public function action() { set_time_limit(0); $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $controllersXML = $this->_generic->getControllersXML(); $controller = $controllersXML->getTag("//controllers/controller[@isBo='true']/@name"); $tokenSecret = sha1(substr($this->_generic->getSiteConfig("privateKey"), 0, 3).substr($this->_generic->getSiteConfig("privateKey"), strlen($this->_generic->getSiteConfig("privateKey"))-3)); $xmlBo = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bo.xml")); $xmlFk = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/fks.xml")); $xmlType = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/types.xml")); // Check if bo controller already exist if (empty($controller)) { $xml->startTag("errors"); $xml->addFullTag("error","Back-office controller could not be found. Please follow the following link to create it.",true); $xml->endTag("errors"); } // Else, let's choose the models else { // If reload if ($this->_http->getParam("reload") == "true") { $modelsWanted = $this->_http->getParam("models"); $langs = $this->_lang->getSiteLangs(); if (is_array($modelsWanted)) { // Foreach models choose, generate files foreach($modelsWanted as $model) { $db = Sls_String::substrBeforeFirstDelimiter($model,"."); $table = Sls_String::substrAfterFirstDelimiter($model,"."); # Node into bo.xml $boPath = "//sls_configs/entry[@type='table' and @name='".strtolower($db."_".$table)."']"; $boExists = $xmlBo->getTag($boPath."/@type"); if (empty($boExists)) $boPath = "//sls_configs/entry/entry[@type='table' and @name='".strtolower($db."_".$table)."']"; $boExists = $xmlBo->getTag($boPath); if (empty($boExists)) { $this->_generic->useModel(SLS_String::tableToClass($table),ucfirst(strtolower($db)),"user"); $class = ucfirst(strtolower($db))."_".SLS_String::tableToClass($table); $object = new $class(); $xmlNode = ' <entry type="table" name="'.strtolower($db."_".$table).'" multilanguage="'.(($object->isMultilanguage()) ? "true" : "false").'">'."\n"; $xmlNode .= ' <columns>'."\n"; foreach($object->getColumns() as $column) { // Avoid pk $isPk = ($column == $object->getPrimaryKey() || $column == 'pk_lang') ? true : false; // Avoid fk $fkExist = $xmlFk->getTag("//sls_configs/entry[@tableFk='".strtolower($db."_".$table)."' and @columnFk='".$column."']/@tablePk"); $isFk = (!empty($fkExist)) ? true : false; // Avoid quick edit on type file $fileExist = $xmlType->getTag("//sls_configs/entry[@table='".strtolower($db."_".$table)."' and @column='".$column."' and (@type='file_all' or @type='file_img')]/@column"); $isFile = (!empty($fileExist)) ? true : false; $xmlNode .= ' <column table="'.strtolower($db."_".$table).'" name="'.$column.'" multilanguage="'.(($object->isMultilanguage() && !$isPk) ? "true" : "false").'" displayFilter="true" displayList="'.(($isFk) ? "false" : "true").'" allowEdit="'.(($isPk || $isFk || $isFile) ? "false" : "true").'" allowHtml="false" />'."\n"; } $xmlNode .= ' </columns>'."\n"; $xmlNode .= ' </entry>'."\n"; $xmlBo->appendXMLNode("//sls_configs",$xmlNode); $xmlBo->saveXML($this->_generic->getPathConfig("configSls")."/bo.xml",$xmlBo->getXML()); $xmlBo->refresh(); } # /Node into bo.xml # BoActions $boActions = array("List","Add","Modify","Clone","Delete"); foreach($boActions as $boAction) { // Generate Action $action = ucfirst(strtolower($boAction)).ucfirst(strtolower($db))."_".SLS_String::tableToClass($table); $params = array(0 => array("key" => "reload", "value" => "true"), 1 => array("key" => "Controller", "value" => $controller), 2 => array("key" => "actionName", "value" => $action), 3 => array("key" => "token", "value" => $tokenSecret), 4 => array("key" => "template", "value" => "bo"), 5 => array("key" => "dynamic", "value" => "on"), 6 => array("key" => "indexes", "value" => "noindex,nofollow") ); foreach($langs as $lang) { $tmpParam = array("key" => $lang."-action", "value" => $action."_".$lang); $tmpTitle = array("key" => $lang."-title", "value" => $action); array_push($params,$tmpParam); array_push($params,$tmpTitle); } file_get_contents($this->_generic->getFullPath("SLS_Bo", "AddAction", $params, true)); // Erase Action if (file_exists($this->_generic->getPathConfig("installDeployement")."Controllers/Actions/{{USER_BO}}/".$boAction."{{DB}}_{{TABLE}}.controller.php")) { $source = str_replace(array("{{USER_BO}}","{{DB}}","{{TABLE}}"),array($controller,ucfirst(strtolower($db)),SLS_String::tableToClass($table)),file_get_contents($this->_generic->getPathConfig("installDeployement")."Controllers/Actions/{{USER_BO}}/".$boAction."{{DB}}_{{TABLE}}.controller.php")); file_put_contents($this->_generic->getPathConfig("actionsControllers").$controller."/".$action.".controller.php",$source); } // Erase View Head if (file_exists($this->_generic->getPathConfig("installDeployement")."Views/Headers/{{USER_BO}}/".$boAction."{{DB}}_{{TABLE}}.xsl")) { $source = str_replace(array("{{USER_BO}}","{{DB}}","{{TABLE}}"),array($controller,ucfirst(strtolower($db)),SLS_String::tableToClass($table)),file_get_contents($this->_generic->getPathConfig("installDeployement")."Views/Headers/{{USER_BO}}/".$boAction."{{DB}}_{{TABLE}}.xsl")); file_put_contents($this->_generic->getPathConfig("viewsHeaders").$controller."/".$action.".xsl",$source); } // Erase View Body if (file_exists($this->_generic->getPathConfig("installDeployement")."Views/Body/{{USER_BO}}/".$boAction."{{DB}}_{{TABLE}}.xsl")) { $source = str_replace(array("{{USER_BO}}","{{DB}}","{{TABLE}}"),array($controller,ucfirst(strtolower($db)),SLS_String::tableToClass($table)),file_get_contents($this->_generic->getPathConfig("installDeployement")."Views/Body/{{USER_BO}}/".$boAction."{{DB}}_{{TABLE}}.xsl")); file_put_contents($this->_generic->getPathConfig("viewsBody").$controller."/".$action.".xsl",$source); } } # /BoActions } $this->_generic->forward("SLS_Bo","ManageRights"); } } $sql = SLS_Sql::getInstance(); $models = $this->getAllModels(); $dbs = $sql->getDbs(); sort($dbs,SORT_REGULAR); $xml->startTag("dbs"); foreach($dbs as $db) { sort($models,SORT_REGULAR); $xml->startTag("db"); $xml->addFullTag("name",$db,true); $xml->startTag("models"); for($i=0 ; $i<$count=count($models) ; $i++) { if (SLS_String::startsWith($models[$i],$db)) { $xml->startTag("model"); $xml->addFullTag("name",SLS_String::substrAfterFirstDelimiter($models[$i],"."),true); $xml->addFullTag("existed",($this->boActionExist(SLS_String::substrAfterFirstDelimiter($models[$i],"."),SLS_String::substrBeforeFirstDelimiter($models[$i],"."))) ? "true" : "false",true); $xml->endTag("model"); } } $xml->endTag("models"); $xml->endTag("db"); } $xml->endTag("dbs"); } $xml->addFullTag("url_add_controller",$this->_generic->getFullPath("SLS_Bo","AddController",array(0=>array("key"=>"isBo","value"=>"true"))),true); $this->saveXML($xml); }