[ros-diffs] [dgoette] 39780: * fix problem, where entries got the wrong contents * fix delete button * fix filter option * if dynamic content is updated, only generate this entry and not all related dynamic pages * simplify some code * delete entries if all their revisions are deleted * if we add a new dynamic content, add dependency to the related dynamic page * reapply standard metadata for dynamic contents again (was broken) * process correct content while genertion of dynamic pages * fix handling of entry type correct while updating * fix problem with broken caching * implement comments into roscms [#*comment text*] where [#* is start sequence and *] the end sequence * get correct file extension from tag, instead of just using 'html', if using [#roscms_filename]

dgoette at svn.reactos.org dgoette at svn.reactos.org
Fri Feb 27 00:41:36 CET 2009


Author: dgoette
Date: Fri Feb 27 02:41:36 2009
New Revision: 39780

URL: http://svn.reactos.org/svn/reactos?rev=39780&view=rev
Log:
* fix problem, where entries got the wrong contents
* fix delete button
* fix filter option
* if dynamic content is updated, only generate this entry and not all related dynamic pages
* simplify some code
* delete entries if all their revisions are deleted
* if we add a new dynamic content, add dependency to the related dynamic page
* reapply standard metadata for dynamic contents again (was broken)
* process correct content while genertion of dynamic pages
* fix handling of entry type correct while updating
* fix problem with broken caching
* implement comments into roscms [#*comment text*] where [#* is start sequence and *] the end sequence
* get correct file extension from tag, instead of just using 'html', if using [#roscms_filename]

Modified:
    branches/danny-web/reactos.org/htdocs/roscms/js/cms_website.js
    branches/danny-web/reactos.org/htdocs/roscms/js/cms_website.js.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/HTML_CMS.class.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_EntryTable.class.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_SaveDraft.class.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewAddEntry.class.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewEditor.class.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewEntryTable.class.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/om/Entry.class.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/om/Generate.class.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/om/Revision.class.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/om/Tag.class.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/view/HTML_CMS_Help.class.php
    branches/danny-web/reactos.org/htdocs/roscms/lib/view/HTML_CMS_Website.class.php

Modified: branches/danny-web/reactos.org/htdocs/roscms/js/cms_website.js
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/js/cms_website.js?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/js/cms_website.js [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/js/cms_website.js [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -1215,7 +1215,7 @@
   var poststr = getEditorTexts();
 
   if (poststr !== false) {
-    makeRequest('?page=backend&type=text&subtype=asi&data_id='+encodeURIComponent(did)+'&rev_id='+encodeURIComponent(drid)+'&lang_id='+encodeURIComponent(document.getElementById("mefrlang").innerHTML), 'asi', 'mefasi', 'html', 'POST', poststr.substr(1));
+    makeRequest('?page=backend&type=text&subtype=asi&data_id='+encodeURIComponent(did)+'&rev_id='+encodeURIComponent(drid)+'&lang_id='+encodeURIComponent(document.getElementById("mefrlang").innerHTML), 'asi', 'mefasi', 'html', 'POST', poststr);
     return true;
   }
   else {
@@ -1341,7 +1341,7 @@
  */
 function changeSelectedTags( ctk )
 {
-  if (ctk === 'ms' || ctk === 'mn') {
+  if (ctk === 'ms' || ctk === 'mn' || ctk === 'xe' || ctk === 'va') {
     var tentrs = selectedEntries().split("|");
 
     if (tentrs[0] < 1 || tentrs[0] === '') {
@@ -1580,6 +1580,9 @@
       objid = tsplits[1];
 
     default:
+      if (objid == 'editzone') {
+        document.getElementById('newentryzone').innerHTML = '';
+      }
       document.getElementById(objid).innerHTML = http_request.responseText;
       autosave_cache = getEditorTexts();
       break;
@@ -1615,7 +1618,7 @@
       }
       document.getElementById('mefasi').innerHTML = 'Draft saved at '+ curr_hour +':'+ curr_min;
       
-      if (http_request.responseText !== '') {
+      if (http_request.responseText != '') {
         alertbox('Error: '+http_request.responseText);
       }
       else {
@@ -2068,6 +2071,7 @@
   }
 
   document.getElementById('newentryzone').innerHTML = http_request.responseText;
+  document.getElementById('editzone').innerHTML='';
   document.getElementById('newentryhead').innerHTML = '<span class="virtualLink" onclick="loadEntryTableWithOffset(roscms_current_tbl_position)"><strong>&laquo; Back</strong></span> &nbsp; <strong>New Entry</strong>';
 } // end of function showNewEntryDialog
 

Modified: branches/danny-web/reactos.org/htdocs/roscms/js/cms_website.js.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/js/cms_website.js.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/js/cms_website.js.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/js/cms_website.js.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -153,7 +153,7 @@
       // order by
       case 'o': 
         filtentryselstrs1 = '<select id="sfb'+filterid+'"><option value="asc">Ascending</option><option value="desc">Descending</option></select>';
-        filtentryselstrs2 = '<select id="sfc'+filterid+'"><option value="date">Date &amp; Time</option><option value="name">Name</option><option value="lang">Language</option><option value="user">User</option><option value="type">Type</option><option value="version">Version</option><option value="number">Number ("dynamic" entry)</option>';
+        filtentryselstrs2 = '<select id="sfc'+filterid+'"><option value="date">Date &amp; Time</option><option value="name">Name</option><option value="language">Language</option><option value="user">User</option><option value="type">Type</option><option value="version">Version</option><option value="number">Number ("dynamic" entry)</option>';
         if (roscms_access['more_filter']) {
           filtentryselstrs2 += '<option value="security">Security</option><option value="revid">RevID</option><option value="ext">Extension</option><option value="status">Status</option><option value="kind">Kind</option>';
         }

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/HTML_CMS.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/HTML_CMS.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/HTML_CMS.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/HTML_CMS.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -148,7 +148,7 @@
         <td>&nbsp;&nbsp;</td>');
     }
 
-      echo_strip('
+    echo_strip('
             <th'.(($this->branch == 'help') ? ' class="active"' : '').'>
               <div class="corner_TL">
                 <div class="corner_TR">

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_EntryTable.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_EntryTable.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_EntryTable.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_EntryTable.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -256,13 +256,6 @@
       }
     }
 
-    // get next rev version number (also search archive)
-    $stmt=&DBConnection::getInstance()->prepare("SELECT version FROM ".ROSCMST_REVISIONS." WHERE data_id = :data_id AND version > 0 AND lang_id = :lang ORDER BY version DESC, id DESC LIMIT 1");
-    $stmt->bindParam('data_id',$revision['data_id'],PDO::PARAM_INT);
-    $stmt->bindParam('lang',$revision['lang_id'],PDO::PARAM_INT);
-    $stmt->execute();
-    $version_num = $stmt->fetchColumn()+1;
-
     // get latest stable head entry
     $stmt=&DBConnection::getInstance()->prepare("SELECT id, data_id, lang_id FROM ".ROSCMST_REVISIONS." WHERE data_id = :data_id AND version > 0 AND lang_id = :lang AND archive IS FALSE AND status='stable' ORDER BY version DESC, id DESC LIMIT 1");
     $stmt->bindParam('data_id',$revision['data_id'],PDO::PARAM_INT);
@@ -274,7 +267,7 @@
     if ($stable_revision !== false) {
 
       // transfer 
-      Tag::copyFromRevision($stable_revision['id'], $revision['id']);
+      Tag::mergeFromRevision($stable_revision['id'], $revision['id']);
 
       // move old revision to archive
       if (!Revision::toArchive($stable_revision['id'])) {
@@ -284,30 +277,51 @@
       }
     }
 
+    // update depencies for new rev
+    $depency = new Depencies();
+    if (!$depency->addRevision($revision['id'])) {
+      echo 'Error while updating depencies';
+      return false;
+    }
+
+    // make entry stable
+    Revision::setStatus($revision['id'],'stable');
+
+    // if revision is dynamic content, get the number and give it to the generator
+    $stmt=&DBConnection::getInstance()->prepare("SELECT d.name FROM ".ROSCMST_ENTRIES." d JOIN ".ROSCMST_REVISIONS." r ON r.data_id=d.id WHERE r.id = :rev_id");
+    $stmt->bindParam('rev_id',$revision['id'],PDO::PARAM_INT);
+    $stmt->execute();
+    $dynamic_num = preg_replace('/^.*_([1-9][0-9]*)$/i', '$1',$stmt->fetchColumn());
+
+    // generate content
+    $generate = new Generate();
+    if ($dynamic_num > 0) {
+      $success = $generate->update($revision['id'], $dynamic_num);
+    }
+    else {
+      $success = $generate->update($revision['id']);
+    }
+
+    // was generation not successfull?
+    if (!$success) {
+      Revision::setStatus($revision['id'],$revision['status']);
+      echo 'Can\'t generate updated entry.';
+      return false;
+    }
+
+    // get next rev version number (also search archive)
+    $stmt=&DBConnection::getInstance()->prepare("SELECT version FROM ".ROSCMST_REVISIONS." WHERE data_id = :data_id AND version > 0 AND lang_id = :lang ORDER BY version DESC, id DESC LIMIT 1");
+    $stmt->bindParam('data_id',$revision['data_id'],PDO::PARAM_INT);
+    $stmt->bindParam('lang',$revision['lang_id'],PDO::PARAM_INT);
+    $stmt->execute();
+    $version_num = $stmt->fetchColumn()+1;
+
     // update the version number
     $stmt=&DBConnection::getInstance()->prepare("UPDATE ".ROSCMST_REVISIONS." SET version = :version WHERE id = :rev_id");
     $stmt->bindParam('version',$version_num,PDO::PARAM_INT);
     $stmt->bindParam('rev_id',$revision['id'],PDO::PARAM_INT);
     $stmt->execute();
 
-    // update depencies for new rev
-    $depency = new Depencies();
-    if (!$depency->addRevision($revision['id'])) {
-      echo 'Error while updating depencies';
-      return false;
-    }
-
-    // make entry stable
-    Revision::setStatus($revision['id'],'stable');
-
-    // generate content
-    $generate = new Generate();
-    if (!$generate->update($revision['id'])) {
-      Revision::setStatus($revision['id'],$revision['status']);
-      echo 'Can\'t generate updated entry.';
-      return false;
-    }
-
     Log::writeLow('mark entry as stable: data-id '.$revision['data_id'].', rev-id '.$revision['id']);
 
     return true;

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_SaveDraft.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_SaveDraft.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_SaveDraft.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_SaveDraft.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -56,7 +56,7 @@
   private function save( )
   {
     $thisuser = &ThisUser::getInstance();
-    $rev_id = 0; // helper var, contains current rev_id in force
+    $rev_id = false; // helper var, contains current rev_id in force
     
     if (!$thisuser->hasAccess('more_lang') && $_GET['lang_id'] != $thisuser->language()) {
       die ('Can\'t save drafts of other than your language, due to access restrictions');
@@ -68,15 +68,10 @@
     $stmt->bindParam('user_id',$thisuser->id(),PDO::PARAM_INT);
     $stmt->bindParam('lang',$_GET['lang_id'],PDO::PARAM_INT);
     $stmt->execute();
-    $draft_candidate = $stmt->fetchColumn();
-
-    // if there is a valid value returned, use it as rev_id
-    if ($draft_candidate !== false) {
-      $rev_id = $draft_candidate;
-    }
+    $rev_id = $stmt->fetchColumn();
 
     // add new draft, if no autosave-draft exists or draft is submitted
-    if ($rev_id === 0) {
+    if ($rev_id === false) {
 
       // add a new revision
       $rev_id = Revision::add($_GET['data_id'], $_GET['lang_id']);
@@ -84,13 +79,14 @@
       // get stable entry
       $stmt=&DBConnection::getInstance()->prepare("SELECT id FROM ".ROSCMST_REVISIONS." WHERE data_id = :data_id AND lang_id = :lang_id AND status = 'stable' AND archive IS FALSE ORDER BY datetime DESC LIMIT 1");
       $stmt->bindParam('data_id',$_GET['data_id'],PDO::PARAM_INT);
-      $stmt->bindParam('lang_id',$_GET['lang_id'],PDO::PARAM_STR);
+      $stmt->bindParam('lang_id',$_GET['lang_id'],PDO::PARAM_INT);
       $stmt->execute();
       $stable = $stmt->fetchColumn();
+
       if ($stable !== false) {
 
         // transfer from stable entry
-        Tag::copyFromRevision($stable, $rev_id);
+        Tag::mergeFromRevision($stable, $rev_id);
       }
     }
 
@@ -111,10 +107,11 @@
     // insert/update short text
     $stmt=&DBConnection::getInstance()->prepare("INSERT INTO ".ROSCMST_STEXT." ( id , rev_id , name , content ) VALUES ( NULL, :rev_id, :name, :content)");
     $stmt->bindParam('rev_id',$rev_id,PDO::PARAM_INT);
-    for ($i=1; $i <= $_POST['stextsum']; ++$i) {  
+    for ($i=1; $i <= $_POST['pstextsum']; ++$i) {  
       $stmt->bindParam('name',$_POST['pdstext'.$i],PDO::PARAM_STR);
       $stmt->bindParam('content',$_POST['pstext'.$i],PDO::PARAM_STR);
       $stmt->execute();
+
     }
 
     // insert/update long text

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewAddEntry.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewAddEntry.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewAddEntry.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewAddEntry.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -79,18 +79,18 @@
       case 'newdynamic':
       
         // get some data about the dynamic page
-        $stmt=&DBConnection::getInstance()->prepare("SELECT r.id AS rev_id, d.name FROM ".ROSCMST_REVISIONS." r JOIN ".ROSCMST_ENTRIES." d ON d.id=r.data_id WHERE d.id=:data_id AND lang_id=:standard_lang LIMIT 1");
+        $stmt=&DBConnection::getInstance()->prepare("SELECT r.id AS rev_id, d.name FROM ".ROSCMST_REVISIONS." r JOIN ".ROSCMST_ENTRIES." d ON d.id=r.data_id WHERE d.id=:data_id AND lang_id=:standard_lang AND r.status='stable' AND r.archive IS FALSE LIMIT 1");
         $stmt->bindParam('data_id',$_GET['data_id'],PDO::PARAM_INT);
         $stmt->bindParam('standard_lang',Language::getStandardId(),PDO::PARAM_INT);
         $stmt->execute();
         $page = $stmt->fetchOnce(PDO::FETCH_ASSOC);
         $next_index = Tag::getValue($page['rev_id'],'next_index',-1);
 
-        // create new dynamic entry
-        $rev_id = Entry::add($page['name'].'_'.$next_index, 'content');
-
         // update next index for dynamic page
         Tag::update(Tag::getId($page['rev_id'],'next_index',-1),$next_index+1);
+
+        // create new dynamic entry
+        $rev_id = Entry::add($page['name'].'_'.$next_index, 'content',null, true);
 
         // show editor
         new Backend_ViewEditor($rev_id);

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewEditor.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewEditor.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewEditor.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewEditor.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -551,7 +551,7 @@
     if ($thisuser->hasAccess('system_tags')) {
       $stmt=&DBConnection::getInstance()->prepare("SELECT id, user_id, name, value FROM ".ROSCMST_TAGS." WHERE rev_id = :rev_id AND user_id IN(-1, :user_id) ORDER BY user_id ASC, name ASC");
     }
-    
+
     // Display only privat labels
     else {
       $stmt=&DBConnection::getInstance()->prepare("SELECT id, user_id, name, value FROM ".ROSCMST_TAGS." WHERE rev_id = :rev_id AND user_id =:user_id ORDER BY user_id ASC, name ASC");

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewEntryTable.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewEntryTable.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewEntryTable.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/backend/Backend_ViewEntryTable.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -372,7 +372,7 @@
               case 'name': // name
                 $this->sql_order .= "d.name ";
                 break;
-              case 'lang': // language
+              case 'language': // language
                 $this->sql_order .= "r.lang_id ";
                 break;
               case 'user': // user

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/om/Entry.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/om/Entry.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/om/Entry.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/om/Entry.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -166,9 +166,11 @@
    * @return bool
    * @access public
    */
-  public static function add($data_name, $data_type = null, $template = '')
+  public static function add($data_name, $data_type = null, $template = '', $dynamic = false)
   {
     $data_name = trim($data_name);
+
+    $rev_id = false;
 
     // check if entry already exists
     $stmt=&DBConnection::getInstance()->prepare("SELECT id FROM ".ROSCMST_ENTRIES." WHERE name = :name AND type = :type LIMIT 1");
@@ -207,13 +209,35 @@
       return false;
     }
 
+    // add dynamic content tags and dependencies from parent page
+    if ($dynamic) {
+      $parent_name = preg_replace('/^(.*)_[1-9][0-9]*$/i','$1',$data_name);
+      
+      $stmt=&DBConnection::getInstance()->prepare("SELECT r.id FROM ".ROSCMST_REVISIONS." r JOIN ".ROSCMST_ENTRIES." d ON d.id=r.data_id WHERE d.name=:parent_name AND d.type = 'dynamic' AND r.status='stable' AND r.archive IS FALSE");
+      $stmt->bindParam('parent_name',$parent_name,PDO::PARAM_STR);
+      $stmt->execute();
+      $parent_rev = $stmt->fetchColumn();
+      
+      $next_index = Tag::getValue($parent_rev, 'next_index',-1);
+
+      // add Tags
+      Tag::add($rev_id, 'number', $next_index, -1);
+      Tag::add($rev_id, 'pub_date', date('Y-m-d'), -1);
+      Tag::add($rev_id, 'pub_user', ThisUser::getInstance()->id(), -1);
+
+      // update next number
+      Tag::update(Tag::getId($parent_rev,'next_index',-1),$next_index+1);
+
+      Depencies::addManual($parent_rev, $data_name, 'content');
+    }
+
     // create new stext contents for (dynamic) pages
     $stmt=&DBConnection::getInstance()->prepare("INSERT INTO ".ROSCMST_STEXT." ( id , rev_id , name , content ) VALUES ( NULL, :rev_id, :description, :content )");
     $stmt->bindParam('rev_id',$rev_id,PDO::PARAM_INT);
     $stmt->bindValue('description','description',PDO::PARAM_STR);
     $stmt->bindValue('content','',PDO::PARAM_STR);
     $stmt->execute();
-    if ($data_type == 'page' || $data_type == 'dynamic') {
+    if ($data_type == 'page' || $data_type == 'dynamic' || $dynamic) {
 
       // add a comment as short text
       $stmt->bindValue('description','comment',PDO::PARAM_STR);
@@ -225,7 +249,7 @@
       $stmt->bindValue('content',$data_name,PDO::PARAM_STR);
       $stmt->execute();
 
-      // add next dynamic number for dynamic entries
+      // add initial next dynamic number for dynamic entries
       if ($data_type == 'dynamic') {
         Tag::add($rev_id, 'next_number', 1, -1);
       }
@@ -245,23 +269,34 @@
     $stmt->bindParam('content',$content,PDO::PARAM_STR);
     $stmt->execute();
 
-    // add dynamic content tags
-    if (isset($next_number)) {
-
-      // add Tags
-      Tag::add($rev_id, 'number', $next_number, -1);
-      Tag::add($rev_id, 'pub_date', date('Y-m-d'), -1);
-      Tag::add($rev_id, 'pub_user', ThisUser::getInstance()->id(), -1);
-
-      // update next number
-      Tag::update(Tag::getId($rev_id,'number_next',-1),$next_number+1);
-    }
-
+    // add standard page extension
     if ($data_type == 'page' || $data_type == 'dynamic') {
       Tag::add($rev_id, 'extension', 'html', -1);
     }
     return $rev_id;
   } // end of member function add
+
+
+
+  /**
+   * delete a entry, if no revisions are derived from it
+   *
+   * @param int data_id
+   * @return bool
+   * @access public
+   */
+  public static function delete( $data_id )
+  {
+    $stmt=&DBConnection::getInstance()->prepare("SELECT TRUE FROM ".ROSCMST_REVISIONS." WHERE data_id=:data_id");
+    $stmt->bindParam('data_id',$data_id,PDO::PARAM_INT);
+    $stmt->execute();
+    if (!$stmt->fetchColumn()) {
+      $stmt=&DBconnection::getInstance()->prepare("DELETE FROM ".ROSCMST_ENTRIES." WHERE id=:data_id");
+      $stmt->bindParam('data_id',$data_id,PDO::PARAM_INT);
+      return $stmt->execute();
+    }
+    return false;
+  } // end of member function delete
 
 
 

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/om/Generate.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/om/Generate.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/om/Generate.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/om/Generate.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -39,7 +39,7 @@
   private $lang_id = null;
   private $lang = null;
 
-  private $short = array('content'=>'cont', 'script'=>'inc');
+  private $short = array('content'=>'cont', 'dynamic'=>'page', 'page'=>'page', 'script'=>'inc');
 
 
 
@@ -208,7 +208,7 @@
     $file_name = $data_name.'.'.$file_extension;
 
     // information, what was generated
-    echo $file_name.'<br />';
+    echo $this->lang_id.'--'.$file_name.'<br />';
 
     // needed by replacing functions
     $this->page_name = $data_name;
@@ -284,33 +284,27 @@
 
       // information, what was generated
       echo $this->lang_id.'--'.$file_name.'<br />';
-      
-      // get current instance (dynamic entry revision id)
-      $stmt=&DBConnection::getInstance()->prepare("SELECT r.id, r.lang_id FROM ".ROSCMST_REVISIONS." r JOIN ".ROSCMST_ENTRIES." d ON d.id=r.data_id WHERE d.type='content' AND d.name = CONCAT(:parent_name,'_',:dynamic_num) AND r.status='stable' AND r.archive IS FALSE LIMIT 1");
-      $stmt->bindParam('parent_name',$revision['name'],PDO::PARAM_STR);
-      $stmt->bindParam('dynamic_num',$i,PDO::PARAM_INT);
-      $stmt->execute();
-      $instance = $stmt->fetchOnce(PDO::FETCH_ASSOC);
 
       // needed by replacing functions
       $this->page_name = $data_name;
       $this->rev_id = $revision['id'];
       $this->dynamic_num = $i;
 
+      // copy content
+      $content = $revision['content']; 
+
       // replace depencies
-      $stmt_more=&DBConnection::getInstance()->prepare("SELECT d.id, d.type, d.name FROM ".ROSCMST_DEPENCIES." w JOIN ".ROSCMST_ENTRIES." d ON w.child_id=d.id WHERE w.rev_id=:rev_id AND w.include IS TRUE");
-      $stmt_more->bindParam('rev_id',$instance['id'],PDO::PARAM_INT);
+      $stmt_more=&DBConnection::getInstance()->prepare("SELECT d.id, d.type, d.name FROM ".ROSCMST_DEPENCIES." w JOIN ".ROSCMST_ENTRIES." d ON w.child_id=d.id WHERE w.rev_id=:rev_id AND w.include IS TRUE AND d.type != 'script'");
+      $stmt_more->bindParam('rev_id',$revision['id'],PDO::PARAM_INT);
       $stmt_more->execute();
       while ($depency = $stmt_more->fetch(PDO::FETCH_ASSOC)) {
 
         // replace
-        if ($depency['type'] != 'script') {
-          $content = str_replace('[#'.$this->short[$depency['type']].'_'.$depency['name'].']', $this->getCached(array(null, $this->short[$depency['type']].'_'.$depency['name'])), $content);
-        }
+        $content = str_replace('[#'.$this->short[$depency['type']].'_'.$depency['name'].']', $this->getCached(array(null, $this->short[$depency['type']].'_'.$depency['name'])), $content);
       } // end foreach
 
       // replace scripts
-      $content = preg_replace_callback('/\[#inc_([^][#[:space:]]+)\]/', array($this,'evalScript'),$content);
+      $content = preg_replace_callback('/\[#inc_([a-zA-Z0-9_]+)\]/', array($this,'evalScript'),$content);
 
       // replace roscms vars
       $content = $this->replaceRoscmsPlaceholder($content);
@@ -329,7 +323,7 @@
    * @param bool
    * @access private
    */
-  public function update( $rev_id )
+  public function update( $rev_id, $dynamic_num = null )
   {
     static $base_rev;
 
@@ -339,28 +333,52 @@
     }
 
     // get revision information
-    $stmt=&DBConnection::getInstance()->prepare("SELECT data_id, lang_id FROM ".ROSCMST_REVISIONS." WHERE id=:rev_id");
+    $stmt=&DBConnection::getInstance()->prepare("SELECT r.data_id, r.lang_id, d.type, d.name FROM ".ROSCMST_REVISIONS." r JOIN ".ROSCMST_ENTRIES." d ON d.id=r.data_id WHERE r.id=:rev_id");
     $stmt->bindParam('rev_id',$rev_id,PDO::PARAM_INT);
     $stmt->execute();
     $revision=$stmt->fetchOnce(PDO::FETCH_ASSOC);
 
     // cache revision (set language, cache)
     $this->lang_id = $revision['lang_id'];
-    $this->cacheFiles($revision['data_id']);
-    
-    // for usage in loop
+    $this->cacheFiles($revision['data_id'], false);
+
+    if ($revision['type'] == 'page' || $revision['type'] == 'dynamic') {
+
       // in standard language we may have depencies to other languages, so better generate them all
       if ($revision['lang_id'] == Language::getStandardId()){
-        $stmt_lang=&DBConnection::getInstance()->prepare("SELECT id, name_short FROM ".ROSCMST_LANGUAGES." ORDER BY level DESC, name ASC");
+        $stmt=&DBConnection::getInstance()->prepare("SELECT id, name_short FROM ".ROSCMST_LANGUAGES." ORDER BY level DESC, name ASC");
       }
       else {
-        $stmt_lang=&DBConnection::getInstance()->prepare("SELECT id, name_short FROM ".ROSCMST_LANGUAGES." WHERE id=:lang_id");
-        $stmt_lang->bindParam('lang_id',$revision['lang_id'],PDO::PARAM_INT);
-      }
+        $stmt=&DBConnection::getInstance()->prepare("SELECT id, name_short FROM ".ROSCMST_LANGUAGES." WHERE id=:lang_id");
+        $stmt->bindParam('lang_id',$revision['lang_id'],PDO::PARAM_INT);
+      }
+      $stmt->execute();
+      while ($language = $stmt->fetch(PDO::FETCH_ASSOC)) {
+
+        // language settings for generating process
+        $this->lang_id=$language['id'];
+        $this->lang=$language['name_short'];
+        $this->lang=$language['name_short'];
+
+        // seperate functions for pages & dynamic pages (in that order)
+        if($revision['type'] == 'page') {
+          $this->oneEntry($revision['name']);
+        }
+        else {
+          if ($dynamic_num === null) {
+            $this->makeDynamic($revision['name']);
+          }
+          else {
+            $this->makeDynamic($revision['name'], $dynamic_num);
+          }
+        }
+      } // end while language
+      return true;
+    }
 
     // get list of entries which depend on this one and handle their types
     $stmt=&DBConnection::getInstance()->prepare("
-        SELECT
+        SELECT DISTINCT
           org.name, org.type, COALESCE( trans.id, org.id ) AS id, org.data_id
         FROM (
           SELECT d.name, d.type, r.id, r.data_id FROM ".ROSCMST_DEPENCIES." w JOIN ".ROSCMST_REVISIONS." r ON r.id=w.rev_id JOIN ".ROSCMST_ENTRIES." d ON d.id=r.data_id WHERE w.child_id=:depency_id AND r.lang_id = :standard_lang AND w.rev_id NOT IN(:rev_id,:rev_id2) AND r.archive IS FALSE AND w.include IS TRUE
@@ -375,38 +393,12 @@
     $stmt->execute();
     while ($depency = $stmt->fetch(PDO::FETCH_ASSOC)) {
 
-      // cache recursivly or generate page
-      switch ($depency['type']) {
-        case 'page':
-        case 'dynamic':
-
-          // generate pages for all languages, if standard lang, otherwise only once
-          $stmt_lang->execute();
-          while ($language = $stmt_lang->fetch(PDO::FETCH_ASSOC)) {
-
-            // language settings for generating process
-            $this->lang_id=$language['id'];
-            $this->lang=$language['name_short'];
-
-            // seperate functions for pages & dynamic pages (in that order)
-            if($depency['type'] == 'page') {
-              $this->oneEntry($depency['name'], $language['id']);
-            }
-            else {
-              $this->makeDynamic($depency['name'], $language['id']);
-            }
-          } // end while language
-          break;
-
-        case 'script':
-          // scripts are only executed in pages
-          break;
-        default:
-
-          // only run update once per $rev_id
-          $this->update($depency['id']);
-          break;
-      } // end switch
+      // only run update once per $rev_id
+      if ($depency['type'] != 'script') {
+
+        $this->update($depency['id'], $dynamic_num);
+        break;
+      }
     } // end while depency
 
     return true;
@@ -418,10 +410,10 @@
    * cache files
    *
    * @param int data_id data to be cached, if nothing is set, everything will be cached
-   * @param bool depencies if set to true, it'll be cached recursivly
-   * @access private
-   */
-  private function cacheFiles( $data_id = null, $depencies = true )
+   * @param bool recursive if set to true, it'll be cached recursivly
+   * @access private
+   */
+  private function cacheFiles( $data_id = null, $recursive = true )
   {
     // set dir to generate contents
     static $backup;
@@ -443,7 +435,7 @@
     $stmt->execute();
 
     // prepare for usage in loop
-      $stmt_more=&DBConnection::getInstance()->prepare("SELECT w.child_id, d.type, d.name FROM ".ROSCMST_DEPENCIES." w JOIN ".ROSCMST_ENTRIES." d ON w.child_id=d.id WHERE w.rev_id=:rev_id AND w.include IS TRUE AND d.type != 'script'");
+      $stmt_more=&DBConnection::getInstance()->prepare("SELECT w.child_id, d.type, d.name FROM ".ROSCMST_DEPENCIES." w JOIN ".ROSCMST_ENTRIES." d ON w.child_id=d.id WHERE w.rev_id=:rev_id AND w.include IS TRUE");
 
     while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
 
@@ -475,7 +467,7 @@
         $content = preg_replace_callback('/\[#link_([^][#[:space:]]+)\]/', array($this, 'replaceWithHyperlink'), $content);
 
         // do we care about depencies ?
-        if ($depencies) {
+        if ($recursive) {
 
         // process depencies first
           $stmt_more->bindParam('rev_id',$revision['id'],PDO::PARAM_INT);
@@ -490,7 +482,7 @@
             }
 
             // replace
-            $content = '~'.$this->lang_id.'~'.str_replace('[#'.$this->short[$depency['type']].'_'.$depency['name'].']', $this->getCached(array(null, $this->short[$depency['type']].'_'.$depency['name'])), $content);
+            $content = str_replace('[#'.$this->short[$depency['type']].'_'.$depency['name'].']', $this->getCached(array(null, $this->short[$depency['type']].'_'.$depency['name'])), $content);
           }
         }
         $this->writeFile($data['lang_id'],$filename, $content);
@@ -522,14 +514,14 @@
 
     // take care of dynamic number independent entries
     if ($this->dynamic_num === false) {
-      $content = str_replace('[#roscms_filename]', $this->page_name.'.html', $content); 
+      $content = str_replace('[#roscms_filename]', $this->page_name.'.'.Tag::getValue($this->rev_id,'extension',-1), $content); 
       $content = str_replace('[#roscms_pagename]', $this->page_name, $content); 
       $content = str_replace('[#roscms_pagetitle]', Revision::getSText($this->rev_id, 'title'), $content); 
     }
 
     // replace roscms constants dependent from dynamic number
     else {
-      $content = str_replace('[#roscms_filename]', $this->page_name.'_'.$this->dynamic_num.'.html', $content);
+      $content = str_replace('[#roscms_filename]', $this->page_name.'_'.$this->dynamic_num.'.'.Tag::getValue($this->rev_id,'extension',-1), $content);
       $content = str_replace('[#roscms_pagename]', $this->page_name.'_'.$this->dynamic_num, $content); 
       $content = str_replace('[#roscms_pagetitle]', Revision::getSText($this->rev_id, 'title').' #'.$this->dynamic_num, $content); 
     }
@@ -545,6 +537,9 @@
     $content = str_replace('[#roscms_language_short]', $lang['name_short'], $content); 
     $content = str_replace('[#roscms_language_id]', $this->lang_id, $content);
 
+    // eat comments
+    $content = preg_replace('/\[#\*.*\*\]/siU', '', $content);
+
     return $content;
   } // end of member function replaceRoscmsPlaceholder
 
@@ -598,7 +593,7 @@
   private function getFrom( $type, $name )
   {
     // get entry
-    $stmt=&DBConnection::getInstance()->prepare("SELECT t.content, r.id, r.lang_id FROM ".ROSCMST_ENTRIES." d JOIN ".ROSCMST_REVISIONS." r ON r.data_id = d.id JOIN ".ROSCMST_TEXT." t ON t.rev_id = r.id WHERE d.name = :name AND d.type = :type AND r.version > 0 AND r.lang_id = :lang_id AND r.archive IS FALSE AND t.name = 'content' AND status='stable' LIMIT 1");
+    $stmt=&DBConnection::getInstance()->prepare("SELECT t.content, r.id, r.lang_id FROM ".ROSCMST_ENTRIES." d JOIN ".ROSCMST_REVISIONS." r ON r.data_id = d.id JOIN ".ROSCMST_TEXT." t ON t.rev_id = r.id WHERE d.name = :name AND d.type = :type AND r.lang_id = :lang_id AND r.archive IS FALSE AND t.name = 'content' AND status='stable' LIMIT 1");
     $stmt->bindParam('name',$name,PDO::PARAM_STR);
     $stmt->bindParam('type',$type,PDO::PARAM_STR);
     $stmt->bindParam('lang_id',$this->lang_id,PDO::PARAM_INT);
@@ -610,10 +605,6 @@
       $stmt->bindParam('lang_id',Language::getStandardId(),PDO::PARAM_INT);
       $stmt->execute();
       $revision=$stmt->fetch(PDO::FETCH_ASSOC);
-      
-      if ($revision === false) {
-        return false;
-      }
     }
     return $revision;
   }

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/om/Revision.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/om/Revision.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/om/Revision.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/om/Revision.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -160,6 +160,12 @@
     // delete Depencies
     $success = Depencies::removeRevision($rev_id);
 
+    // get data id (check later if we can delete this)
+    $stmt=&DBConnection::getInstance()->prepare("SELECT data_id FROM ".ROSCMST_REVISIONS." WHERE id = :rev_id ");
+    $stmt->bindParam('rev_id',$rev_id,PDO::PARAM_INT);
+    $stmt->execute();
+    $data_id=$stmt->fetchColumn();
+
     // delete revision and texts
     $stmt=&DBConnection::getInstance()->prepare("DELETE FROM ".ROSCMST_REVISIONS." WHERE id = :rev_id LIMIT 1");
     $stmt->bindParam('rev_id',$rev_id,PDO::PARAM_INT);
@@ -177,6 +183,9 @@
     $stmt=&DBConnection::getInstance()->prepare("DELETE FROM ".ROSCMST_TAGS." WHERE rev_id = :rev_id LIMIT 1");
     $stmt->bindParam('rev_id',$rev_id);
     $success = $success && $stmt->execute();
+
+    // if the revision was the last one with this data id, delete the data also
+    Entry::delete($data_id);
 
     // report if everything went right
     return $success;
@@ -454,7 +463,7 @@
     $stmt->execute();
 
     // copy data tags and update status
-    Tag::copyFromRevision($revision['id'], $new_rev_id);
+    Tag::mergeFromRevision($revision['id'], $new_rev_id);
 
     // add original translator / translation date
     if (Tag::getValue($revision['id'],'pub_user',-1) != '') {

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/om/Tag.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/om/Tag.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/om/Tag.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/om/Tag.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -175,7 +175,7 @@
    * @return bool
    * @access public
    */
-  public static function copyFromRevision( $old_rev_id, $new_rev_id )
+  public static function mergeFromRevision( $old_rev_id, $new_rev_id )
   {
     // prepare insert for usage in loop
       $stmt_ins=&DBConnection::getInstance()->prepare("INSERT INTO ".ROSCMST_TAGS." ( id , rev_id , name , value , user_id ) VALUES (NULL, :rev_id, :tag_name, :tag_value, :user_id)");

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/view/HTML_CMS_Help.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/view/HTML_CMS_Help.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/view/HTML_CMS_Help.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/view/HTML_CMS_Help.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -63,7 +63,7 @@
       <div id="roscms_container">
         <div class="leftMenu" style="position: absolute; top: 0px; width: 150px; left: 0px; z-index:1;">
 
-          <div id="lmInfo" class="lmItemTop" onclick="loadInfo()" style="background-color: #C9DAF8; font-weight: bold;">
+          <div id="lmInfo" class="lmItemTopSelected" onclick="loadInfo()">
             <div class="lmItemBottom">Info</div>
           </div>
           <div id="lmFirst" class="lmItemTop" onclick="loadFirstSteps()">

Modified: branches/danny-web/reactos.org/htdocs/roscms/lib/view/HTML_CMS_Website.class.php
URL: http://svn.reactos.org/svn/reactos/branches/danny-web/reactos.org/htdocs/roscms/lib/view/HTML_CMS_Website.class.php?rev=39780&r1=39779&r2=39780&view=diff
==============================================================================
--- branches/danny-web/reactos.org/htdocs/roscms/lib/view/HTML_CMS_Website.class.php [iso-8859-1] (original)
+++ branches/danny-web/reactos.org/htdocs/roscms/lib/view/HTML_CMS_Website.class.php [iso-8859-1] Fri Feb 27 02:41:36 2009
@@ -231,7 +231,7 @@
         $stmt=&DBConnection::getInstance()->prepare("SELECT id, name FROM ".ROSCMST_LANGUAGES." WHERE level > 0 ORDER BY name ASC");
       }
       else {
-        $stmt=&DBConnection::getInstance()->prepare("SELECT id, name FROM ".ROSCMST_LANGUAGES." WHERE id IN(:lang_id,:standard_lang)");
+        $stmt=&DBConnection::getInstance()->prepare("SELECT id, name FROM ".ROSCMST_LANGUAGES." WHERE id IN(:lang_id,:standard_lang) ORDER BY name ASC");
         $stmt->bindParam('lang_id',$thisuser->language(),PDO::PARAM_INT);
         $stmt->bindParam('standard_lang',Language::getStandardId(),PDO::PARAM_INT);
       }



More information about the Ros-diffs mailing list