2 flavors for displaying customizable operations in comment/article lists added:
authorzapata <zapata>
Sat, 14 Dec 2002 22:38:52 +0000 (22:38 +0000)
committerzapata <zapata>
Sat, 14 Dec 2002 22:38:52 +0000 (22:38 +0000)
  with checkboxes and with drop-down lists

bundles/admin_de.properties
bundles/admin_en.properties
bundles/admin_es.properties
etc/config.properties-dist
source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java
source/mircoders/servlet/ServletModuleLocalizer.java
templates/admin/commentlist.template
templates/admin/contentlist.template

index d8ab36f..4ea50be 100755 (executable)
@@ -1,6 +1,6 @@
 ########## admin ##########
 # language: deutsch / german
-# $Id: admin_de.properties,v 1.21 2002/12/14 15:55:23 zapata Exp $
+# $Id: admin_de.properties,v 1.22 2002/12/14 22:39:07 zapata Exp $
 
 # general
 yes=ja
@@ -148,6 +148,7 @@ content.published=publiziert
 content.comments=Ergänzungen
 
 contentlist.htmltitle=contentlist
+contentlist.comments=Kommentaren
 
 # language
 language.htmltitle=languages
index ecf1b36..ce25e2c 100755 (executable)
@@ -1,6 +1,6 @@
 ########## admin ##########
 # language: english
-# $Id: admin_en.properties,v 1.29 2002/12/14 15:55:23 zapata Exp $
+# $Id: admin_en.properties,v 1.30 2002/12/14 22:39:07 zapata Exp $
 
 # general
 yes=yes
@@ -153,6 +153,7 @@ content.comments=Comments
 
 
 contentlist.htmltitle=Articles
+contentlist.comments=comments
 
 # language
 language.htmltitle=Language
index 4176ace..4772001 100755 (executable)
@@ -1,6 +1,6 @@
 ########## admin ##########
 # language: espanol / spanish
-# $Id: admin_es.properties,v 1.13 2002/12/14 15:55:23 zapata Exp $
+# $Id: admin_es.properties,v 1.14 2002/12/14 22:39:07 zapata Exp $
 
 # general
 yes=sĂ­
@@ -142,6 +142,8 @@ content.published=publicado
 content.comments=Comentarios
 
 contentlist.htmltitle=lista de contenidos
+contentlist.comments=comentarios
+
 
 # language
 language.htmltitle=idiomas
index df4cbd1..bc79d06 100755 (executable)
@@ -67,6 +67,11 @@ Mir.Localizer.Producer.GeneratorLibrary= default=freemarker(etc/producer/)
 Mir.Localizer.Admin.GeneratorLibrary= default=freemarker(templates/admin/)
 Mir.Localizer.OpenPosting.GeneratorLibrary= default=freemarker(etc/open/)
 
+# How should the custom operations (hide etc) in article and comment lists
+# be presented?
+# 0 = links, 1 = checkboxes, 2 = a listbox
+Mir.Localizer.Admin.ListOperationsFlavor=1
+
 # Which producers need to be called after an article (resp. a comment) is posted
 Mir.Localizer.OpenPosting.ContentProducers= media.new;articles.changed;startpage.generate;synchronization.run
 Mir.Localizer.OpenPosting.CommentProducers= articles.changed;synchronization.run
index ad90902..ac79c54 100755 (executable)
@@ -65,6 +65,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       anEntityAdapterDefinition.addCalculatedField("language", new ContentToLanguageField());\r
 \r
       anEntityAdapterDefinition.addCalculatedField("commentcount", new ContentCommentCountField(" and is_published='1'"));\r
+      anEntityAdapterDefinition.addCalculatedField("fullcommentcount", new ContentCommentCountField(""));\r
 \r
       anEntityAdapterDefinition.addCalculatedField("to_media_images",  new ContentToMediaField( "image" ));\r
       anEntityAdapterDefinition.addCalculatedField("to_uploaded_media", new ContentToMediaField( "uploadedMedia" ));\r
