{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fswiss\fcharset0 Arial;}{\f1\fswiss\fprq2\fcharset0 Arial;}{\f2\froman\fprq2\fcharset0 Times New Roman;}{\f3\fswiss\fprq2\fcharset0 Arial Narrow;}{\f4\fmodern\fprq1\fcharset0 Courier New;}}
{\colortbl ;\red192\green192\blue192;}
{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}}
\viewkind4\uc1\pard\ltrpar\f0\fs20\par
\pard\ltrpar\qc\b\f1\fs36 Cahier du programmeur Zope/Plone - 2\super\'e8me\nosupersub  Edition\par
\b0\fs28 (Code source des exemples)\par
\pard\ltrpar\f2\fs24\par
\pard\ltrpar\keepn\s1\sb240\sa60\kerning32\b\f1\fs32 Chapitre 5 - Personnalisation graphique\par
\pard\ltrpar\li708\ri3402\sb160\qj\tx1418\lang2057\kerning0\f3\fs18 Le bloc \'ab portal-top \'bb\par
\pard\ltrpar\li1418\ri3402\sb160\qj\tx1418\b0\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li730\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\f4\fs16 <div id="portal-top" i18n:domain="plone">\par
    <a href="#documentContent" class="hiddenStructure"\par
       i18n:translate="label_skiptocontent">Skip to content.</a>\par
    <a metal:use-macro="here/global_logo/macros/portal_logo">\par
        The portal logo, linked to the portal root\par
    </a>\par
    <div metal:use-macro="here/global_skinswitcher/macros/skin_tabs">\par
        The skin switcher tabs. Based on which role you have, you\par
        get a selection of skins that you can switch between.\par
    </div>\par
    <div metal:use-macro="here/global_siteactions/macros/site_actions">\par
        Site-wide actions (Contact, Sitemap, Help, Style Switcher etc)\par
    </div>\par
    <div metal:use-macro="here/global_searchbox/macros/quick_search">\par
        The quicksearch box, normally placed at the top right\par
    </div>\par
    <div metal:use-macro="here/global_sections/macros/portal_tabs">\par
        The global sections tabs. (Welcome, News etc)\par
    </div>\par
    <div metal:use-macro="here/global_group/macros/portal_group">\par
        Portal group definition\par
    </div>    \par
    <div metal:use-macro="here/global_personalbar/macros/personal_bar">\par
        The personal bar. (log in, logout etc...)\par
    </div>\par
    <div metal:use-macro="here/global_pathbar/macros/path_bar">\par
        The breadcrumb navigation ("you are here")\par
    \lang1036 </div>\par
</div>\par
\pard\ltrpar\f2\fs24\par
\pard\ltrpar\li708\ri3402\sb160\qj\tx1418\lang3084\b\f3\fs18 Contenu du bas de page modifi\'e9\par
\pard\ltrpar\lang1036\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\lang2057\f4\fs16 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"\par
      i18n:domain="plone">\par
<body>\par
<div id="portal-footer" metal:define-macro="portal_footer" i18n:domain="plone">\par
  Copyright &copy; 2003 - \par
  <span tal:define="now modules/DateTime/DateTime" tal:content="now/year"/> \par
  by Soci\'e9t\'e9 G\'e9niale\par
</div>\par
</body>\par
</html>\par
\pard\ltrpar\f2\fs24\par
\pard\ltrpar\li708\ri3402\sb160\qj\tx1418\lang3084\b\f3\fs18 Page d\rquote accueil enrichie\par
\pard\ltrpar\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\lang1043\f4\fs16 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"\par
      \lang2057 lang="en"\par
      metal:use-macro="here/main_template/macros/master"\par
      i18n:domain="plone">\par
<body>\par
\par
<metal:main fill-slot="main">\par
 <tal:main-macro metal:define-macro="main"\par
        tal:define="len_text python:len(here.text);">\par
    <h1 tal:content="here/title_or_id" class="documentFirstHeading">\par
      \lang1036 Title or id\par
    </h1>\par
\par
  <div metal:use-macro="here/document_actions/macros/document_actions">\par
            Document actions (print, sendto etc)\par
  </div>\par
    \par
  <div class="documentDescription"\par
             tal:content="here/Description">\par
            description\par
  </div>\par
\par
\lang2057   <p tal:condition="python: not len_text and is_editable"\par
           i18n:translate="no_body_text"\par
           \lang1036 class="discreet">\par
