[dev] [commit] r961 - patches phplib/models templates/admin templates/common wwwbase

automailer at dexonline.ro automailer at dexonline.ro
Wed Aug 28 13:37:27 EEST 2013


Author: cata
Date: Wed Aug 28 13:37:27 2013
New Revision: 961

Log:
Add a rudimentary model type editor.

Added:
   patches/00098.sql
   templates/common/tipuri-modele.ihtml
   wwwbase/tipuri-modele.php
Modified:
   phplib/models/ModelType.php
   templates/admin/index.ihtml

Added: patches/00098.sql
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ patches/00098.sql	Wed Aug 28 13:37:27 2013	(r961)
@@ -0,0 +1,4 @@
+update ModelType set description = lower(description);
+alter table ModelType change code code varchar(10) not null, change canonical canonical varchar(10) not null;
+alter table Lexem change modelType modelType varchar(10) not null;
+alter table Model change modelType modelType varchar(10) not null;

Modified: phplib/models/ModelType.php
==============================================================================
--- phplib/models/ModelType.php	Tue Aug 27 16:55:25 2013	(r960)
+++ phplib/models/ModelType.php	Wed Aug 28 13:37:27 2013	(r961)
@@ -8,13 +8,8 @@
   }
 
   public static function canonicalize($code) {
-    if ($code == 'VT') {
-      return 'V';
-    } else if ($code == 'MF') {
-      return 'A';
-    } else {
-      return $code;
-    }
+    $mt = ModelType::get_by_code($code);
+    return $mt->canonical;
   }
 }
 

Modified: templates/admin/index.ihtml
==============================================================================
--- templates/admin/index.ihtml	Tue Aug 27 16:55:25 2013	(r960)
+++ templates/admin/index.ihtml	Wed Aug 28 13:37:27 2013	(r961)
@@ -202,7 +202,8 @@
   <a href="{$wwwRoot}private/financials.php">Ciornă financiară</a> (în lucru!)<br/>
   <a href="{$wwwRoot}moderatori">Vizualizare / editare moderatori</a><br/>
   <a href="{$wwwRoot}surse">Vizualizare / editare surse</a><br/>
-  <a href="{$wwwRoot}etichete-sensuri">Vizualizare / editare etichete pentru sensuri</a>
+  <a href="{$wwwRoot}etichete-sensuri">Vizualizare / editare etichete pentru sensuri</a><br/>
+  <a href="{$wwwRoot}tipuri-modele">Vizualizare / editare tipuri de modele</a>
 {/if}
 
 <script type="text/javascript">

Added: templates/common/tipuri-modele.ihtml
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ templates/common/tipuri-modele.ihtml	Wed Aug 28 13:37:27 2013	(r961)
@@ -0,0 +1,68 @@
+{if $showAddForm}
+  <h3>Adaugă un tip de model nou</h3>
+
+  <form method="post" action="tipuri-modele.php">
+    <input type="hidden" name="id" value="0"/>
+    cod: <input type="text" name="code" value="{$addModelType->code}" size="10" maxlength="10"/><br/>
+
+    cod canonic:
+    <select name="canonical">
+      <option value="">modelul este canonic</option>
+      {foreach from=$canonicalModelTypes item=mt}
+        <option value="{$mt->code}">{$mt->code}</option>
+      {/foreach}
+    </select><br/>
+
+    descriere: <input type="text" name="description" value="{$addModelType->description}" size="40"/><br/>
+    <input type="submit" name="submitAddButton" value="acceptă"/>
+    <a href="tipuri-modele">renunță</a>
+  </form>
+{/if}
+
+{if $editModelType}
+  <h3>Editează tipul de model {$editModelType->code}</h3>
+
+  <form method="post" action="tipuri-modele.php">
+    <input type="hidden" name="id" value="{$editModelType->id}"/>
+    cod: {$editModelType->code}<br/>
+    {if $editModelType->code != $editModelType->canonical}
+      cod canonic: {$editModelType->canonical}<br/>
+    {/if}
+    descriere: <input type="text" name="description" value="{$editModelType->description}" size="40"/><br/>
+    <input type="submit" name="submitEditButton" value="acceptă"/>
+    <a href="tipuri-modele">renunță</a>
+  </form>
+{/if}
+
+<h3>Tipuri de modele</h3>
+
+<table>
+  <tr>
+    <th>cod</th>
+    <th>cod canonic</th>
+    <th>descriere</th>
+    <th>număr de modele</th>
+    <th>număr de lexeme</th>
+    <th>acțiuni</th>
+  </tr>
+
+  {foreach from=$modelTypes item=mt key=i}
+    <tr>
+      <td>{$mt->code}</td>
+      <td>{if $mt->code != $mt->canonical}{$mt->canonical}{/if}</td>
+      <td>{$mt->description}</td>
+      <td>{$modelCounts[$i]}</td>
+      <td>{$lexemCounts[$i]}</td>
+      <td>
+        <a href="?editId={$mt->id}">editează</a>
+        {if $canDelete[$i]}
+          <a href="?deleteId={$mt->id}">șterge</a>
+        {/if}
+      </td>
+    </tr>
+  {/foreach}
+</table>
+
+{if !$showAddForm}
+  <a href="?add=1">adaugă un tip de model</a>
+{/if}