index c1b7d69..e316a14 100755 (executable)
-/*
- * Copyright (C) 2001, 2002  The Mir-coders group
- *
- * This file is part of Mir.
- *
- * Mir is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Mir is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Mir; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with the com.oreilly.servlet library, any library
- * licensed under the Apache Software License, The Sun (tm) Java Advanced
- * Imaging library (JAI), The Sun JIMI library (or with modified versions of
- * the above that use the same license as the above), and distribute linked
- * combinations including the two.  You must obey the GNU General Public
- * License in all respects for all of the code used other than the above
- * mentioned libraries.  If you modify this file, you may extend this exception
- * to your version of the file, but you are not obligated to do so.  If you do
- * not wish to do so, delete this exception statement from your version.
- */
-
-package mircoders.servlet;
-
-import java.util.*;
-
-import javax.servlet.*;
-import javax.servlet.http.*;
-
-import mir.servlet.*;
-import mir.entity.adapter.*;
-import mir.log.*;
-
-import mircoders.global.*;
-import mircoders.localizer.*;
-import mircoders.storage.*;
-import mircoders.entity.*;
-import mircoders.module.*;
-
-public class ServletModuleLocalizer extends ServletModule {
-  private static ServletModuleLocalizer instance = new ServletModuleLocalizer();
-  public static ServletModule getInstance() { return instance; }
-
-  private ModuleContent contentModule;
-  private ModuleComment commentModule;
-
-  private ServletModuleLocalizer() {
-    try {
-      contentModule = new ModuleContent(DatabaseContent.getInstance());
-      commentModule = new ModuleComment(DatabaseComment.getInstance());
-
-      logger = new LoggerWrapper("ServletModule.Localizer");
-    }
-    catch (Exception e) {
-      logger.error("ServletModuleLocalizer could not be initialized: " + e.getMessage());
-    }
-  }
-
-  public void commentoperation(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {
-    String idString = aRequest.getParameter("id");
-    String operationString = aRequest.getParameter("operation");
-    String returnUrlString = aRequest.getParameter("returnurl");
-
-    MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation;
-    EntityAdapter comment;
-    EntityComment entity;
-
-    try {
-      entity = (EntityComment) commentModule.getById(idString);
-
-      if (entity!=null) {
-        comment = MirGlobal.localizer().dataModel().adapterModel().makeEntityAdapter("comment", entity);
-        operation = MirGlobal.localizer().adminInterface().simpleCommentOperationForName(operationString);
-        operation.perform(comment);
-      }
-
-      redirect(aResponse, returnUrlString);
-    }
-    catch (Throwable e) {
-      e.printStackTrace(System.out);
-      throw new ServletModuleException(e.getMessage());
-    }
-  }
-
-  public void articleoperation(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {
-    String articleIdString = aRequest.getParameter("articleid");
-    String operationString = aRequest.getParameter("operation");
-    String returnUrlString = aRequest.getParameter("returnurl");
-
-    MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation;
-    EntityAdapter article;
-    EntityContent entity;
-
-    try {
-      entity = (EntityContent) contentModule.getById(articleIdString);
-
-      if (entity!=null) {
-        article = MirGlobal.localizer().dataModel().adapterModel().makeEntityAdapter("content", entity);
-        operation = MirGlobal.localizer().adminInterface().simpleArticleOperationForName(operationString);
-        operation.perform(article);
-      }
-
-      redirect(aResponse, returnUrlString);
-    }
-    catch (Throwable e) {
-      e.printStackTrace(System.out);
-      throw new ServletModuleException(e.getMessage());
-    }
-  }
-
-  public void batchedarticleoperation(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {
-    String articleIdString = aRequest.getParameter("articleid");
-    String operationString = aRequest.getParameter("operation");
-    String returnUrlString = aRequest.getParameter("returnurl");
-
-    MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation;
-    EntityAdapter article;
-    EntityContent entity;
-
-    try {
-      entity = (EntityContent) contentModule.getById(articleIdString);
-
-      if (entity!=null) {
-        article = MirGlobal.localizer().dataModel().adapterModel().makeEntityAdapter("content", entity);
-        operation = MirGlobal.localizer().adminInterface().simpleArticleOperationForName(operationString);
-        operation.perform(article);
-      }
-
-      redirect(aResponse, returnUrlString);
-    }
-    catch (Throwable e) {
-      e.printStackTrace(System.out);
-      throw new ServletModuleException(e.getMessage());
-    }
-  }
-
+/*\r
+ * Copyright (C) 2001, 2002  The Mir-coders group\r
+ *\r
+ * This file is part of Mir.\r
+ *\r
+ * Mir is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * Mir is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Mir; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+ *\r
+ * In addition, as a special exception, The Mir-coders gives permission to link\r
+ * the code of this program with the com.oreilly.servlet library, any library\r
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced\r
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of\r
+ * the above that use the same license as the above), and distribute linked\r
+ * combinations including the two.  You must obey the GNU General Public\r
+ * License in all respects for all of the code used other than the above\r
+ * mentioned libraries.  If you modify this file, you may extend this exception\r
+ * to your version of the file, but you are not obligated to do so.  If you do\r
+ * not wish to do so, delete this exception statement from your version.\r
+ */\r
+\r
+package mircoders.servlet;\r
+\r
+import java.util.*;\r
+\r
+import javax.servlet.*;\r
+import javax.servlet.http.*;\r
+\r
+import mir.servlet.*;\r
+import mir.entity.adapter.*;\r
+import mir.log.*;\r
+import mir.util.*;\r
+\r
+import mircoders.global.*;\r
+import mircoders.localizer.*;\r
+import mircoders.storage.*;\r
+import mircoders.entity.*;\r
+import mircoders.module.*;\r
+\r
+public class ServletModuleLocalizer extends ServletModule {\r
+  private static ServletModuleLocalizer instance = new ServletModuleLocalizer();\r
+  public static ServletModule getInstance() { return instance; }\r
+\r
+  private ModuleContent contentModule;\r
+  private ModuleComment commentModule;\r
+\r
+  private ServletModuleLocalizer() {\r
+    try {\r
+      contentModule = new ModuleContent(DatabaseContent.getInstance());\r
+      commentModule = new ModuleComment(DatabaseComment.getInstance());\r
+\r
+      logger = new LoggerWrapper("ServletModule.Localizer");\r
+    }\r
+    catch (Exception e) {\r
+      logger.error("ServletModuleLocalizer could not be initialized: " + e.getMessage());\r
+    }\r
+  }\r
+\r
+  public void performCommentOperation(String anId, String anOperation) {\r
+    MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation;\r
+    EntityAdapter comment;\r
+    EntityComment entity;\r
+\r
+    try {\r
+      entity = (EntityComment) commentModule.getById(anId);\r
+\r
+      if (entity != null) {\r
+        comment = MirGlobal.localizer().dataModel().adapterModel().makeEntityAdapter("comment", entity);\r
+        operation = MirGlobal.localizer().adminInterface().simpleCommentOperationForName(anOperation);\r
+        operation.perform(comment);\r
+        logger.info("Operation " + anOperation + " successfully performed on comment " + anId);\r
+      }\r
+      logger.error("Error while performing " + anOperation + " on comment " + anId + ": comment is null");\r
+    }\r
+    catch (Throwable e) {\r
+      logger.error("Error while performing " + anOperation + " on comment " + anId + ": " + e.getMessage());\r
+    }\r
+  }\r
+\r
+  public void commentoperation(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {\r
+    String commentIdString = aRequest.getParameter("id");\r
+    String operationString = aRequest.getParameter("operation");\r
+    String returnUrlString = aRequest.getParameter("returnurl");\r
+\r
+    performCommentOperation(commentIdString, operationString);\r
+\r
+    redirect(aResponse, returnUrlString);\r
+  }\r
+\r
+  public void commentoperationbatch(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {\r
+    String returnUrlString = aRequest.getParameter("returnurl");\r
+\r
+    String[] operations = aRequest.getParameterValues("operation");\r
+\r
+    for (int i=0; i<operations.length; i++) {\r
+      if (operations[i].length()>0) {\r
+        List parts = StringRoutines.splitString(operations[i], ";");\r
+\r
+        if (parts.size() != 2) {\r
+          logger.error("commentoperationbatch: operation string invalid: " +\r
+                       operations[i]);\r
+        }\r
+        else {\r
+          String commentIdString = (String) parts.get(0);\r
+          String operationString = (String) parts.get(1);\r
+\r
+          performCommentOperation(commentIdString, operationString);\r
+        }\r
+      }\r
+    }\r
+\r
+    redirect(aResponse, returnUrlString);\r
+  }\r
+\r
+  public void performArticleOperation(String anId, String anOperation) {\r
+    MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation;\r
+    EntityAdapter article;\r
+    EntityContent entity;\r
+\r
+    try {\r
+      entity = (EntityContent) contentModule.getById(anId);\r
+\r
+      if (entity != null) {\r
+        article = MirGlobal.localizer().dataModel().adapterModel().\r
+            makeEntityAdapter("content", entity);\r
+        operation = MirGlobal.localizer().adminInterface().\r
+            simpleArticleOperationForName(anOperation);\r
+        operation.perform(article);\r
+        logger.info("Operation " + anOperation + " successfully performed on article " + anId);\r
+      }\r
+      logger.error("Error while performing " + anOperation + " on article " + anId + ": article is null");\r
+    }\r
+    catch (Throwable e) {\r
+      logger.error("Error while performing " + anOperation + " on article " + anId + ": " + e.getMessage());\r
+    }\r
+  }\r
+\r
+  public void articleoperation(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {\r
+    String articleIdString = aRequest.getParameter("articleid");\r
+    String operationString = aRequest.getParameter("operation");\r
+    String returnUrlString = aRequest.getParameter("returnurl");\r
+\r
+    performArticleOperation(articleIdString, operationString);\r
+    redirect(aResponse, returnUrlString);\r
+  }\r
+\r
+  public void articleoperationbatch(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {\r
+    String returnUrlString = aRequest.getParameter("returnurl");\r
+\r
+    String[] operations = aRequest.getParameterValues("operation");\r
+\r
+    for (int i=0; i<operations.length; i++) {\r
+      if (operations[i].length()>0) {\r
+        List parts = StringRoutines.splitString(operations[i], ";");\r
+\r
+        if (parts.size() != 2) {\r
+          logger.error("articleoperationbatch: operation string invalid: " +\r
+                       operations[i]);\r
+        }\r
+        else {\r
+          String articleIdString = (String) parts.get(0);\r
+          String operationString = (String) parts.get(1);\r
+\r
+          performArticleOperation(articleIdString, operationString);\r
+        }\r
+      }\r
+    }\r
+\r
+    redirect(aResponse, returnUrlString);\r
+  }\r
+\r
 }
\ No newline at end of file
index cd1f62d..8238f08 100755 (executable)
     </tr>
   </table>
 </form>
-<table border="0" cellpadding="2" cellspacing="1">  
-  <if comments>
-    <tr><td>
-      <if prevurl>
-        <a href="${config.actionRoot}?${prevurl}">${lang("list.previous")}</a>&nbsp;
-      </if>
-      <if nexturl>
-        <a href="${config.actionRoot}?${nexturl}">${lang("list.next")}</a>&nbsp;
-      </if>
-    </td></tr>
-  </if>
-  <tr class="pink">
-       <td><p class="head">${lang("comment.date")}</p></td>
-               <td><p class="head">${lang("comment.title")}/ ${lang("comment.creator")}<br>
-                                       ${lang("comment.text")}</p></td>
-  </tr>
 
-  <if comments>
-    <list comments as entry>
-      <tr <if grey=="1"><assign grey="0">class="list1"<else><assign grey="1">class="list2"</if>>
-    
-               <td>${entry.creationdate.formatted["dd.mm.yyyy"]}<br>
-         <if entry.is_published=="0"><span class="spezialtext">hidden</span><else>-</if>
-               </td>
+<if comments>
+ <if config["Mir.Localizer.Admin.ListOperationsFlavor"]!="0">
+  <form method="post" action="${config.actionRoot}">
+    <input type="hidden" name="module" value="Localizer">
+    <input type="hidden" name="do" value="commentoperationbatch">
+    <input type="hidden" name="returnurl" value="${utility.encodeHTML(thisurl)}">
+
+    <p>
+      <input class="majorbutton" type="submit" name="save" value="${lang("save")}">
+    </p>
+ </if>    
+
+    <table border="0" cellpadding="2" cellspacing="1">  
+      <if comments>
+        <tr><td>
+          <if prevurl>
+            <a href="${config.actionRoot}?${prevurl}">${lang("list.previous")}</a>&nbsp;
+          </if>
+          <if nexturl>
+            <a href="${config.actionRoot}?${nexturl}">${lang("list.next")}</a>&nbsp;
+          </if>
+        </td></tr>
+      </if>
+      <tr class="pink">
+       <td><p class="head">${lang("comment.date")}</p></td>
+               <td><p class="head">${lang("comment.title")}/ ${lang("comment.creator")}<br>
+                                       ${lang("comment.text")}</p></td>
+      </tr>
     
-        <td>
-          <span class="small">
-            ${lang("comment.article")}
-            <a href="${config.actionRoot}?module=Content&do=edit&id=${entry.to_content.id}">
-              ${utility.encodeHTML(entry.to_content.title)}
-            </a>
-            <br>
-              <a name="${entry.id}"></a>
-              <span class="x-small">
-                <if entry.status>${lang("commentstatus." + entry.status.name)} - </if> 
+        <list comments as entry>
+          <tr <if grey=="1"><assign grey="0">class="list1"<else><assign grey="1">class="list2"</if>>
+        
+                       <td>${entry.creationdate.formatted["dd.mm.yyyy"]}<br>
+                 <if entry.is_published=="0"><span class="spezialtext">hidden</span><else>-</if>
+                       </td>
+        
+            <td>
+              <span class="small">
+                ${lang("comment.article")}
+                <a href="${config.actionRoot}?module=Content&do=edit&id=${entry.to_content.id}">
+                  ${utility.encodeHTML(entry.to_content.title)}
+                </a>
+                <br>
+                  <a name="${entry.id}"></a>
+                  <span class="x-small">
+                    <if entry.status>${lang("commentstatus." + entry.status.name)} - </if> 
+                  </span>
+                    <b>${entry.title}</b><br>
+      
+                <if entry.creator>${lang("comment.creator")}: ${entry.creator}<br></if>
+                <span class="small">${entry.description}</span>
+                <if entry.main_url><br>URL: ${entry.main_url}</if>
+                <br>
+                <if config["Mir.Localizer.Admin.ListOperationsFlavor"]=="0">
+                                     <list entry.operations as op>
+                               [<a href="${config.actionRoot}?module=Localizer&do=commentoperation&operation=${op}&id=${entry.id}&returnurl=${utility.encodeURI(thisurl + "#" + entry.id)}">${op}</a>]
+                             </list>
+                           </if>
+                <if config["Mir.Localizer.Admin.ListOperationsFlavor"]=="1">
+                                     <list entry.operations as op>
+                                   [<input type="checkbox" name="operation" value="${entry.id};${op}">${op}]
+                             </list>
+                           </if>
+                <if config["Mir.Localizer.Admin.ListOperationsFlavor"]=="2">
+                     <select name="operation">
+                    <option value="" selected>&nbsp;</option>
+                                       <list entry.operations as op>
+                      <option value="${entry.id};${op}">${op}</option>
+                               </list>
+                  </select>
+                           </if>
+                <if entry.operations>|</if>
+                <a href="${config.actionRoot}?module=Comment&do=edit&id=${entry.id}">${lang("edit")}</a>                
+                         </span>
+            </td>
+      
+            <td>
+              <span class="text">&nbsp;
+                <a href="${config.actionRoot}?module=Comment&do=delete&id=${entry.id}">${lang("delete")}</a>
               </span>
-                <b>${entry.title}</b><br>
-  
-            <if entry.creator>${lang("comment.creator")}: ${entry.creator}<br></if>
-            <span class="small">${entry.description}</span>
-            <if entry.main_url><br>URL: ${entry.main_url}</if>
-            <br><a href="${config.actionRoot}?module=Comment&do=edit&id=${entry.id}">${lang("edit")}</a>
-            <if entry.operations>|</if>
-            
-                           <list entry.operations as op>
-                             [<a href="${config.actionRoot}?module=Localizer&do=commentoperation&operation=${op}&id=${entry.id}&returnurl=${utility.encodeURI(thisurl + "#" + entry.id)}">${op}</a>]
-                           </list>
-                         </span>
-        </td>
-  
-        <td>
-          <span class="text">&nbsp;
-            <a href="${config.actionRoot}?module=Comment&do=delete&id=${entry.id}">${lang("delete")}</a>
-          </span>
-        </td>
-    
-       </tr>
-    </list>
+            </td>
+        
+               </tr>
+        </list>
+      
+        <tr class="pink">
+          <td colspan="3">${count} ${lang("records")} / ${lang("show_from_to", from, to)}</span></td>
+        </tr>
+        <tr><td>
+          <if prevurl>
+            <a href="${config.actionRoot}?${prevurl}">${lang("list.previous")}</a>&nbsp;
+          </if>
+          <if nexturl>
+            <a href="${config.actionRoot}?${nexturl}">${lang("list.next")}</a>&nbsp;
+          </if>
+        </td></tr>
+    </table>
+
+  <if config["Mir.Localizer.Admin.ListOperationsFlavor"]!="0">
+      <p>
+        <input class="majorbutton" type="submit" name="save" value="${lang("save")}">
+      </p>
+    </form>    
+  </if>  
   
-    <tr class="pink">
-      <td colspan="3">${count} ${lang("records")} / ${lang("show_from_to", from, to)}</span></td>
-    </tr>
-    <tr><td>
-      <if prevurl>
-        <a href="${config.actionRoot}?${prevurl}">${lang("list.previous")}</a>&nbsp;
-      </if>
-      <if nexturl>
-        <a href="${config.actionRoot}?${nexturl}">${lang("list.next")}</a>&nbsp;
-      </if>
-    </td></tr>
-    <else>
-      <tr><td align="center">${lang("no_matches_found")}</td></tr>
-    </if>
-</table>
+<else>
+  <P align="center">${lang("no_matches_found")}</p>
+</if>
 
 <include "foot.template">
 
index acc7d0f..dc73221 100755 (executable)
@@ -8,60 +8,98 @@
 
 <include "head.template">
 <if articles>
-       <table border="0" width="100%" cellspacing="0" cellpadding="2">
-         <tr class="darkgrey">
-           <td><span class="witesmall">
-                       ${lang("content.creationdate")}<br>
-                       ${lang("content.modificationdate")}<br>
-                       ${lang("content.status")}</span></td>
-           <td><span class="witesmall">
-        ${lang("content.type")} - ${lang("content.title")} <br>
-                         ${lang("content.creator")}</span></td>
-           <td width="25%"><span class="witesmall">
-                       ${lang("content.comment")}</span></td>
-               <td class="darkgrey">&nbsp;</td>
-         </tr>
-         <assign grey="0">
 
-       <list articles as entry>
-         <tr <if grey=="1"><assign grey="0">class="list1"<else>class="list2"<assign grey="1"></if>>
-           <td>
-             <span class="x-small">
-               ${entry.creationdate.formatted["dd.MM.yyyy hh:mm"]}<br>
-               ${entry.changedate.formatted["dd.MM.yyyy hh:mm"]}<br>
-                           <if entry.is_published!="0">F<else>-</if><if entry.is_html!="0">H<else>-</if>
-                         </span>
-                       </td>
-           <td>
-             <span class="small">
-               <b>
-               <span class="x-small">
-            ${lang("articletypes." + entry.article_type.name)} -
-                           </span>
-               ${entry.title}
-                           </b><br>
-                           ${entry.creator}&nbsp;
-                           <a href="${config.actionRoot}?module=Content&do=edit&id=${entry.id}&returnurl=${utility.encodeURI(thisurl)}">${lang("edit")}</a>
-                           |
-                           <list entry.operations as op>
-                             [<a href="${config.actionRoot}?module=Localizer&do=articleoperation&operation=${op}&articleid=${entry.id}&returnurl=${utility.encodeURI(thisurl)}">${op}</a>]
-                           </list>
-                         </span>
-                       </td>
-           <td width="20%" <if grey=="1">class="list3"<else>class="list4"</if> valign="top"><span class="x-small">
+<if config["Mir.Localizer.Admin.ListOperationsFlavor"]!="0">
+  <form method="post" action="${config.actionRoot}">
+    <input type="hidden" name="module" value="Localizer">
+    <input type="hidden" name="do" value="articleoperationbatch">
+    <input type="hidden" name="returnurl" value="${utility.encodeHTML(thisurl)}">
 
-      ${entry.comment}&nbsp;</span></td>
-      <td class0"litegrey">
-        <span class="text">
-          <a href="${config.actionRoot}?module=Content&do=delete&id=${entry.id}&where=${utility.encodeURI(where)}&order=${utility.encodeURI(order)}&offset=${utility.encodeURI(offset)}">${lang("delete")}</a>
-             </span>
-      </td>
-    </tr>
-       </list>
-       <tr class="darkgrey">
-           <td colspan="4"><span class="witesmall">${count} ${lang("records")}
-      / ${lang("show_from_to", from, to)}</span></td></tr>
-       </table>
+    <p>
+      <input class="majorbutton" type="submit" name="save" value="${lang("save")}">
+    </p>
+</if>    
+
+       <table border="0" width="100%" cellspacing="0" cellpadding="2">
+         <tr class="darkgrey">
+           <td><span class="witesmall">
+                       ${lang("content.creationdate")}<br>
+                       ${lang("content.modificationdate")}<br>
+                       ${lang("content.status")}</span></td>
+           <td><span class="witesmall">
+          ${lang("content.type")} - ${lang("content.title")} <br>
+                         ${lang("content.creator")}</span></td>
+           <td width="25%"><span class="witesmall">
+                       ${lang("content.comment")}</span></td>
+               <td class="darkgrey">&nbsp;</td>
+         </tr>
+         <assign grey="0">
+  
+       <list articles as entry>
+         <tr <if grey=="1"><assign grey="0">class="list1"<else>class="list2"<assign grey="1"></if>>
+           <td>
+             <span class="x-small">
+               ${entry.creationdate.formatted["dd.MM.yyyy hh:mm"]}<br>
+               ${entry.changedate.formatted["dd.MM.yyyy hh:mm"]}<br>
+                           <if entry.is_published!="0">F<else>-</if><if entry.is_html!="0">H<else>-</if>
+                         </span>
+                       </td>
+           <td>
+             <span class="small">
+               <b>
+               <span class="x-small">
+              ${lang("articletypes." + entry.article_type.name)} -
+                           </span>
+               ${entry.title}
+                           </b><br>
+                           ${entry.creator}<br>
+
+            <if config["Mir.Localizer.Admin.ListOperationsFlavor"]=="0">
+                             <list entry.operations as op>
+                               [<a href="${config.actionRoot}?module=Localizer&do=articleoperation&operation=${op}&articleid=${entry.id}&returnurl=${utility.encodeURI(thisurl)}">${op}</a>]
+                             </list>
+                           </if>
+            <if config["Mir.Localizer.Admin.ListOperationsFlavor"]=="1">
+                             <list entry.operations as op>
+                               [<input type="checkbox" name="operation" value="${entry.id};${op}">${op}]
+                             </list>
+                           </if>
+            <if config["Mir.Localizer.Admin.ListOperationsFlavor"]=="2">
+              <select name="operation">
+                <option value="" selected>&nbsp;</option>
+                               <list entry.operations as op>
+                  <option value="${entry.id};${op}">${op}</option>
+                               </list>
+              </select>
+                           </if>
+                           <if entry.operations>
+                             |
+                           </if>
+                           <a href="${config.actionRoot}?module=Content&do=edit&id=${entry.id}&returnurl=${utility.encodeURI(thisurl)}">${lang("edit")}</a>
+            <a href="${config.actionRoot}?module=Comment&do=articlecomments&articleid=${entry.id}">${lang("contentlist.comments")}</a>
+                         </span>
+                       </td>
+           <td width="20%" <if grey=="1">class="list3"<else>class="list4"</if> valign="top"><span class="x-small">
+  
+        ${entry.comment}&nbsp;</span></td>
+        <td class0"litegrey">
+          <span class="text">
+            <a href="${config.actionRoot}?module=Content&do=delete&id=${entry.id}&where=${utility.encodeURI(where)}&order=${utility.encodeURI(order)}&offset=${utility.encodeURI(offset)}">${lang("delete")}</a>
+             </span>
+        </td>
+      </tr>
+       </list>
+       <tr class="darkgrey">
+           <td colspan="4"><span class="witesmall">${count} ${lang("records")}
+        / ${lang("show_from_to", from, to)}</span></td></tr>
+       </table>
+<if config["Mir.Localizer.Admin.ListOperationsFlavor"]!="0">
+    <p>
+      <input class="majorbutton" type="submit" name="save" value="${lang("save")}">
+    </p>
+
+  </form>      
+</if>  
   <P>
   
   <if prevurl || nexturl>