Index: pykota/trunk/qa-assistant/pykota.xml
===================================================================
--- pykota/trunk/qa-assistant/pykota.xml (revision 3208)
+++ pykota/trunk/qa-assistant/pykota.xml (revision 3209)
@@ -1,3 +1,3 @@
-<?xml version='1.0' ?>
+<?xml version='1.0' encoding="UTF-8" ?>
 <!DOCTYPE checklist PUBLIC "-//BadgerWare//DTD QA Assistant Checklist File 0.3//EN" "http://qa-assistant.sf.net/dtds/checklist/0.3/checklist.dtd">
 <checklist version="0.3" name="PyKota Installation" revision="0.1">
@@ -48,5 +48,5 @@
     </entry>
   </category>
-  <category name="Execute the pykota/checkdeps.py script to check for missing Dependecies">
+  <category name="Run pykota/checkdeps.py to look for missing dependencies">
     <description>PyKota depends on a lot of third party software.
       Some of them are required, other ones simply recommended : they don't
@@ -54,9 +54,30 @@
       be unavailable to you if they are not installed.
     </description>  
+    <entry name="python-egenix-mxdatetime" display="true">
+      <states>
+        <state name="Pass">python-egenix-mxdatetime is installed</state>
+        <state name="Fail">python-egenix-mxdatetime is not installed</state>
+      </states>
+      <description>
+        python-egenix-mxdatetime is required for PyKota to work. 
+        You must install it with 'apt-get install python-egenix-mxdatetime'
+      </description>
+    </entry>
+    <entry name="python-imaging" display="true">
+      <states>
+        <state name="Pass">python-imaging is installed</state>
+        <state name="Fail">python-imaging is not installed</state>
+      </states>
+      <description>
+        python-imaging is required for PyKota to work. While basic PyKota functionnality
+        may work without python-imaging, it is highly recommended that you install it
+        You must install it with 'apt-get install python-imaging'
+      </description>
+    </entry>
     <entry name="python-pygresql" display="true">
       <states>
         <state name="Pass">python-pygresql is installed</state>
         <state name="Fail">python-pygresql is not installed</state>
-        <state name="Not-Applicable">We don't want to use a PostgreSQL database backend for PyKota</state>
+        <state name="Not-Applicable">I don't want to use a PostgreSQL database backend for PyKota</state>
       </states>
       <description>
@@ -69,5 +90,5 @@
         <state name="Pass">python-ldap is installed</state>
         <state name="Fail">python-ldap is not installed</state>
-        <state name="Not-Applicable">We don't want to use an LDAP database backend for PyKota</state>
+        <state name="Not-Applicable">I don't want to use an LDAP database backend for PyKota</state>
       </states>
       <description>
@@ -80,5 +101,5 @@
         <state name="Pass">python-mysqldb is installed</state>
         <state name="Fail">python-mysqldb is not installed</state>
-        <state name="Not-Applicable">We don't want to use a MySQL database backend for PyKota</state>
+        <state name="Not-Applicable">I don't want to use a MySQL database backend for PyKota</state>
       </states>
       <description>
@@ -91,5 +112,5 @@
         <state name="Pass">python-pysqlite2 is installed</state>
         <state name="Fail">python-pysqlite2 is not installed</state>
-        <state name="Not-Applicable">We don't want to use an SQLite database backend for PyKota</state>
+        <state name="Not-Applicable">I don't want to use an SQLite database backend for PyKota</state>
       </states>
       <description>
@@ -98,19 +119,9 @@
       </description>
     </entry>
-    <entry name="python-egenix-mxdatetime" display="true">
-      <states>
-        <state name="Pass">python-egenix-mxdatetime is installed</state>
-        <state name="Fail">python-egenix-mxdatetime is not installed</state>
-      </states>
-      <description>
-        python-egenix-mxdatetime is required for PyKota to work. 
-        You must install it with 'apt-get install python-egenix-mxdatetime'
-      </description>
-    </entry>
     <entry name="python-osd" display="true">
       <states>
         <state name="Pass">python-osd is installed</state>
         <state name="Fail">python-osd is not installed</state>
