Arată bine. Am făcut câteva mici modificări și le fac acum commit:<div><br></div><div>- visualTag.ihtml: {if}-ul din smarty era imbricat greșit cu un <div> html</div><div><br></div><div>- visualTag.php: am setat doar o variabilă care indică dacă avem sau nu imagini, iar mesajul propriu-zis stă în template.</div>

<div><br></div><div>- visual_connector.php: parametrul 'disabled' cerea un vector de stringuri. Acum chiar blochează comanda duplicate, mișto.</div><div><br></div><div>- flex.css: am redenumit clasa pentru float. E mai bine ca clasele să indice scopul acelei bucăți de HTML, nu doar să reformuleze ce face CSS-ul. Asta pentru că designul se poate schimba, dar scopul acelei regiuni (să fie un canvas) rămâne.</div>

<div><br></div><div>Cătălin<br><br><div class="gmail_quote">On Wed, Jul 31, 2013 at 9:22 PM,  <span dir="ltr"><<a href="mailto:automailer@dexonline.ro" target="_blank">automailer@dexonline.ro</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: grigoroiualex<br>
Date: Wed Jul 31 21:22:33 2013<br>
New Revision: 921<br>
<br>
Log:<br>
Made some minor changes and tweaks to Visual and elFinder. Added *Infant* VisualTag<br>
<br>
Added:<br>
   phplib/models/VisualTag.php<br>
   templates/admin/visualTag.ihtml<br>
   wwwbase/admin/visualTag.php<br>
   wwwbase/js/visualTag.js<br>
Modified:<br>
   phplib/models/Visual.php<br>
   wwwbase/elfinder-connector/elFinderModToDB.class.php<br>
   wwwbase/elfinder-connector/visual_connector.php<br>
   wwwbase/styles/flex.css<br>
<br>
Modified: phplib/models/Visual.php<br>
==============================================================================<br>
--- phplib/models/Visual.php    Wed Jul 31 14:30:58 2013        (r920)<br>
+++ phplib/models/Visual.php    Wed Jul 31 21:22:33 2013        (r921)<br>
@@ -11,7 +11,11 @@<br>
<br>
     return $matches[0];<br>
   }<br>
-<br>
-}<br>
<br>
+  function delete() {<br>
+    VisualTag::deleteByImageId($this->id);<br>
+<br>
+    parent::delete();<br>
+  }<br>
+}<br>
 ?><br>