\lang2057             This item does not have any body text, click the edit tab to change it.\par
  </p>\par
    \par
  <div class="stx"\par
    tal:condition="len_text"\par
    tal:attributes="class python:test(here.text_format=='structured-text', 'stx', 'plain')">\par
        <div tal:replace="structure python:here.CookedBody(stx_level=2)" />\par
  \lang1036 </div>\par
\lang3084\f3\fs18\par
  \lang2057 <div tal:omit-\f4\fs16 tag=""\par
       tal:condition="python:container.meta_type=='Plone Site'\par
                      and here.getId() == \lquote index_html\rquote ">\par
    \lang1036 <h1> Nouveaut\'e9s de l\rquote intranet </h1>\par
    <!-- Zone r\'e9serv\'e9e au code du contenu dynamique -->\par
  </div>\par
\par
  \lang2057\f3\fs18 <div tal:omit-\f4\fs16 tag=""\par
       tal:condition="not: python:container.meta_type=='Plone Site'\par
                           and here.getId() == \lquote index_html\rquote ">\par
     <div metal:use-macro="here/document_byline/macros/byline" >\par
          Get the byline - contains details about author and modification date.\par
     \lang1036 </div>\par
  </div>\par
\par
 \lang2057 </tal:main-macro>\par
</metal:main>\par
\par
\lang1036 </body>\par
</html>\par
\pard\ltrpar\lang2057\f2\fs24\par
\pard\ltrpar\keepn\s1\sb240\sa60\lang1036\kerning32\b\f1\fs32 Chapitre 6 - Les workflows\par
\pard\ltrpar\li708\ri3402\sb160\qj\tx1418\kerning0\f3\fs18 Script \'ab send_author_email \'bb d\rquote envoi de mail \'e0 l\rquote auteur du document\par
\pard\ltrpar\li1418\ri3402\sb160\qj\tx1418\b0\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\lang2057\f4\fs16 transition_id = state_info.transition.id\par
user = container.portal_membership.getAuthenticatedMember().getUserName()\par
owner = container.portal_membership.getMemberById(state_info.object.Creator)\par
\par
if owner:\par
  owner_name = owner.getUserName()\par
  owner_email = owner.email\par
else:\par
  owner_name = "(Utilisateur inconnu)"\par
  owner_email = None\par