-        <state name="Not-Applicable">We don't want to use 'pykosd', PyKota's X-Window end user print quota reminder</state>
+        <state name="Not-Applicable">I don't want to use 'pykosd', PyKota's X-Window end user print quota reminder</state>
       </states>
       <description>
@@ -124,5 +135,5 @@
         <state name="Pass">python-pysnmp4 is installed</state>
         <state name="Fail">python-pysnmp4 is not installed</state>
-        <state name="Not-Applicable">We don't want to use PyKota's internal SNMP hardware accounting</state>
+        <state name="Not-Applicable">I don't want to use PyKota's internal SNMP hardware accounting</state>
       </states>
       <description>
@@ -137,5 +148,5 @@
         <state name="Pass">python-jaxml is installed</state>
         <state name="Fail">python-jaxml is not installed</state>
-        <state name="Not-Applicable">We don't want to use PyKota's XML data dumping facilities</state>
+        <state name="Not-Applicable">I don't want to use PyKota's XML data dumping facilities</state>
       </states>
       <description>
@@ -150,5 +161,5 @@
         <state name="Pass">python-reportlab is installed</state>
         <state name="Fail">python-reportlab is not installed</state>
-        <state name="Not-Applicable">We don't want to use PyKota banners, nor its invoicing and refunding modules</state>
+        <state name="Not-Applicable">I don't want to use PyKota banners, nor its invoicing and refunding modules</state>
       </states>
       <description>
@@ -177,5 +188,5 @@
         <state name="Pass">python-pam is installed</state>
         <state name="Fail">python-pam is not installed</state>
-        <state name="Non-Blocker">We don't want to force the authentication of end users at printing time through pknotify+PyKotIcon</state>
+        <state name="Non-Blocker">I don't want to force the authentication of end users at printing time through pknotify+PyKotIcon</state>
       </states>
       <description>
@@ -187,4 +198,131 @@
       </description>
     </entry>
+    <entry name="python-pkipplib" display="true">
+      <states>
+        <state name="Pass">python-pkipplib is installed</state>
+        <state name="Fail">python-pkipplib is not installed</state>
+        <state name="Non-Blocker">PyKota v1.26 is the latest release which still falls back to another method if pkipplib is not installed</state>
+      </states>
+      <description>
+        python-pkipplib allows PyKota to dialog with CUPS directly, instead of having to parse CUPS' configuration file to learn some details.
+        Unfortunately this library is not yet available as a package, so you must download and install it manually.
+        You can download it with 'wget http://www.pykota.com/software/pkipplib/download/tarballs/pkipplib-0.07.tar.gz'
+      </description>
+    </entry>
+    <entry name="pkpgcounter" display="true">
+      <states>
+        <state name="Pass">pkpgcounter is installed</state>
+        <state name="Fail">pkpgcounter is not installed</state>
+        <state name="Non-Blocker">Only advanced PyKota administrators can make PyKota work without pkpgcounter. I am an Advanced PyKota Administrator</state>
+      </states>
+      <description>
+        pkpgcounter is PyKota's Page Description Languages parser. It really is the heart of software based
+        accounting methods in PyKota, since it is responsible for counting pages and computing ink usage.
+        While you can make PyKota work without pkpgcounter, this is not recommended excepted in the
+        situations where you've got a better or faster parser.
+        Unfortunately this software is not yet available as a package, so you must download and install it manually.
+        You can download it with 'wget http://www.pykota.com/software/pkpgcounter/download/tarballs/pkpgcounter-2.17.tar.gz'
+      </description>
+    </entry>
+    <entry name="python-psyco" display="true">
+      <states>
+        <state name="Pass">python-psyco is installed</state>
+        <state name="Fail">python-psyco is not installed</state>
+        <state name="Not-Applicable">python-psyco is not supported on this platform</state>
+      </states>
+      <description>
+        python-psyco is an accelerator module for the Python language which can make the parsing 
+        of Page Description Languages by pkpgcounter faster.
+        It is only supported on the x86 platform though, so if you use something else you
+        won't be able to install it.
+        It recommended but not necessary that you install it for PyKota to work.
+        You can install it with 'apt-get install python-psyco'
+      </description>
+    </entry>
   </category>
