;
\Hc           @   s  d  Z  d d d !Z d k l Z d k l Z d k Td k Td k Td k l	 Z	 d k
 Z
 d k Td k Td k Td k Td k Z d k Z e i d	  Z e i d
  Z h  Z x( e d  D] Z d e e e e  <q Wx? e i i   D]. \ Z Z e i e  o d e e e <q q We i d  Z d   Z d   Z  e i d  Z! d   Z" d   Z# e$ d  Z% y e d e&    Z' Wn n Xd e( e) f d     YZ* d S(   sE   
   Copyright (C) 2001-2004 PimenTech SARL (http://www.pimentech.net)

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public License as
   published by the Free Software Foundation; either version 2 of the
   License, or (at your option) any later version.

   This library 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
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with this library; see the file COPYING.LIB.  If not,
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.	
s   $Revision: 1.170 $i   i(   s   HTMLFile(   s   MessageDialog(   s   *(   s   StringIONs   [&<>\"\x80-\xff]+s   [\x80-\xff]+i   s   &%d;s   &%s;c         C   s    t  t | |  i    d  Sd  S(   Ns    (   s   joins   maps   gets   ms   group(   s   ms   get(    (    s
   approot.pys   escape_entity5   s    c         C   s   t  i t |   Sd  S(   N(   s   patterns   subs   escape_entitys   string(   s   string(    (    s
   approot.pys   escape_html8   s    c         C   s   t  i t |   Sd  S(   N(   s   pattern_alls   subs   escape_entitys   string(   s   string(    (    s
   approot.pys   escape_all_html;   s    s   <.*?>c         C   s   |  i d d  }  t i d |   }  |  i d d  }  |  i d d  }  |  i d d	  }  |  i d
 d  }  |  i d d  }  |  i d d  }  |  i d d  }  |  i d d  }  |  Sd S(   s   convertie du html en asciis   <br>s   
s    s   &gt;s   >s   &lt;s   <s   &amp;s   &s   &nbsp;s    s   &eacute;s   s   &egrave;s   s   &ecirc;s   s   &agrave;s   N(   s   msgs   replaces   compileds   sub(   s   msg(    (    s
   approot.pys   html_to_txt@   s     c         C   sA  h  } | i } t d  } x |  t j	 o t |  d  o x |  i   D] } t | d  o | i
 o t | d  oo | i } t |  | j	 o |   } n | |  o4 t | d  o | i   } n | } | | | <q qH qH Wn t |  d  o |  i }  q t }  q Wt d   | i    } | i   | Sd S(	   s   
	Find SQL database connections in the current folder and above
	This function return a list of ids.
	Shameless stolen (with little modifications) from SQL.py
	s    s   objectValuess   _isAnSQLConnections   ids   title_and_ids	   aq_parentc         C   s   |  d |  d f S(   Ni   i    (   s   item(   s   item(    (    s
   approot.pys   <lambda>g   s    N(   s   idss   has_keys   have_ids   types
   StringTypes   selfs   Nones   hasattrs   objectValuess   os   _isAnSQLConnections   ids   title_and_ids	   aq_parents   maps   itemss   sort(   s   selfs
   StringTypes   idss   os   have_ids   id(    (    s
   approot.pys   implementedSQLConnectionIDsN   s0     	  *	   
c         C   sD   t  | |  } |  i | |  | t j	 o |  i |  |  Sn d S(   s   Add a AppRoot to a folder.N(	   s   AppRoots   ids   connection_ids   crs   selfs
   _setObjects   REQUESTs   Nones   manage_main(   s   selfs   ids   connection_ids   REQUESTs   cr(    (    s
   approot.pys   manage_addAppRootl   s
     s   dtml/appRootAdds   AppRootc           B   sr  t  Z d  Z d Z y e d e    Z Wn n Xh  Z h  Z h  Z	 d   Z
 d   Z d   Z d   Z d d  Z d	 d
  Z d	 d  Z d   Z d   Z d   Z d   Z d d  Z d   Z d d  Z d   Z d d  Z d d  Z d   Z e d  Z d   Z e d  Z d d  Z  d	 d d  Z! d d  Z" d    Z# e d!  Z$ e d"  Z% d	 d#  Z& RS($   s   
	AppRoot Class
	s   AppRoots   dtml/my_manage_tabsc         C   s&   t  i |  |  t |  _ | |  _ d  S(   N(   s   Maps   __init__s   selfs   ids   Nones   conns   connection_id(   s   selfs   ids   connection_id(    (    s
   approot.pys   __init__   s    	c         C   s   t  i t |  Sd S(   s0   Rempace les caractres accentus par des entitsN(   s   patterns   subs   escape_entitys   string(   s   selfs   string(    (    s
   approot.pys   escape_html   s     c         C   s   h  |  _ h  |  _ h  |  _ d S(   s   reset dictionnary cacheN(   s   selfs   dict_uid_noms   dict_uid_nom_htmls   dict_nom_uid(   s   self(    (    s
   approot.pys   reset_cache   s     		c         C   s   |  Sd S(   s+   Utilise pour retrouver la racine de l'appliN(   s   self(   s   self(    (    s
   approot.pys   root_app   s     s   indefinic         C   s   h  |  i | <h  |  i | <h  |  i | <xZ |  i d |  D]E \ } } | |  i | | <| |  i | | <t |  |  i | | <q; Wd |  i | | <| |  i | d <| |  i | d <d |  _
 d S(   sA   Charge une table entit dans les dico dict_uid_nom et dic_nom_uids   select uid, nom from %si    i   N(   s   selfs   dict_nom_uids	   tablenames   dict_uid_noms   dict_uid_nom_htmls   fetchs   uids   noms   escape_htmls   indefinis
   _p_changed(   s   selfs	   tablenames   indefinis   noms   uid(    (    s
   approot.pys
   load_table   s      i   c         C   sU   | t j o d Sn |  i i |  o |  i |  n |  i | i | d  Sd S(   s   Renvoie le noms    s   ErreurN(   s   uids   Nones   selfs   dict_uid_noms   has_keys	   tablenames
   load_tables   get(   s   selfs	   tablenames   uid(    (    s
   approot.pys   get_nom   s     c         C   sU   | t j o d Sn |  i i |  o |  i |  n |  i | i | d  Sd S(   s   Renvoie le noms    s   ErreurN(   s   uids   Nones   selfs   dict_uid_nom_htmls   has_keys	   tablenames
   load_tables   get(   s   selfs	   tablenames   uid(    (    s
   approot.pys   get_nom_html   s     c         C   s8   |  i i |  o |  i |  n |  i | | Sd S(   s   Renvoie l'uid..N(   s   selfs   dict_nom_uids   has_keys	   tablenames
   load_tables   nom(   s   selfs	   tablenames   nom(    (    s
   approot.pys   get_uid   s     c         C   s%   |  i d  } t | d d  Sd  S(   Ns    select nextval('object_uid_seq')i    (   s   selfs   fetchs   ress   int(   s   selfs   res(    (    s
   approot.pys   get_new_uid   s    c         C   s+   |  i i |  o |  i | Sn d Sd S(   s
   pour debugs   yapaN(   s   selfs   dict_uid_noms   has_keys   name(   s   selfs   name(    (    s
   approot.pys
   view_table   s     c         C   sa   g  } xD |  i   D]6 } | d } | | j o | d Sn | i |  q Wd | | f  d S(   s   
		return a reference to zope 'instance class' corresponding to
		meta_type :
		obj = zope_class('Folder')('an_id')
		is equivalent to
		from OFS.Folder import Folder
		obj = Folder('an_id')
		s   names   instances   meta_type '%s' unknown :<br>
%sN(   s
   meta_typess   selfs   all_meta_typess   ds   cur_meta_types	   meta_types   append(   s   selfs	   meta_types   cur_meta_types   ds
   meta_types(    (    s
   approot.pys
   zope_class   s      
s   stringc         C   s;   |  i |  o |  i | |  n |  i | | |  d S(   s   
		shortcut to PropertyManager methods.
		_set_property do a setattr and fill the _property dict,
		usable in manage_propertiesForm tab
		N(   s   selfs   hasPropertys   names   _updatePropertys   values   _setPropertys   type(   s   selfs   names   values   type(    (    s
   approot.pys   _set_property   s     c         C   sJ   g  } x9 | i D]. } t | d  o | | d i   7} q q W| Sd S(   s/   Liste des utilisateurs prsents ds l'aquisitions	   acl_usersN(   s   userss   nodes   aq_chains   objects   hasattrs   getUsers(   s   selfs   nodes   objects   users(    (    s
   approot.pys	   get_users   s     
 i    c         C   sJ   | i |  o | i | | | | |  Sn | i | | | | |  Sd S(   s   Ajoute un utilisateurN(   s	   acl_userss   getUsers   logins   _changeUsers   pwds   roless   domainss   _addUser(   s   selfs	   acl_userss   logins   pwds   roless   domains(    (    s
   approot.pys   set_user   s     c         C   s   | i | f  d S(   s   Supprime un utilisateurN(   s	   acl_userss	   _delUserss   login(   s   selfs	   acl_userss   login(    (    s
   approot.pys   del_user   s     c         C   s   d | } | o
 d } n |  i i |  o |  i |  n |  i | i   } | i
   xM | D]E } | | j o
 d } n d } | d | | |  i | | f 7} qe Wd | Sd S(   s%   Construit une liste de slection HTMLs   <select name="%s:int">
i    s	    selecteds    s!   <option value="%s"%s>%s</option>
s   %s
</select>N(   s
   input_names   strs   default_values   selfs   dict_uid_nom_htmls   has_keys	   tablenames
   load_tables   keyss   uidss   sorts   uids   selected(   s   selfs	   tablenames
   input_names   default_values   uidss   selecteds   strs   uid(    (    s
   approot.pys   html_select   s     


 
&c         C   s   d | } | o
 d } n |  i i |  o |  i |  n |  i | i   } | i
   xM | D]E } | | j o
 d } n d } | d | | |  i | | f 7} qe Wd | Sd S(   s%   Construit une liste de slection HTMLs   <select name="%s:int">
i    s    selected="selected"s    s!   <option value="%s"%s>%s</option>
s   %s
</select>N(   s
   input_names   strs   default_values   selfs   dict_uid_nom_htmls   has_keys	   tablenames
   load_tables   keyss   uidss   sorts   uids   selecteds   dict_uid_nom(   s   selfs	   tablenames
   input_names   default_values   uidss   selecteds   strs   uid(    (    s
   approot.pys   xhtml_select  s     


 
&c      	   C   se   t  | i d d  | i d d  | i d d  | i d d  | i d d  | i d d   Sd S(	   s!   Renvoie une date  partir du dicos   anneei    s   moiss   jours   heures   minutes   secondeN(   s   DateTimes   dicts   get(   s   selfs   dict(    (    s
   approot.pys	   date_dict  s     0c         C   s  d } | t j	 o3 d | | f } | o | d 7} n | d 7} n d } d } | d | 7} xV t d d	  D]E }	 |	 | i	   j o | | |	 |	 f 7} qp | | |	 |	 f 7} qp W| d
 7} | d | 7} xV t d d  D]E } | | i   j o | | | | f 7} q | | | | f 7} q W| d
 7} t   i   d } | d | 7} xZ t | | d  D]E }
 |
 | i   j o | | |
 |
 f 7} qi| | |
 |
 f 7} qiW| d 7} | Sd S(   s   
		Renvoie un select HTML avec la date passe en paramtre prselectionne
		checked None  =>  no checkbox
		checked 0  =>  empty checkbox
		checked 1  =>  checked checkbox
		s    sU   <input type="checkbox" name="date_%s.check:record" value="%s" onclick="actionClick()"s    checkeds   >
s3   <option value="%d" selected="selected">%d</option>
s   <option value="%d">%d</option>
s(   <select name="date_%s.jour:record:int">
i   i    s   </select>/
s(   <select name="date_%s.mois:record:int">
i   i   s)   <select name="date_%s.annee:record:int">
i   s
   </select>
N(   s   output_htmls   checkeds   Nones   names   txt_option_sels
   txt_options   ranges   jours   date_defaults   days   moiss   months   DateTimes   years	   this_years   annee(   s   selfs   date_defaults   names   checkeds
   txt_options   moiss   txt_option_sels   output_htmls	   this_years   jours   annee(    (    s
   approot.pys   dateEditHTML"  s@      
 
 
c         C   s   |  i t   | | d  Sd S(   sI   Renvoie un select HTML avec la date du jour moins N jours prselectionnei    N(   s   selfs   dateEditHTMLs   DateTimes   jours_avants   name(   s   selfs   jours_avants   name(    (    s
   approot.pys   dateNowMoinsToHTMLM  s     c   	      C   s  d } d } |  i | | |  } | d 7} | d | 7} xV t d d  D]E } | | i
   j o | | | | f 7} qI | | | | f 7} qI W| d 7} | d | 7} xY t d d	 d
  D]E } | | i   j o | | | | f 7} q | | | | f 7} q W| d 7} | Sd S(   sA   Renvoie un select HTML avec la date et une heure prselectionness3   <option value="%d" selected="selected">%d</option>
s   <option value="%d">%d</option>
s    - s)   <select name="date_%s.heure:record:int">
i    i   s   </select>H
s*   <select name="date_%s.minute:record:int">
i<   i   s
   </select>
N(   s   txt_option_sels
   txt_options   selfs   dateEditHTMLs   date_defaults   names   checkeds   output_htmls   ranges   heures   hours   minute(	   s   selfs   date_defaults   names   checkeds   output_htmls
   txt_options   txt_option_sels   heures   minute(    (    s
   approot.pys   datetimeEditHTMLQ  s(     
 
 
c         C   s&   |  i t   d d | | |  Sd S(   s:   Renvoie un select HTML avec la date du jour moins N heuresf1.0i   N(   s   selfs   datetimeEditHTMLs   DateTimes   hours_befores   names   checked(   s   selfs   hours_befores   names   checked(    (    s
   approot.pys   datetimeNowMoinsToHTMLm  s     s   frc         C   sB  d }	 d } | d j o
 t } n t } t | d |  } | i
   | i   d }
 d | | f } | o | d 7} n | d 7} | d | |
 f 7} | d	 | 7} x t t |   D]s } | d
 d d g j oW | | i   d j o  | |	 | | | d f 7} q,| | | | | d f 7} q q W| d 7} | Sd S(   s   Cacul la diffrence entres3   <option value="%d" selected="selected">%s</option>
s   <option value="%d">%s</option>
s   eni   sY   <input type="checkbox" name="datediff_%s.check:record" value="%s" onclick="actionClick()"s    checkeds   >
sL   <input type="text" size="2" name="datediff_%s.num:record:int" value="%s" />
sD   <select name="datediff_%s.unit:record:int" onclick="actionClick()">
i   i   i   i    s
   </select>
N(   s   txt_option_sels
   txt_options   langs   en_times   time_cs   fr_times   Ages   days   day_refs   diffs   getAges   getFirsts   ages   names   output_htmls   checkeds   ranges   lens   i(   s   selfs   days   day_refs   names   checkeds   langs   output_htmls
   txt_options   is   txt_option_sels   ages   time_cs   diff(    (    s
   approot.pys   datetimeDiffToHTMLq  s,     

  $
c         C   s   d } d } | d j o
 t } n t } d | | f } | d | d f 7} | d | 7} x} t t	 |   D]i } | d d	 d
 g j oM | d	 j o  | | | | | d f 7} q | | | | | d f 7} qn qn W| d 7} | Sd S(   s'   valeur par defaut de datetimeDiffToHTMLs3   <option value="%d" selected="selected">%s</option>
s   <option value="%d">%s</option>
s   ensZ   <input type="checkbox" name="datediff_%s.check:record" value="%s" onclick="actionClick()">sL   <input type="text" size="2" name="datediff_%s.num:record:int" value="%s" />
i   sD   <select name="datediff_%s.unit:record:int" onclick="actionClick()">
i   i   i   i    s
   </select>
N(   s   txt_option_sels
   txt_options   langs   en_times   time_cs   fr_times   names   output_htmls   ranges   lens   i(   s   selfs   names   langs   output_htmls
   txt_options   is   txt_option_sels   time_c(    (    s
   approot.pys   datetimeDiffDefaultToHTML  s"     
  $
c         C   s  | i   } | i   } | i   } | i   } | i   }
 | i   }	 d } } } } | d j oC | i   | }
 d } x* |
 d j  o |
 d 7}
 | d 7} q Wn | d j p | oG | i   | | } d } x* | d j  o | d 7} | d 7} q Wn | d j p | or | i   | | } d } xU | d j oC | d 8} t |  o | t | d 7} q6| t | d 7} q6Wn x& | d j o | d 7} | d 7} qW| | 8} t | | | | |
 |	  Sd	 S(
   s;   exploit values of datetimeDiffToHTML return DateTime objecti    i   i<   i   i   i   i   i   N(   s   date_refs   years   months   days   hours   minutes   seconds	   year_lesss
   month_lesss	   hour_lesss   day_lesss   units   nums   is_bissextiles   day_month_biss	   day_months   DateTime(   s   selfs   date_refs   nums   units   hours   day_lesss	   hour_lesss   months	   year_lesss   seconds   minutes   years
   month_lesss   day(    (    s
   approot.pys   datetimeDiffExploit  sJ      
 
 
 

c         C   s   | t j o
 | } n y t | | |  } WnT t   } t i	 d |  | i
   } |  i i |  |  i   d |  t Sn X| | | <| | i   Sd S(   s1   Add a row to container and fill it with pg valuess   filesK   Erreur :<br>
%s<br> (L'administrateur vient d'tre prvenu de cette erreur)N(   s   ids   Nones
   table_names   Rows   uids   rows   StringIOs   fps	   tracebacks	   print_excs   getvalues   errors   selfs   Logs   rollback_connections	   containers   update(   s   selfs	   containers   uids
   table_names   ids   fps   errors   row(    (    s
   approot.pys   add_row  s     
	


c         C   sE   | t j o
 | } n t | | |  } | | | <| | i   d  S(   N(   s   ids   Nones
   table_names   Rows   uids   rows	   containers   create(   s   selfs	   containers   uids
   table_names   ids   row(    (    s
   approot.pys
   create_row  s
    

c   
      C   s~   d } d } d | }	 xS t | | |  D]? } | | j o |	 | | | f 7}	 q) |	 | | | f 7}	 q) W|	 d 7}	 |	 Sd S(   s>   Renvoie un select HTML d'entier dans l'intervalle [begin..end]s3   <option value="%d" selected="selected">%d</option>
s   <option value="%d">%d</option>
s   <select name="%s:int">
s
   </select>
N(
   s   txt_option_sels
   txt_options   names   output_htmls   ranges   begins   ends   inters   is   value(
   s   selfs   names   values   begins   ends   inters
   txt_options   is   txt_option_sels   output_html(    (    s
   approot.pys	   rangeHTML  s     
 
('   s   __name__s
   __module__s   __doc__s	   meta_types   HTMLFiles   globalss   my_manage_tabss   dict_uid_noms   dict_uid_nom_htmls   dict_nom_uids   __init__s   escape_htmls   reset_caches   root_apps
   load_tables   get_noms   get_nom_htmls   get_uids   get_new_uids
   view_tables
   zope_classs   _set_propertys	   get_userss   set_users   del_users   html_selects   xhtml_selects	   date_dicts   Nones   dateEditHTMLs   dateNowMoinsToHTMLs   datetimeEditHTMLs   datetimeNowMoinsToHTMLs   datetimeDiffToHTMLs   datetimeDiffDefaultToHTMLs   datetimeDiffExploits   add_rows
   create_rows	   rangeHTML(    (    (    s
   approot.pys   AppRootx   sJ    											+	$	((+   s   __doc__s   __version__s   Globalss   HTMLFiles   MessageDialogs
   OFS.Folders   DateTimes   strings	   cStringIOs   StringIOs	   tracebacks   Products.PimenTechLibCommon.maps   Products.PimenTechLibCommon.dbps   Products.PimenTechLibCommon.rows   Products.PimenTechLibCommon.ages   htmlentitydefss   res   compiles   pattern_alls   patterns
   entity_maps   ranges   is   chrs
   entitydefss   itemss   entitys   chars   has_keys   gets   escape_entitys   escape_htmls   escape_all_htmls   compileds   html_to_txts   implementedSQLConnectionIDss   Nones   manage_addAppRoots   globalss   manage_addAppRootForms   DBPs   Maps   AppRoot(   s   pattern_alls   AppRoots   entitys   chars   manage_addAppRoots   manage_addAppRootForms   implementedSQLConnectionIDss   res   escape_entitys   __version__s   escape_all_htmls   compileds   htmlentitydefss   escape_htmls   html_to_txts   MessageDialogs   StringIOs   is   HTMLFiles	   tracebacks   patterns
   entity_map(    (    s
   approot.pys   ?   sH   			  				