<br>
Added: phplib/models/VisualTag.php<br>
==============================================================================<br>
--- /dev/null   00:00:00 1970   (empty, because file is newly added)<br>
+++ phplib/models/VisualTag.php Wed Jul 31 21:22:33 2013        (r921)<br>
@@ -0,0 +1,13 @@<br>
+<?php<br>
+<br>
+class VisualTag extends BaseObject implements DatedObject {<br>
+  public static $_table = 'VisualTag';<br>
+<br>
+  public static function deleteByImageId($imageId) {<br>
+    $tags = VisualTag::get_all_by_imageId($imageId);<br>
+<br>
+    foreach($tags as $tag) {<br>
+      $tag->delete();<br>
+    }<br>
+  }<br>
+}<br>
<br>
Added: templates/admin/visualTag.ihtml<br>
==============================================================================<br>
--- /dev/null   00:00:00 1970   (empty, because file is newly added)<br>
+++ templates/admin/visualTag.ihtml     Wed Jul 31 21:22:33 2013        (r921)<br>
@@ -0,0 +1,55 @@<br>
+<br/><br>
+<div class="floatMe"><br>
+  {if count($msg) == 0}<br>
+  <img src="{$imagePath}" id="jcrop"/><br>
+  <label>Coordonatele centrului selecției:<br>
+    <input id="x" type="text" size="4" name="x"/><br>
+    <input id="y" type="text" size="4" name="y"/><br>
+  </label><br>
+  <button type="button" id="clrSel">Șterge selecția</button><br>
+  <form action="visualTag.php" method="post"><br>
+    <input type="hidden" value="{$imageId}" name="imageId"/><br>
+    <button type="submit" name="action" value="finishedTagging"><br>
+      Etichetarea este completă<br>
+    </button><br>
+  </form><br>
+</div><br>
+<br>
+<div><br>
+  <form action="visualTag.php" method="post"><br>
+    <label>Id imagine:<br>
+      <input type="text" size="4" value="{$imageId}" name="imageId"/><br>
+    </label><br/><br>
+      <label>Cuvânt:<br>
+      <input type="text" size="15" name="lexem"/><br>
+    </label><br/><br>
+    <label>Coordonatele centrului etichetei:<br>
+      <input id="xTag" type="text" size="4" name="xTag"/><br>
+      <input id="yTag" type="text" size="4" name="yTag"/><br>
+      <button id="setCoordTag" type="button">Setează coordonatele</button><br>
+    </label><br/><br>
+    <label>Coordonatele centrului zonei indicate:<br>
+      <input id="xImg" type="text" size="4" name="xImg"/><br>
+      <input id="yImg" type="text" size="4" name="yImg"/><br>
+      <button id="setCoordImg" type="button">Setează coordonatele</button><br>
+    </label><br/><br>
+    <label>Tag principal?<br>
+      <input type="radio" name="isMain" value="1"/>Da<br>
+      <input type="radio" name="isMain" value="0"/>Nu<br>
+    </label><br/><br>
+    <button id="saveSel" type="submit" name="action" value="save">Salvează eticheta</button><br>
+  </form><br>
+<br>
+  <h3>Etichete salvate</h3><br>
+  <form action="visualTag.php" method="post"><br>
+    {foreach from=$savedTags item=tag}<br>
+      <label>{$tag->label}<br>
+        <input type="hidden" name="savedTagId" value="{$tag->id}"/><br>
+        <button type="submit" name="action" value="delete">Șterge eticheta</button><br>
+      </label><br/><br>
+    {/foreach}<br>
+  </form><br>
+  {else}<br>
+  <p>{$msg}</p><br>
+  {/if}<br>
+</div><br>
<br>
Added: wwwbase/admin/visualTag.php<br>
==============================================================================<br>
--- /dev/null   00:00:00 1970   (empty, because file is newly added)<br>
+++ wwwbase/admin/visualTag.php Wed Jul 31 21:22:33 2013        (r921)<br>
@@ -0,0 +1,66 @@<br>
+<?php<br>
+require_once '../../phplib/util.php' ;<br>
+require_once '../../phplib/models/Visual.php' ;<br>
+//util_assertModerator(PRIV_VISUAL);<br>
+util_assertNotMirror();<br>
+RecentLink::createOrUpdate('Tăguire Imagini Definiții');<br>
+<br>
+$rootPath = util_getImgRoot() . '/';<br>
+$savedTags = '';<br>
+<br>
+if(util_getRequestParameter('action') == 'save') {<br>
+  $imageId = util_getRequestParameter('imageId');<br>
+  $lexem = util_getRequestParameter('lexem');<br>
+  $xTag = util_getRequestParameter('xTag');<br>
+  $yTag = util_getRequestParameter('yTag');<br>
+  $xImg = util_getRequestParameter('xImg');<br>
+  $yImg = util_getRequestParameter('yImg');<br>
+  $isMain = util_getRequestParameter('isMain');<br>
+<br>
+  $line = Model::factory('VisualTag')->create();<br>
+  $line->imageId = $imageId;<br>
+  $line->isMain = $isMain;<br>
+  $line->label = $lexem;<br>
+  $line->textXCoord = $xTag;<br>
+  $line->textYCoord = $yTag;<br>
+  $line->imgXCoord = $xImg;<br>
+  $line->imgYCoord = $yImg;<br>
+  $line->save();<br>
+<br>
+} else if(util_getRequestParameter('action') == 'delete') {<br>
+  $tagId = util_getRequestParameter('savedTagId');<br>
+<br>
+  $line = VisualTag::get_by_id($tagId);<br>
+  if(!empty($line)) {<br>
+    $line->delete();<br>
+  }<br>
+<br>
+} else if(util_getRequestParameter('action') == 'finishedTagging') {<br>
+  $imageId = util_getRequestParameter('imageId');<br>
+<br>
+  $line = Visual::get_by_id($imageId);<br>
+  $line->revised = 1;<br>
+  $line->save();<br>
+}<br>
+<br>
+//$line = Model::factory('Visual')->where('revised', 0)->find_one();<br>
+$line = Visual::get_by_revised(0);<br>
+if(!empty($line)) {<br>
+  $imagePath = $rootPath . $line->path;<br>
+  $imageId = $line->id;<br>
+<br>
+  $tags = VisualTag::get_all_by_imageId($imageId);<br>
+<br>
+  SmartyWrap::assign('savedTags', $tags);<br>
+  SmartyWrap::assign('imagePath', $imagePath);<br>
+  SmartyWrap::assign('imageId', $imageId);<br>
+<br>
+} else {<br>
+  $msg = 'Toate imaginile au fost revizuite. Mulțumim!';<br>
+  SmartyWrap::assign('msg', $msg);<br>
+}<br>
+<br>
+SmartyWrap::assign('sectionTitle', 'Tăguire imagini pentru definiții');<br>
+SmartyWrap::addCss('jcrop');<br>
+SmartyWrap::addJs('jquery', 'jcrop', 'visualTag');<br>
+SmartyWrap::displayAdminPage('admin/visualTag.ihtml');<br>
<br>
Modified: wwwbase/elfinder-connector/elFinderModToDB.class.php<br>
==============================================================================<br>
--- wwwbase/elfinder-connector/elFinderModToDB.class.php        Wed Jul 31 14:30:58 2013        (r920)<br>
+++ wwwbase/elfinder-connector/elFinderModToDB.class.php        Wed Jul 31 21:22:33 2013        (r921)<br>
@@ -13,7 +13,6 @@<br>
 public function action($cmd, $result, $args, $elfinder) {<br>
<br>
   switch($cmd){<br>
-    case 'duplicate':<br>
     case 'upload':<br>
     if(!empty($result['added'])) {<br>
       foreach($result['added'] as $file) {<br>
@@ -96,14 +95,6 @@<br>
         }<br>
       }<br>
       break;<br>
-<br>
-      /*case 'duplicate':<br>
-      if(!empty($result['added'])) {<br>
-        $txt = fopen('/tmp/duplicate.txt', 'w');<br>
-        fwrite($txt, $elfinder->realpath($result['added'][0]['hash']));<br>
-        fclose($txt);<br>
-      }<br>
-      break;*/<br>
     }<br>
   }<br>
 }<br>
