[dev] [commit] r1059 - patches phplib/models templates/admin templates/common/bits wwwbase/admin wwwbase/styles

automailer at dexonline.ro automailer at dexonline.ro
Tue Jan 14 17:54:36 EET 2014


Author: cata
Date: Tue Jan 14 17:54:36 2014
New Revision: 1059

Log:
Replace the "structure sealed" checkmark with a "structure status" integer.
Adjust the workflow accordingly.
Make lexem edit links visibile for structure editors.

Added:
   patches/00106.sql
   templates/common/bits/structStatus.ihtml
Modified:
   phplib/models/Lexem.php
   templates/admin/index.ihtml
   templates/admin/lexemEdit.ihtml
   templates/common/bits/multiParadigm.ihtml
   wwwbase/admin/index.php
   wwwbase/admin/lexemEdit.php
   wwwbase/admin/lexemSearch.php
   wwwbase/styles/lexemEdit.css

Added: patches/00106.sql
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ patches/00106.sql	Tue Jan 14 17:54:36 2014	(r1059)
@@ -0,0 +1,2 @@
+alter table Lexem change structSealed structStatus int not null default 1;
+update Lexem set structStatus = 1;

Modified: phplib/models/Lexem.php
==============================================================================
--- phplib/models/Lexem.php	Mon Jan 13 16:31:00 2014	(r1058)
+++ phplib/models/Lexem.php	Tue Jan 14 17:54:36 2014	(r1059)
@@ -3,6 +3,15 @@
 class Lexem extends BaseObject implements DatedObject {
   public static $_table = 'Lexem';
 
+  const STRUCT_STATUS_NEW = 1;
+  const STRUCT_STATUS_IN_PROGRESS = 2;
+  const STRUCT_STATUS_UNDER_REVIEW = 3;
+  const STRUCT_STATUS_DONE = 4;
+  public static $STRUCT_STATUS_NAMES = array(self::STRUCT_STATUS_NEW => 'neîncepută',
+                                             self::STRUCT_STATUS_IN_PROGRESS => 'în lucru',
+                                             self::STRUCT_STATUS_UNDER_REVIEW => 'așteaptă moderarea',
+                                             self::STRUCT_STATUS_DONE => 'terminată');
+
   public static function create($form = null, $modelType = null, $modelNumber = null, $restriction = '') {
     $l = Model::factory('Lexem')->create();
     if ($form) {
@@ -432,7 +441,7 @@
     $clone->restriction = '';
     $clone->isLoc = false;
     $clone->verifSp = false;
-    $clone->structSealed = false;
+    $clone->structStatus = self::STRUCT_STATUS_NEW;
     $clone->save();
     
     // Clone the definition list

Modified: templates/admin/index.ihtml
==============================================================================
--- templates/admin/index.ihtml	Mon Jan 13 16:31:00 2014	(r1058)
+++ templates/admin/index.ihtml	Tue Jan 14 17:54:36 2014	(r1059)
@@ -62,8 +62,8 @@
   Caută lexeme:
   <input type="text" name="form" size="10" value="*">
      
-  <input type="checkbox" id="structured" name="structured" value="1">
-  <label for="structured">structurate</label>
+  structurare:
+  {include file="common/bits/structStatus.ihtml" canEdit=true anyOption=true}
   <input type="submit" name="searchButton" value="Caută">
 </form>
 <br/>

Modified: templates/admin/lexemEdit.ihtml
==============================================================================
--- templates/admin/lexemEdit.ihtml	Mon Jan 13 16:31:00 2014	(r1058)
+++ templates/admin/lexemEdit.ihtml	Tue Jan 14 17:54:36 2014	(r1059)
@@ -45,9 +45,20 @@
         <td>
           <input type="text" id="lexemDescription" name="lexemDescription" value="{$lexem->description|escape}" size="20"
                  placeholder="opțională, pentru diferențierea omonimelor" {if !$canEdit.description}readonly{/if}/>
+          <span class="tooltip2" title="O scurtă descriere, vizibilă public, pentru diferențierea omonimelor."> </span>
         </td>
       </tr>
   
+      <tr>  
+        <td><label for="structStatus">structurare:</label></td>
+        <td>
+          {include file="common/bits/structStatus.ihtml" selected=$lexem->structStatus canEdit=$canEdit.structStatus}
+
+          <span class="tooltip2" title="Cât timp structurarea este „în lucru”, persoanele autorizate pot modifica sensurile, variantele, silabisirile
+          și pronunțiile. După trecerea în starea „așteaptă moderarea”, doar moderatorii mai pot schimba aceste valori."> </span>
+        </td>
+      </tr>
+ 
       <tr>
         <td><label for="lexemSourceIds">surse:</label></td>
         <td>
@@ -126,7 +137,7 @@
                 title="Variantele nu pot avea sensuri, exemple, variante sau etimologii proprii. Ele pot avea pronunții și silabisiri proprii."> </span>
         </td>
       </tr>
-  
+ 
       {if $homonyms}
         <tr>
           <td>omonime:</td>
@@ -215,16 +226,9 @@
         <input type="button" id="addSubmeaningButton" value="adaugă subsens"/>
         <input type="button" id="deleteMeaningButton" value="șterge sens"/>
       {else}
-        <span class="tooltip2" title="Acest lexem a fost avizat de un moderator. Sensurile, variantele, pronunțiile și silabisirile sale nu mai pot fi modificate"> </span>
+        <span class="tooltip2" title="Sensurile, variantele, pronunțiile și silabisirile pot fi modificate doar cât timp structurarea este „în lucru”."> </span>
       {/if}
     </div>
-    {if $canEdit.seal}
-      <input type="checkbox" id="structSealed" name="structSealed" value="1" {if $lexem->structSealed}checked{/if}/>
-      <label for="structSealed">avizează acest arbore de sensuri</label>
-      <span class="tooltip2" title="După avizare, doar moderatorii mai pot edita sensurile, variantele, silabisirile și pronunțiile."> </span>
-    {else}
-      <input type="hidden" name="structSealed" value="{$lexem->structSealed}"/>
-    {/if}
   </div>
 
   {if $canEdit.meanings}

Modified: templates/common/bits/multiParadigm.ihtml
==============================================================================
--- templates/common/bits/multiParadigm.ihtml	Mon Jan 13 16:31:00 2014	(r1058)
+++ templates/common/bits/multiParadigm.ihtml	Tue Jan 14 17:54:36 2014	(r1059)
@@ -4,10 +4,13 @@
 {if $ifMaps}
   {foreach from=$ifMaps item=ifMap key=i}
     {include file="common/paradigm/$version/paradigm.ihtml" lexem=$lexems[$i] ifMap=$ifMap sourceNames=$sourceNamesArr[$i] modelType=$modelTypes[$i]}
-    {if $sUser && ($sUser->moderator & $smarty.const.PRIV_LOC)}
-      Editează:
-      <a href="{$wwwRoot}admin/lexemEdit.php?lexemId={$lexems[$i]->id}">lexemul</a> |
-      <a href="{$wwwRoot}flex/editModel.php?modelType={$lexems[$i]->modelType}&modelNumber={$lexems[$i]->modelNumber}">modelul {$lexems[$i]->modelType}{$lexems[$i]->modelNumber}</a>
+    {if $sUser && ($sUser->moderator & ($smarty.const.PRIV_LOC | $smarty.const.PRIV_STRUCT))}
+      <a href="{$wwwRoot}admin/lexemEdit.php?lexemId={$lexems[$i]->id}">editează lexemul</a>
+      {if $sUser->moderator & $smarty.const.PRIV_LOC}
+        | <a href="{$wwwRoot}flex/editModel.php?modelType={$lexems[$i]->modelType}&modelNumber={$lexems[$i]->modelNumber}">
+          editează modelul {$lexems[$i]->modelType}{$lexems[$i]->modelNumber}
+        </a>
+      {/if}
     {/if}
   {/foreach}
   {if $hasUnrecommendedForms}

Added: templates/common/bits/structStatus.ihtml
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ templates/common/bits/structStatus.ihtml	Tue Jan 14 17:54:36 2014	(r1059)
@@ -0,0 +1,19 @@
+{assign var="id" value=$id|default:"structStatus"}
+{assign var="name" value=$name|default:"structStatus"}
+{assign var="structStatusNames" value=$structStatusNames}
+{assign var="selected" value=$selected}
+{assign var="canEdit" value=$canEdit|default:false}
+{assign var="anyOption" value=$anyOption|default:false}
+
+<select id="{$id}" name="{$name}" {if !$canEdit}disabled{/if}>
+  {if $anyOption}
+    <option value="0">oricare</option>
+  {/if}
+  {foreach from=$structStatusNames key=i item=s}
+    <option value="{$i}" {if $i == $selected}selected{/if}>{$s}</option>
+  {/foreach}
+</select>
+
+{if !$canEdit}
+  <input type="hidden" name="{$name}" value="{$selected}">
+{/if}

Modified: wwwbase/admin/index.php
==============================================================================
--- wwwbase/admin/index.php	Mon Jan 13 16:31:00 2014	(r1058)
+++ wwwbase/admin/index.php	Tue Jan 14 17:54:36 2014	(r1059)
@@ -10,6 +10,7 @@
 SmartyWrap::assign("allModeratorSources", Model::factory('Source')->where('canModerate', true)->order_by_asc('displayOrder')->find_many());
 SmartyWrap::assign('modelTypes', ModelType::loadCanonical());
 SmartyWrap::assign('models', $models);
+SmartyWrap::assign('structStatusNames', Lexem::$STRUCT_STATUS_NAMES);
 SmartyWrap::assign('sectionTitle', 'Pagina moderatorului');
 SmartyWrap::addCss('jqueryui', 'select2');
 SmartyWrap::addJs('jquery', 'jqueryui', 'select2', 'select2Dev');

Modified: wwwbase/admin/lexemEdit.php
==============================================================================
--- wwwbase/admin/lexemEdit.php	Mon Jan 13 16:31:00 2014	(r1058)
+++ wwwbase/admin/lexemEdit.php	Tue Jan 14 17:54:36 2014	(r1059)
@@ -20,7 +20,7 @@
 $pronunciations = util_getRequestParameter('pronunciations');
 $variantIds = util_getRequestCsv('variantIds');
 $variantOfId = util_getRequestParameter('variantOfId');
-$structSealed = util_getRequestIntParameter('structSealed');
+$structStatus = util_getRequestIntParameter('structStatus');
 $jsonMeanings = util_getRequestParameter('jsonMeanings');
 
 $refreshLexem = util_getRequestParameter('refreshLexem');
@@ -51,11 +51,11 @@
   $lexem->pronunciations = $pronunciations;
   $lexem->variantOfId = $variantOfId ? $variantOfId : null;
   $variantOf = Lexem::get_by_id($lexem->variantOfId);
-  $lexem->structSealed = $structSealed;
+  $lexem->structStatus = $structStatus;
   $meanings = json_decode($jsonMeanings);
   $ifs = $lexem->generateParadigm();
 
-  if (validate($lexem, $ifs, $variantOf, $variantIds, $meanings)) {
+  if (validate($lexem, $original, $ifs, $variantOf, $variantIds, $meanings)) {
     // Case 1: Validation passed
     if ($saveLexem) {
       if ($original->modelType == 'VT' && $lexem->modelType != 'VT') {
@@ -102,20 +102,22 @@
   SmartyWrap::assign('ifMap', $ifMap);
 }
 
+$ss = $lexem->structStatus;
+$oss = $original->structStatus; // syntactic sugar
 $canEdit = array(
   'general' => util_isModerator(PRIV_EDIT),
   'defStructured' => util_isModerator(PRIV_EDIT),
   'description' => !$lexem->isLoc || util_isModerator(PRIV_LOC),
   'form' => !$lexem->isLoc || util_isModerator(PRIV_LOC),
-  'hyphenations' => !$lexem->structSealed || util_isModerator(PRIV_EDIT),
+  'hyphenations' => ($ss == Lexem::STRUCT_STATUS_IN_PROGRESS) || util_isModerator(PRIV_EDIT),
   'isLoc' => util_isModerator(PRIV_LOC),
-  'meanings' => !$lexem->structSealed || util_isModerator(PRIV_EDIT),
+  'meanings' => ($ss == Lexem::STRUCT_STATUS_IN_PROGRESS) || util_isModerator(PRIV_EDIT),
   'paradigm' => util_isModerator(PRIV_LOC),
-  'pronunciations' => !$lexem->structSealed || util_isModerator(PRIV_EDIT),
-  'seal' => util_isModerator(PRIV_EDIT),
+  'pronunciations' => ($ss == Lexem::STRUCT_STATUS_IN_PROGRESS) || util_isModerator(PRIV_EDIT),
   'sources' => util_isModerator(PRIV_LOC | PRIV_EDIT),
+  'structStatus' => ($oss == Lexem::STRUCT_STATUS_NEW) || ($oss == Lexem::STRUCT_STATUS_IN_PROGRESS) || util_isModerator(PRIV_EDIT),
   'tags' => util_isModerator(PRIV_LOC | PRIV_EDIT),
-  'variants' => !$lexem->structSealed || util_isModerator(PRIV_EDIT),
+  'variants' => ($ss == Lexem::STRUCT_STATUS_IN_PROGRESS) || util_isModerator(PRIV_EDIT),
 );
 
 SmartyWrap::assign('lexem', $lexem);
@@ -135,6 +137,7 @@
 SmartyWrap::assign('models', FlexModel::loadByType($lexem->modelType));
 SmartyWrap::assign('canEdit', $canEdit);
 SmartyWrap::assign('allStatuses', util_getAllStatuses());
+SmartyWrap::assign('structStatusNames', Lexem::$STRUCT_STATUS_NAMES);
 SmartyWrap::addCss('easyui', 'jqueryui', 'paradigm', 'select2', 'lexemEdit', 'windowEngine');
 SmartyWrap::addJs('easyui', 'jqueryui', 'select2', 'select2Dev', 'lexemEdit', 'windowEngine', 'cookie');
 SmartyWrap::assign('sectionTitle', "Editare lexem: {$lexem->form} {$lexem->modelType}{$lexem->modelNumber}{$lexem->restriction}");
@@ -143,7 +146,7 @@
 
 /**************************************************************************/
 
-function validate($lexem, $ifs, $variantOf, $variantIds, $meanings) {
+function validate($lexem, $original, $ifs, $variantOf, $variantIds, $meanings) {
   if (!$lexem->form) {
     FlashMessage::add('Forma nu poate fi vidă.');
   }
@@ -218,6 +221,12 @@
     }
   }
 
+  if (($lexem->structStatus == Lexem::STRUCT_STATUS_DONE) &&
+      ($original->structStatus != Lexem::STRUCT_STATUS_DONE) &&
+      !util_isModerator(PRIV_EDIT)) {
+    FlashMessage::add("Doar moderatorii pot marca structurarea drept terminată. Vă rugăm să folosiți valoarea „așteaptă moderarea”.");
+  }
+
   return FlashMessage::getMessage() == null;
 }
 

Modified: wwwbase/admin/lexemSearch.php
==============================================================================
--- wwwbase/admin/lexemSearch.php	Mon Jan 13 16:31:00 2014	(r1058)
+++ wwwbase/admin/lexemSearch.php	Tue Jan 14 17:54:36 2014	(r1059)
@@ -4,7 +4,7 @@
 util_assertNotMirror();
 
 $form = util_getRequestParameter('form');
-$structured = util_getBoolean('structured');
+$structStatus = util_getRequestParameter('structStatus');
 $searchButton = util_getRequestParameter('searchButton');
 
 if (!$searchButton) {
@@ -17,9 +17,9 @@
 $field = $hasDiacritics ? 'formNoAccent' : 'formUtf8General';
 $regexp = StringUtil::dexRegexpToMysqlRegexp($form);
 
-$query = "select * from Lexem where $field $regexp ";
-if ($structured) {
-  $query .= 'and id in (select distinct lexemId from Meaning)';
+$query = "select * from Lexem where $field $regexp";
+if ($structStatus) {
+  $query .= " and structStatus = {$structStatus}";
 }
 $query .= ' order by formNoAccent limit 500';
 $lexems = Model::factory('Lexem')->raw_query($query, null)->find_many();

Modified: wwwbase/styles/lexemEdit.css
==============================================================================
--- wwwbase/styles/lexemEdit.css	Mon Jan 13 16:31:00 2014	(r1058)
+++ wwwbase/styles/lexemEdit.css	Tue Jan 14 17:54:36 2014	(r1059)
@@ -151,6 +151,10 @@
   font-weight: bold;
 }
 
+#structStatus {
+  width: 172px;
+}
+
 input[name=cloneLexem] {
   background: #e5e5e5 url("../img/icons/page_white_copy.png") 2px 0px no-repeat;
   padding-left: 20px;


More information about the Dev mailing list