url = state_info.object.absolute_url()\par
title = state_info.object.Title()\par
\par
if owner_email:\par
  container.MailHost.send(\par
"""From: Portal Manager <manager@monplone.org>\par
\lang1036 To: %s <%s>\par
Subject: L'\'e9tat de votre document %s a chang\'e9\par
\par
  Bonjour,\par
\par
  Nous avons le plaisir de vous inform\'e9 que l'\'e9tat de votre document %s situ\'e9\par
  \'e0 l'adresse %s a \'e9t\'e9 chang\'e9 par l'utilisateur %s.\par
\par
  \lang2057 Cordialement,\par
\par
    -- Le webmaster\par
\par
""" % (owner_name, owner_email, title, title, url, user))\par
\par
\pard\ltrpar\f2\fs24\par
\pard\ltrpar\keepn\s1\sb240\sa60\lang1036\kerning32\b\f1\fs32 Chapitre 7 - Types de contenu\par
\pard\ltrpar\keepn\s2\sb240\sa60\kerning0\i\fs28 Produit Zope/CMF\par
\pard\ltrpar\li708\ri3402\sb160\qj\tx1418\i0\f3\fs18 Produit \'ab CMFAnnuaire \'bb - Module EntreprisePermissions.py\par
\pard\ltrpar\tx360\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\b\f4\fs16 from Products.CMFCore.CMFCorePermissions import setDefaultRoles\par
\b0\par
# D\'e9finissons les permissions\par
AddFiche = 'Add Fiches'\par
ChangeFiche = 'Change Fiches'\par
\par
# Affectons les r\'f4les par d\'e9faut \'e0 ces permissions\par
\lang2057 setDefaultRoles(AddFiche, ('Manager', 'Owner',))\par
setDefaultRoles(ChangeFiche, ('Manager', 'Owner',))\par
\par
\pard\ltrpar\f2\fs24\par
\pard\ltrpar\li708\ri3402\sb160\qj\tx1418\lang1036\b\f3\fs18 Produit \'ab CMFAnnuaire \'bb - Module Entreprise.py\par
\pard\ltrpar\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\f4\fs16 from Globals import InitializeClass\par
\lang2057 from AccessControl import ClassSecurityInfo\par
\lang3084 import string\par
\lang2057\par
from Products.CMFDefault.DublinCore import DefaultDublinCoreImpl\par
\lang3084 from Products.CMFCore.PortalContent import PortalContent\par
from Products.CMFCore import CMFCorePermissions\par
\lang1036\par
import EntreprisePermissions\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\par
# D\'e9finition du type Entreprise (pour l\rquote outil portal_types)\par
\b factory_type_information\b0  = (\{\par
\tab   'id' : 'Entreprise',\par
\tab   'content_icon' : '',\par
\tab   'meta_type' : 'Entreprise',\par
\tab   'description' : "Entr\'e9e d\rquote une entreprise dans l\rquote annuaire",\par
\tab   \lang2057 'product' : 'CMFAnnuaire',\par
\tab   'factory' : 'addEntreprise',\par
\tab   'immediate_view' : 'entreprise_edit_form',\par
\tab   \lang1036 'actions' : (\{\par
        'id'            : 'view',\par
        'name'          : 'Voir',\par
        'action'        : 'entreprise_view',\par
        \lang2057 'permissions'   : (CMFCorePermissions.View, )\par
       \},\par
      \{ 'id'            : 'edit',\par
        \lang1036 'name'          : 'Editer',\par
        'action'        : 'entreprise_edit_form',\par
        'permissions'   : (EntreprisePermissions.ChangeEntreprises, )\par
      \},\par
      \{ 'id'            : 'metadata',\par
        'name'          : 'M\'e9ta-donn\'e9es',\par
        'action'        : 'metadata_edit_form',\par
        'permissions'   : (EntreprisePermissions.ChangeEntreprises, )\par
      \},\par
    ),\par
\tab\},)\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\lang2057\b\par
\par
def addEntreprise(self, id, title='', REQUEST=None) :\par
\b0\tab\lang1036 """M\'e9thode \'ab factory \'bb de l'objet Entreprise"""\par
\tab obj = Entreprise(id)\par
\tab\lang2057 obj.id = id\par
\tab obj.title = title\par
\lang1036\tab self._setObject(id, obj)\par
\tab\lang2057 if REQUEST is not None :\par
\tab\tab\lang1036 REQUEST.RESPONSE.redirect('manage_main')\par
\par
\par
# La classe Entreprise\par
\b class Entreprise(PortalContent, DefaultDublinCoreImpl):\par
\b0\tab """Une entreprise"""\par
\tab meta_type = "Entreprise"\par
\tab security = ClassSecurityInfo()\par
\b\par
\tab\lang2057 security.declareObjectProtected(CMFCorePermissions.View)\par
\b0\par
\b\tab def __init__(self, id, title=''):\par
\lang1036\b0\tab\tab DefaultDublinCoreImpl.init(self)\par
\tab\tab\lang2057 self.id=id\par
\tab\tab self.title=title\par
\tab\tab\lang3084 self.raison_sociale = ''\par
\tab\tab self.contact = ''\par
\tab\tab\lang1036 self.adresse = ''\par
\tab\tab self.code_postal = ''\par
\tab\tab\lang2057 self.ville = ''\par
\tab\tab self.telephone = ''\par
\tab\tab self.fax = ''\par
\tab\tab self.email = ''\par
\tab\tab self.site_url = ''\par
\par
\lang3084\b\tab security.declareProtected(EntreprisePermissions.ChangeEntreprises,'edit')\par
\tab\lang1036 def edit(self, raison_sociale=None, contact=None, adresse=None, code_postal=None, ville=None, telephone=None, fax=None, email=None, site_url=None) :\par
\b0\tab\tab """Edition de l'objet"""\par
\lang3084\tab\tab self.raison_sociale = raison_sociale\par
\tab\tab self.contact = contact\par
\tab\tab self.adresse = adresse\par
\tab\tab\lang1036 self.code_postal = code_postal\par
\lang3084\tab\tab self.ville = ville\par
\tab\tab self.telephone = telephone\par
\tab\tab self.fax = fax\par
\tab\tab self.email = email\par
\tab\tab self.site_url = site_url\par
\par
     # Ensuite, on r\'e9indexe l\rquote objet (pour le portal_catalog)\par