Added: wwwbase/tipuri-modele.php
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ wwwbase/tipuri-modele.php	Wed Aug 28 13:37:27 2013	(r961)
@@ -0,0 +1,112 @@
+<?php
+require_once("../phplib/util.php"); 
+util_assertModerator(PRIV_EDIT);
+
+$showAddForm = util_getRequestParameter('add');
+$editId = util_getRequestParameter('editId');
+$deleteId = util_getRequestParameter('deleteId');
+$submitAddButton = util_getRequestParameter('submitAddButton');
+$submitEditButton = util_getRequestParameter('submitEditButton');
+$id = util_getRequestParameter('id');
+$code = util_getRequestParameter('code');
+$canonical = util_getRequestParameter('canonical');
+$description = util_getRequestParameter('description');
+
+if ($submitAddButton) {
+  $mt = Model::factory('ModelType')->create();
+  $mt->code = mb_strtoupper($code);
+  $mt->canonical = $canonical;
+  $mt->description = $description;
+  if (validateAdd($mt)) {
+    $mt->save();
+    FlashMessage::add("Am adăugat tipul de model '{$mt->code}'.", 'info');
+    util_redirect('tipuri-modele.php');
+  } else {
+    $showAddForm = true;
+    SmartyWrap::assign('addModelType', $mt);
+  }
+}
+
+if ($submitEditButton) {
+  $mt = ModelType::get_by_id($id);
+  $mt->description = $description;
+  if (validateEdit($mt)) {
+    $mt->save();
+    FlashMessage::add('Am salvat descrierea.', 'info');
+    util_redirect('tipuri-modele.php');
+  } else {
+    SmartyWrap::assign('editModelType', $mt);
+  }
+}
+
+if ($editId) {
+  // Load model type to be edited
+  SmartyWrap::assign('editModelType', ModelType::get_by_id($editId));
+}
+
+if ($deleteId) {
+  $mt = ModelType::get_by_id($deleteId);
+  if (validateDelete($mt)) {
+    FlashMessage::add("Am șters tipul de model '{$mt->code}'.", 'info');
+    $mt->delete();
+    util_redirect('tipuri-modele.php');
+  }
+}
+
+// Load model type table data
+$modelTypes = Model::factory('ModelType')->order_by_asc('code')->find_many();
+$modelCounts = array();
+$lexemCounts = array();
+$canDelete = array();
+foreach ($modelTypes as $mt) {
+  $numLexems = Model::factory('Lexem')->where('modelType', $mt->code)->count();
+  $numDependants = Model::factory('ModelType')->where('canonical', $mt->code)->count();
+  $modelCounts[] = Model::factory('FlexModel')->where('modelType', $mt->code)->count();
+  $lexemCounts[] = $numLexems;
+  $canDelete[] = ($numLexems == 0) && ($numDependants <= 1);
+}
+
+SmartyWrap::assign('page_title', 'Tipuri de modele');
+SmartyWrap::assign('canonicalModelTypes', ModelType::loadCanonical());
+SmartyWrap::assign('modelTypes', $modelTypes);
+SmartyWrap::assign('modelCounts', $modelCounts);
+SmartyWrap::assign('lexemCounts', $lexemCounts);
+SmartyWrap::assign('canDelete', $canDelete);
+SmartyWrap::assign('showAddForm', $showAddForm);
+SmartyWrap::displayCommonPageWithSkin('tipuri-modele.ihtml');
+
+/***************************************************************************/
+
+function validateAdd($mt) {
+  if (!$mt->code) {
+    FlashMessage::add('Codul nu poate fi vid.');
+  }
+  if (ModelType::get_by_code($mt->code)) {
+    FlashMessage::add("Codul '{$mt->code}' este deja folosit.");
+  }
+  if (!$mt->description) {
+    FlashMessage::add('Descrierea nu poate fi vidă. Ea trebuie să indice partea de vorbire și este vizibilă la afișarea paradigmelor.');
+  }
+  return FlashMessage::getMessage() == null;
+}
+
+function validateEdit($mt) {
+  if (!$mt->description) {
+    FlashMessage::add('Descrierea nu poate fi vidă. Ea trebuie să indice partea de vorbire și este vizibilă la afișarea paradigmelor.');
+  }
+  return FlashMessage::getMessage() == null;
+}
+
+function validateDelete($mt) {
+  $numLexems = Model::factory('Lexem')->where('modelType', $mt->code)->count();
+  if ($numLexems) {
+    FlashMessage::add("Nu pot șterge tipul '{$mt->code}', deoarece este folosit de {$numLexems} lexeme.");
+  }
+  $numDependants = Model::factory('ModelType')->where('canonical', $mt->code)->count();
+  if ($numDependants > 1) {
+    FlashMessage::add("Nu pot șterge tipul '{$mt->code}', deoarece este canonic pentru alte tipuri.");
+  }
+  return FlashMessage::getMessage() == null;
+}
+  
+?>


More information about the Dev mailing list