<br>
Modified: wwwbase/elfinder-connector/visual_connector.php<br>
==============================================================================<br>
--- wwwbase/elfinder-connector/visual_connector.php     Wed Jul 31 14:30:58 2013        (r920)<br>
+++ wwwbase/elfinder-connector/visual_connector.php     Wed Jul 31 21:22:33 2013        (r921)<br>
@@ -42,7 +42,7 @@<br>
   'debug' => true,<br>
   'bind'       => array(<br>
     'mkdir mkfile rename duplicate upload rm paste' => array($myLogger, 'log'),<br>
-    'upload rm rename paste duplicate' => array($myModder, 'action')<br>
+    'upload rm rename paste' => array($myModder, 'action')<br>
     ),<br>
   'roots' => array(<br>
     array(<br>
@@ -52,7 +52,7 @@<br>
       'accessControl' => 'access', // disable and hide dot starting files (OPTIONAL)<br>
       'alias'         => 'Imagini cuvântul zilei', // display this instead of root directory name<br>
       'uploadAllow'   => array('image'), // mimetypes allowed to upload<br>
-      'disabled'      => array('resize, mkfile'), // list of not allowed commands<br>
+      'disabled'      => array('resize, mkfile, duplicate'), // list of not allowed commands<br>
       'imgLib'        => 'gd', // image manipulation library (imagick, mogrify, gd)<br>
       'tmbPath'       => '.tmb', // directory name for image thumbnails. Set to "" to avoid thumbnails generation<br>
     )<br>
<br>
Added: wwwbase/js/visualTag.js<br>
==============================================================================<br>
--- /dev/null   00:00:00 1970   (empty, because file is newly added)<br>
+++ wwwbase/js/visualTag.js     Wed Jul 31 21:22:33 2013        (r921)<br>
@@ -0,0 +1,78 @@<br>
+jQuery(document).ready(function() {<br>
+<br>
+  var jcrop_api;<br>
+  var coords = new Object();<br>
+<br>
+  initJcrop();<br>
+  resetCoords();<br>
+<br>
+  function initJcrop() {<br>
+    $('#jcrop').Jcrop({<br>
+      boxHeight: 500,<br>
+      boxWidth: 500,<br>
+      onSelect: showCoords,<br>
+      onChange: showCoords,<br>
+      onRelease: resetCoords<br>
+    }, function() {<br>
+      jcrop_api = this;<br>
+    });<br>
+  };<br>
+<br>
+  //Shows centre of the selection coordinates<br>
+  function showCoords(c) {<br>
+    setCoords(c);<br>
+<br>
+    $('#x').val(<a href="http://coords.cx" target="_blank">coords.cx</a>);<br>
+    $('#y').val(<a href="http://coords.cy" target="_blank">coords.cy</a>);<br>
+  };<br>
+<br>
+  function setCoords(c) {<br>
+    var q = new Array();<br>
+    q = calculateCentre(c);<br>
+<br>
+    coords.x = c.x;<br>
+    coords.y = c.y;<br>
+    coords.w = c.w;<br>
+    coords.h = c.h;<br>
+    <a href="http://coords.cx" target="_blank">coords.cx</a> = q[0];<br>
+    <a href="http://coords.cy" target="_blank">coords.cy</a> = q[1];<br>
+  };<br>
+<br>
+  function calculateCentre(c) {<br>
+    var centre = new Array();<br>
+<br>
+    centre[0] = Math.round((2 * c.x + c.w) / 2);<br>
+    centre[1] = Math.round((2 * c.y + c.h) / 2);<br>
+<br>
+    return centre;<br>
+  };<br>
+<br>
+  //Clears the actual selection<br>
+  $('#clrSel').click(function(e) {<br>
+    jcrop_api.release();<br>
+<br>
+    resetCoords();<br>
+  });<br>
+<br>
+  function resetCoords() {<br>
+    coords.x = 0;<br>
+    coords.y = 0;<br>
+    coords.w = 0;<br>
+    coords.h = 0;<br>
+    <a href="http://coords.cx" target="_blank">coords.cx</a> = 0;<br>
+    <a href="http://coords.cy" target="_blank">coords.cy</a> = 0;<br>
+<br>
+    $('#x').val('');<br>
+    $('#y').val('');<br>
+  };<br>
+<br>
+  $('#setCoordTag').click(function() {<br>
+    $('#xTag').val(<a href="http://coords.cx" target="_blank">coords.cx</a>);<br>
+    $('#yTag').val(<a href="http://coords.cy" target="_blank">coords.cy</a>);<br>
+  });<br>
+<br>
+  $('#setCoordImg').click(function() {<br>
+    $('#xImg').val(<a href="http://coords.cx" target="_blank">coords.cx</a>);<br>
+    $('#yImg').val(<a href="http://coords.cy" target="_blank">coords.cy</a>);<br>
+  });<br>
+});<br>
<br>
Modified: wwwbase/styles/flex.css<br>
==============================================================================<br>
--- wwwbase/styles/flex.css     Wed Jul 31 14:30:58 2013        (r920)<br>
+++ wwwbase/styles/flex.css     Wed Jul 31 21:22:33 2013        (r921)<br>
@@ -389,3 +389,8 @@<br>
 .ui-widget-header .ui-icon {<br>
        background-image: url("lightness-1.10.3/images/ui-icons_222222_256x240.png");<br>
 }<br>
+<br>
+/* VisualTag */<br>
+.floatMe {<br>
+  float: left;<br>
+}<br>
_______________________________________________<br>
Dev mailing list<br>
<a href="mailto:Dev@dexonline.ro">Dev@dexonline.ro</a><br>
<a href="http://list.dexonline.ro/listinfo/dev" target="_blank">http://list.dexonline.ro/listinfo/dev</a><br>
</blockquote></div><br></div>