\tab\tab self.portal_catalog.reindexObject()\par
\lang1036\par
\par
# initalisation\par
InitializeClass(Entreprise)\par
\pard\ltrpar\tx360\f2\fs24\par
\pard\ltrpar\li708\ri72\sb160\qj\tx1418\tx8100\b\f3\fs18 Produit \'ab CMFAnnuaire \'bb - Template /skins/Entreprise/entreprise_edit_form.pt\par
\pard\ltrpar\tx360\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\lang2057\b\f4\fs16 <html metal:use-macro="here/main_template/macros/master">\par
\b0 <body>\par
\par
\b <div metal:fill-slot="main">\par
\b0\par
    \lang1036 <h1>Edition des informations de l'entreprise</h1>\par
\par
\lang3084     \lang2057 <form class="group"\par
          name="edit_form" \par
          action="entreprise_edit" \par
          method="post">\par
\par
        <div class="row" tal:define="Title request/title | here/Title;">\par
            <span class="label">Titre </span>\par
            <span class="field">               \par
                <input type="text" \par
                       name="field_title" \par
                       size="40" \par
                       value="#"\par
                       tal:attributes="value Title" />\par
            </span>            \par
        </div>        \par
        <div class="row" tal:define="raison_sociale request/raison_sociale | here/raison_sociale" >\par
            <span class="label">Raison sociale</span>\par
            <span class="field">\par
                <input type="text" \par
                       name="field_raison_sociale" \par
                       size="40" \par
                       value="#"\par
                       tal:attributes="value raison_sociale" />          \par
            </span>\par
        </div>\par
        <div class="row" >\par
            <span class="label"> Cat\'e9gorie(s) </span>\par
            <span class="field">\par
               <select name="field_categories:list" multiple\par
                       tal:define="categories here/Subject; allowedSubjects python:here.portal_metadata.listAllowedSubjects(here)">\par
                   <option value="cat"\par
                           tal:repeat="cat allowedSubjects"\par
                           tal:attributes="value cat; selected python:cat in categories and 1 or 0"\par
                           \lang3084 tal:content="cat">Une cat\'e9gorie</option>\par
               \lang2057 </select>\par
            </span>\par
        </div>\par
        <div class="row" tal:define="contact request/contact | here/contact" >\par
            <span class="label">Nom du contact</span>\par
            <span class="field">\par
                <input type="text" \par
                       name="field_contact" \par
                       size="40" \par
                       value="#"\par
                       tal:attributes="value contact" />          \par
            </span>\par
        </div>    \par
        <div class="row" tal:define="adresse request/adresse | here/adresse" >\par
            <span class="label">Adresse</span>\par
            <span class="field">\par
                <input type="text" \par
                       name="field_adresse" \par
                       size="50" \par
                       value="#"\par
                       tal:attributes="value adresse" />\par
            </span>            \par
        </div>\par
        <div class="row" tal:define="code_postal request/code_postal | here/code_postal" >\par
            <span class="label">Code Postal</span>\par
            <span class="field">\par
                <input type="text" \par
                       name="field_code_postal" \par
                       size="25" \par
                       value="#"\par
\lang1036                        tal:attributes="value code_postal" />\par
            \lang2057 </span>            \par
        </div>\par
        <div class="row" tal:define="ville request/ville | here/ville" >\par
            <span class="label">Ville</span>\par
            <span class="field">\par
                <input type="text" \par
                       name="field_ville" \par
                       size="25" \par
                       value="#"\par
                       tal:attributes="value ville" />\par
            </span>           \par
        </div>\par
        <div class="row" tal:define="telephone request/telephone | here/telephone" >\par
            <span class="label">T\'e9l\'e9phone</span>\par
            <span class="field">\par
                <input type="text" \par
                       name="field_telephone" \par
                       size="25" \par
                       value="#"\par
                       tal:attributes="value telephone" />\par
            </span>           \par
        </div>\par
        <div class="row" tal:define="fax request/fax | here/fax" >\par
            <span class="label">Fax</span>\par
            <span class="field">\par
                <input type="text" \par
                       name="field_fax" \par
                       size="25" \par
                       value="#"\par
                       tal:attributes="value fax" />\par
            </span>           \par
        </div>\par
        <div class="row" tal:define="email request/email | here/email" >\par
            <span class="label">E-mail</span>\par
            <span class="field">\par
                <input type="text" \par
                       name="field_email" \par
                       size="25" \par
                       value="#"\par
                       tal:attributes="value email" />\par
            </span>           \par
        </div>\par
        <div class="row" tal:define="site_url request/site_url | here/site_url" >\par
            <span class="label">Site Web (URL)</span>\par
            <span class="field">\par
                <input type="text" \par
                       name="field_site_url" \par
                       size="25" \par
                       value="#"\par
                       tal:attributes="value site_url" />\par
            </span>           \par
        </div>\par
