public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $environments = $this->getEnvironments(); $files = array("site","db","project","mail"); $errors = array(); if ($this->_http->getParam("reload") == "true") { $environment = $this->_http->getParam("environment"); if (in_array($environment,$environments)) $errors[] = "Environment already exists."; else if (empty($environment)) $errors[] = "You must fill your environment name."; if (empty($errors)) { foreach($files as $file) file_put_contents($this->_generic->getRoot().$this->_generic->getPathConfig("configSecure")."/".$file."_".SLS_String::stringToUrl($environment,"-").".xml",file_get_contents($this->_generic->getRoot().$this->_generic->getPathConfig("configSecure").$file.".xml")); $this->_generic->forward("SLS_Bo","GlobalSettings",array(array("key"=>"ProdDeployment","value"=>"true"),array("key"=>"CompleteBatch","value"=>"true"),array("key"=>"Env","value"=>$environment))); } else { $xml->startTag("errors"); foreach($errors as $error) $xml->addFullTag("error",$error,true); $xml->endTag("errors"); } } $this->saveXML($xml); }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $errors = array(); $tpls = $this->getAppTpls(); $siteXML = $this->_generic->getSiteXML(); $ga = $siteXML->getTag("//configs/google/setting[@name='ua']"); if ($this->_http->getParam("reload") == "true") { $tpl = SLS_String::trimSlashesFromString(SLS_String::stringToUrl($this->_http->getParam("tpl_name"),"_")); $doctype = $this->_http->getParam("doctype"); if (empty($tpl)) array_push($errors,"You must choose a name for your template"); else if (in_array($tpl,$tpls)) array_push($errors,"This template name already exists, please choose another one"); if (empty($errors)) { $this->createXslTemplate($tpl,$doctype,$ga); $this->_generic->goDirectTo("SLS_Bo","Templates"); } else { $xml->startTag("errors"); foreach($errors as $error) $xml->addFullTag("error",$error,true); $xml->endTag("errors"); $xml->addFullTag("doctype",(empty($doctype)) ? $this->_generic->getSiteConfig("defaultDoctype") : $doctype,true); } } else { $xml->addFullTag("doctype",$this->_generic->getSiteConfig("defaultDoctype"),true); } $this->saveXML($xml); }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $errors = array(); $generics = $this->getAppXsl(); if ($this->_http->getParam("reload") == "true") { $generic = ucfirst(SLS_String::trimSlashesFromString(SLS_String::stringToUrl($this->_http->getParam("generic_name"),"_"))); if (empty($generic)) array_push($errors,"You must choose a name for your generic"); else if (in_array(strtolower($generic),$generics)) array_push($errors,"This generic name already exists, please choose another one"); if (empty($errors)) { $str = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" xmlns="http://www.w3.org/1999/xhtml">'."\n". t(1).'<xsl:template name="'.$generic.'">'."\n". t(2).''."\n". t(1).'</xsl:template>'."\n". '</xsl:stylesheet>'; file_put_contents($this->_generic->getPathConfig("viewsGenerics").$generic.".xsl",$str); $this->_generic->goDirectTo("SLS_Bo","Templates"); } else { $xml->startTag("errors"); foreach($errors as $error) $xml->addFullTag("error",$error,true); $xml->endTag("errors"); } } $this->saveXML($xml); }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $langs = $this->_lang->getSiteLangs(); $listing = true; $errors = array(); $controllersXML = $this->_generic->getControllersXML(); $controller = $this->_http->getParam('Controller'); $protocol = $this->_generic->getSiteConfig("protocol"); // Check if bo controller $isBo = ($this->_http->getParam('isBo')=="true") ? true : false; if ($this->_http->getParam('reload') == 'true') { $postControllerName = SLS_String::trimSlashesFromString($this->_http->getParam('controllerName')); $newControllerName = SLS_String::stringToUrl(ucwords($postControllerName), "", false); $postProtocol = SLS_String::trimSlashesFromString($this->_http->getParam('protocol')); $tpl = SLS_String::trimSlashesFromString($this->_http->getParam('template')); $postControllerLangs = array(); if (empty($newControllerName)) array_push($errors, "The generic controller name is required to add a new Controller"); if (empty($postProtocol) || ($postProtocol != 'http' && $postProtocol != 'https')) array_push($errors, "Protocol must be http or https"); else $protocol = $postProtocol; foreach ($langs as $lang) { $langController = SLS_String::stringToUrl(SLS_String::trimSlashesFromString($this->_http->getParam($lang."-controller")), "", false); if (empty($langController)) array_push($errors, "The translation in ".$lang." is required to add a new Controller"); else $postControllerLangs[$lang] = $langController; } if (empty($errors)) { $test = $controllersXML->getTags("//controllers/controller[@name='".$newControllerName."']"); if (count($test) != 0) array_push($errors, ($newControllerName == $postControllerName) ? "The controller Name '".$postControllerName."' already exist" : "The controller Name '".$postControllerName."' (".$newControllerName.") already exist"); } if (empty($errors)) { $translatedController = $controllersXML->getTags("//controllers/controller/controllerLangs/controllerLang", 'id'); foreach ($postControllerLangs as $key=>$value) { if (in_array($value, $translatedController)) array_push($errors, "The translated name '".$value."' for this controller is alredy used"); } if (empty($errors)) { $controllerID = $this->_generic->generateControllerId(); $str = "<controller name=\"".$newControllerName."\" side=\"user\" protocol=\"".$protocol."\" id=\"".$controllerID."\""; if (!$isBo && $tpl != -1) $str .= " tpl=\"".$tpl."\""; if ($isBo) $str .= " isBo=\"true\" tpl=\"bo\""; $str .= "><controllerLangs>"; foreach ($postControllerLangs as $key=>$value) $str .= "<controllerLang lang=\"".$key."\"><![CDATA[".$value."]]></controllerLang>"; $str .= "</controllerLangs><scontrollers></scontrollers></controller>"; $controllersXML->appendXMLNode("//controllers", $str); $strControllerProtected = '<?php'."\n". '/**'."\n". '* Class generic for the controller '.$newControllerName.''."\n". '* Write here all your generic functions you need in your '.$newControllerName.' Actions'."\n". '* @author SillySmart'."\n". '* @copyright SillySmart'."\n". '* @package Mvc.Controllers.'.$newControllerName.''."\n". '* @see Mvc.Controllers.SiteProtected'."\n". '* @see Sls.Controllers.Core.SLS_GenericController'."\n". '* @since 1.0'."\n". '*/'."\n". 'class '.$newControllerName.'ControllerProtected extends SiteProtected'."\n". '{'."\n". t(1).'public function init()'."\n". t(1).'{'."\n". t(2).'parent::init();'."\n". t(1).'}'."\n". '}'."\n". '?>'; // Create the Controller Directory and Protected Function file mkdir($this->_generic->getPathConfig("actionsControllers").$newControllerName); file_put_contents($this->_generic->getPathConfig("actionsControllers").$newControllerName."/__".$newControllerName.".protected.php", $strControllerProtected); // Create Lang Directory mkdir($this->_generic->getPathConfig("actionLangs").$newControllerName); // Create Lang Files foreach ($langs as $lang) { $strLang = '<?php'."\n". '/**'."\n". '* '.strtoupper($lang).' File for all the Controller '.$newControllerName."\n". '* You can create all your sentences variables here. To create it, follow the exemple :'."\n". '* '.t(1).'Access it with JS and XSL variable : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'JS\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '* '.t(1).'Access it with XSL variable only : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'XSL\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '*'."\n". '* '."\t".'You can customise the value \'KEY_OF_YOUR_VARIABLE\' and "value of your sentence in '.strtoupper($lang).'" '."\n". '* @author SillySmart'."\n". '* @copyright SillySmart'."\n". '* @package Langs.Actions.'.$newControllerName."\n". '* @since 1.0'."\n". '*'."\n". '*/'."\n". '?>'; file_put_contents($this->_generic->getPathConfig("actionLangs").$newControllerName."/__".$newControllerName.".".strtolower($lang).".lang.php", $strLang); } // Create Views Directory mkdir($this->_generic->getPathConfig("viewsHeaders").$newControllerName); mkdir($this->_generic->getPathConfig("viewsBody").$newControllerName); // Save the new XML file_put_contents($this->_generic->getPathConfig('configSecure')."controllers.xml", $controllersXML->getXML()); // Insert Into Meta $metasXML = $this->_generic->getCoreXML('metas'); $strMetas = "<action id=\"".$controllerID."\" />"; $metasXML->appendXMLNode("//sls_configs", $strMetas); file_put_contents($this->_generic->getPathConfig('configSls')."metas.xml", $metasXML->getXML()); # isBo if ($isBo) { # Public/Files/__Uploads/images/bo if (!file_exists($this->_generic->getPathConfig("files")."__Uploads") && !is_dir($this->_generic->getPathConfig("files")."__Uploads")) mkdir($this->_generic->getPathConfig("files")."__Uploads"); if (!file_exists($this->_generic->getPathConfig("files")."__Uploads/images") && !is_dir($this->_generic->getPathConfig("files")."__Uploads/images")) mkdir($this->_generic->getPathConfig("files")."__Uploads/images"); if (!file_exists($this->_generic->getPathConfig("files")."__Uploads/images/bo") && !is_dir($this->_generic->getPathConfig("files")."__Uploads/images/bo")) mkdir($this->_generic->getPathConfig("files")."__Uploads/images/bo"); if (file_exists($this->_generic->getPathConfig("installDeployement")."Public/Files/__Uploads/images/bo") && is_dir($this->_generic->getPathConfig("installDeployement")."Public/Files/__Uploads/images/bo")) { $files = scandir($this->_generic->getPathConfig("installDeployement")."Public/Files/__Uploads/images/bo"); foreach($files as $file) { if (!SLS_String::startsWith($file,".")) { @copy($this->_generic->getPathConfig("installDeployement")."Public/Files/__Uploads/images/bo/".$file, $this->_generic->getPathConfig("files")."__Uploads/images/bo/".$file); } } } # /Public/Files/__Uploads/images/bo # Controller langs foreach($langs as $lang) { if (file_exists($this->_generic->getPathConfig("installDeployement")."Langs/Actions/{{USER_BO}}/__{{USER_BO}}.".$lang.".lang.php")) $langContent = str_replace(array("{{USER_BO}}"),array($newControllerName),file_get_contents($this->_generic->getPathConfig("installDeployement")."Langs/Actions/{{USER_BO}}/__{{USER_BO}}.".$lang.".lang.php")); else $langContent = str_replace(array("{{USER_BO}}"),array($newControllerName),file_get_contents($this->_generic->getPathConfig("installDeployement")."Langs/Actions/{{USER_BO}}/__{{USER_BO}}.en.lang.php")); if (!empty($langContent)) file_put_contents($this->_generic->getPathConfig("actionLangs").$newControllerName."/__".$newControllerName.".".$lang.".lang.php",$langContent); } # /Controller langs # XSL Templates $boTemplates = array("bo.xsl","bo_light.xsl","bo_blank.xsl"); foreach($boTemplates as $boTemplate) { if (file_exists($this->_generic->getPathConfig("installDeployement")."Views/Templates/".$boTemplate) && !is_dir($this->_generic->getPathConfig("installDeployement")."Views/Templates/".$boTemplate)) { @copy($this->_generic->getPathConfig("installDeployement")."Views/Templates/".$boTemplate, $this->_generic->getPathConfig("viewsTemplates").$boTemplate); } } # /XSL Templates # XSL Generics $boGenerics = array("Boactionsbar.xsl","Boheaders.xsl","Bomenu.xsl"); foreach($boGenerics as $boGeneric) { if (file_exists($this->_generic->getPathConfig("installDeployement")."Views/Generics/".$boGeneric) && !is_dir($this->_generic->getPathConfig("installDeployement")."Views/Generics/".$boGeneric)) { @copy($this->_generic->getPathConfig("installDeployement")."Views/Generics/".$boGeneric, $this->_generic->getPathConfig("viewsGenerics").$boGeneric); } } # /XSL Generics # Controllers Statics $boStatics = array("BoMenu.controller.php"); foreach($boStatics as $boStatic) { if (file_exists($this->_generic->getPathConfig("installDeployement")."Controllers/Statics/".$boStatic) && !is_dir($this->_generic->getPathConfig("installDeployement")."Controllers/Statics/".$boStatic)) { @copy($this->_generic->getPathConfig("installDeployement")."Controllers/Statics/".$boStatic, $this->_generic->getPathConfig("staticsControllers").$boStatic); } } # /Controllers Statics # __{{USER_BO}}.protected.php if (file_exists($this->_generic->getPathConfig("installDeployement")."Controllers/Actions/{{USER_BO}}/__{{USER_BO}}.protected.php") && !is_dir($this->_generic->getPathConfig("installDeployement")."Controllers/Actions/{{USER_BO}}/__{{USER_BO}}.protected.php")) { @copy($this->_generic->getPathConfig("installDeployement")."Controllers/Actions/{{USER_BO}}/__{{USER_BO}}.protected.php", $this->_generic->getPathConfig("actionsControllers").$newControllerName."/__".$newControllerName.".protected.php"); @file_put_contents($this->_generic->getPathConfig("actionsControllers").$newControllerName."/__".$newControllerName.".protected.php",str_replace(array("{{USER_BO}}"),array($newControllerName),file_get_contents($this->_generic->getPathConfig("actionsControllers").$newControllerName."/__".$newControllerName.".protected.php"))); } # /__{{USER_BO}}.protected.php # Native actions $controllerPath = $this->_generic->getPathConfig("installDeployement")."Controllers/Actions/{{USER_BO}}"; $boActions = scandir($controllerPath); $boLightActions = array("BoLogin","BoRenewPwd","BoForgottenPwd"); $boBlankActions = array("BoMenu"); $tokenSecret = sha1(substr($this->_generic->getSiteConfig("privateKey"), 0, 3).substr($this->_generic->getSiteConfig("privateKey"), strlen($this->_generic->getSiteConfig("privateKey"))-3)); foreach($boActions as $boAction) { if ( SLS_String::startsWith($boAction,"Bo") && // Real boAction file_exists($controllerPath."/".$boAction) && // File exist !is_dir($controllerPath."/".$boAction) && // Not a directory !SLS_String::startsWith($boAction,"BoUser") && // Exclude custom action "BoUser(*)" !SLS_String::startsWith($boAction,"Boi18n") && // Exclude custom action "Boi18n" !SLS_String::startsWith($boAction,"BoFileUpload") && // Exclude custom action "BoFileUpload" !SLS_String::startsWith($boAction,"BoProjectSettings") // Exclude custom action "BoProjectSettings" ) { // Generate Action $action = SLS_String::substrBeforeFirstDelimiter($boAction,"."); $params = array(0 => array("key" => "reload", "value" => "true"), 1 => array("key" => "Controller", "value" => $newControllerName), 2 => array("key" => "actionName", "value" => $action), 3 => array("key" => "token", "value" => $tokenSecret), 4 => array("key" => "template", "value" => (in_array($action,$boLightActions)) ? "bo_light" : ((in_array($action,$boBlankActions)) ? "bo_blank" : "bo")), 5 => array("key" => "dynamic", "value" => "on"), 6 => array("key" => "indexes", "value" => "noindex,nofollow") ); if ($action == "BoLogin") $params[] = array("key" => "default", "value" => "on"); 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 $source = str_replace(array("{{USER_BO}}"),array($newControllerName),file_get_contents($this->_generic->getPathConfig("installDeployement")."Controllers/Actions/{{USER_BO}}/".$action.".controller.php")); file_put_contents($this->_generic->getPathConfig("actionsControllers").$newControllerName."/".$action.".controller.php",$source); // Erase View Head if (file_exists($this->_generic->getPathConfig("installDeployement")."Views/Headers/{{USER_BO}}/".$action.".xsl")) file_put_contents($this->_generic->getPathConfig("viewsHeaders").$newControllerName."/".$action.".xsl",file_get_contents($this->_generic->getPathConfig("installDeployement")."Views/Headers/{{USER_BO}}/".$action.".xsl")); // Erase View Body if (file_exists($this->_generic->getPathConfig("installDeployement")."Views/Body/{{USER_BO}}/".$action.".xsl")) file_put_contents($this->_generic->getPathConfig("viewsBody").$newControllerName."/".$action.".xsl",file_get_contents($this->_generic->getPathConfig("installDeployement")."Views/Body/{{USER_BO}}/".$action.".xsl")); } } # /Native actions } # /isBo $controllersRedirect = $this->_generic->getTranslatedController('SLS_Bo', 'Controllers'); $this->_generic->redirect($controllersRedirect['controller']."/".$controllersRedirect['scontroller']); } } if (!empty($errors)) { $xml->startTag("errors"); foreach ($errors as $error) $xml->addFullTag("error", $error, true); $xml->endTag("errors"); $xml->startTag('form'); $xml->addFullTag("controllerName", $postControllerName); foreach ($postControllerLangs as $key=>$value) $xml->addFullTag($key."-controller", $value, true); $xml->endTag('form'); } } // Build all tpls $tpls = $this->getAppTpls(); $xml->startTag("tpls"); foreach($tpls as $template) $xml->addFullTag("tpl",$template,true); $xml->endTag("tpls"); $xml->startTag('controller'); $xml->addFullTag('isBo',($isBo) ? "true" : "false",true); $xml->startTag('translations'); foreach ($langs as $lang) { $xml->startTag('translation'); $xml->addFullTag("lang", $lang, true); $xml->endTag('translation'); } $xml->endTag('translations'); $xml->endTag('controller'); $listing = false; $xml->addFullTag('request', 'addController', true); $xml->addFullTag('protocol', $protocol, true); $xml->addFullTag('template', $tpl, true); $this->saveXML($xml); }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $langs = $this->_generic->getObjectLang()->getSiteLangs(); $errors = array(); $controllersXML = $this->_generic->getControllersXML(); $controller = $this->_http->getParam('Controller'); $protocol = $this->_generic->getSiteConfig("protocol"); $controllerExist = $controllersXML->getTags("//controllers/controller[@name='".$controller."' and @side='user']"); if (count($controllerExist) == 1) { if ($this->_http->getParam('reload') == 'true') { $postControllerName = SLS_String::trimSlashesFromString($this->_http->getParam('controllerName')); $controller = SLS_String::trimSlashesFromString($this->_http->getParam('oldName')); $postProtocol = SLS_String::trimSlashesFromString($this->_http->getParam('protocol')); $tpl = SLS_String::trimSlashesFromString($this->_http->getParam('template')); if (empty($postProtocol) || ($postProtocol != 'http' && $postProtocol != 'https')) array_push($errors, "Protocol must be http or https"); else $protocol = $postProtocol; $postControllerLangs = array(); foreach ($langs as $lang) $postControllerLangs[$lang] = SLS_String::stringToUrl(SLS_String::trimSlashesFromString($this->_http->getParam($lang."-controller")), "", false); if ($tpl == -1) $controllersXML->deleteTagAttribute("//controllers/controller[@name='".$controller."' and @side='user']", "tpl"); else $controllersXML->setTagAttributes("//controllers/controller[@name='".$controller."' and @side='user']", array('tpl' => $tpl)); @file_put_contents($this->_generic->getPathConfig('configSecure')."controllers.xml", $controllersXML->getXML()); $oldControllerName = $controller; if (empty($postControllerName)) array_push($errors, "Controller name can't be empty."); if (!empty($postControllerName) && $postControllerName != $controller) { $newControllerName = SLS_String::stringToUrl($postControllerName, "", false); $test = $controllersXML->getTags("//controllers/controller[@name='".$newControllerName."']"); if (count($test) != 0) array_push($errors, ($newControllerName == $postControllerName) ? "The controller Name '".$postControllerName."' already exist" : "The controller Name '".$postControllerName."' (".$newControllerName.") already exist"); else { $controllersXML->setTagAttributes("//controllers/controller[@name='".$controller."' and @side='user']", array('name' => $newControllerName)); @file_put_contents($this->_generic->getPathConfig('configSecure')."controllers.xml", $controllersXML->getXML()); $controller = $newControllerName; // Controller Files $files = scandir($this->_generic->getPathConfig('actionsControllers').$oldControllerName); foreach ($files as $file) if (is_file($this->_generic->getPathConfig('actionsControllers').$oldControllerName."/".$file) && substr($file, strlen($file)-3) == "php") @file_put_contents($this->_generic->getPathConfig('actionsControllers').$oldControllerName."/".$file, str_replace(array(0=>" ".$oldControllerName,1=>".".$oldControllerName), array(0=>" ".$newControllerName,1=>".".$newControllerName), file_get_contents($this->_generic->getPathConfig('actionsControllers').$oldControllerName."/".$file))); //Langs $files = scandir($this->_generic->getPathConfig('actionLangs').$oldControllerName); foreach ($files as $file) if (is_file($this->_generic->getPathConfig('actionLangs').$oldControllerName."/".$file) && substr($file, strlen($file)-3) == "php") @file_put_contents($this->_generic->getPathConfig('actionLangs').$oldControllerName."/".$file, str_replace(array(0=>" ".$oldControllerName,1=>".".$oldControllerName), array(0=>" ".$newControllerName,1=>".".$newControllerName), file_get_contents($this->_generic->getPathConfig('actionLangs').$oldControllerName."/".$file))); // Rename Directories @rename($this->_generic->getPathConfig('actionsControllers').$oldControllerName, $this->_generic->getPathConfig('actionsControllers').$controller); foreach ($langs as $lang) @rename($this->_generic->getPathConfig('actionLangs').$oldControllerName."/__".$oldControllerName.".".strtolower($lang).".lang.php", $this->_generic->getPathConfig('actionLangs').$oldControllerName."/__".$controller.".".strtolower($lang).".lang.php"); rename($this->_generic->getPathConfig('actionLangs').$oldControllerName, $this->_generic->getPathConfig('actionLangs').$controller); rename($this->_generic->getPathConfig('viewsBody').$oldControllerName, $this->_generic->getPathConfig('viewsBody').$controller); rename($this->_generic->getPathConfig('viewsHeaders').$oldControllerName, $this->_generic->getPathConfig('viewsHeaders').$controller); } } if (empty($errors)) { $translatedController = $controllersXML->getTags("//controllers/controller[@name != '".$controller."']/controllerLangs/controllerLang", 'id'); foreach ($postControllerLangs as $key=>$value) { if (in_array($value, $translatedController)) array_push($errors, "The translated name '".$value."' for this controller is alredy used"); } if (empty($errors)) { foreach ($postControllerLangs as $key=>$value) { $controllersXML->setTag("//controllers/controller[@name = '".$controller."' and @side='user']/controllerLangs/controllerLang[@lang='".$key."']", $postControllerLangs[$key], true); } $controllersXML->setTagAttributes("//controllers/controller[@name='".$controller."' and @side='user']", array('protocol' => $protocol)); file_put_contents($this->_generic->getPathConfig('configSecure')."controllers.xml", $controllersXML->getXML()); } } if (!empty($errors)) { $xml->startTag("errors"); foreach ($errors as $error) $xml->addFullTag("error", $error, true); $xml->endTag("errors"); } $xml->startTag('form'); $xml->addFullTag("controllerName", $postControllerName); foreach ($postControllerLangs as $key=>$value) $xml->addFullTag($key."-controller", $value, true); $xml->endTag('form'); } $tplResult = array_shift($controllersXML->getTagsAttribute("//controllers/controller[@name='".$controller."' and @side='user']","tpl")); $tpl = $tplResult["attribute"]; $xml->startTag('controller'); $xml->addFullTag("name", $controller, true); $xml->addFullTag("tpl", $tpl, true); $xml->addFullTag("locked", ($controller == 'Home' || $controller == 'Default') ? 1 : 0, true); $xml->startTag('translations'); foreach ($langs as $lang) { $xml->startTag('translation'); $xml->addFullTag("lang", $lang, true); $xml->addFullTag("name", $controllersXML->getTag("//controllers/controller[@name='".$controller."' and @side='user']/controllerLangs/controllerLang[@lang='".$lang."']"), true); $xml->endTag('translation'); } $xml->endTag('translations'); $xml->endTag('controller'); $xml->addFullTag('request', 'modifyController', true); // Build all tpls $tpls = $this->getAppTpls(); $xml->startTag("tpls"); foreach($tpls as $template) $xml->addFullTag("tpl",$template,true); $xml->endTag("tpls"); } else { $this->_generic->dispatch('SLS_Bo', 'Controllers'); } $xml->addFullTag('protocol', $protocol, true); $xml->addFullTag('template', $tpl, true); $this->saveXML($xml); }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $langs = $this->_generic->getObjectLang()->getSiteLangs(); $errors = array(); $siteXML = $this->_generic->getSiteXML(); $aliasesSelected = array(); $componentsSelected = array(); $plugin = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configPlugins")."/plugins.xml")); $pluginMobile = $plugin->getTag("//plugins/plugin[@code='mobile']"); $pluginMobile = (!empty($pluginMobile)) ? true : false; $controllersXML = $this->_generic->getControllersXML(); $metasXML = $this->_generic->getCoreXML('metas'); $controller = $this->_http->getParam('Controller'); $action = $this->_http->getParam('Action'); $actionExist = $controllersXML->getTags("//controllers/controller[@name='".$controller."' and @side='user']/scontrollers/scontroller[@name='".$action."']"); $actionId = array_shift($controllersXML->getTags("//controllers/controller[@name='".$controller."' and @side='user']/scontrollers/scontroller[@name='".$action."']/@id")); $protocol = $this->_generic->getActionProtocol($actionId); if (count($actionExist) == 1) { $aliasesChecked = array_shift($controllersXML->getTagsAttributes("//controllers/controller/scontrollers/scontroller[@id='".$actionId."']",array("domains"))); if (!empty($aliasesChecked)) { $alias = explode(",",$aliasesChecked["attributes"][0]["value"]); foreach($alias as $cur_alias) array_push($aliasesSelected,$cur_alias); } $componentsChecked = array_shift($controllersXML->getTagsAttributes("//controllers/controller/scontrollers/scontroller[@id='".$actionId."']",array("components"))); if (!empty($componentsChecked)) { $component = explode(",",$componentsChecked["attributes"][0]["value"]); foreach($component as $cur_component) array_push($componentsSelected,$cur_component); } $reload = $this->_http->getParam("reload"); if ($reload == 'true') { $oldAction = SLS_String::trimSlashesFromString($this->_http->getParam("genericName")); $newAction = SLS_String::stringToUrl(ucwords(SLS_String::trimSlashesFromString($this->_http->getParam("actionName"))), "", false); $needDynamic = SLS_String::trimSlashesFromString($this->_http->getParam("dynamic")); $needOffline = SLS_String::trimSlashesFromString($this->_http->getParam("offline")); $needDefault = SLS_String::trimSlashesFromString($this->_http->getParam("default")); $searchEngine = SLS_String::trimSlashesFromString($this->_http->getParam("indexes")); $postProtocol = SLS_String::trimSlashesFromString($this->_http->getParam("protocol")); $tpl = SLS_String::trimSlashesFromString($this->_http->getParam('template')); $aliases = SLS_String::trimSlashesFromString($this->_http->getParam('domains')); $components = SLS_String::trimSlashesFromString($this->_http->getParam('components')); $cache_visibility = SLS_String::trimSlashesFromString($this->_http->getParam('cache_visibility')); $cache_scope = SLS_String::trimSlashesFromString($this->_http->getParam('cache_scope')); $cache_expiration = SLS_String::trimSlashesFromString($this->_http->getParam('cache_expiration')); $cache_responsive = SLS_String::trimSlashesFromString($this->_http->getParam('cache_responsive')); $toCache = (in_array($cache_visibility,array("public","private"))) ? true : false; if ($controller == "Home" && $action == "Index") { $needDefault = "true"; $newAction = $oldAction; } // If responsive wanted if ($cache_responsive == "true" && !$pluginMobile) { // Force Mobile plugin download file_get_contents($this->_generic->getFullPath("SLS_Bo", "SearchPlugin", array("Action" => "Download", "Server" => "4", "Plugin" => "20", "token" => sha1(substr($this->_generic->getSiteConfig("privateKey"), 0, 3).substr($this->_generic->getSiteConfig("privateKey"), strlen($this->_generic->getSiteConfig("privateKey"))-3))), true)); } $postActionsLang = array(); $postTitlesLang = array(); $postDescriptionsLang = array(); $postKeywordsLang = array(); // Save Form informations $xml->startTag("form"); $xml->addFullTag("actionName", $newAction, true); foreach ($langs as $lang) { $postLang = trim(SLS_String::stringToUrl(SLS_String::trimSlashesFromString($this->_http->getParam(strtolower($lang)."-action")), "", false)); $postOldLang = SLS_String::trimSlashesFromString($this->_http->getParam(strtolower($lang)."-oldAction")); if ($postLang != $oldAction) { $translationExist = $controllersXML->getTags("//controllers/controller[@side='user' and @name='".$controller."']/scontrollers/scontroller[@name != '".$oldAction."']/scontrollerLangs[scontrollerLang = '".$postLang."']"); if (empty($postLang)) array_push($errors, "You need to fill the ".$lang." url translations"); elseif(count($translationExist) != 0) array_push($errors, "You URL translation in ".$lang." is already in use on another action in the same controller"); else $postActionsLang[$lang] = $postLang; } // Get Titles $postTitlesLang[$lang] = SLS_String::trimSlashesFromString($this->_http->getParam(strtolower($lang)."-title")); $postDescriptionsLang[$lang] = SLS_String::trimSlashesFromString($this->_http->getParam(strtolower($lang)."-description")); $postKeywordsLang[$lang] = SLS_String::trimSlashesFromString($this->_http->getParam(strtolower($lang)."-keywords")); $xml->addFullTag($lang."-action", $postLang, true); $xml->addFullTag($lang."-title", $postTitlesLang[$lang], true); $xml->addFullTag($lang."-description", $postDescriptionsLang[$lang], true); $xml->addFullTag($lang."-keywords", $postKeywordsLang[$lang], true); } $xml->endTag("form"); if (empty($postProtocol) || ($postProtocol != 'http' && $postProtocol != 'https')) array_push($errors, "Protocol must be http or https"); else $protocol = $postProtocol; if (!empty($aliases) && is_array($aliases)) { $aliasesSelected = array(); foreach($aliases as $alias) array_push($aliasesSelected,$alias); } else { $aliasesSelected = array(); $controllersXML->setTagAttributes("//controllers/controller[@name='".$controller."']/scontrollers/scontroller[@name='".$action."' and @id='".$actionId."']", array('domains' => '')); } if ($toCache && (!is_numeric($cache_expiration) || $cache_expiration < 0)) array_push($errors, "Your expiration cache must be a positive time or 0"); if ($toCache && (!in_array($cache_scope,array("full","partial")))) array_push($errors, "Your must describe your cache scope"); if ($toCache && is_numeric($cache_expiration) && $cache_expiration >= 0 && in_array($cache_scope,array("full","partial"))) $controllersXML->setTagAttributes("//controllers/controller[@name='".$controller."']/scontrollers/scontroller[@name='".$action."' and @id='".$actionId."']", array('cache' => $cache_visibility.'|'.$cache_scope.'|'.(($cache_responsive == 'true') ? 'responsive' : 'no_responsive').'|'.$cache_expiration)); if (!$toCache) $controllersXML->deleteTagAttribute("//controllers/controller[@name='".$controller."']/scontrollers/scontroller[@name='".$action."' and @id='".$actionId."']","cache"); if (!empty($components) && is_array($components)) { $componentsSelected = array(); foreach($components as $component) array_push($componentsSelected,$component); } else { $componentsSelected = array(); $controllersXML->setTagAttributes("//controllers/controller[@name='".$controller."']/scontrollers/scontroller[@name='".$action."' and @id='".$actionId."']", array('components' => '')); } if ((($controller != 'Home' && $controller != 'Default') || (($controller == 'Home' && $action != 'Index') || ($controller == 'Default' && ($action != 'UrlError' && $action != 'BadRequestError' && $action != 'AuthorizationError' && $action != 'ForbiddenError' && $action != 'InternalServerError' && $action != 'TemporaryRedirectError' && $action != 'MaintenanceError')))) && ($oldAction != $newAction)) { $newNameExist = $controllersXML->getTags("//controllers/controller[@name='".$controller."' and @side='user']/scontrollers/scontroller[@name='".$newAction."']"); if (count($newNameExist) != 0) array_push($errors, "The generic action name is already in use in this controller"); } else $newAction = $oldAction; if (empty($newAction)) array_push($errors, "Action name can't be empty."); if (!empty($aliases)) $controllersXML->setTagAttributes("//controllers/controller[@name='".$controller."']/scontrollers/scontroller[@name='".$action."' and @id='".$actionId."']", array('domains' => implode(",",$aliasesSelected))); if (!empty($components)) $controllersXML->setTagAttributes("//controllers/controller[@name='".$controller."']/scontrollers/scontroller[@name='".$action."' and @id='".$actionId."']", array('components' => implode(",",$componentsSelected))); $controllersXML->setTagAttributes("//controllers/controller[@name='".$controller."']/scontrollers/scontroller[@name='".$action."' and @id='".$actionId."']", array('disable' => (empty($needOffline)) ? '0' : '1')); if ($tpl == -1) $controllersXML->deleteTagAttribute("//controllers/controller[@name='".$controller."' and @side='user']/scontrollers/scontroller[@name='".$action."']", "tpl"); else $controllersXML->setTagAttributes("//controllers/controller[@name='".$controller."' and @side='user']/scontrollers/scontroller[@name='".$action."']", array('tpl' => $tpl)); file_put_contents($this->_generic->getPathConfig('configSecure')."controllers.xml", $controllersXML->getXML()); $dynamic = (($controller != 'Home' && $controller != 'Default') || (($controller == 'Home' && $action != 'Index') || ($controller == 'Default' && ($action != 'UrlError' && $action != 'BadRequestError' && $action != 'AuthorizationError' && $action != 'ForbiddenError' && $action != 'InternalServerError' && $action != 'TemporaryRedirectError' && $action != 'MaintenanceError')))) ? ($needDynamic == 'on') ? "1" : "0" : array_shift($controllersXML->getTags("//controllers/controller[@name='".$controller."' and side='user']/scontrollers/scontroller[@name='".$oldAction."']/@needParam")); // If no errors if (empty($errors)) { // If default, reset other in current controller if (!empty($needDefault)) { $actions = $controllersXML->getTags("//controllers/controller[@side='user' and @name='".$controller."']/scontrollers/scontroller/@id"); foreach($actions as $curActionId) $controllersXML->setTagAttributes("//controllers/controller[@side='user' and @name='".$controller."']/scontrollers/scontroller[@id='".$curActionId."']", array('default' => '0')); } $controllersXML->setTagAttributes("//controllers/controller/scontrollers/scontroller[@id='".$actionId."']", array("name"=>$newAction,"needParam"=>$dynamic,'protocol'=>$protocol,"default"=>(empty($needDefault) ? '0' : '1'))); foreach ($langs as $lang) { if (array_key_exists($lang, $postActionsLang)) $controllersXML->setTag("//controllers/controller/scontrollers/scontroller[@id='".$actionId."']/scontrollerLangs/scontrollerLang[@lang='".$lang."']", $postActionsLang[$lang], true); else $controllersXML->setTag("//controllers/controller/scontrollers/scontroller[@id='".$actionId."']/scontrollerLangs/scontrollerLang[@lang='".$lang."']", SLS_String::trimSlashesFromString($this->_http->getParam(strtolower($lang)."-oldAction")), true); } // If generic name is not the same, we modify all files if ($oldAction != $newAction) { // Controller $contentController = file_get_contents($this->_generic->getPathConfig('actionsControllers').$controller."/".$oldAction.".controller.php"); $contentController = str_replace(array(0=>" ".$controller.$oldAction." ", 1=>" ".$oldAction." "), array(0=>" ".$controller.$newAction." ", 1=>" ".$newAction." "), $contentController); file_put_contents($this->_generic->getPathConfig('actionsControllers').$controller."/".$newAction.".controller.php", $contentController); unlink($this->_generic->getPathConfig('actionsControllers').$controller."/".$oldAction.".controller.php"); //Langs foreach ($langs as $lang) { $contentLang = file_get_contents($this->_generic->getPathConfig('actionLangs').$controller."/".$oldAction.".".$lang.".lang.php"); $contentLang = str_replace(array(0=>" ".$controller.$oldAction." ", 1=>" ".$oldAction." "), array(0=>" ".$controller.$newAction." ", 1=>" ".$newAction." "), $contentLang); file_put_contents($this->_generic->getPathConfig('actionLangs').$controller."/".$newAction.".".$lang.".lang.php", $contentLang); unlink($this->_generic->getPathConfig('actionLangs').$controller."/".$oldAction.".".$lang.".lang.php"); } // Views // Body $contentBody = file_get_contents($this->_generic->getPathConfig('viewsBody').$controller."/".$oldAction.".xsl"); $contentBody = str_replace(array(0=>"name=\"".$oldAction."\">", 1=>$oldAction.".xsl"), array(0=>"name=\"".$newAction."\">", 1=>$newAction.".xsl"), $contentBody); file_put_contents($this->_generic->getPathConfig('viewsBody').$controller."/".$newAction.".xsl", $contentBody); unlink($this->_generic->getPathConfig('viewsBody').$controller."/".$oldAction.".xsl"); // Headers $contentHeader = file_get_contents($this->_generic->getPathConfig('viewsHeaders').$controller."/".$oldAction.".xsl"); $contentHeader = str_replace(array(0=>"name=\"Header".$oldAction."\">"), array(0=>"name=\"Header".$newAction."\">"), $contentHeader); file_put_contents($this->_generic->getPathConfig('viewsHeaders').$controller."/".$newAction.".xsl", $contentHeader); unlink($this->_generic->getPathConfig('viewsHeaders').$controller."/".$oldAction.".xsl"); } // We now update the XML foreach ($langs as $lang) { // Metas $metasXML->setTag("//sls_configs/action[@id='".$actionId."']/title[@lang='".$lang."']", $postTitlesLang[$lang], true); $metasXML->setTag("//sls_configs/action[@id='".$actionId."']/description[@lang='".$lang."']", $postDescriptionsLang[$lang], true); $metasXML->setTag("//sls_configs/action[@id='".$actionId."']/keywords[@lang='".$lang."']", $postKeywordsLang[$lang], true); } if (!SLS_String::contains($searchEngine,", ")) $searchEngine = str_replace(",",", ",$searchEngine); if ($searchEngine != "index, follow" && $searchEngine != "noindex, follow" && $searchEngine != "noindex, nofollow" && $searchEngine != "index, nofollow") $searchEngine = "index, follow"; $metasXML->setTag("//sls_configs/action[@id='".$actionId."']/robots", $searchEngine, true); file_put_contents($this->_generic->getPathConfig("configSecure")."controllers.xml", $controllersXML->getXML()); file_put_contents($this->_generic->getPathConfig("configSls")."metas.xml", $metasXML->getXML()); } if (count($errors) != 0) { $xml->startTag("errors"); foreach ($errors as $error) $xml->addFullTag("error", $error, true); $xml->endTag("errors"); } $xml->startTag("cache"); $xml->addFullTag("cache_visibility", $cache_visibility,true); $xml->addFullTag("cache_scope", $cache_scope,true); $xml->addFullTag("cache_expiration", $cache_expiration,true); $xml->addFullTag("cache_responsive", $cache_responsive,true); $xml->endTag("cache"); } else { $actionCache = $this->_cache->getAction($actionId); $xml->startTag("cache"); $xml->addFullTag("cache_visibility", (is_array($actionCache)) ? $actionCache[0] : "",true); $xml->addFullTag("cache_scope", (is_array($actionCache)) ? $actionCache[1] : "",true); $xml->addFullTag("cache_expiration", (is_array($actionCache)) ? $actionCache[3] : "",true); $xml->addFullTag("cache_responsive", (is_array($actionCache)) ? (($actionCache[2]=="responsive") ? "true" : "") : "",true); $xml->endTag("cache"); } $tpl = $controllersXML->getTag("//controllers/controller[@name='".$controller."' and @side='user']/scontrollers/scontroller[@name='".$action."']/@tpl"); if (empty($tpl)) $tpl = $controllersXML->getTag("//controllers/controller[@name='".$controller."' and @side='user']/@tpl"); $controllersXML = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSecure")."controllers.xml")); $xml->startTag("action"); $xml->addFullTag("name", $action, true); $xml->addFullTag("dynamic", (array_shift($controllersXML->getTags("//controllers/controller[@name='".$controller."' and @side='user']/scontrollers/scontroller[@name='".$action."']/@needParam")) == '1') ? 'true' : 'false', true); $xml->addFullTag("offline", (array_shift($controllersXML->getTags("//controllers/controller[@name='".$controller."' and @side='user']/scontrollers/scontroller[@name='".$action."']/@disable")) == '1') ? 'true' : 'false', true); $xml->addFullTag("default", (array_shift($controllersXML->getTags("//controllers/controller[@name='".$controller."' and @side='user']/scontrollers/scontroller[@name='".$action."']/@default")) == '1') ? 'true' : 'false', true); $xml->addFullTag("indexes", array_shift($metasXML->getTags("//sls_configs/action[@id='".$actionId."']/robots")), true); $xml->addFullTag("canBeModified", (($controller != 'Home' && $controller != 'Default') || (($controller == 'Home' && $action != 'Index') || ($controller == 'Default' && ($action != 'UrlError' && $action != 'BadRequestError' && $action != 'AuthorizationError' && $action != 'ForbiddenError' && $action != 'InternalServerError' && $action != 'TemporaryRedirectError' && $action != 'MaintenanceError')))) ? 'true' : 'false', true); $xml->startTag("translations"); foreach ($langs as $lang) { $xml->startTag("translation"); $xml->addFullTag("lang", $lang, true); $xml->addFullTag("name", array_shift($controllersXML->getTags("//controllers/controller[@name='".$controller."' and @side='user']/scontrollers/scontroller[@name='".$action."']/scontrollerLangs/scontrollerLang[@lang='".$lang."']")) ,true); $xml->addFullTag("title", array_shift($metasXML->getTags("//sls_configs/action[@id='".$actionId."']/title[@lang='".$lang."']")),true); $xml->addFullTag("description", array_shift($metasXML->getTags("//sls_configs/action[@id='".$actionId."']/description[@lang='".$lang."']")),true); $xml->addFullTag("keywords", array_shift($metasXML->getTags("//sls_configs/action[@id='".$actionId."']/keywords[@lang='".$lang."']")),true); $xml->endTag("translation"); } $xml->endTag("translations"); $xml->endTag("action"); $xml->startTag('controller'); $xml->addFullTag("name", $controller, true); $xml->startTag('translations'); foreach ($langs as $lang) { $xml->startTag('translation'); $xml->addFullTag("lang", $lang, true); $xml->addFullTag("name", $controllersXML->getTag("//controllers/controller[@name='".$controller."' and @side='user']/controllerLangs/controllerLang[@lang='".$lang."']"), true); $xml->endTag('translation'); } $xml->endTag('translations'); $xml->endTag('controller'); // Build all tpls $tpls = $this->getAppTpls(); $xml->startTag("tpls"); foreach($tpls as $template) $xml->addFullTag("tpl",$template,true); $xml->endTag("tpls"); $xml->addFullTag('request', 'modifyAction', true); $aliases = $siteXML->getTagsAttributes("//configs/domainName/domain",array("alias")); $xml->startTag("aliases"); for($i=0 ; $i<$count=count($aliases) ; $i++) { $xml->startTag("alias"); $xml->addFullTag("name",$aliases[$i]["attributes"][0]["value"],true); $xml->addFullTag("selected",(in_array($aliases[$i]["attributes"][0]["value"],$aliasesSelected)) ? "true" : "false",true); $xml->endTag("alias"); } $xml->endTag("aliases"); $components = $this->_generic->recursiveReadDir($this->_generic->getPathConfig("componentsControllers"), array(), array(0=>"php")); $xml->startTag("components"); foreach ($components as $component) { $xml->startTag("component"); $xml->addFullTag("name", SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterLastDelimiter($component, "/"), ".controller.php"),true); $xml->addFullTag("selected",(in_array(SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterLastDelimiter($component, "/"), ".controller.php"),$componentsSelected)) ? "true" : "false",true); $xml->endTag("component"); } $xml->endTag("components"); } else { $this->_generic->dispatch('SLS_Bo', 'Controllers'); } $xml->addFullTag('protocol', $protocol, true); $xml->addFullTag('template', $tpl, true); $this->saveXML($xml); }
/** * 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; }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $langs = $this->_generic->getObjectLang()->getSiteLangs(); $listing = true; $errors = array(); $protocol = $this->_generic->getProtocol(); $siteXML = $this->_generic->getSiteXML(); $aliasesSelected = array(); $componentsSelected = array(); $plugin = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configPlugins")."/plugins.xml")); $pluginMobile = $plugin->getTag("//plugins/plugin[@code='mobile']"); $pluginMobile = (!empty($pluginMobile)) ? true : false; $controllersXML = $this->_generic->getControllersXML(); $controller = SLS_String::trimSlashesFromString($this->_http->getParam("Controller")); $controllers = $controllersXML->getTags("//controllers/controller[@side='user' and @name='".$controller."']"); if (count($controllers) == 1) { $controllerID = array_shift($controllersXML->getTags("//controllers/controller[@side='user' and @name='".$controller."']/@id")); $protocol = $this->_generic->getControllerProtocol($controllerID); $listing = false; $xml->addFullTag('request', 'AddAction', true); if ($this->_http->getParam('reload') == 'true') { // Get the form informations $newAction = SLS_String::stringToUrl(ucwords(SLS_String::trimSlashesFromString($this->_http->getParam("actionName"))), "", false); $needDynamic = SLS_String::trimSlashesFromString($this->_http->getParam("dynamic")); $needOffline = SLS_String::trimSlashesFromString($this->_http->getParam("offline")); $needDefault = SLS_String::trimSlashesFromString($this->_http->getParam("default")); $searchEngine = SLS_String::trimSlashesFromString($this->_http->getParam("indexes")); $postProtocol = SLS_String::trimSlashesFromString($this->_http->getParam("protocol")); $tpl = SLS_String::trimSlashesFromString($this->_http->getParam('template')); $aliases = SLS_String::trimSlashesFromString($this->_http->getParam('domains')); $components = SLS_String::trimSlashesFromString($this->_http->getParam('components')); $cache_visibility = SLS_String::trimSlashesFromString($this->_http->getParam('cache_visibility')); $cache_scope = SLS_String::trimSlashesFromString($this->_http->getParam('cache_scope')); $cache_expiration = SLS_String::trimSlashesFromString($this->_http->getParam('cache_expiration')); $cache_responsive = SLS_String::trimSlashesFromString($this->_http->getParam('cache_responsive')); if (empty($postProtocol)) $postProtocol = "http"; $postActionsLang = array(); $postTitlesLang = array(); $postDescriptionsLang = array(); $postKeywordsLang = array(); $toCache = (in_array($cache_visibility,array("public","private"))) ? true : false; // If responsive wanted if ($cache_responsive == "true" && !$pluginMobile) { // Force Mobile plugin download file_get_contents($this->_generic->getFullPath("SLS_Bo", "SearchPlugin", array("Action" => "Download", "Server" => "4", "Plugin" => "20", "token" => sha1(substr($this->_generic->getSiteConfig("privateKey"), 0, 3).substr($this->_generic->getSiteConfig("privateKey"), strlen($this->_generic->getSiteConfig("privateKey"))-3))), true)); } if (empty($newAction)) array_push($errors, "Action name can't be empty"); $actionExist = $controllersXML->getTags("//controllers/controller[@side='user' and @name='".$controller."']/scontrollers/scontroller[@name='".$newAction."']"); if (count($actionExist) == 0) { if (empty($postProtocol) || ($postProtocol != 'http' && $postProtocol != 'https')) array_push($errors, "Protocol must be http or https"); else $protocol = $postProtocol; if (!empty($aliases) && is_array($aliases)) foreach($aliases as $alias) array_push($aliasesSelected,$alias); if (!empty($components) && is_array($components)) foreach($components as $component) array_push($componentsSelected,$component); $siteLangs = $this->_generic->getObjectLang()->getSiteLangs(); foreach ($siteLangs as $lang) { // Check Url $postLang = trim(SLS_String::stringToUrl(SLS_String::trimSlashesFromString($this->_http->getParam(strtolower($lang)."-action")), "", false)); $translationExist = $controllersXML->getTags("//controllers/controller[@side='user' and @name='".$controller."']/scontrollers/scontroller/scontrollerLangs[scontrollerLang = '".$postLang."']"); if (empty($postLang)) array_push($errors, "You need to fill the ".$lang." url translations"); elseif(count($translationExist) != 0) array_push($errors, "You URL translation in ".$lang." is already in use on another action in the same controller"); else $postActionsLang[$lang] = $postLang; // Get Titles $postTitlesLang[$lang] = SLS_String::trimSlashesFromString($this->_http->getParam(strtolower($lang)."-title")); // Get Description $postDescriptionsLang[$lang] = SLS_String::trimSlashesFromString($this->_http->getParam(strtolower($lang)."-description")); // Get Keywords $postKeywordsLang[$lang] = SLS_String::trimSlashesFromString($this->_http->getParam(strtolower($lang)."-keywords")); } if ($toCache && (!is_numeric($cache_expiration) || $cache_expiration < 0)) array_push($errors, "Your expiration cache must be a positive time or 0"); if ($toCache && (!in_array($cache_scope,array("full","partial")))) array_push($errors, "Your must describe your cache scope"); if (count($errors) == 0) { // If an error existing and the controller directory wasn't created if (!is_dir($this->_generic->getPathConfig("actionsControllers").$controller)) mkdir($this->_generic->getPathConfig("actionsControllers").$controller); if (!is_file($this->_generic->getPathConfig("actionsControllers").$controller."/__".$controller.".protected.php")) { $strControllerProtected = '<?php'."\n". '/**'."\n". '* Class generic for the controller '.$newControllerName.''."\n". '* Write here all your generic functions you need in your '.$newControllerName.' Actions'."\n". '* @author SillySmart'."\n". '* @copyright SillySmart'."\n". '* @package Mvc.Controllers.'.$newControllerName.''."\n". '* @see Mvc.Controllers.SiteProtected'."\n". '* @see Sls.Controllers.Core.SLS_GenericController'."\n". '* @since 1.0'."\n". '*/'."\n". 'class '.$newControllerName.'ControllerProtected extends SiteProtected'."\n". '{'."\n". t(1).'public function init()'."\n". t(1).'{'."\n". t(2).'parent::init();'."\n". t(1).'}'."\n". '}'."\n". '?>'; file_put_contents($this->_generic->getPathConfig("actionsControllers").$controller."/__".$controller.".protected.php", $strControllerProtected); } // Create Controller File $strControllerAction = '<?php'."\n". '/**'."\n". '* Class '.$newAction.' into '.$controller.' Controller'."\n". '* @author SillySmart'."\n". '* @copyright SillySmart'."\n". '* @package Mvc.Controllers.'.$controller."\n". '* @see Mvc.Controllers.'.$controller.'.ControllerProtected'."\n". '* @see Mvc.Controllers.SiteProtected'."\n". '* @see Sls.Controllers.Core.SLS_GenericController'."\n". '* @since 1.0'."\n". '*'."\n". '*/'."\n". 'class '.$controller.$newAction.' extends '.$controller.'ControllerProtected'."\n". '{'."\n". t(1).'public function init()'."\n". t(1).'{'."\n". t(2).'parent::init();'."\n". t(1).'}'."\n\n". t(1).'public function action()'."\n". t(1).'{'."\n". t(2)."\n". t(1).'}'."\n". "}\n". '?>'; file_put_contents($this->_generic->getPathConfig("actionsControllers").$controller."/".$newAction.".controller.php", $strControllerAction); // Create Lang Files if (!is_dir($this->_generic->getPathConfig("langs")."Actions/".$controller)) mkdir($this->_generic->getPathConfig("langs")."Actions/".$controller); $langsFiles = array(); foreach ($siteLangs as $lang) { $strLang = '<?php'."\n". '/**'."\n". '* '.strtoupper($lang).' File for the action '.$newAction.' into '.$controller.' Controller'."\n". '* You can create all your sentences variables here. To create it, follow the exemple :'."\n". '* '."\t".'Access it with JS and XSL variable : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'JS\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '* '."\t".'Access it with XSL variable only : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'XSL\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '*'."\n". '* '."\t".'You can customise the value \'KEY_OF_YOUR_VARIABLE\' and "value of your sentence in '.strtoupper($lang).'" '."\n". '* @author SillySmart'."\n". '* @copyright SillySmart'."\n". '* @package Langs.Actions.'.$controller."\n". '* @since 1.0'."\n". '*'."\n". '*/'."\n". '?>'; file_put_contents($this->_generic->getPathConfig("langs")."Actions/".$controller."/".$newAction.".".strtolower($lang).".lang.php", $strLang); } // Create Views File if (!is_dir($this->_generic->getPathConfig("viewsBody").$controller)) mkdir($this->_generic->getPathConfig("viewsBody").$controller); if (!is_dir($this->_generic->getPathConfig("viewsHeaders").$controller)) mkdir($this->_generic->getPathConfig("viewsHeaders").$controller); $strBody = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" xmlns="http://www.w3.org/1999/xhtml">'."\n". t(1).'<xsl:template name="'.$newAction.'">'."\n". t(2).'<h1>Customize the body of this page in <i>'.$this->_generic->getPathConfig('viewsBody').$controller.'/'.$newAction.'.xsl</i></h1>'."\n". t(2).'<h2>And your headers in <i>'.$this->_generic->getPathConfig('viewsHeaders').$controller.'/'.$newAction.'.xsl</i></h2>'."\n". t(1).'</xsl:template>'."\n". '</xsl:stylesheet>'; $strHeader = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" xmlns="http://www.w3.org/1999/xhtml">'."\n". t(1).'<xsl:template name="Header'.$newAction.'">'."\n". t(1).'</xsl:template>'."\n". '</xsl:stylesheet>'; file_put_contents($this->_generic->getPathConfig("viewsBody").$controller.'/'.$newAction.'.xsl', $strBody); file_put_contents($this->_generic->getPathConfig("viewsHeaders").$controller.'/'.$newAction.'.xsl', $strHeader); // End of files creation // XML Modifications $metasXML = $this->_generic->getCoreXML('metas'); // Get the titles // If default, reset other in current controller if (!empty($needDefault)) { $actions = $controllersXML->getTags("//controllers/controller[@side='user' and @name='".$controller."']/scontrollers/scontroller/@id"); foreach($actions as $curActionId) $controllersXML->setTagAttributes("//controllers/controller[@side='user' and @name='".$controller."']/scontrollers/scontroller[@id='".$curActionId."']", array('default' => '0')); } $actionId = $this->_generic->generateActionId(); $xmlAction = "<scontroller name=\"".$newAction."\" needParam=\""; $xmlAction .= ($this->_http->getParam("dynamic") == "on") ? "1" : "0"; $xmlAction .= "\" id=\"".$actionId."\" protocol=\"".$protocol."\""; if ($tpl != -1) $xmlAction .= " tpl=\"".$tpl."\""; if (!empty($aliases)) $xmlAction .= " domains=\"".implode(",",$aliases)."\""; if (!empty($components)) $xmlAction .= " components=\"".implode(",",$components)."\""; if (!empty($needOffline)) $xmlAction .= " disable=\"1\""; if (!empty($needDefault)) $xmlAction .= " default=\"1\""; if ($toCache) $xmlAction .= " cache=\"".$cache_visibility."|".$cache_scope."|".(($cache_responsive == "true") ? "responsive" : "no_responsive")."|".$cache_expiration."\""; $xmlAction .= "><scontrollerLangs>"; $strMetas = "<action id=\"".$actionId."\" />"; $metasXML->appendXMLNode("//sls_configs", $strMetas); foreach ($siteLangs as $lang) { $xmlAction .= "<scontrollerLang lang=\"".$lang."\"><![CDATA[".$postActionsLang[$lang]."]]></scontrollerLang>"; // Metas $metas = "<title lang=\"".$lang."\"><![CDATA[".$postTitlesLang[$lang]."]]></title>"; $metas .= "<description lang=\"".$lang."\"><![CDATA[".$postDescriptionsLang[$lang]."]]></description>"; $metas .= "<keywords lang=\"".$lang."\"><![CDATA[".$postKeywordsLang[$lang]."]]></keywords>"; $metasXML->appendXMLNode("//sls_configs/action[@id=\"".$actionId."\"]", $metas); } $xmlAction .= "</scontrollerLangs></scontroller>"; if (!SLS_String::contains($searchEngine,", ")) $searchEngine = str_replace(",",", ",$searchEngine); if ($searchEngine != "index, follow" && $searchEngine != "noindex, follow" && $searchEngine != "noindex, nofollow" && $searchEngine != "index, nofollow") $searchEngine = "index, follow"; $metasXML->appendXMLNode("//sls_configs/action[@id='".$actionId."']", "<robots><![CDATA[".$searchEngine."]]></robots>"); $controllersXML->appendXMLNode("//controllers/controller[@side='user' and @name='".$controller."']/scontrollers", $xmlAction); file_put_contents($this->_generic->getPathConfig("configSecure")."controllers.xml", $controllersXML->getXML()); file_put_contents($this->_generic->getPathConfig("configSls")."metas.xml", $metasXML->getXML()); $controllers = $this->_generic->getTranslatedController("SLS_Bo", "Controllers"); $this->_generic->redirect($controllers['controller']."/".$controllers['scontroller'].".sls"); } } else array_push($errors, "This generic name is already in use for this controller"); if (!empty($errors)) { $xml->startTag("errors"); foreach ($errors as $error) $xml->addFullTag("error", $error, true); $xml->endTag("errors"); $xml->startTag('form'); $xml->addFullTag("controllerName", $postControllerName); foreach ($postActionsLang as $key=>$value) $xml->addFullTag($key."-action", $value, true); $xml->endTag('form'); $xml->addFullTag("default",(empty($needDefault)) ? "false" : "true",true); $xml->addFullTag("dynamic",(empty($needDynamic)) ? "false" : "true",true); $xml->addFullTag("offline",(empty($needOffline)) ? "false" : "true",true); $xml->startTag("cache"); $xml->addFullTag("cache_visibility", $cache_visibility,true); $xml->addFullTag("cache_scope", $cache_scope,true); $xml->addFullTag("cache_responsive", $cache_responsive,true); $xml->addFullTag("cache_expiration", $cache_expiration,true); $xml->endTag("cache"); } } else { $defaultExists = $controllersXML->getTag("//controllers/controller[@name='".$controller."']/scontrollers/scontroller[@default='1']/@name"); $xml->addFullTag("default",(empty($defaultExists)) ? "true" : "false",true); $xml->startTag("cache"); $xml->addFullTag("cache_visibility", "",true); $xml->addFullTag("cache_scope", "",true); $xml->addFullTag("cache_responsive","",true); $xml->addFullTag("cache_expiration", 0,true); $xml->endTag("cache"); } // Build all tpls $tpls = $this->getAppTpls(); $xml->startTag("tpls"); foreach($tpls as $template) $xml->addFullTag("tpl",$template,true); $xml->endTag("tpls"); $xml->startTag('controller'); $xml->addFullTag("name", $controller, true); $xml->startTag('translations'); foreach ($langs as $lang) { $xml->startTag('translation'); $xml->addFullTag("lang", $lang, true); $xml->addFullTag("name", $controllersXML->getTag("//controllers/controller[@name='".$controller."' and @side='user']/controllerLangs/controllerLang[@lang='".$lang."']"), true); $xml->endTag('translation'); } $xml->endTag('translations'); $xml->endTag('controller'); $xml->addFullTag('request', 'addAction', true); } else { $this->_generic->dispatch('SLS_Bo', 'Controllers'); } if (empty($tpl)) $tpl = $controllersXML->getTag("//controllers/controller[@name='".$controller."' and @side='user']/@tpl"); $xml->addFullTag('protocol', $protocol, true); $xml->addFullTag('template', $tpl, true); $aliases = $siteXML->getTagsAttributes("//configs/domainName/domain",array("alias")); $xml->startTag("aliases"); for($i=0 ; $i<$count=count($aliases) ; $i++) { $xml->startTag("alias"); $xml->addFullTag("name",$aliases[$i]["attributes"][0]["value"],true); $xml->addFullTag("selected",(in_array($aliases[$i]["attributes"][0]["value"],$aliasesSelected)) ? "true" : "false",true); $xml->endTag("alias"); } $xml->endTag("aliases"); $components = $this->_generic->recursiveReadDir($this->_generic->getPathConfig("componentsControllers"), array(), array(0=>"php")); $xml->startTag("components"); foreach ($components as $component) { $xml->startTag("component"); $xml->addFullTag("name", SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterLastDelimiter($component, "/"), ".controller.php"),true); $xml->addFullTag("selected",(in_array(SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterLastDelimiter($component, "/"), ".controller.php"),$componentsSelected)) ? "true" : "false",true); $xml->endTag("component"); } $xml->endTag("components"); $this->saveXML($xml); }
public function action() { // Objects $xml = $this->getXML(); $user = $this->hasAuthorative(); $xml = $this->makeMenu($xml); $actions = array("read" => array(), "add" => array(), "edit" => array(), "delete" => array(), "clone" => array(), "email" => array(), "custom" => array()); $autoActions = array("BoDashBoard", "BoDeleteFile", "BoExport", "BoFkAc", "BoIsLogged", "BoLike", "BoSetting", "BoUnique", "BoUpload", "BoUploadProgress"); $_publicActions = array("BoLogin", "BoLogout", "BoForgottenPwd", "BoMenu", "BoRenewPwd", "BoSwitchLang"); $_forbiddenActions = array("BoPopulate"); $db = SLS_Sql::getInstance(); $color = "pink"; $xmlColors = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."/bo_colors.xml")); $errors = array(); if ($db->tableExists("sls_graph")) { $actions["dashboard"] = array(); $dashboardId = $this->_generic->getControllersXML()->getTag("//controllers/controller[@isBo='true']/scontrollers/scontroller[@name='BoDashBoard']/@id"); $this->_generic->useModel("Sls_graph",$this->defaultDb,"sls"); $className = ucfirst($this->defaultDb)."_Sls_graph"; $slsGraph = new $className; $slsGraphs = $slsGraph->searchModels("sls_graph",array(),array(),array(),array("sls_graph_title" => "asc")); for($i=0 ; $i<$count=count($slsGraphs) ; $i++) $actions["dashboard"][$dashboardId."_sls_graph_".$slsGraphs[$i]->sls_graph_id] = "_".$slsGraphs[$i]->sls_graph_title; } $results = $this->_generic->getControllersXML()->getTagsAttributes("//controllers/controller[@isBo='true']/scontrollers/scontroller",array("name","id")); for($i=0 ; $i<$count=count($results) ; $i++) { $name = $results[$i]["attributes"][0]["value"]; $aid = $results[$i]["attributes"][1]["value"]; switch($name) { case (SLS_String::startsWith($name,"List") && SLS_String::contains($name,"_")): $actions["read"][$aid] = $name; break; case (SLS_String::startsWith($name,"Add") && SLS_String::contains($name,"_")): $actions["add"][$aid] = $name; break; case (SLS_String::startsWith($name,"Modify") && SLS_String::contains($name,"_")): $actions["edit"][$aid] = $name; break; case (SLS_String::startsWith($name,"Delete") && SLS_String::contains($name,"_")): $actions["delete"][$aid] = $name; break; case (SLS_String::startsWith($name,"Clone") && SLS_String::contains($name,"_")): $actions["clone"][$aid] = $name; break; case (SLS_String::startsWith($name,"Email") && SLS_String::contains($name,"_")): $actions["email"][$aid] = $name; break; default: if (!in_array($name,$_publicActions) && !in_array($name,$_forbiddenActions) && !in_array($name,$autoActions)) { $id = array_shift($this->_generic->getControllersXML()->getTags("//controllers/controller[@isBo='true']/scontrollers/scontroller[@name='".$name."']/@id")); if (!empty($id)) $actions["custom"][$id] = "_".$name; } break; } } $xml->startTag("bo_groups"); foreach($actions as $action => $values) { $xml->startTag("bo_group"); $xml->addFullTag("name",$action,true); foreach($values as $aid => $name) { $model = ""; switch ($name) { case (SLS_String::startsWith($name,"List")): $model = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($name,"List"),"_"); break; case (SLS_String::startsWith($name,"Add")): $model = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($name,"Add"),"_"); break; case (SLS_String::startsWith($name,"Modify")): $model = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($name,"Modify"),"_"); break; case (SLS_String::startsWith($name,"Delete")): $model = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($name,"Delete"),"_"); break; case (SLS_String::startsWith($name,"Clone")): $model = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($name,"Clone"),"_"); break; case (SLS_String::startsWith($name,"Email")): $model = SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($name,"Email"),"_"); break; default: $model = ""; } $xml->startTag("action"); $xml->addFullTag("name",SLS_String::substrAfterFirstDelimiter($name,"_"),true); $xml->addFullTag("model",$model,true); $xml->addFullTag("id",$aid,true); $xml->endTag("action"); } $xml->endTag("bo_group"); } $xml->endTag("bo_groups"); $complexity_pwd_min_char_nb = 8; $renew_pwd_nb = 2; $renew_pwd_unite = "month"; $renew_pwd_log_nb = 3; $complexity = array(); $privilegeChoose = false; $minChars = ""; $enabled = "true"; if ($this->_http->getParam("reload") == "true") { $login = SLS_String::trimSlashesFromString($this->_http->getParam("login")); $name = SLS_String::trimSlashesFromString($this->_http->getParam("name")); $firstname = SLS_String::trimSlashesFromString($this->_http->getParam("firstname")); $pwd = SLS_String::trimSlashesFromString($this->_http->getParam("password")); $enabled = SLS_String::trimSlashesFromString($this->_http->getParam("enabled")); $complexity_pwd_lc = SLS_String::trimSlashesFromString($this->_http->getParam("complexity_pwd_lc")); $complexity_pwd_uc = SLS_String::trimSlashesFromString($this->_http->getParam("complexity_pwd_uc")); $complexity_pwd_digit = SLS_String::trimSlashesFromString($this->_http->getParam("complexity_pwd_digit")); $complexity_pwd_special_char = SLS_String::trimSlashesFromString($this->_http->getParam("complexity_pwd_special_char")); $complexity_pwd_min_char = SLS_String::trimSlashesFromString($this->_http->getParam("complexity_pwd_min_char")); $complexity_pwd_min_char_nb = SLS_String::trimSlashesFromString($this->_http->getParam("complexity_pwd_min_char_nb")); $reset_pwd = SLS_String::trimSlashesFromString($this->_http->getParam("reset_pwd")); $renew_pwd = SLS_String::trimSlashesFromString($this->_http->getParam("renew_pwd")); $renew_pwd_nb = SLS_String::trimSlashesFromString($this->_http->getParam("renew_pwd_nb")); $renew_pwd_unite = SLS_String::trimSlashesFromString($this->_http->getParam("renew_pwd_unite")); $renew_pwd_log = SLS_String::trimSlashesFromString($this->_http->getParam("renew_pwd_log")); $renew_pwd_log_nb = SLS_String::trimSlashesFromString($this->_http->getParam("renew_pwd_log_nb")); $color = SLS_String::trimSlashesFromString($this->_http->getParam("color")); $params = $this->_http->getParams(); $pathsHandle = file_get_contents($this->_generic->getPathConfig("configSls")."/rights.xml"); $xmlRights = new SLS_XMLToolbox($pathsHandle); $result = $xmlRights->getTags("//sls_configs/entry[@login='******']"); if (!empty($result)) array_push($errors,"This account already exists, please choose another login."); if (empty($name) || empty($firstname)) array_push($errors,"You must fill name and firstname."); if (empty($login) || empty($pwd)) array_push($errors,"You must choose username and password."); foreach($params as $key => $value) { if (SLS_String::startsWith($key,"bo_action")) { $privilegeChoose = true; break; } } if (!$privilegeChoose) array_push($errors,"You must choose at least 1 privilege."); if (empty($errors)) { if ($complexity_pwd_lc == "true") array_push($complexity,"lc"); if ($complexity_pwd_uc == "true") array_push($complexity,"uc"); if ($complexity_pwd_digit == "true") array_push($complexity,"digit"); if ($complexity_pwd_special_char == "true") array_push($complexity,"special_char"); if ($complexity_pwd_min_char == "true") $minChars = $complexity_pwd_min_char_nb; $xmlNew = '<entry login="******" name="'.SLS_String::stringToUrl($name," ").'" firstname="'.SLS_String::stringToUrl($firstname," ").'" enabled="'.$enabled.'" password="******" password_old="" last_connection="" last_renew_pwd="'.date("Y-m-d").'" complexity_pwd="'.implode("|",$complexity).'" min_chars_pwd="'.$minChars.'" reset_pwd="'.(($reset_pwd=="true") ? "true" : "").'" renew_pwd="'.(($renew_pwd=="true") ? $renew_pwd_nb." ".$renew_pwd_unite : "").'" renew_pwd_nb="'.(($renew_pwd_log=="true") ? $renew_pwd_log_nb : "").'">'."\n"; // Default settings $xmlNew .= ' <settings>'."\n". ' <setting key="nav_filter"><![CDATA[default]]></setting>'."\n". ' <setting key="list_view"><![CDATA[collapse]]></setting>'."\n". ' <setting key="list_nb_by_page"><![CDATA[20]]></setting>'."\n". ' <setting key="add_callback"><![CDATA[list]]></setting>'."\n". ' <setting key="edit_callback"><![CDATA[list]]></setting>'."\n". ' <setting key="export_format"><![CDATA[excel]]></setting>'."\n". ' <setting key="export_all_column"><![CDATA[true]]></setting>'."\n". ' <setting key="export_all_table"><![CDATA[true]]></setting>'."\n". ' <setting key="export_display_legend"><![CDATA[true]]></setting>'."\n". ' <setting key="quick_edit"><![CDATA[disabled]]></setting>'."\n". ' <setting key="dashboard_ga"><![CDATA[visible]]></setting>'."\n". ' <setting key="dashboard_metric"><![CDATA[visible]]></setting>'."\n". ' <setting key="dashboard_monitoring"><![CDATA[visible]]></setting>'."\n". ' <setting key="dashboard_graph"><![CDATA[visible]]></setting>'."\n". ' <setting key="dashboard_email"><![CDATA[visible]]></setting>'."\n". ' <setting key="color"><![CDATA['.((empty($color)) ? "pink" : $color).']]></setting>'."\n". ' </settings>'."\n"; foreach($autoActions as $actionName) { $aid = $this->_generic->getControllersXML()->getTag("//controllers/controller[@isBo='true']/scontrollers/scontroller[@name='".$actionName."']/@id"); $xmlNew .= ' <action id="'.$aid.'" role="custom" entity="" />'."\n"; } foreach($params as $key => $value) { if (SLS_String::startsWith($key,"bo_action")) { $xmlNew .= ' <action id="'.$value.'" role="'.SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($key,"bo_action_"),"_").'" entity="'.((SLS_String::substrBeforeFirstDelimiter(SLS_String::substrAfterFirstDelimiter($key,"bo_action_"),"_") == "custom") ? "" : SLS_String::substrAfterFirstDelimiter(SLS_String::substrAfterFirstDelimiter($key,"bo_action_"),"_")).'" />'."\n"; } } $xmlNew .= ' </entry>'; $xmlRights->appendXMLNode("//sls_configs",$xmlNew); $xmlRights->saveXML($this->_generic->getPathConfig("configSls")."/rights.xml",$xmlRights->getXML()); $this->_generic->redirect("Manage/Rights"); } else { $xml->startTag("errors"); foreach($errors as $error) $xml->addFullTag("error",$error,true); $xml->endTag("errors"); } } $xml->addFullTag("complexity_pwd_lc",$complexity_pwd_lc,true); $xml->addFullTag("complexity_pwd_uc",$complexity_pwd_uc,true); $xml->addFullTag("complexity_pwd_digit",$complexity_pwd_digit,true); $xml->addFullTag("complexity_pwd_special_char",$complexity_pwd_special_char,true); $xml->addFullTag("complexity_pwd_min_char",$complexity_pwd_min_char,true); $xml->addFullTag("complexity_pwd_min_char_nb",$complexity_pwd_min_char_nb,true); $xml->addFullTag("reset_pwd",$reset_pwd,true); $xml->addFullTag("renew_pwd",$renew_pwd,true); $xml->addFullTag("renew_pwd_nb",$renew_pwd_nb,true); $xml->addFullTag("renew_pwd_unite",$renew_pwd_unite,true); $xml->addFullTag("renew_pwd_log",$renew_pwd_log,true); $xml->addFullTag("renew_pwd_log_nb",$renew_pwd_log_nb,true); $xml->addFullTag("enabled",$enabled,true); $xml->addFullTag("color",(empty($color)) ? "pink" : $color,true); $colors = $xmlColors->getTagsAttributes("//sls_configs/template",array("name","hexa")); $xml->startTag("colors"); for($i=0 ; $i<$count=count($colors) ; $i++) $xml->addFullTag("color",$colors[$i]["attributes"][0]["value"],true,array("hexa" => $colors[$i]["attributes"][1]["value"])); $xml->endTag("colors"); $xml->addFullTag("url_generate_bo",$this->_generic->getFullPath("SLS_Bo","GenerateBo"),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(); $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); }
/** * Action Home * */ public function action() { $this->secureURL(); $this->_generic->registerLink('International', 'SLS_Init', 'International'); $errors = array(); $giveDataStep1 = false; $xml = $this->getXML(); $step = 0; $langs = array(); $handle = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."international.xml")); $xpathLangs = $handle->getTags("//sls_configs/sls_country/sls_country_langs/sls_country_lang[@iso != '']"); foreach ($xpathLangs as $lang) if (!in_array(trim($lang), $langs)) array_push($langs, trim($lang)); array_multisort($langs, SORT_STRING, SORT_ASC); $xml->startTag("langs"); foreach ($langs as $lang) $xml->addFullTag("lang", $lang, true); $xml->endTag("langs"); // If reload if ($this->_http->getParam('reload_international_step1') == "true") { // If one lang at least $listLangs = SLS_String::trimSlashesFromString($this->_http->getParam("international_langs")); if (empty($listLangs)) array_push($errors,"You must choose at least one language"); else { $xmlIsos = ""; foreach($listLangs as $listLang) { $iso = array_shift($handle->getTags("//sls_configs/sls_country/sls_country_langs/sls_country_lang[node()='".$listLang."']/@iso")); $xmlIsos .= '<name isSecure="false" js="false" active="true"><![CDATA['.$iso.']]></name>'; if (is_file($this->_generic->getPathConfig("installDeployement")."Langs/Generics/generic.".$iso.".lang.php")) copy($this->_generic->getPathConfig("installDeployement")."Langs/Generics/generic.".$iso.".lang.php", $this->_generic->getPathConfig("coreGenericLangs")."generic.".$iso.".lang.php"); } } if (empty($errors)) { $step = 1; $coreXml = $this->_generic->getSiteXML(); $coreXml->setTag('langs',$xmlIsos,false); file_put_contents($this->_generic->getPathConfig("configSecure")."site.xml", $coreXml->getXML()); $giveDataStep1 = true; } else { $step = 0; $xml->startTag("errors"); foreach ($errors as $error) $xml->addFullTag("error", $error, true); $xml->endTag("errors"); } } // Set controllers.xml else if ($this->_http->getParam('reload_international_step2') == "true") { $langs = $this->_generic->getSiteXML()->getTags("//configs/langs/name"); $listLangs = explode("-", SLS_String::trimSlashesFromString($this->_http->getParam("international_languages"))); $params = $this->_http->getParams('post'); $userValues = array(); foreach ($langs as $lang) $userValues[$lang] = array(); foreach ($params as $key=>$param) if (array_key_exists(SLS_String::substrBeforeFirstDelimiter($key, '_'), $userValues)) $userValues[SLS_String::substrBeforeFirstDelimiter($key, '_')][SLS_String::substrAfterFirstDelimiter($key, '_')] = SLS_String::trimSlashesFromString($param); // Check errors $errors = array(); $xml->startTag("InternationalMemory"); $xml->addFullTag("default", SLS_String::trimSlashesFromString($this->_http->getParam("default_lang")), true); foreach ($userValues as $key=>$values) { $mods[$key] = array(); $smods[$key]['home'] = array(); $smods[$key]['error'] = array(); foreach ($values as $name=>$value) { $xml->startTag("row"); $xml->addFullTag("name", $key."_".$name, true); $xml->addFullTag("value", SLS_String::trimSlashesFromString($value), true); $xml->endTag("row"); if (substr($name, 0, 11) == "TRANSLATION") { if (empty($value)) array_push($errors, "You must fill the translation for ".ucwords(strtolower(str_replace("_", " ", substr($name, 11))))." in ".strtoupper($key)); } } if (empty($values['home_mod'])) array_push($errors, "You must fill a value for the URL of Main Controller in ".strtoupper($key)); else if (SLS_String::stringToUrl(SLS_String::trimSlashesFromString($values['home_mod']),"")!=strtolower($values['home_mod'])) array_push($errors, "You must fill a value for the URL of Main Controller without spaces, accented characters or specials characters in ".strtoupper($key)); else array_push($mods[$key], $values['home_mod']); if (empty($values['home_desc'])) array_push($errors, "You must fill a page title for your home page in ".strtoupper($key)); if (empty($values['home_index'])) array_push($errors, "You must fill an action value for your home page in ".strtoupper($key)); else if (SLS_String::stringToUrl(SLS_String::trimSlashesFromString($values['home_index']),"")!=strtolower($values['home_index'])) array_push($errors, "You must fill an action value for your home page without spaces, accented characters or specials characters in ".strtoupper($key)); else array_push($smods[$key]['home'], $values['home_index']); if (empty($values['error_mod'])) array_push($errors, "You must fill a value for the URL of Error Controller in ".strtoupper($key)); else if (SLS_String::stringToUrl(SLS_String::trimSlashesFromString($values['error_mod']),"")!=strtolower($values['error_mod'])) array_push($errors, "You must fill a value for the URL of Error Controller without spaces, accented characters or specials characters in ".strtoupper($key)); else array_push($mods[$key], $values['error_mod']); if (empty($values['error_400_desc'])) array_push($errors, "You must fill a page title for your 400 page in ".strtoupper($key)); if (empty($values['error_401_desc'])) array_push($errors, "You must fill a page title for your 401 page in ".strtoupper($key)); if (empty($values['error_403_desc'])) array_push($errors, "You must fill a page title for your 403 page in ".strtoupper($key)); if (empty($values['error_404_desc'])) array_push($errors, "You must fill a page title for your 404 page in ".strtoupper($key)); if (empty($values['error_500_desc'])) array_push($errors, "You must fill a page title for your 500 page in ".strtoupper($key)); if (empty($values['error_307_desc'])) array_push($errors, "You must fill a page title for your 307 page in ".strtoupper($key)); if (empty($values['error_302_desc'])) array_push($errors, "You must fill a page title for your 302 page in ".strtoupper($key)); if (empty($values['error_400_url'])) array_push($errors, "You must fill a value for the URL of your 400 page in ".strtoupper($key)); else if (SLS_String::stringToUrl(SLS_String::trimSlashesFromString($values['error_400_url']),"")!=strtolower($values['error_400_url'])) array_push($errors, "You must fill an action value for the URL of you 400 without spaces, accented characters or specials characters in ".strtoupper($key)); else array_push($smods[$key]['error'], $values['error_400_url']); if (empty($values['error_401_url'])) array_push($errors, "You must fill a value for the URL of your 401 page in ".strtoupper($key)); else if (SLS_String::stringToUrl(SLS_String::trimSlashesFromString($values['error_401_url']),"")!=strtolower($values['error_401_url'])) array_push($errors, "You must fill an action value for the URL of you 401 without spaces, accented characters or specials characters in ".strtoupper($key)); else array_push($smods[$key]['error'], $values['error_401_url']); if (empty($values['error_403_url'])) array_push($errors, "You must fill a value for the URL of your 403 page in ".strtoupper($key)); else if (SLS_String::stringToUrl(SLS_String::trimSlashesFromString($values['error_403_url']),"")!=strtolower($values['error_403_url'])) array_push($errors, "You must fill an action value for the URL of you 403 without spaces, accented characters or specials characters in ".strtoupper($key)); else array_push($smods[$key]['error'], $values['error_403_url']); if (empty($values['error_404_url'])) array_push($errors, "You must fill a value for the URL of your 404 page in ".strtoupper($key)); else if (SLS_String::stringToUrl(SLS_String::trimSlashesFromString($values['error_404_url']),"")!=strtolower($values['error_404_url'])) array_push($errors, "You must fill an action value for the URL of you 404 without spaces, accented characters or specials characters in ".strtoupper($key)); else array_push($smods[$key]['error'], $values['error_404_url']); if (empty($values['error_500_url'])) array_push($errors, "You must fill a value for the URL of your 500 page in ".strtoupper($key)); else if (SLS_String::stringToUrl(SLS_String::trimSlashesFromString($values['error_500_url']),"")!=strtolower($values['error_500_url'])) array_push($errors, "You must fill an action value for the URL of you 500 without spaces, accented characters or specials characters in ".strtoupper($key)); else array_push($smods[$key]['error'], $values['error_500_url']); if (empty($values['error_307_url'])) array_push($errors, "You must fill a value for the URL of your 307 page in ".strtoupper($key)); else if (SLS_String::stringToUrl(SLS_String::trimSlashesFromString($values['error_307_url']),"")!=strtolower($values['error_307_url'])) array_push($errors, "You must fill an action value for the URL of you 307 without spaces, accented characters or specials characters in ".strtoupper($key)); else array_push($smods[$key]['error'], $values['error_307_url']); if (empty($values['error_302_url'])) array_push($errors, "You must fill a value for the URL of your 302 page in ".strtoupper($key)); else if (SLS_String::stringToUrl(SLS_String::trimSlashesFromString($values['error_302_url']),"")!=strtolower($values['error_302_url'])) array_push($errors, "You must fill an action value for the URL of you 302 without spaces, accented characters or specials characters in ".strtoupper($key)); else array_push($smods[$key]['error'], $values['error_302_url']); $unikUrl = array(); foreach ($smods[$key]['error'] as $smod) if (!in_array($smod, $unikUrl)) array_push($unikUrl, $smod); if (count($unikUrl) != count($smods[$key]['error'])) array_push($errors, "You cannot set the same Action name for two differents actions in the same language : ".strtoupper($key)); } $xml->endTag("InternationalMemory"); if (empty($errors)) { $caIds = array(); // Set defaut lang $siteXML = $this->_generic->getSiteXML(); $siteXML->setTag("defaultLang", SLS_String::trimSlashesFromString($this->_http->getParam("default_lang"))); $siteXML->setTagAttributes("//configs/domainName/domain[@default='1']",array("lang" => SLS_String::trimSlashesFromString($this->_http->getParam("default_lang")))); file_put_contents($this->_generic->getPathConfig("configSecure")."site.xml", $siteXML->getXML()); $langs = $this->_generic->getSiteXML()->getTags("//configs/langs/name"); $xmlControllers = $this->_generic->getControllersXML(); // Generate the Home Controller ID and the Default Controller ID $homeID = $this->_generic->generateControllerId(); array_push($caIds, $homeID); $defaultID = $this->_generic->generateControllerId(); while (in_array($defaultID, $caIds)) $defaultID = $this->_generic->generateControllerId(); array_push($caIds, $defaultID); // Generate Actions IDs // Home/Index $indexID = $this->_generic->generateActionId(); array_push($caIds, $indexID); // Default/UrlError $urlErrorID = $this->_generic->generateActionId(); while (in_array($urlErrorID, $caIds)) $urlErrorID = $this->_generic->generateActionId(); array_push($caIds, $urlErrorID); // Default/BadRequestError $badRequestID = $this->_generic->generateActionId(); while (in_array($badRequestID, $caIds)) $badRequestID = $this->_generic->generateActionId(); array_push($caIds, $badRequestID); // Default/AuthorizationError $authorizationID = $this->_generic->generateActionId(); while (in_array($authorizationID, $caIds)) $authorizationID = $this->_generic->generateActionId(); array_push($caIds, $authorizationID); // Default/ForbiddenError $forbiddenID = $this->_generic->generateActionId(); while (in_array($forbiddenID, $caIds)) $forbiddenID = $this->_generic->generateActionId(); array_push($caIds, $forbiddenID); // Default/InternalServerError $serverID = $this->_generic->generateActionId(); while (in_array($serverID, $caIds)) $serverID = $this->_generic->generateActionId(); array_push($caIds, $serverID); // Default/TemporaryRedirectError $redirectID = $this->_generic->generateActionId(); while (in_array($redirectID, $caIds)) $redirectID = $this->_generic->generateActionId(); array_push($caIds, $redirectID); // Default/MaintenanceError $maintenanceID = $this->_generic->generateActionId(); while (in_array($maintenanceID, $caIds)) $maintenanceID = $this->_generic->generateActionId(); array_push($caIds, $maintenanceID); $controllerUser['home']['mod'] = "<controller name=\"Home\" side=\"user\" id=\"".$homeID."\"><controllerLangs>"; $controllerUser['home']['smod'] = "<scontrollers><scontroller name=\"Index\" needParam=\"0\" id=\"".$indexID."\" default=\"1\"><scontrollerLangs>"; $controllerUser['default']['mod'] = "<controller name=\"Default\" side=\"user\" id=\"".$defaultID."\"><controllerLangs>"; $controllerUser['default']['smod']['404'] = "<scontrollers><scontroller name=\"UrlError\" needParam=\"0\" id=\"".$urlErrorID."\"><scontrollerLangs>"; $controllerUser['default']['smod']['400'] = "<scontroller name=\"BadRequestError\" needParam=\"0\" id=\"".$badRequestID."\"><scontrollerLangs>"; $controllerUser['default']['smod']['401'] = "<scontroller name=\"AuthorizationError\" needParam=\"0\" id=\"".$authorizationID."\"><scontrollerLangs>"; $controllerUser['default']['smod']['403'] = "<scontroller name=\"ForbiddenError\" needParam=\"0\" id=\"".$forbiddenID."\"><scontrollerLangs>"; $controllerUser['default']['smod']['500'] = "<scontroller name=\"InternalServerError\" needParam=\"0\" id=\"".$serverID."\"><scontrollerLangs>"; $controllerUser['default']['smod']['307'] = "<scontroller name=\"TemporaryRedirectError\" needParam=\"0\" id=\"".$redirectID."\"><scontrollerLangs>"; $controllerUser['default']['smod']['302'] = "<scontroller name=\"MaintenanceError\" needParam=\"0\" id=\"".$maintenanceID."\"><scontrollerLangs>"; $paramsPost = $this->_http->getParams('post'); $handleLangs = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."international.xml")); $projectName = array_shift($this->_generic->getSiteXML()->getTags("projectName")); /* Create Lang files and Lang Directory mkdir($this->_generic->getPathConfig("actionLangs")."Home"); mkdir($this->_generic->getPathConfig("actionLangs")."Default"); */ $metasXML = $this->_generic->getCoreXML('metas'); // Add Empty Actions in metas foreach ($caIds as $aId) { $str = "<action id=\"".$aId."\"></action>"; $metasXML->appendXMLNode("//sls_configs", $str); } // Foreach langs foreach ($langs as $lang) { // Home controller $controllerUser['home']['mod'] .= "<controllerLang lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_home_mod"))."]]></controllerLang>"; $controllerUser['home']['smod'] .= "<scontrollerLang lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_home_index"))."]]></scontrollerLang>"; $strTitle = "<title lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_home_desc"))."]]></title>"; $strTitle .= "<description lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_home_description"))."]]></description>"; $strTitle .= "<keywords lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_home_keywords"))."]]></keywords>"; $metasXML->appendXMLNode("//sls_configs/action[@id='".$indexID."']", $strTitle); // Default controller $controllerUser['default']['mod'] .= "<controllerLang lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_mod"))."]]></controllerLang>"; $controllerUser['default']['smod']['404'] .= "<scontrollerLang lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_404_url"))."]]></scontrollerLang>"; $strTitle = "<title lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_404_desc"))."]]></title>"; $strTitle .= "<description lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_404_description"))."]]></description>"; $strTitle .= "<keywords lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_404_keywords"))."]]></keywords>"; $metasXML->appendXMLNode("//sls_configs/action[@id='".$urlErrorID."']", $strTitle); $controllerUser['default']['smod']['400'] .= "<scontrollerLang lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_400_url"))."]]></scontrollerLang>"; $strTitle = "<title lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_400_desc"))."]]></title>"; $strTitle .= "<description lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_400_description"))."]]></description>"; $strTitle .= "<keywords lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_400_keywords"))."]]></keywords>"; $metasXML->appendXMLNode("//sls_configs/action[@id='".$badRequestID."']", $strTitle); $controllerUser['default']['smod']['401'] .= "<scontrollerLang lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_401_url"))."]]></scontrollerLang>"; $strTitle = "<title lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_401_desc"))."]]></title>"; $strTitle .= "<description lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_401_description"))."]]></description>"; $strTitle .= "<keywords lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_401_keywords"))."]]></keywords>"; $metasXML->appendXMLNode("//sls_configs/action[@id='".$authorizationID."']", $strTitle); $controllerUser['default']['smod']['403'] .= "<scontrollerLang lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_403_url"))."]]></scontrollerLang>"; $strTitle = "<title lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_403_desc"))."]]></title>"; $strTitle .= "<description lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_403_description"))."]]></description>"; $strTitle .= "<keywords lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_403_keywords"))."]]></keywords>"; $metasXML->appendXMLNode("//sls_configs/action[@id='".$forbiddenID."']", $strTitle); $controllerUser['default']['smod']['500'] .= "<scontrollerLang lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_500_url"))."]]></scontrollerLang>"; $strTitle = "<title lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_500_desc"))."]]></title>"; $strTitle .= "<description lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_500_description"))."]]></description>"; $strTitle .= "<keywords lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_500_keywords"))."]]></keywords>"; $metasXML->appendXMLNode("//sls_configs/action[@id='".$serverID."']", $strTitle); $controllerUser['default']['smod']['307'] .= "<scontrollerLang lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_307_url"))."]]></scontrollerLang>"; $strTitle = "<title lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_307_desc"))."]]></title>"; $strTitle .= "<description lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_307_description"))."]]></description>"; $strTitle .= "<keywords lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_307_keywords"))."]]></keywords>"; $metasXML->appendXMLNode("//sls_configs/action[@id='".$redirectID."']", $strTitle); $controllerUser['default']['smod']['302'] .= "<scontrollerLang lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_302_url"))."]]></scontrollerLang>"; $strTitle = "<title lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_302_desc"))."]]></title>"; $strTitle .= "<description lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_302_description"))."]]></description>"; $strTitle .= "<keywords lang=\"".$lang."\"><![CDATA[".SLS_String::trimSlashesFromString($this->_http->getParam($lang."_error_302_keywords"))."]]></keywords>"; $metasXML->appendXMLNode("//sls_configs/action[@id='".$maintenanceID."']", $strTitle); // Generic langs $genericFile = "<?php\n/**\n * Generic Sls Vars\n */\n"; $length = strlen($lang."_TRANSLATION"); foreach ($paramsPost as $key=>$value) { $value = SLS_String::trimSlashesFromString($value); if (substr($key, 0, $length) == $lang."_TRANSLATION") { $genericFile .= '$GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'JS\'][\'SLS_'.substr($key, $length+1).'\'] = "'.$value.'";'; $genericFile .= "\n"; } } $genericFile .= "?>"; file_put_contents($this->_generic->getPathConfig("coreGenericLangs")."generic.".$lang.".lang.php", $genericFile); // Generic lang site $language = array_shift($handleLangs->getTags("//sls_configs/sls_country/sls_country_langs/sls_country_lang[@iso = '".$lang."']")); $contentSiteLang = "<?php\n/**\n * ".$projectName." Translations\n * Language : ".ucwords($language)." (".strtoupper($lang).")\n */\n\n?>"; file_put_contents($this->_generic->getPathConfig('genericLangs')."site.".$lang.".lang.php", $contentSiteLang); } // Controllers $controllerUser['home']['mod'] .= "</controllerLangs>"; $controllerUser['home']['smod'] .= "</scontrollerLangs></scontroller></scontrollers></controller>"; $controllerUser['default']['mod'] .= "</controllerLangs>"; $controllerUser['default']['smod']['404'] .= "</scontrollerLangs></scontroller>"; $controllerUser['default']['smod']['400'] .= "</scontrollerLangs></scontroller>"; $controllerUser['default']['smod']['401'] .= "</scontrollerLangs></scontroller>"; $controllerUser['default']['smod']['403'] .= "</scontrollerLangs></scontroller>"; $controllerUser['default']['smod']['307'] .= "</scontrollerLangs></scontroller>"; $controllerUser['default']['smod']['302'] .= "</scontrollerLangs></scontroller>"; $controllerUser['default']['smod']['500'] .= "</scontrollerLangs></scontroller></scontrollers></controller>"; // Formation du Flux Final a append $flux = $controllerUser['home']['mod'].$controllerUser['home']['smod'].$controllerUser['default']['mod'].$controllerUser['default']['smod']['404'].$controllerUser['default']['smod']['400'].$controllerUser['default']['smod']['401'].$controllerUser['default']['smod']['403'].$controllerUser['default']['smod']['307'].$controllerUser['default']['smod']['302'].$controllerUser['default']['smod']['500']; $xmlControllers->appendXMLNode('//controllers', $flux); file_put_contents($this->_generic->getPathConfig("configSecure")."controllers.xml", $xmlControllers->getXML()); // Add meta Tags $metasXML->appendXMLNode("//sls_configs/action[@id='".$indexID."']", "<robots><![CDATA[index, follow]]></robots>"); $metasXML->appendXMLNode("//sls_configs/action[@id='".$urlErrorID."']", "<robots><![CDATA[noindex, follow]]></robots>"); $metasXML->appendXMLNode("//sls_configs/action[@id='".$authorizationID."']", "<robots><![CDATA[noindex, nofollow]]></robots>"); $metasXML->appendXMLNode("//sls_configs/action[@id='".$serverID."']", "<robots><![CDATA[noindex, nofollow]]></robots>"); $metasXML->appendXMLNode("//sls_configs/action[@id='".$forbiddenID."']", "<robots><![CDATA[noindex, nofollow]]></robots>"); $metasXML->appendXMLNode("//sls_configs/action[@id='".$badRequestID."']", "<robots><![CDATA[noindex, nofollow]]></robots>"); $metasXML->appendXMLNode("//sls_configs/action[@id='".$redirectID."']", "<robots><![CDATA[noindex, nofollow]]></robots>"); $metasXML->appendXMLNode("//sls_configs/action[@id='".$maintenanceID."']", "<robots><![CDATA[noindex, nofollow]]></robots>"); file_put_contents($this->_generic->getPathConfig("configSls")."metas.xml", $metasXML->getXML()); // Déplacement des Fichiers de déploiement // Controllers if (!is_dir($this->_generic->getPathConfig("actionsControllers")."Home")) mkdir($this->_generic->getPathConfig("actionsControllers")."Home"); if (!is_dir($this->_generic->getPathConfig("actionsControllers")."Default")) mkdir($this->_generic->getPathConfig("actionsControllers")."Default"); // Langs if (!is_dir($this->_generic->getPathConfig("actionLangs")."Home")) mkdir($this->_generic->getPathConfig("actionLangs")."Home"); if (!is_dir($this->_generic->getPathConfig("actionLangs")."Default")) mkdir($this->_generic->getPathConfig("actionLangs")."Default"); // Generic Site Protected functions copy($this->_generic->getPathConfig("installDeployement")."Controllers/Actions/__site.protected.php", $this->_generic->getPathConfig("actionsControllers")."__site.protected.php"); $homeFiles = scandir($this->_generic->getPathConfig("installDeployement")."Controllers/Actions/Home"); $defaultFiles = scandir($this->_generic->getPathConfig("installDeployement")."Controllers/Actions/Default"); // Copy Home Files foreach ($homeFiles as $file) { if (substr($file, (strlen($file)-3)) == "php") { copy($this->_generic->getPathConfig("installDeployement")."Controllers/Actions/Home/".$file, $this->_generic->getPathConfig("actionsControllers")."Home/".$file); if (SLS_String::startsWith($file, "__")) { foreach ($langs as $lang) { $strLang = '<?php'."\n". '/**'."\n". '* '.strtoupper($lang).' File for all the Controller Home'."\n". '* You can create all your sentences variables here. To create it, follow the exemple :'."\n". '* '.t(1).'Access it with JS and XSL variable : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'JS\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '* '.t(1).'Access it with XSL variable only : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'XSL\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '*'."\n". '* '.t(1).'You can customise the value \'KEY_OF_YOUR_VARIABLE\' and "value of your sentence in '.strtoupper($lang).'" '."\n". '* @author SillySmart'."\n". '* @copyright SillySmart'."\n". '* @package Langs.Actions.'.$controller."\n". '* @since 1.0'."\n". '*'."\n". '*/'."\n". '?>'; file_put_contents($this->_generic->getPathConfig("actionLangs")."Home/__Home.".strtolower($lang).".lang.php", $strLang); } } else { $actionName = trim(SLS_String::substrBeforeFirstDelimiter($file, ".controller")); foreach ($langs as $lang) { $strLang = '<?php'."\n". '/**'."\n". '* '.strtoupper($lang).' File for the action '.$actionName.' into Home Controller'."\n". '* You can create all your sentences variables here. To create it, follow the exemple :'."\n". '* '.t(1).'Access it with JS and XSL variable : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'JS\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '* '.t(1).'Access it with XSL variable only : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'XSL\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '*'."\n". '* '.t(1).'You can customise the value \'KEY_OF_YOUR_VARIABLE\' and "value of your sentence in '.strtoupper($lang).'" '."\n". '* @author SillySmart'."\n". '* @copyright SillySmart'."\n". '* @package Langs.Actions.Home'."\n". '* @since 1.0'."\n". '*'."\n". '*/'."\n". '?>'; file_put_contents($this->_generic->getPathConfig("actionLangs")."Home/".$actionName.".".strtolower($lang).".lang.php", $strLang); } } } } // Copy Default Files foreach ($defaultFiles as $file) { if (substr($file, (strlen($file)-3)) == "php") { copy($this->_generic->getPathConfig("installDeployement")."Controllers/Actions/Default/".$file, $this->_generic->getPathConfig("actionsControllers")."Default/".$file); if (SLS_String::startsWith($file, "__")) { foreach ($langs as $lang) { $strLang = '<?php'."\n". '/**'."\n". '* '.strtoupper($lang).' File for all the Controller Default'."\n". '* You can create all your sentences variables here. To create it, follow the exemple :'."\n". '* '.t(1).'Access it with JS and XSL variable : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'JS\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '* '.t(1).'Access it with XSL variable only : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'XSL\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '*'."\n". '* '.t(1).'You can customise the value \'KEY_OF_YOUR_VARIABLE\' and "value of your sentence in '.strtoupper($lang).'" '."\n". '* @author SillySmart'."\n". '* @copyright SillySmart'."\n". '* @package Langs.Actions.Default'."\n". '* @since 1.0'."\n". '*'."\n". '*/'."\n". '?>'; file_put_contents($this->_generic->getPathConfig("actionLangs")."Default/__Default.".strtolower($lang).".lang.php", $strLang); } } else { $actionName = trim(SLS_String::substrBeforeFirstDelimiter($file, ".controller")); foreach ($langs as $lang) { $strLang = '<?php'."\n". '/**'."\n". '* '.strtoupper($lang).' File for the action '.$actionName.' into Default Controller'."\n". '* You can create all your sentences variables here. To create it, follow the exemple :'."\n". '* '.t(1).'Access it with JS and XSL variable : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'JS\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '* '.t(1).'Access it with XSL variable only : $GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'XSL\'][\'KEY_OF_YOUR_VARIABLE\'] = "value of your sentence in '.strtoupper($lang).'";'."\n". '*'."\n". '* '.t(1).'You can customise the value \'KEY_OF_YOUR_VARIABLE\' and "value of your sentence in '.strtoupper($lang).'" '."\n". '* @author SillySmart'."\n". '* @copyright SillySmart'."\n". '* @package Langs.Actions.Home'."\n". '* @since 1.0'."\n". '*'."\n". '*/'."\n". '?>'; file_put_contents($this->_generic->getPathConfig("actionLangs")."Default/".$actionName.".".strtolower($lang).".lang.php", $strLang); } } } } // Views if (!is_dir($this->_generic->getPathConfig("viewsBody")."Home")) mkdir($this->_generic->getPathConfig("viewsBody")."Home"); if (!is_dir($this->_generic->getPathConfig("viewsBody")."Default")) mkdir($this->_generic->getPathConfig("viewsBody")."Default"); if (!is_dir($this->_generic->getPathConfig("viewsHeaders")."Home")) mkdir($this->_generic->getPathConfig("viewsHeaders")."Home"); if (!is_dir($this->_generic->getPathConfig("viewsHeaders")."Default")) mkdir($this->_generic->getPathConfig("viewsHeaders")."Default"); $homeBodyFiles = scandir($this->_generic->getPathConfig("installDeployement")."Views/Body/Home"); $defaultBodyFiles = scandir($this->_generic->getPathConfig("installDeployement")."Views/Body/Default"); $homeHeadersFiles = scandir($this->_generic->getPathConfig("installDeployement")."Views/Headers/Home"); $defaultHeadersFiles = scandir($this->_generic->getPathConfig("installDeployement")."Views/Headers/Default"); // Copy Home Body Views foreach ($homeBodyFiles as $file) (substr($file, (strlen($file)-3)) == "xsl") ? copy($this->_generic->getPathConfig("installDeployement")."Views/Body/Home/".$file, $this->_generic->getPathConfig("viewsBody")."Home/".$file) : ""; // Copy Default Body Views foreach ($defaultBodyFiles as $file) (substr($file, (strlen($file)-3)) == "xsl") ? copy($this->_generic->getPathConfig("installDeployement")."Views/Body/Default/".$file, $this->_generic->getPathConfig("viewsBody")."Default/".$file) : ""; // Copy Home Headers Views foreach ($homeHeadersFiles as $file) (substr($file, (strlen($file)-3)) == "xsl") ? copy($this->_generic->getPathConfig("installDeployement")."Views/Headers/Home/".$file, $this->_generic->getPathConfig("viewsHeaders")."Home/".$file) : ""; // Copy Default Headers Views foreach ($defaultHeadersFiles as $file) (substr($file, (strlen($file)-3)) == "xsl") ? copy($this->_generic->getPathConfig("installDeployement")."Views/Headers/Default/".$file, $this->_generic->getPathConfig("viewsHeaders")."Default/".$file) : ""; $this->setInstallationStep(array(0=>"SLS_Init",1=>"Initialization"), array(0=>"DataBase",1=>"DataBase")); return $this->_generic->dispatch("SLS_Init", "DataBase"); } else { $xml->startTag('errors'); foreach ($errors as $error) $xml->addFullTag('error', $error, true); $xml->endTag('errors'); $giveDataStep1 = true; $step = 1; } } // Sinon, default else { $step = 0; } if ($giveDataStep1 == true) { $xml->startTag("choose_langs"); $valueToHidden = ""; $isos = array(); foreach($listLangs as $listLang) { $iso = array_shift($handle->getTags("//sls_configs/sls_country/sls_country_langs/sls_country_lang[node()='".$listLang."']/@iso")); array_push($isos, $iso); $xml->startTag("choose_lang"); $xml->addFullTag("iso",$iso,true); $xml->addFullTag("label",$listLang,true); $xml->endTag("choose_lang"); $valueToHidden .= "-".$listLang; } $xml->endTag("choose_langs"); $xml->addFullTag("hidden_langs", substr($valueToHidden, 1), true); // Récupération des mots à traduire $xml->startTag("translate"); foreach ($isos as $iso) { $xml->startTag($iso); if (is_file($this->_generic->getPathConfig("coreGenericLangs")."generic.".$iso.".lang.php")) $handle = fopen($this->_generic->getPathConfig("coreGenericLangs")."generic.".$iso.".lang.php", 'r'); else $handle = fopen($this->_generic->getPathConfig("coreGenericLangs")."generic.en.lang.php", 'r'); $array = array(); while (!feof($handle)) { $line = fgets($handle, 4096); if (substr($line, 0, 1) == "$") { $tmpArray = array(); $tmpArray['name'] = str_replace("SLS_", "", SLS_String::substrAfterLastDelimiter(SLS_String::substrBeforeLastDelimiter($line, "']"), "['")); $tmpArray['value'] = SLS_String::substrBeforeLastDelimiter(SLS_String::substrAfterFirstDelimiter(trim(SLS_String::substrAfterLastDelimiter($line, " = ")), '"'), '"'); array_push($array, $tmpArray); } } foreach ($array as $row) { $xml->startTag("sentence"); $xml->addFullTag('name', strtolower(str_replace("_", " ", $row['name'])), true); $xml->addFullTag('code', $row['name'], true); $xml->addFullTag('value', $row['value'], true); $xml->endTag("sentence"); } $xml->endTag($iso); } $xml->endTag("translate"); } $xml->addFullTag("step", $step, true); $this->saveXML($xml); }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $reload = $this->_http->getParam("reload"); $action = $this->_http->getParam("Action"); $errors = array(); $slsXml = $this->_generic->getCoreXML('sls'); $syncServer = array_shift($slsXml->getTags("slsnetwork")); $slsVersion = array_shift($slsXml->getTags("version")); $edit = $this->_generic->getTranslatedController('SLS_Bo', 'EditPlugin'); $editAppli = $this->_generic->getTranslatedController('SLS_Bo', 'CreatePlugin'); $pluginsXML = $this->_generic->getPluginXml("plugins"); // List own Plugins if ($action == "") { $deleteController = $this->_generic->getTranslatedController("SLS_Bo", "DeletePlugin"); if (($count = count($pluginsXML->getTags("//plugins/plugin[@beta='1']"))) > 0) { $xml->startTag("own_plugin"); for($i=1;$i<=$count;$i++) { $id = array_shift($pluginsXML->getTags("//plugins/plugin[@beta='1'][".$i."]/@id")); $xml->startTag("plugin", array("code"=>array_shift($pluginsXML->getTags("//plugins/plugin[@beta='1'][".$i."]/@code")),"id"=>$id)); $xml->addFullTag("description", array_shift($pluginsXML->getTags("//plugins/plugin[@beta='1'][".$i."]/description")), true); $xml->addFullTag("custom", array_shift($pluginsXML->getTags("//plugins/plugin[@beta='1'][".$i."]/@customizable")), true); $xml->addFullTag("edit", $edit['protocol']."://".$this->_generic->getSiteConfig('domainName')."/".$edit['controller']."/".$edit['scontroller']."/Plugin/".$id.".sls", true); $xml->addFullTag("name", array_shift($pluginsXML->getTags("//plugins/plugin[@beta='1'][".$i."]/name")), true); $xml->addFullTag("delete", $deleteController['protocol']."://".$this->_generic->getSiteConfig("domainName")."/".$deleteController['controller']."/".$deleteController['scontroller']."/Plugin/".$id.".sls", true); $xml->addFullTag("editAppli", $editAppli['protocol']."://".$this->_generic->getSiteConfig("domainName")."/".$editAppli['controller']."/".$editAppli['scontroller']."/Plugin/".$id."/Action/Edit.sls", true); $xml->endTag("plugin"); } $xml->endTag("own_plugin"); } $this->registerLink("CREATE", "SLS_Bo", "CreatePlugin", array("Action"=>"Create")); $xml->addFullTag("step", "list", true); } // Create a new Plugin elseif ($action == "Create") { if ($reload == "true") { $name = SLS_String::trimSlashesFromString($this->_http->getParam("name")); $code = SLS_String::stringToUrl(strtolower(SLS_String::getSafeFilename(SLS_String::trimSlashesFromString($this->_http->getParam("code")))), "", true); $output = SLS_String::trimSlashesFromString($this->_http->getParam("output")); $custom = SLS_String::trimSlashesFromString($this->_http->getParam("custom")); $path = SLS_String::trimSlashesFromString($this->_http->getParam("path")); $pathName = SLS_String::stringToUrl(SLS_String::getSafeFilename(ucwords(SLS_String::trimSlashesFromString($this->_http->getParam("code")))), "", false); $description = SLS_String::trimSlashesFromString($this->_http->getParam("full_description")); // Get Plugins Versions $serversJSON = @file_get_contents($syncServer); $pluginsAvailable = array(); $filesReserved = array(); $dirsReserved = array(); if ($serversJSON !== false && !empty($serversJSON)) { $servers = json_decode($serversJSON); $pluginsServers = $servers->servers->plugins; $plugins = array(); foreach ($pluginsServers as $pluginsServer) { $serverContent = @file_get_contents($pluginsServer->url); if ($serverContent !== false && !empty($serverContent)) { $serverContent = json_decode($serverContent); $plugs = $serverContent->plugins; foreach ($plugs as $plug) { $pluginsAvailable[] = $plug->code; if ($plug->type == 'file') $filesReserved[] = $plug->path; else $dirsReserved[] = $plug->path; } } } } $xml->startTag("form"); $xml->addFullTag("name", $name, true); $xml->addFullTag("code", $code, true); $xml->addFullTag("custom", $custom, true); $xml->addFullTag("path", $path, true); $xml->addFullTag("path_name", $pathName, true); $xml->addFullTag("fill_description", $description, true); if (empty($name)) $errors[] = "You must fill the common name"; if (empty($code)) $errors[] = "You must fill the code name"; if (empty($output) || ($output != 'yes' && $output != 'no')) $errors[] = "Choose if your plugin is an output type"; if (empty($custom) || ($custom != 'yes' && $custom != 'no')) $errors[] = "Choose if your plugin will be customizable"; if (empty($path) || ($path != 'file' && $path != 'dir')) $errors[] = "Choose if your plugin require only a file or multiple files in a directory"; if (empty($pathName)) $errors[] = "You must choose a filename or a directory name"; if (empty($description)) $errors[] = "You must fill the full description in English"; if (empty($errors)) { if (in_array($code, $pluginsAvailable)) $errors[] = "This code name is already in use for another plugin"; if ($path == 'file' && in_array($pathName.".class.php", $filesReserved)) $errors[] = "This file name is already in use for another plugin"; if ($path == 'dir' && in_array($pathName, $dirsReserved)) $errors[] = "This directory name is already in use for another plugin"; if (empty($errors)) { $newId = md5(uniqid($this->_generic->getSiteConfig("privateKey"))); $pathFile = $this->_generic->getPathConfig("plugins"); if ($path =="dir") $pathFile .= $pathName."/"; if ($output == 'no') { $str = '<?php'."\n". '/**'."\n". ' * Plugin '.$name."\n". ' * '.str_replace("<br />", "\\n * ", nl2br($description))."\n". ' *'."\n". ' * @package Plugins'."\n". ' * @since 1.0'."\n". ' */'."\n". 'class '.$pathName.' extends SLS_PluginGeneric implements SLS_IPlugin'."\n". '{'."\n". t(1).'public function __construct()'."\n". t(1).'{'."\n". t(2).'parent::__construct($this);'."\n". t(2).'$this->checkDependencies();'."\n". t(1).'}'."\n\n". t(1).'public function checkDependencies()'."\n". t(1).'{'."\n". t(1).'}'."\n". '}'."\n". '?>'; } else { $str = '<?php'."\n". '/**'."\n". ' * Plugin '.$name."\n". ' * '.str_replace("<br />", "\\n * ", nl2br($description))."\n". ' *'."\n". ' * @package Plugins'."\n". ' * @since 1.0'."\n". ' */'."\n". 'class '.$pathName.' extends SLS_PluginGeneric implements SLS_IPlugin, SLS_IPluginOutput'."\n". '{'."\n". t(1).'public function __construct()'."\n". t(1).'{'."\n". t(2).'parent::__construct($this);'."\n". t(2).'$this->checkDependencies();'."\n". t(1).'}'."\n\n". t(1).'public function checkDependencies()'."\n". t(1).'{'."\n". t(1).'}'."\n". '}'."\n". '?>'; } if (@file_put_contents($pathFile.$pathName.".class.php", $str) === false) $errors[] = "Plugin Creation failed"; if (empty($errors)) { if ($custom == "yes") { $str = "<?xml version=\"1.0\" encoding=\"utf-8\"?><plugin><exemple_part writable=\"1\" label=\"Exemple Part\" clonable=\"1\" alias=\"main\"><exemple_row writable=\"1\" label=\"Exemple Row\" type=\"string\" clonable=\"0\" /></exemple_part></plugin>"; if (@file_put_contents($this->_generic->getPathConfig("configPlugins").$newId."_".$code.".xml", $str) === false) $errors[] = "Plugin Creation failed"; } } if (empty($errors)) { $newPlugin = new SLS_XMLToolbox(false); $newPlugin->startTag("plugin", array( "beta"=>"1", "code"=>$code, "id"=>$newId, "version"=>"0.1", "compability"=>$slsVersion, "customizable"=>($custom=="yes")?"1":"0", "output"=>($output=="yes")?"1":"0", "file"=>($path=="file")?"1":"0", "path"=>($path=="file")?$pathName.".class.php" : $pathName )); $newPlugin->addFullTag("name", $name, true); $newPlugin->addFullTag("description", $description, true); $newPlugin->addFullTag("author", "Me", true); $newPlugin->addFullTag("dependencies", "", false); $newPlugin->endTag("plugin"); $pluginsXML->appendXMLNode("//plugins", $newPlugin->getXML('noHeader')); file_put_contents($this->_generic->getPathConfig("configPlugins")."plugins.xml", $pluginsXML->getXML()); $this->goDirectTo("SLS_Bo", "CreatePlugin"); } } } $xml->endTag("form"); } $xml->addFullTag("step", "create", true); } elseif ($action == "Edit") { $pluginID = $this->_http->getParam("Plugin"); if (SLS_PluginsManager::isExists($pluginID) === false) $this->goDirectTo("SLS_Bo", "CreatePlugin"); $originalPlugin = new SLS_PluginsManager($pluginID); if ($reload == "true") { $name = SLS_String::trimSlashesFromString($this->_http->getParam("name")); $code = SLS_String::stringToUrl(strtolower(SLS_String::getSafeFilename(SLS_String::trimSlashesFromString($this->_http->getParam("code")))), "", true); $output = SLS_String::trimSlashesFromString($this->_http->getParam("output")); $custom = SLS_String::trimSlashesFromString($this->_http->getParam("custom")); $path = SLS_String::trimSlashesFromString($this->_http->getParam("path")); $pathName = SLS_String::stringToUrl(SLS_String::getSafeFilename(ucwords(SLS_String::trimSlashesFromString($this->_http->getParam("code")))), "", false); $description = SLS_String::trimSlashesFromString($this->_http->getParam("full_description")); // Get Plugins Versions $serversJSON = @file_get_contents($syncServer); $pluginsAvailable = array(); $filesReserved = array(); $dirsReserved = array(); if ($serversJSON !== false && !empty($serversJSON)) { $servers = json_decode($serversJSON); $pluginsServers = $servers->servers->plugins; $plugins = array(); foreach ($pluginsServers as $pluginsServer) { $serverContent = @file_get_contents($pluginsServer->url); if ($serverContent !== false && !empty($serverContent)) { $serverContent = json_decode($serverContent); $plugs = $serverContent->plugins; foreach ($plugs as $plug) { $pluginsAvailable[] = $plug->code; if ($plug->type == 'file') $filesReserved[] = $plug->path; else $dirsReserved[] = $plug->path; } } } } $xml->startTag("form"); $xml->addFullTag("name", $name, true); $xml->addFullTag("code", $code, true); $xml->addFullTag("custom", $custom, true); $xml->addFullTag("path", $path, true); $xml->addFullTag("path_name", $pathName, true); $xml->addFullTag("fill_description", $description, true); if (empty($name)) $errors[] = "You must fill the common name"; if (empty($code)) $errors[] = "You must fill the code name"; if (empty($output) || ($output != 'yes' && $output != 'no')) $errors[] = "Choose if your plugin is an output type"; if (empty($custom) || ($custom != 'yes' && $custom != 'no')) $errors[] = "Choose if your plugin will be customizable"; if (empty($path) || ($path != 'file' && $path != 'dir')) $errors[] = "Choose if your plugin require only a file or multiple files in a directory"; if (empty($pathName)) $errors[] = "You must choose a filename or a directory name"; if (empty($description)) $errors[] = "You must fill the full description in English"; if (empty($errors)) { if ($code != $originalPlugin->_code && in_array($code, $pluginsAvailable)) $errors[] = "This code name is already in use for another plugin"; if ($pathName.".class.php" != $originalPlugin->_path && $path == 'file' && in_array($pathName.".class.php", $filesReserved)) $errors[] = "This file name is already in use for another plugin"; if ($pathName != $originalPlugin->_path && $path == 'dir' && in_array($pathName, $dirsReserved)) $errors[] = "This directory name is already in use for another plugin"; if (empty($errors)) { if ($originalPlugin->_file == 1 && $path == 'dir') { if (!is_dir($this->_generic->getPathConfig("plugins").$originalPlugin->_path)) mkdir($this->_generic->getPathConfig("plugins").$pathName); if (is_file($this->_generic->getPathConfig("plugins").$originalPlugin->_path)) @unlink($this->_generic->getPathConfig("plugins").$originalPlugin->_path); } if ($originalPlugin->_file == 0 && $path == 'file') { if (is_dir($this->_generic->getPathConfig("plugins").$originalPlugin->_path)) $this->_generic->rm_recursive($this->_generic->getPathConfig("plugins").$originalPlugin->_path); if ($output == 'no') { $str = '<?php'."\n". '/**'."\n". ' * Plugin '.$name."\n". ' * '.str_replace("<br />", "\\n * ", nl2br($description))."\n". ' *'."\n". ' * @package Plugins'."\n". ' * @since 1.0'."\n". ' */'."\n". 'class '.$pathName.' extends SLS_PluginGeneric implements SLS_IPlugin'."\n". '{'."\n". t(1).'public function __construct()'."\n". t(1).'{'."\n". t(2).'parent::__construct($this);'."\n". t(2).'$this->checkDependencies();'."\n". t(1).'}'."\n\n". t(1).'public function checkDependencies()'."\n". t(1).'{'."\n". t(1).'}'."\n". '}'."\n". '?>'; } else { $str = '<?php'."\n". '/**'."\n". ' * Plugin '.$name."\n". ' * '.str_replace("<br />", "\\n * ", nl2br($description))."\n". ' *'."\n". ' * @package Plugins'."\n". ' * @since 1.0'."\n". ' */'."\n". 'class '.$pathName.' extends SLS_PluginGeneric implements SLS_IPlugin, SLS_IPluginOutput'."\n". '{'."\n". t(1).'public function __construct()'."\n". t(1).'{'."\n". t(2).'parent::__construct($this);'."\n". t(2).'$this->checkDependencies();'."\n". t(1).'}'."\n\n". t(1).'public function checkDependencies()'."\n". t(1).'{'."\n". t(1).'}'."\n". '}'."\n". '?>'; } if (@file_put_contents($this->_generic->getPathConfig("plugins").$pathName.".class.php", $str) === false) $errors[] = "Plugin Creation failed"; } if ($originalPlugin->_file == 1 && $path == 'file' && $pathName.".class.php" != $originalPlugin->_path) { if (is_file($this->_generic->getPathConfig("plugins").$originalPlugin->_path)) rename($this->_generic->getPathConfig("plugins").$originalPlugin->_path, $this->_generic->getPathConfig("plugins").$pathName.".class.php"); } if ($originalPlugin->_file == 0 && $path == 'dir' && $pathName != $originalPlugin->_path) { if (is_dir($this->_generic->getPathConfig("plugins").$originalPlugin->_path)) rename($this->_generic->getPathConfig("plugins").$originalPlugin->_path, $this->_generic->getPathConfig("plugins").$pathName); } if (empty($errors)) { if ($custom == "yes" && $originalPlugin->_customizable == false) { $str = "<?xml version=\"1.0\" encoding=\"utf-8\"?><plugin><exemple_part writable=\"1\" label=\"Exemple Part\" clonable=\"1\" alias=\"main\"><exemple_row writable=\"1\" label=\"Exemple Row\" type=\"string\" clonable=\"0\" /></exemple_part></plugin>"; if (@file_put_contents($this->_generic->getPathConfig("configPlugins").$originalPlugin->_id."_".$code.".xml", $str) === false) $errors[] = "Plugin Creation failed"; } if ($custom == "no" && $originalPlugin->_customizable == true) { if (is_file($this->_generic->getPathConfig("configPlugins").$originalPlugin->_id."_".$originalPlugin->_code.".xml")) unlink($this->_generic->getPathConfig("configPlugins").$originalPlugin->_id."_".$originalPlugin->_code.".xml"); } } if (empty($errors)) { if ($code != $originalPlugin->_code) { $pluginsXML->setTagAttributes("//plugins/plugin[@beta='1' and @id='".$pluginID."']", array("code"=>$code)); if (is_file($this->_generic->getPathConfig("configPlugins").$originalPlugin->_id."_".$originalPlugin->_code.".xml")) rename($this->_generic->getPathConfig("configPlugins").$originalPlugin->_id."_".$originalPlugin->_code.".xml", $this->_generic->getPathConfig("configPlugins").$originalPlugin->_id."_".$code.".xml"); } if (($output == "yes" && $originalPlugin->_output == 0) || ($output == "no" && $originalPlugin->_output == 1)) $pluginsXML->setTagAttributes("//plugins/plugin[@beta='1' and @id='".$pluginID."']", array("output"=>($output=="yes")?"1":"0")); if (($custom == "yes" && $originalPlugin->_customizable == false) || ($custom == "no" && $originalPlugin->_customizable == true)) $pluginsXML->setTagAttributes("//plugins/plugin[@beta='1' and @id='".$pluginID."']", array("customizable"=>($custom=="yes")?"1":"0")); if (($originalPlugin->_file == 1 && $path == 'dir') || ($originalPlugin->_file == 0 && $path == 'file')) $pluginsXML->setTagAttributes("//plugins/plugin[@beta='1' and @id='".$pluginID."']", array("file"=>($path=="file")?"1":"0")); if (($path == 'file' && $originalPlugin->_path != $pathName.".class.php") || ($path == 'dir' && $originalPlugin->_path != $pathName)) $pluginsXML->setTagAttributes("//plugins/plugin[@beta='1' and @id='".$pluginID."']", array("path"=>($path=="file")?$pathName.".class.php" : $pathName)); if ($originalPlugin->_name != $name) $pluginsXML->setTag("//plugins/plugin[@beta='1' and @id='".$pluginID."']/name", $name, true); if ($originalPlugin->_description != $description) $pluginsXML->setTag("//plugins/plugin[@beta='1' and @id='".$pluginID."']/description", $description, true); file_put_contents($this->_generic->getPathConfig("configPlugins")."plugins.xml", $pluginsXML->getXML()); $this->goDirectTo("SLS_Bo", "CreatePlugin"); } } } $xml->endTag("form"); } $originalPlugin = new SLS_PluginsManager($pluginID); $xml->startTag("plugin"); $xml->addFullTag("name", $originalPlugin->_name, true); $xml->addFullTag("code", $originalPlugin->_code, true); $xml->addFullTag("output", ($originalPlugin->_output == 1)?"yes":"no", true); $xml->addFullTag("custom", ($originalPlugin->_customizable)?"yes":"no", true); $xml->addFullTag("path", ($originalPlugin->_file==1)?'file':'dir', true); $xml->addFullTag("path_name", ($originalPlugin->_file==1)?SLS_String::substrBeforeLastDelimiter($originalPlugin->_path, ".class.php"):$originalPlugin->_path, true); $xml->addFullTag("fill_description", $originalPlugin->_description, true); $xml->endTag("plugin"); $xml->addFullTag("step", "edit", true); } if (!empty($errors)) { $xml->startTag("errors"); foreach ($errors as $error) $xml->addFullTag("error", $error, true); $xml->endTag("errors"); } $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; }
/** * Clean cache params (internal method) * * @access private * @param string $key key to check * @param string $value value to check * @return string value cleaned * @since 1.0.9 */ private function getCacheParam($key,$value="") { switch ($key) { case "type": return (!in_array(strtolower($value),array("static","component","action"))) ? "action" : strtolower($value); break; case "visibility": return (!in_array(strtolower($value),array("private","public"))) ? "private" : strtolower($value); break; case "responsive": return (!in_array(strtolower($value),array("responsive","no_responsive"))) ? "no_responsive" : strtolower($value); break; case "controller": return (empty($value)) ? "controller_".SLS_String::substrAfterFirstDelimiter(strtolower($this->_generic->getControllerId()),"c_") : strtolower($value); break; case "action": return (empty($value)) ? "action_".SLS_String::substrAfterFirstDelimiter(strtolower($this->_generic->getActionId()),"a_") : strtolower($value); break; case "component": return "component_".$value; break; case "static": return "static_".$value; break; case "uri": if (empty($value)) { $bind = $this->_generic->getTranslatedController($this->_generic->getGenericControllerName(),$this->_generic->getGenericScontrollerName()); $value = "/".$bind["controller"]."/".$bind["scontroller"]; $params = $this->_generic->getObjectHttpRequest()->getParams(); uksort($params,"strcasecmp"); foreach($params as $key => $val) { if (!in_array($key,array("mode","smode"))) { if (is_array($val)) { foreach($val as $arr_key => $arr_value) $value .= "/".$key."[".$arr_key."]/".$arr_value; } else $value .= "/".$key."/".$val; } } if (empty($value)) $value = "/"; } if (SLS_String::contains($value,"#")) // Remove before anchor $value = SLS_String::substrBeforeFirstDelimiter($value,"#"); if ($this->_generic->urlRewriteEnabled()) // If rewrite, remove after ? $value = SLS_String::substrBeforeFirstDelimiter($value,"?"); $value = SLS_String::stringToUrl($value,"#"); // Remove forbidden chars and join querystring parameters with # glue $value = mb_substr($value,0,250,"UTF-8"); // Cut file name at 255 chars for rubbish OS (250 + 5 reserved for extension .xml|.html) return $value; break; default: return $value; } }
/** * Getter returning all class variables representing database entity * * @access public * @param mixed $fks (bool: if true all fks, if false only current Model) - array fks you want to extract params * @return array $params associative array with all class variables * @since 1.0 * @example * // if the current model is map on a table named "user" * var_dump($user->getParams()); * // will produce : * array( * "user_id" => 1, * "user_email"=> "*****@*****.**", * "user_pwd" => "password" * ) * @example * // if the current model is map on a table name "news" linked with a foreign key on "user" and "category" * var_dump($news->getParams(true)); * // will produce : * array( * "news_id" => 1, * "news_title" => "title", * "news_content" => "my news..." * "user_id" => 1, * "user_name" => "Bientz", * "user_firstname" => "Laurent", * "category_id" => "1", * "category_name" => "Digital" * ) * @example * // if the current model is map on a table name "news" linked with a foreign key on "user" and "category" * var_dump($news->getParams(array('user'))); * // will produce : * array( * "news_id" => 1, * "news_title" => "title", * "news_content" => "my news..." * "user_id" => 1, * "user_name" => "Bientz", * "user_firstname" => "Laurent" * ) */ public function getParams($fks=false,$subkey=false) { // Temp unset of non SQL class variables $genericTmp = $this->_generic; $sqlTmp = $this->_sql; $updateArray = $this->_update_array; $this->_generic = null; $this->_sql = null; $this->_update_array = null; eval ('$params = '. var_export($this, true) . ';'); // Reset of non SQL class variables $this->_generic = $genericTmp; $this->_sql = $sqlTmp; $this->_update_array = $updateArray; // If fks params wanted if ($fks !== false) { // All fks linked to this model if ($fks === true) $fks = $this->_fks; // Foreach fk, merge params if (is_array($fks) && !empty($fks)) { foreach($fks as $model) { if ($model != $this->_table) { $functionName = SLS_String::fullTrim(ucwords(SLS_String::stringToUrl(SLS_String::tableToClass($model)," ",false)),""); $functionName{0} = strtolower($functionName{0}); if ($subkey) $params[$model] = $this->$functionName()->getParams(); else $params = array_merge($params,$this->$functionName()->getParams()); } } } } return $params; }
public function action() { $user = $this->hasAuthorative(); $xml = $this->getXML(); $xml = $this->makeMenu($xml); $langs = array(); $appli_langs = array(); $handle = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."international.xml")); $step = 0; $errors = array(); $controllerXML = $this->_generic->getControllersXML(); $metaXML = new SLS_XMLToolbox(file_get_contents($this->_generic->getPathConfig("configSls")."metas.xml")); $appli_langs = $this->_generic->getObjectLang()->getSiteLangs(); $defaultLang = $this->_generic->getObjectLang()->getDefaultLang(); // If lang have been choose if ($this->_http->getParam("step") == "1") { $lang1 = SLS_String::trimSlashesFromString($this->_http->getParam("lang")); $lang = array_shift($handle->getTags("//sls_configs/sls_country/sls_country_langs/sls_country_lang[node()='".$lang1."']/@iso")); if (!in_array($lang,$appli_langs)) { $step = 2; $xml->addFullTag("step","2",true); $xml->addFullTag("lang_to_add",$lang,true); } else { $xml->addFullTag("lang_selected",$lang1,true); $xml->startTag("errors"); $xml->addFullTag("error","This lang already exist in your application",true); $xml->endTag("errors"); } } if ($this->_http->getParam("step") == "2" || $step == 2) { $lang = (empty($lang)) ? $this->_http->getParam("lang_to_add") : $lang; $xml->addFullTag("step","2",true); $xml->addFullTag("lang_to_add",$lang,true); $generics = array( "MONDAY" => "", "TUESDAY" => "", "WEDNESDAY" => "", "THURSDAY" => "", "FRIDAY" => "", "SATURDAY" => "", "SUNDAY" => "", "JANUARY" => "", "FEBRUARY" => "", "MARCH" => "", "APRIL" => "", "MAY" => "", "JUNE" => "", "JULY" => "", "AUGUST" => "", "SEPTEMBER" => "", "OCTOBER" => "", "NOVEMBER" => "", "DECEMBER" => "", "DATE_PATTERN_TIME" => "", "DATE_PATTERN_FULL_TIME" => "", "DATE_PATTERN_DATE" => "", "DATE_PATTERN_MONTH_LITTERAL" => "", "DATE_PATTERN_FULL_LITTERAL" => "", "DATE_PATTERN_FULL_LITTERAL_TIME" => "", "DATE_PATTERN_MONTH_LITTERAL_TIME" => "", "DATE_DIFF_Y" => "", "DATE_DIFF_M" => "", "DATE_DIFF_W" => "", "DATE_DIFF_D" => "", "DATE_DIFF_H" => "", "DATE_DIFF_I" => "", "DATE_DIFF_S" => "", "E_CONTENT" => "", "E_EMPTY" => "", "E_KEY" => "", "E_COMPLEXITY" => "", "E_LENGTH" => "", "E_NULL" => "", "E_UNIQUE" => "", "E_TYPE" => "", "E_SIZE" => "", "E_EXIST" => "", "E_WRITE" => "", "E_LOGGED" => "", "E_AUTHORIZED" => "" ); // Try to recover generic langs from Deployement if (file_exists($this->_generic->getPathConfig("installDeployement")."Langs/Generics/generic.".$lang.".lang.php")) include($this->_generic->getPathConfig("installDeployement")."Langs/Generics/generic.".$lang.".lang.php"); // Set the default value by english or current lang if has been found in Deployement foreach($generics as $key => $value) $generics[$key] = SLS_String::trimSlashesFromString($GLOBALS[$GLOBALS['PROJECT_NAME']]['JS']['SLS_'.$key]); $controllers = array(); // Recover all controllers $controllersA = $controllerXML->getTags("//controllers/controller[@side='user']/@name"); foreach($controllersA as $controller) { $id = array_shift($controllerXML->getTags("//controllers/controller[@name='".$controller."']/@id")); $values = array(); foreach($appli_langs as $appli_lang) $values[$appli_lang] = array_shift($controllerXML->getTags("//controllers/controller[@name='".$controller."']/controllerLangs/controllerLang[@lang='".$appli_lang."']")); $values[$lang] = SLS_String::trimSlashesFromString($this->_http->getParam($id."_".$lang)); $result = array("id" => $id, "key" => $controller, "values" => $values, "actions" => array()); array_push($controllers,$result); } // Foreach controllers, recover all actions for($i=0 ; $i<$count=count($controllers) ; $i++) { $controller = $controllers[$i]["key"]; $actions = $controllerXML->getTags("//controllers/controller[@name='".$controller."']/scontrollers/scontroller/@name"); $actionsA = array(); foreach($actions as $action) { $id = array_shift($controllerXML->getTags("//controllers/controller[@name='".$controller."']/scontrollers/scontroller[@name='".$action."']/@id")); $values = array(); foreach($appli_langs as $appli_lang) $values[$appli_lang] = array_shift($controllerXML->getTags("//controllers/controller[@name='".$controller."']/scontrollers/scontroller[@name='".$action."']/scontrollerLangs/scontrollerLang[@lang='".$appli_lang."']")); $values[$lang] = SLS_String::trimSlashesFromString($this->_http->getParam($id."_".$lang)); $metas = array("title" => array(), "description" => array(), "keywords" => array()); $titles = array(); $descriptions = array(); $keywords = array(); foreach($appli_langs as $appli_lang) { $titles[$appli_lang] = array_shift($metaXML->getTags("//sls_configs/action[@id='".$id."']/title[@lang='".$appli_lang."']")); $descriptions[$appli_lang] = array_shift($metaXML->getTags("//sls_configs/action[@id='".$id."']/description[@lang='".$appli_lang."']")); $keywords[$appli_lang] = array_shift($metaXML->getTags("//sls_configs/action[@id='".$id."']/keywords[@lang='".$appli_lang."']")); } $titles[$lang] = SLS_String::trimSlashesFromString($this->_http->getParam("meta_title-".$id."_".$lang)); $descriptions[$lang] = SLS_String::trimSlashesFromString($this->_http->getParam("meta_description-".$id."_".$lang)); $keywords[$lang] = SLS_String::trimSlashesFromString($this->_http->getParam("meta_keywords-".$id."_".$lang)); $metas["title"] = $titles; $metas["description"] = $descriptions; $metas["keywords"] = $keywords; $result = array("id" => $id,"key" => $action, "values" => $values, "metas" => $metas); array_push($actionsA,$result); } $controllers[$i]["actions"] = $actionsA; } // If informations have been sent, check if it's good if ($this->_http->getParam("reload") == "true") { $mods = array(); $smods = array(); // Get all controllers foreach($this->_http->getParams() as $key => $value) { // Controllers case if (SLS_String::startsWith($key,"c_")) { $id = SLS_String::substrBeforeLastDelimiter($key,"_".$lang); $mod = array_shift($controllerXML->getTags("//controllers/controller[@id='".$id."']/@name")); $mods[$id] = SLS_String::stringToUrl(SLS_String::trimSlashesFromString($value),"",false); if (empty($mods[$id])) array_push($errors,"You have to fill the rewrite of the controller '".$mod."'."); $modsExisted = $controllerXML->getTags("//controllers/controller/controllerLangs/controllerLang"); if (in_array($mods[$id],$modsExisted)) array_push($errors,"The name for rewrite of the controller '".$mod."' is already used, please choose another one."); } // Actions case else if (SLS_String::startsWith($key,"a_")) { $id = SLS_String::substrBeforeLastDelimiter($key,"_".$lang); $smod = array_shift($controllerXML->getTags("//controllers/controller/scontrollers/scontroller[@id='".$id."']/@name")); $mod = array_shift($controllerXML->getTags("//controllers/controller[scontrollers/scontroller[@id='".$id."']]/@name")); $idC = array_shift($controllerXML->getTags("//controllers/controller[scontrollers/scontroller[@id='".$id."']]/@id")); $smods[$id] = SLS_String::stringToUrl(SLS_String::trimSlashesFromString($value),"",false); if (empty($smods[$id])) array_push($errors,"You have to fill the rewrite of the action '".$smod."' (controller '".$mod."')."); $smodsExisted = $controllerXML->getTags("//controllers/controller[@id='".$idC."']/scontrollers/scontroller/scontrollerLangs/scontrollerLang[@lang='".$lang."']"); if (in_array($smods[$id],$smodsExisted)) array_push($errors,"The name for rewrite of the action '".$smod."' (controller '".$mod."') is already used by another action of the same controller, please choose another one."); } // Generics case else if (SLS_String::startsWith($key,"generic_")) { $label = SLS_String::substrAfterFirstDelimiter($key,"generic_"); if (empty($value)) array_push($errors,"You have to fill the content of the variable '".$label."'"); $generics[$label] = strtolower(SLS_String::trimSlashesFromString($value)); } } // If all cool if (empty($errors)) { // controllers.xml foreach($mods as $key => $value) { $str = '<controllerLang lang="'.$lang.'"><![CDATA['.$value.']]></controllerLang>'; $controllerXML->appendXMLNode("//controllers/controller[@id='".$key."']/controllerLangs",$str); } foreach($smods as $key => $value) { $str = '<scontrollerLang lang="'.$lang.'"><![CDATA['.$value.']]></scontrollerLang>'; $controllerXML->appendXMLNode("//controllers/controller/scontrollers/scontroller[@id='".$key."']/scontrollerLangs",$str); // metas.xml $title = SLS_String::trimSlashesFromString($this->_http->getParam("meta_title-".$key."_".$lang)); if (empty($title)) $str = '<title lang="'.$lang.'"/>'; else $str = '<title lang="'.$lang.'"><![CDATA['.$title.']]></title>'; $metaXML->appendXMLNode("//sls_configs/action[@id='".$key."']",$str); $description = SLS_String::trimSlashesFromString($this->_http->getParam("meta_description-".$key."_".$lang)); if (empty($description)) $str = '<description lang="'.$lang.'"/>'; else $str = '<description lang="'.$lang.'"><![CDATA['.$description.']]></description>'; $metaXML->appendXMLNode("//sls_configs/action[@id='".$key."']",$str); $keyword = SLS_String::trimSlashesFromString($this->_http->getParam("meta_keywords-".$key."_".$lang)); if (empty($keyword)) $str = '<keywords lang="'.$lang.'"/>'; else $str = '<keywords lang="'.$lang.'"><![CDATA['.$keyword.']]></keywords>'; $metaXML->appendXMLNode("//sls_configs/action[@id='".$key."']",$str); // /metas.xml } $controllerXML->saveXML($this->_generic->getPathConfig("configSecure")."controllers.xml"); $metaXML->saveXML($this->_generic->getPathConfig("configSls")."metas.xml"); // /controllers.xml // site.xml $siteXML = $this->_generic->getSiteXML(); $str = '<name isSecure="false" js="false" active="false"><![CDATA['.$lang.']]></name>'; $siteXML->appendXMLNode("//configs/langs",$str); $siteXML->saveXML($this->_generic->getPathConfig("configSecure")."site.xml"); // /site.xml // generic.iso.lang.php $fileContent = '<?php'."\n". '/**'."\n". ' * Generic Sls Vars'."\n". ' */'."\n"; foreach($generics as $key => $value) $fileContent .= '$GLOBALS[$GLOBALS[\'PROJECT_NAME\']][\'JS\'][\'SLS_'.$key.'\'] = "'.str_replace('"','\"',$value).'";'."\n"; $fileContent .= '?>'; file_put_contents($this->_generic->getPathConfig("coreGenericLangs")."generic.".$lang.".lang.php",$fileContent); // /generic.iso.lang.php // site.iso.lang.php $fileContent = '<?php'."\n". '/**'."\n". ' * SillySmart Translations'."\n". ' * Language : '.array_shift($handle->getTags("//sls_configs/sls_country/sls_country_langs/sls_country_lang[node()='".$lang."']/@iso")).' ('.strtoupper($lang).')'."\n". ' */'."\n\n". '?>'; file_put_contents($this->_generic->getPathConfig("genericLangs")."site.".$lang.".lang.php",str_replace(array("Translations in '".strtoupper($defaultLang)."'","site.".$defaultLang.".lang.php","sentence in ".strtoupper($defaultLang)),array("Translations in '".strtoupper($lang)."'","site.".$lang.".lang.php","sentence in ".strtoupper($lang)),file_get_contents($this->_generic->getPathConfig("genericLangs")."site.".$defaultLang.".lang.php"))); // /site.iso.lang.php // Actions langs files $directories = array(); foreach($mods as $key => $value) array_push($directories,array_shift($controllerXML->getTags("//controllers/controller[@id='".$key."']/@name"))); $this->copyActionsLang($directories,$lang); // /Actions langs files // User_Bo langs $controllerBo = $controllerXML->getTag("//controllers/controller[@side='user' and @isBo='true']/@name"); if (!empty($controllerBo)) { if (file_exists($this->_generic->getPathConfig("installDeployement")."Langs/Actions/{{USER_BO}}/__{{USER_BO}}.".$lang.".lang.php")) $langContent = str_replace(array("{{USER_BO}}"),array($controllerBo),file_get_contents($this->_generic->getPathConfig("installDeployement")."Langs/Actions/{{USER_BO}}/__{{USER_BO}}.".$lang.".lang.php")); else $langContent = str_replace(array("{{USER_BO}}"),array($controllerBo),file_get_contents($this->_generic->getPathConfig("installDeployement")."Langs/Actions/{{USER_BO}}/__{{USER_BO}}.en.lang.php")); if (!empty($langContent)) file_put_contents($this->_generic->getPathConfig("actionLangs").$controllerBo."/__".$controllerBo.".".$lang.".lang.php",$langContent); } // MySQL multilanguage tables $handle = opendir($this->_generic->getPathConfig("models")); // Disable explain SLS_Sql::getInstance()->_explain = false; // Foreach models while (false !== ($file = readdir($handle))) { if (!is_dir($this->_generic->getPathConfig("models")."/".$file) && substr($file, 0, 1) != ".") { $fileExploded = explode(".",$file); if (is_array($fileExploded) && count($fileExploded) == 4) { $db = $fileExploded[0]; $class = $fileExploded[1]; $className = $db."_".$class; $this->_generic->useModel($class,$db,"user"); $object = new $className(); if ($object->isMultilanguage()) { $results = $object->searchModels($object->getTable(),array(),array(0=>array("column"=>"pk_lang","value"=>$defaultLang,"mode"=>"equal"))); for($i=0 ; $i<$count=count($results) ; $i++) { $object = new $className(); $object->setModelLanguage($lang); foreach($results[$i] as $column => $col_value) { if ($column != "pk_lang" && $column != $object->getPrimaryKey()) { $object->__set($column,$col_value); } } try { $object->create($results[$i]->{$object->getPrimaryKey()}); } catch (Exception $e){} } } } } } // /MySQL multilanguage tables // Redirect $controllers = $this->_generic->getTranslatedController("SLS_Bo","Langs"); $this->_generic->redirect($controllers["controller"]."/".$controllers["scontroller"].".sls"); } // Else, form errors else { $xml->startTag("errors"); foreach($errors as $error) $xml->addFullTag("error",$error,true); $xml->endTag("errors"); } } $xml->startTag("generic_langs"); foreach($generics as $key => $value) { $xml->startTag("generic_lang"); $xml->addFullTag("key",$key,true); $xml->addFullTag("value",$value,true); $xml->endTag("generic_lang"); } $xml->endTag("generic_langs"); $xml->startTag("controllers"); for($i=0 ; $i<$count=count($controllers) ; $i++) { $xml->startTag("controller"); $xml->addFullTag("id",$controllers[$i]["id"],true); $xml->addFullTag("key",$controllers[$i]["key"],true); $xml->startTag("values"); foreach($controllers[$i]["values"] as $key2 => $value2) { $xml->startTag("value"); $xml->addFullTag("key",$key2,true); $xml->addFullTag("value",$value2,true); $xml->endTag("value"); } $xml->endTag("values"); $xml->startTag("actions"); for($j=0 ; $j<$count2=count($controllers[$i]["actions"]) ; $j++) { $action = $controllers[$i]["actions"]; $xml->startTag("action"); $xml->addFullTag("id",$action[$j]["id"],true); $xml->addFullTag("key",$action[$j]["key"],true); $xml->startTag("values"); foreach($action[$j]["values"] as $key3 => $value3) { $xml->startTag("value"); $xml->addFullTag("key",$key3,true); $xml->addFullTag("value",$value3,true); $xml->endTag("value"); } $xml->endTag("values"); $xml->startTag("metas"); foreach($action[$j]["metas"] as $key4 => $value4) { $xml->startTag("meta"); $xml->addFullTag("key",$key4,true); $xml->startTag("values"); foreach($value4 as $key5 => $value5) { $xml->startTag("value"); $xml->addFullTag("key",$key5,true); $xml->addFullTag("value",$value5,true); $xml->endTag("value"); } $xml->endTag("values"); $xml->endTag("meta"); } $xml->endTag("metas"); $xml->endTag("action"); } $xml->endTag("actions"); $xml->endTag("controller"); } $xml->endTag("controllers"); } $xpathLangs = $handle->getTags("//sls_configs/sls_country/sls_country_langs/sls_country_lang[@iso != '']"); foreach ($xpathLangs as $lang) if (!in_array(trim($lang), $langs)) array_push($langs, trim($lang)); array_multisort($langs, SORT_STRING, SORT_ASC); $xml->startTag("langs"); foreach ($langs as $lang) $xml->addFullTag("lang", $lang, true); $xml->endTag("langs"); $this->saveXML($xml); }
public function action() { // Objects $xml = $this->getXML(); $user = $this->hasAuthorative(); $xml = $this->makeMenu($xml); $date = $this->_http->getParam("date"); $dateE = explode("-",$date); $dateL = new SLS_Date($date); if (is_array($dateE) && count($dateE) == 3 && is_dir($this->_generic->getPathConfig("logs")."monitoring/".$dateE[0]."-".$dateE[1])) { $content = ""; $i = 0; while(file_exists($this->_generic->getPathConfig("logs")."monitoring/".$dateE[0]."-".$dateE[1]."/".$dateE[0]."-".$dateE[1]."-".$dateE[2]."_".$i.".log")) { $content .= file_get_contents($this->_generic->getPathConfig("logs")."monitoring/".$dateE[0]."-".$dateE[1]."/".$dateE[0]."-".$dateE[1]."-".$dateE[2]."_".$i.".log"); $i++; } $batchs = explode("#|end|#",$content); $xml->startTag("batchs"); $xml->addFullTag("date",$dateL->getDate("FULL_LITTERAL")); foreach($batchs as $batch) { if (!empty($batch)) { $lines = explode("\n",$batch); $times = array ("Render" => 0, "XML/XSL Parsing" => 0, "MySQL Query" => 0, "Controller Action" => 0, "Controller Front" => 0, "Controller Static" => 0); $msg = ""; $totalTime = 0; $endTime = 0; $xml->startTag("batch"); $xml->startTag("lines"); foreach($lines as $line) { $infos = explode("||",$line); $infos = array_map('trim',$infos); if (count($infos) > 4) { $times[$infos[0]] += $infos[2]; if ($infos[0] == "Render") { $totalTime = $infos[2]; $endTime = SLS_String::substrAfterFirstDelimiter($infos[1]," "); } if ($infos[0] == "Controller Front") $msg = SLS_String::substrAfterFirstDelimiter(SLS_String::substrBeforeLastDelimiter($infos[3],")"),"("); $xml->startTag("line"); $xml->addFullTag("msg",$infos[3],true); $xml->addFullTag("type",$infos[0],true); $xml->addFullTag("more",str_replace(array("|n|","|t|"," "),array("<br />","  ","    "),$infos[4]),true); $xml->addFullTag("time",SLS_String::substrAfterFirstDelimiter($infos[1]," "),true); $xml->addFullTag("duration",$infos[2],true); $xml->endTag("line"); } } $xml->endTag("lines"); $xml->startTag("infos"); $xml->addFullTag("name",$endTime." - ".$msg,true); $xml->startTag("times"); $xml->addFullTag("total",$totalTime,true); foreach($times as $key => $value) $xml->addFullTag(SLS_String::stringToUrl(trim($key),"_"),$value,true); $xml->endTag("times"); $xml->endTag("infos"); $sum = 0; $xml->startTag("ratios"); foreach($times as $key => $value) { if ($key == "Render") continue; else $sum += $value; $xml->startTag("ratio"); $xml->addFullTag("label",str_replace(" ","+",trim($key)),true); $xml->addFullTag("duration",$times[$key],true); $xml->addFullTag("degree",($totalTime > 0) ? 360 * $value / $totalTime : "360",true); $xml->endTag("ratio"); } if ($totalTime - $sum > 0) { $xml->startTag("ratio"); $xml->addFullTag("label","Others",true); $xml->addFullTag("duration",$sum,true); $xml->addFullTag("degree",($totalTime > 0) ? 360 * $sum / $totalTime : "360",true); $xml->endTag("ratio"); } $xml->endTag("ratios"); $xml->endTag("batch"); } } $xml->endTag("batchs"); } $this->saveXML($xml); }
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 } }