+  <category name="Print Server Installation procedure">
+    <description>PyKota needs to be installed on the CUPS server.
+    </description>  
+    <entry name="Go to PyKota's download directory" display="true">
+      <states>
+        <state name="Pass">Working directory is now pykota/</state>
+        <state name="Fail">Current working directory is not pykota/</state>
+      </states>
+      <description>
+        PyKota's installation script expects to be run from PyKota's download directory.
+        You've previously downloaded PyKota into the ./pykota/ directory, so
+        you can go to this directory with 'cd pykota'
+      </description>
+    </entry>
+    <entry name="Install PyKota's files" display="true">
+      <states>
+        <state name="Pass">PyKota files are installed</state>
+        <state name="Fail">PyKota's files are not installed</state>
+      </states>
+      <description>
+        PyKota's files must be installed on your system for PyKota to work.
+        Once you're in the pykota/ directory you can install them
+        with 'python setup.py install'
+      </description>
+    </entry>
+    <entry name="Create a 'pykota' system group" display="true">
+      <states>
+        <state name="Pass">The 'pykota' system group exists</state>
+        <state name="Fail">The 'pykota' system group doesn't exist</state>
+      </states>
+      <description>
+        PyKota requires a dedicated system group named 'pykota', you can create
+        it with 'addgroup --system pykota'
+      </description>
+    </entry>
+    <entry name="Create a 'pykota' system user in group 'pykota'" display="true">
+      <states>
+        <state name="Pass">The 'pykota' system user exists</state>
+        <state name="Fail">The 'pykota' system user doesn't exist</state>
+      </states>
+      <description>
+        PyKota requires a dedicated system user named 'pykota'.
+        You can create it with 'adduser --system --ingroup pykota --home /etc/pykota --gecos PyKota pykota'
+      </description>
+    </entry>
+    <entry name="Copy PyKota's sample configuration file from conf/" display="true">
+      <states>
+        <state name="Pass">pykota.conf now exists in ~pykota/</state>
+        <state name="Fail">pykota.conf doesn't exist in ~pykota/</state>
+      </states>
+      <description>
+        PyKota's main configuration file is named 'pykota.conf' and must be present in user pykota's home directory,
+        by default /etc/pykota/
+      </description>
+    </entry>
+    <entry name="Copy PyKota's sample administrative configuration file from conf/" display="true">
+      <states>
+        <state name="Pass">pykotadmin.conf now exists in ~pykota/</state>
+        <state name="Fail">pykotadmin.conf doesn't exist in ~pykota/</state>
+      </states>
+      <description>
+        PyKota's administrative configuration file is named 'pykotadmin.conf' and must be present in user pykota's home directory,
+        by default /etc/pykota/.
+        All users who can read this file have write access to PyKota's database.
+      </description>
+    </entry>
+    <entry name="Check permissions on PyKota's configuration files" display="true">
+      <states>
+        <state name="Pass">Permissions on configuration files are correct</state>
+        <state name="Fail">Permissions on configuration files are incorrect</state>
+      </states>
+      <description>
+        Any user who with read access to ~pykota/pykotadmin.conf will be considered a PyKota 
+        administrator, with full read+write access to PyKota's database.
+        Any user with read access to ~pykota/pykota.conf will have read access to PyKota's database. Access
+        is limited to this particular user's personal datas and to impersonal datas like printers
+        informations. Take extreme care when relaxing the permissions on those files.
+        In any case, the user CUPS runs as, for example 'lp' or 'cupsys', MUST be given read
+        access to both of these files for PyKota to work. Under Debian, CUPS currently runs
+        as root, following the recommandations from CUPS' authors, so it's safe to make
+        both of these files owned by user pykota:pykota and chmod 0640. You can even
+        make ~pykota/pykotadmin.conf be chmod 0600 if you want to be really secure.
+      </description>
+    </entry>
+  </category>  
 </checklist>