\par
        <div class="row">\par
            <span class="label"></span>\par
            <span class="field">\par
                <input class="context" type="submit" name="submit" value=" OK " /> \par
            </span>\par
        </div>       \par
         \par
    </form>\par
\par
\b </div>\par
\b0   \par
</body>\par
\lang1036\b </html>\par
\b0\par
\pard\ltrpar\tx360\f2\fs24\par
\pard\ltrpar\li708\ri72\sb160\qj\tx1418\tx8100\b\f3\fs18 Produit \'ab CMFAnnuaire \'bb - Script /skins/Entreprise/entreprise_edit.py\par
\pard\ltrpar\tx360\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\f4\fs16 ## Script (Python) "entreprise_edit"\par
\lang2057 ##parameters=\par
##title=\par
\par
REQUEST=context.REQUEST\par
\par
\b context.editMetadata\b0 (title=REQUEST[\lquote field_title\rquote ]\par
                    \lang1036 , subject=REQUEST['field_categories'])\par
\lang3084\b\par
context.edit\b0 (raison_sociale=REQUEST['field_raison_soiciale']\par
            \lang2057 , contact=REQUEST['field_contact']            \par
            , adresse=REQUEST['field_adresse']\par
            , code_postal=REQUEST['field_code_postal']\par
            , ville=REQUEST['field_ville']\par
            , telephone=REQUEST['field_telephone']\par
            , fax=REQUEST['field_fax']\par
            , email=REQUEST['field_email']\par
            , site_url=REQUEST['field_site_url'])\par
\lang1036\par
REQUEST.set('portal_status_message', 'Entreprise+chang\'e9e.')\par
qst='portal_status_message=Entreprise+chang\'e9e.'\par
\par
\lang2057 target_action = context.getTypeInfo().getActionById( 'view' )\par
\b context.REQUEST.RESPONSE.redirect\b0 ( '%s/%s?%s' % ( context.absolute_url()\par
                                                , target_action\par
                                                , qst\par
                                                ) )\par
\pard\ltrpar\tx360\f2\fs24\par
\pard\ltrpar\li708\ri72\sb160\qj\tx1418\tx8100\lang1036\b\f3\fs18 Produit \'ab CMFAnnuaire \'bb - Template /skins/Entreprise/entreprise_view.pt\par
\pard\ltrpar\tx360\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\lang2057\b\f4\fs16 <html metal:use-macro="here/main_template/macros/master">\par
\b0 <body>\par
\b <div metal:fill-slot="main" >\par
\b0\par
    <h1 tal:content="here/Title >Titre</h1>\par
\par
        <div class="row"> \par
            <span class="label">Raison sociale de l\rquote entreprise</span>\par
            <span class="field" tal:content="here/raison_sociale" > Raison sociale </span>\par
        </div>\par
        <div class="row"> \par
           <span class="label">Cat\'e9gorie(s)</span>\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\ri-518\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954            <span class="field"\par
                 tal:content="python:modules['string'].join(here.Subject(), ' ')">Cat\'e9gorie</span>\par
        </div>\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954         <div class="row"> \par
            <span class="label">Contact</span>\par
            <span class="field" tal:content="here/contact" > Contact </span>\par
        </div>\par
        <div class="row"> \par
            <span class="label">Adresse</span>\par
            <span class="field" tal:content="here/adresse" > Adresse </span>\par
        </div>\par
        <div class="row"> \par
            <span class="label">Code Postal</span>\par
            <span class="field" tal:content="here/code_postal" > Code postal </span>\par
        </div>\par
        <div class="row"> \par
            <span class="label">Ville</span>\par
            <span class="field" tal:content="here/ville" > Ville </span>\par
        </div>\par
        <div class="row"> \par
            <span class="label">T\'e9l\'e9phone</span>\par
            <span class="field" tal:content="here/telephone" >T\'e9l\'e9phone </span>\par
        </div>\par
        <div class="row"> \par
            <span class="label">Fax</span>\par
            <span class="field" tal:content="here/fax" > Fax</span>\par
        </div>\par
        <div class="row"> \par
            <span class="label">E-mail</span>\par
            <span class="field" tal:content="here/email" > Email</span>\par
        </div>\par
        <div class="row"> \par
            <span class="label">Site web</span>\par
            <span class="field">\par
               <a href="" tal:attributes="href here/site_url"\par
                          tal:content="here/site_url" > URL du site </a> \par
            </span>\par
        </div>\par
