Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 10 |
CRAP | |
0.00% |
0 / 61 |
| iaFiller | |
0.00% |
0 / 1 |
|
0.00% |
0 / 10 |
870.00 | |
0.00% |
0 / 61 |
| __construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 5 |
|||
| mayEditDeduce | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 7 |
|||
| webPathDeduce | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 6 |
|||
| htmlHead | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
| css | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
| js_lib | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| jsInit | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 8 |
|||
| lista | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 6 |
|||
| delete | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 8 |
|||
| save | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 17 |
|||
| createTable | n/a |
0 / 0 |
1 | n/a |
0 / 0 |
|||||
| <?php | |
| /** @noinspection SqlNoDataSourceInspection */ | |
| /** @noinspection SqlResolve */ | |
| namespace ia\Lib; | |
| use ia\Util\Str; | |
| /* | |
| //@TODO log update/delete? | |
| //@TODO js to jqplguin? | |
| //@TODO js write contorlito en html, poner clear use clear | save del | |
| //@TODO js toast tooltip? ya tiene jqueryui | |
| //@TODO js inited read templates | |
| //@TODO js juntar todo en uno? | |
| */ | |
| /** | |
| * iaFiller | |
| * html | |
| * <head> | |
| * <link jqueryui.min.css /> | |
| * <script src='js_lib/jquery.min.js'></script> | |
| * <script src='js_lib/jqueryui.min.js'></script> | |
| * <script src='js_lib/diatrics.min.js'></script> | |
| * //@TODO integrate iaValuesIn, populateForm (si) y diatrics? | |
| * <?php | |
| * $iaFiller = new iaFiller(true, 'tag', ); | |
| * $iaFiller->htmlHead('#iaFiller', 'dataToFill') | |
| * ?> | |
| * </head> | |
| * <body> | |
| * <div id="iaFiller"></div> | |
| * <div id='dataToFill'> | |
| * ... | |
| * </div> | |
| * ... | |
| * | |
| * | |
| */ | |
| class iaFiller { | |
| protected $mayEdit = true; | |
| protected $tag = 'base'; | |
| protected $db; | |
| protected $webRoot; | |
| /** | |
| * iaFiller::__construct() | |
| * | |
| * @param mixed $db | |
| * @param mixed $tag | |
| * @param mixed $mayEdit | |
| * @param mixed $webRoot | |
| * @return | |
| */ | |
| public function __construct($db, $tag, $mayEdit = null, $webRoot = null) { | |
| $this->db = $db; | |
| $this->tag = $tag; | |
| $this->mayEdit = $this->mayEditDeduce($mayEdit); | |
| $this->webRoot = $this->webPathDeduce($webRoot); | |
| } | |
| /** | |
| * iaFiller::mayEditDeduce() | |
| * | |
| * @param mixed $mayEdit | |
| * @return | |
| */ | |
| protected function mayEditDeduce($mayEdit) { | |
| if($mayEdit === true || $mayEdit === false) { | |
| return $mayEdit; | |
| } | |
| if(empty($mayEdit) && isset($_SESSION['may_iaFiller'])) { | |
| $mayEdit = $_SESSION['may_iaFiller']; | |
| } | |
| if(strcasecmp($mayEdit,'No')===0 || strcasecmp($mayEdit,'R/O')===0) { | |
| return false; | |
| } | |
| return true; | |
| } | |
| /** | |
| * iaFiller::webPathDeduce() | |
| * | |
| * @param mixed $webRoot | |
| * @return | |
| */ | |
| protected function webPathDeduce($webRoot) { | |
| if(!empty($webRoot)) { | |
| return $webRoot; | |
| } | |
| global $gConfig; | |
| if(isset($gConfig) && !empty($gConfig['WEB_ROOT'])) { | |
| return $gConfig['WEB_ROOT']; | |
| } | |
| } | |
| /** | |
| * iaFiller::htmlHead() | |
| * | |
| * @param string $dataContainerSelector | |
| * @param string $iaFillerSelector | |
| * @param string $ajaUrl | |
| * @return | |
| */ | |
| public function htmlHead($dataContainerSelector='#iaFilterForm', $iaFillerSelector='#iaFiller', $ajaUrl='') { | |
| return $this->css().PHP_EOL.$this->js_lib().PHP_EOL.$this->jsInit(); | |
| } | |
| /** | |
| * iaFiller::css() | |
| * | |
| * @return | |
| */ | |
| public function css() { | |
| return "<style>".file_get_contents($this->pwd() . "/../css/iaFiller.css")."</style>"; | |
| } | |
| /** | |
| * iaFiller::js_lib() | |
| * | |
| * @return | |
| */ | |
| public function js_lib() { | |
| $jsWebPath = $this->webRoot . '/widgets_ia/iaFiller/js'; | |
| return "<script src=''>$jsWebPath/iaFiller.js</script>"; | |
| } | |
| /** | |
| * iaFiller::jsInit() | |
| * | |
| * @param string $dataContainerSelector | |
| * @param string $fillerSelector | |
| * @param string $ajaxUrl | |
| * @return | |
| */ | |
| public function jsInit($dataContainerSelector='#iaFilterForm', $fillerSelector='#iaFiller', $ajaxUrl='') { | |
| if(empty($ajaxUrl)) { | |
| $ajaxUrl = $this->webRoot . '/widgets_ia/iaFiller/iaFiller.php'; | |
| } | |
| $options = json_encode([ | |
| 'container'=>$dataContainerSelector, | |
| 'tag'=>$this->tag, | |
| 'mayEdit'=>$this->mayEdit, | |
| 'url'=>$ajaxUrl, | |
| ]); | |
| return "<script>\$(function(){\$( $fillerSelector ).iaFiller({ $options }); });</script>"; | |
| } | |
| /** | |
| * iaFiller::list() | |
| * | |
| * @return array | |
| */ | |
| public function lista() { | |
| $ret = $this->db->selectArrayIndex("SELECT /*".__METHOD__."*/ iaFiller_id, nombre, descripcion, color, vals FROM iaFiller WHERE tag=".Str::strit($this->tag)." ORDER BY nombre"); | |
| if($ret === false) { | |
| return ['ok'=>false, 'errorMessage'=>'Error inesperado al trabajar con la base de datos']; | |
| } | |
| foreach($ret as &$d) { | |
| $d['vals'] = json_decode($d['vals']); | |
| } | |
| return $ret; | |
| } | |
| /** | |
| * iaFiller::delete() | |
| * | |
| * @param mixed $iaFiller_id | |
| * @return | |
| */ | |
| public function delete($iaFiller_id) { | |
| //@TODO log | |
| if(!$this->mayEdit) { | |
| return ['ok'=>false, 'errorMessage'=>'Sin permiso de editar las plantillas']; | |
| } | |
| $ok = $this->db->query("DELETE /*".__METHOD__."*/ FROM iaFiller WHERE iaFiller_id=".Str::strit($iaFiller_id)." AND tag=".Str::strit($this->tag)); | |
| return [ | |
| 'ok' => $ok, | |
| 'errorMessage' => $ok ? '' : 'Error al intentar borrar la plantilla', | |
| 'iaFiller_id' => $iaFiller_id, | |
| 'dime' => json_encode($this->db->errorLog_get()), | |
| 'Sql' => "DELETE /*".__METHOD__."*/ FROM iaFiller WHERE iaFiller_id=".Str::strit($iaFiller_id)." AND tag=".Str::strit($this->tag), | |
| ]; | |
| } | |
| /** | |
| * Save, updateing or inserting, plantilla definition | |
| * | |
| * @param int $iaFiller_id | |
| * @param string $nombre nombre de la plantilla | |
| * @param string $descripcion explicacion de la plantilla | |
| * @param string $color clase para presentar la plantilla | |
| * @param string $vals an array o string with the plantilla definition | |
| * @return string json string of row received or json informing db error | |
| */ | |
| public function save($iaFiller_id, $nombre, $descripcion, $color, $vals) { | |
| //@TODO log | |
| if(!$this->mayEdit) { | |
| return ['ok'=>false, 'errorMessage'=>'Sin permiso de editar las plantillas']; | |
| } | |
| $plantilla = [ | |
| 'nombre' => Str::strim($nombre), | |
| 'descripcion' => Str::strim($descripcion), | |
| 'color' => Str::strim($color), | |
| 'vals' => is_array($vals) ? json_encode($vals) : $vals, | |
| 'tag' => $this->tag, | |
| ]; | |
| $builder = new ia\Sql\Mysql\SqlBuilder(); | |
| $sql = $builder->insert('iaFiller', $plantilla, true); | |
| $ok = $this->db->query( $sql ); | |
| if($ok == false) { | |
| return ['ok'=>false, 'errorMessage'=>'Error inesperado al trabajar con la base de datos']; | |
| } | |
| $ret = $this->db->singleton("SELECT * FROM iaFiller WHERE nombre=".Str::strit($plantilla['nombre'])." AND tag=".Str::strit($this->tag)); | |
| if($ret === false) { | |
| return ['ok'=>false, 'errorMessage'=>'Error inesperado al trabajar con la base de datos']; | |
| } | |
| $ret['vals'] = json_decode($ret['vals']); | |
| return $ret; | |
| } | |
| /** | |
| * iaFiller::createTable() | |
| * | |
| * @return | |
| */ | |
| protected function createTable() { return; | |
| $sql = " | |
| CREATE TABLE IF NOT EXISTS iaFiller ( | |
| iaFiller_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, | |
| nombre VARCHAR(64) NOT NULL COMMENT 'nombre de los valores a llenar', | |
| descripcion VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Descripcion para recordar que quiere decir el nombre', | |
| tag VARCHAR(64) NOT NULL COMMENT 'clasificacion de la plantilla', | |
| color VARCHAR(32) NOT NULL DEFAULT 'iaFillerNormal' COMMENT 'css class de la plantilla', | |
| vals LONGTEXT COMMENT 'json con los valores a llenar', | |
| alta_db DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'fecha de alta', | |
| ultimo_cambio DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'ultima fecha en que se actualizo', | |
| UNIQUE KEY nombre_unico(tag,nombre) | |
| ) ENGINE=Innodb DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT 'Plantillas de iaFiller'; | |
| "; | |
| $this->db->query($sql); | |
| } | |
| } | |