\par
\b </div>\par
\b0 </body>\par
\lang1036\b </html>\par
\pard\ltrpar\tx360\b0\f2\fs24\par
\pard\ltrpar\li708\ri72\sb160\qj\tx1418\tx8100\b\f3\fs18 Produit \'ab CMFAnnuaire \'bb - Module __init__.py\par
\pard\ltrpar\tx360\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\f4\fs16 import Entreprise\par
\lang2057 from Products.CMFCore import DirectoryView, utils\par
from Products.CMFCore import utils, CMFCorePermissions\par
\par
DirectoryView.registerDirectory('skins', globals())\par
\lang1036 DirectoryView.registerDirectory('skins/entreprise', globals())\par
\par
\b def initialize(context):\par
\b0     \b utils.ContentInit\b0 (\par
            'Entreprise Content Objects'\par
            , content_types=(Entreprise.Entreprise,)\par
            , permission=CMFCorePermissions.AddPortalContent\par
            , extra_constructors=(Entreprise.addEntreprise,)\par
            , fti=Entreprise.factory_type_information\par
            ).initialize(context)\par
\par
\pard\ltrpar\tx360\f2\fs24\par
\pard\ltrpar\li708\ri72\sb160\qj\tx1418\tx8100\b\f3\fs18 Produit \'ab CMFAnnuaire \'bb - Module /Extensions/cmf_utils.py\par
\pard\ltrpar\tx360\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\lang2057\f4\fs16 from Products.CMFCore.utils import getToolByName\par
import string\par
\par
\b def addFSDirectoryView(self, skin_id, physical_directory):\par
\b0     skins_tool=getToolByName(self, 'portal_skins')\par
    skins_tool.manage_addProduct['CMFCore'].manage_addDirectoryView(id=skin_id, filepath=physical_directory)\par
    selections = skins_tool._getSelections()\par
    for id, skinpath in selections.items():\par
        skinpath=skinpath.split(',')\par
        skinpath.insert(2, skin_id)\par
        selections[id]=string.join(skinpath, ',')\par
    skins_tool._selections=selections\par
\pard\ltrpar\tx1571\f2\fs24\par
\pard\ltrpar\li708\ri72\sb160\qj\tx1418\tx8100\lang3084\b\f3\fs18 Script Python \'ab addSkinElement \'bb (ajout\'e9 via le web)\par
\pard\ltrpar\tx1571\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\lang1036\b\f4\fs16 context.addFSDirectoryView\b0 (context, 'entreprise', '/home/zope/lib/python/Products/CMFAnnuaire/skins/entreprise')\b\par
\lang2057\b0 return 'fin'\par
\pard\ltrpar\tx1571\f2\fs24\par
\pard\ltrpar\keepn\s2\sb240\sa60\lang1036\b\i\f1\fs28 Produit Zope/CMF/Archetypes\par
\pard\ltrpar\li708\ri3402\sb160\qj\tx1418\i0\f3\fs18 Produit \'ab SGObject \'bb - Module config.py\par
\pard\ltrpar\tx1571\lang2057\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\f4\fs16 from Products.CMFCore.CMFCorePermissions import AddPortalContent, ModifyPortalContent\par
from Products.Archetypes.utils import DisplayList\par
\par
# General settings\par
PROJECTNAME = "SGObject"\par
SKINS_DIR = 'skins'\par
\lang1036 PROJECTMETATYPE = "SGObject"\par
GLOBALS = globals()\par
\par
# Permissions\par
ADD_CONTENT_PERMISSION = AddPortalContent\par
EDIT_CONTENT_PERMISSION = ModifyPortalContent\par
\pard\ltrpar\f2\fs24\par
\pard\ltrpar\li708\ri3402\sb160\qj\tx1418\b\f3\fs18 Produit \'ab SGObject \'bb - Module __init__.py\par
\pard\ltrpar\lang2057\b0\f2\fs24\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\f4\fs16 from Globals import package_home\par
from Products.Archetypes.public import *\par
from Products.CMFCore.DirectoryView import registerDirectory\par
from Products.CMFCore import utils\par
import os, os.path\par
\par
from config import *\par
\par
registerDirectory(SKINS_DIR,GLOBALS)\par
\par
def initialize(context):\par
    # process our custom types\par
\b     import SGObject\par
\b0\par
    content_types, constructors, ftis = process_types(\par
        listTypes(PROJECTNAME),\par
        PROJECTNAME)\par
\par
    utils.ContentInit(\par
        PROJECTNAME + ' Content',\par
        content_types = content_types,\par
        permission = ADD_CONTENT_PERMISSION,\par
        extra_constructors = constructors,\par
        fti = ftis,\par
        ).initialize(context)\par
\pard\ltrpar\li851\sb120\sa20\qj\f2\fs20\par
\pard\ltrpar\li708\ri3402\sb160\qj\tx1418\lang1036\b\f3\fs18 Produit \'ab SGObject \'bb - Module /Extensions/Install.py\par
\pard\ltrpar\li851\sb120\sa20\qj\lang2057\b0\f2\fs20\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\f4\fs16 from Products.Archetypes.public import listTypes\par
from Products.Archetypes.Extensions.utils import installTypes, install_subskin\par
from Products.ArchExample.config import PROJECTNAME, GLOBALS\par
from StringIO import StringIO\par
\par
def install(self):\par
    out = StringIO()\par
    installTypes(self, out, listTypes(PROJECTNAME), PROJECTNAME)\par
    install_subskin(self, out, GLOBALS)\par
    out.write("Successfully installed %s." % PROJECTNAME)\par
    return out.getvalue()\par
\pard\ltrpar\li851\sb120\sa20\qj\f2\fs20\par
\pard\ltrpar\li708\ri3402\sb160\qj\tx1418\lang1036\b\f3\fs18 Produit \'ab SGObject \'bb - Module SGObject.py\par
\pard\ltrpar\li851\sb120\sa20\qj\b0\f2\fs20\par
\pard\brdrl\brdrdash\brdrw60\brdrcf1\brsp80 \ltrpar\li708\sl-200\slmult0\tx567\tx851\tx1134\tx1418\tx1701\tx1985\tx2268\tx2552\tx2835\tx3119\tx3402\tx3686\tx3969\tx4253\tx4536\tx4820\tx5103\tx5387\tx5670\tx5954\lang2057\f4\fs16 from Products.Archetypes.public import *\par
from Products.Archetypes.BaseContent import BaseContent, BaseContentMixin\par
from Products.Archetypes.utils import DisplayList\par
from Products.CMFCore import CMFCorePermissions\par
from config import *\par
from AccessControl import ClassSecurityInfo\par
import string\par
\par
\par
schema = Schema(\par
    (\par
    TextField (\par
        'body',\par
\b         searchable = 1,\par
        required = 1,\par
\b0         \lang1036 widget=TextAreaWidget(\par
            label="Description de l'objet",\par
            \lang2057 ),\par
        ),\par
    FloatField (\par
        "price",\par
        searchable = 0,\par
        required = 0,\par
\b         default = 0.0,\par
\b0         \lang1036 widget = StringWidget (\par
            label = "Prix de l'objet",\par
            \lang2057 ),\par
        ),\par
    ImageField (\par
        "photo",\par
        widget = ImageWidget (\par
            label = "Photo de l'objet",\par
            ),\par
        ),\par
    StringField(\par
        "etat",\par
\b         vocabulary = "getEtats",\par
\b0         widget = SelectionWidget(\par
            \lang1036 label = "Etat de l'objet",\par
        ),\par
    ))\par
\lang2057\par
\par
class SGObject(BaseContent):\par
    schema = BaseSchema + schema\par
\par
    security = ClassSecurityInfo()\par
\par
    security.declarePublic("getEtats")\par
    def getEtats(self,):\par
        "getEtats"\par
\b         return DisplayList((\par
\lang1036\b0             ("1", "Etude",),\par
            ("2", "Prototype",),\par
            ("3", "Fabrication en s\'e9rie",),\par
            ("4", "Ecoulement du stock",),\par
            ("5", "Epuis\'e9",),\par
            ))\par
\lang2057\par
\par
registerType(SGObject)\par
\pard\ltrpar\f2\fs24\par
\pard\ltrpar\lang1036\f0\fs20\par
}
 