コード例 #1
0
  def test_ObjectSupport(self):
    # make sure listbox supports rendering of simple objects
    # the only requirement is that objects have a `uid` attribute which is a
    # string starting by new_ (a convention to prevent indexing of objects).
    portal = self.getPortal()
    list_method_id = 'DummyListMethodId'
    portal.ListBoxZuite_reset()
    form = portal.FooModule_viewFooList
    listbox = form.listbox
    listbox.ListBox_setPropertyList(
      field_list_method = list_method_id,
      field_count_method = '',
      field_editable_columns = ['title | title'],
      field_columns = ['title | Title',],)
    form.manage_addField('listbox_title', 'Title', 'StringField')

    createZODBPythonScript(
        portal.portal_skins.custom,
        list_method_id,
        'selection=None, **kw',
        "from Products.PythonScripts.standard import Object\n"
        "return [Object(uid='new_', title='Object Title')]")

    request = get_request()
    request['here'] = portal.foo_module
    line_list = [l for l in listbox.get_value('default',
                               render_format='list',
                               REQUEST=request) if l.isDataLine()]
    self.assertEqual(1, len(line_list))
    self.assertEqual('Object Title', line_list[0].getColumnProperty('title'))
    html = listbox.render(REQUEST=request)
    self.assertTrue('Object Title' in html, html)
コード例 #2
0
  def test_06_LineFields(self, quiet=0, run=run_all_test):
    """
       Line Fields are able to render a list parameter in the form
       of lines. The same behaviour is expected for Line Fields used
       in ListBox objects.
    """
    portal = self.getPortal()
    portal.ListBoxZuite_reset()

    # Reset listbox properties
    listbox = portal.FooModule_viewFooList.listbox
    listbox.ListBox_setPropertyList(
      field_list_method = 'portal_catalog',
      field_columns = ['subject_list | Subjects',],
      field_editable_columns = ['subject_list | Subjects',],
    )

    # Create an new empty object with a list property
    foo_module = portal.foo_module
    word = 'averycomplexwordwhichhaslittlechancetoexistinhtml'
    o = foo_module.newContent(subject_list = [word])

    # Make sure that word is the subject list
    self.assertEqual(word in o.getSubjectList(), True)

    # Reindex
    self.tic()

    # Render the module in html
    request = get_request()
    request['here'] = portal.foo_module
    rendered_listbox = listbox.render(REQUEST=request)

    # Make sure that word is there
    self.assertEqual(rendered_listbox.find(word) > 0, True)
コード例 #3
0
  def test_ProxyFieldRenderFormatLines(self):
    # tests that listbox default value in render_format=list mode is
    # compatible with proxy field.
    portal = self.getPortal()
    portal.ListBoxZuite_reset()
    form = portal.FooModule_viewFooList
    listbox = form.listbox
    listbox.ListBox_setPropertyList(
      field_list_method='contentValues',
      field_columns=['listbox_value | Title',],)

    # create a form, to store our proxy field inside
    portal.manage_addProduct['ERP5Form'].addERP5Form('Test_view', 'View')
    portal.Test_view.manage_addField('listbox', 'listbox', 'ProxyField')
    proxy_field = portal.Test_view.listbox
    proxy_field.manage_edit_xmlrpc(dict(
            form_id=form.getId(), field_id='listbox',
            columns=[('proxy_value', 'Proxy')]))

    # this proxy field will not delegate its "columns" value
    proxy_field._surcharged_edit(dict(columns=[('proxy_value', 'Proxy')]),
                                ['columns'])

    request = get_request()
    request['here'] = portal.foo_module
    line_list = proxy_field.get_value('default',
                      render_format='list', REQUEST=request)
    self.assertTrue(isinstance(line_list, list))

    title_line = line_list[0]
    self.assertTrue(title_line.isTitleLine())

    # title of columns is the value overloaded by the proxy field.
    self.assertEqual([('proxy_value', 'Proxy')],
                      title_line.getColumnItemList())
コード例 #4
0
ファイル: testListBox.py プロジェクト: fedoraisahat/erp5
    def test_04_UnicodeParameters(self, quiet=0, run=run_all_test):
        """Unicode properties are handled.
    """
        portal = self.getPortal()
        portal.ListBoxZuite_reset()

        # We create a script to use as a list method
        list_method_id = 'ListBox_ParametersListMethod'
        createZODBPythonScript(
            portal.portal_skins.custom, list_method_id, 'selection=None, **kw',
            """return [context.asContext(alternate_title = u'\xe9lisa')]""")

        # set the listbox to use this as list method
        listbox = portal.FooModule_viewFooList.listbox
        listbox.ListBox_setPropertyList(
            field_list_method=list_method_id,
            field_count_method='',
            field_columns=[
                'alternate_title | Alternate Title',
            ],
        )

        request = get_request()
        request['here'] = portal.foo_module
        try:
            listbox.get_value('default', render_format='list', REQUEST=request)
        except UnicodeError, e:
            self.fail('Rendering failed: %s' % e)
コード例 #5
0
ファイル: PDFTemplate.py プロジェクト: smetsjp/erp5
    def pt_render(self, source=0, extra_context={}):
        doc_xml = ZopePageTemplate.pt_render(self, source=source, extra_context=extra_context)

        # Unmarshall arguments to __call__ API
        args = extra_context.get("options", [])
        kwargs = extra_context.copy()
        if kwargs.has_key("options"):
            del kwargs["options"]
        if kwargs.has_key("context"):
            del kwargs["context"]

        batch_mode = extra_context.get("batch_mode", 0)

        request = extra_context.get("REQUEST", None)
        if not request:
            request = get_request()

        if request.get("debug", 0):
            return doc_xml

        report_tool = getToolByName(self, "portal_report")
        pdf = report_tool.renderPDF(self.pdf_stylesheet, doc_xml, context=self.pt_getContext()["here"], *args, **kwargs)
        if request and not batch_mode:
            request.RESPONSE.setHeader("Content-Type", "application/pdf")
            request.RESPONSE.setHeader("Content-Length", len(pdf))
            request.RESPONSE.setHeader("Content-Disposition", "inline;filename=%s.pdf" % self.title_or_id())

        return pdf
コード例 #6
0
ファイル: testListBox.py プロジェクト: ccwalkerjm/erp5
  def test_UTF8URLColumns(self, quiet=0, run=run_all_test):
    """URL column script can return UTF8 encoded string
    """
    portal = self.getPortal()
    portal.ListBoxZuite_reset()

    # We create a script to use as a url column method
    url_column_method_id = 'Base_get%sUrlColumnMethod' % self.id()
    createZODBPythonScript(
        portal.portal_skins.custom,
        url_column_method_id,
        'selection=None, **kw',
        """return u'http://example.com/?\xe9lisa'.encode('utf8')""")

    listbox = portal.FooModule_viewFooList.listbox
    # here we cover two cases, id has an editable field, title has not
    listbox.ListBox_setPropertyList(
      field_url_columns = [
        'title | %s' % url_column_method_id,
        'id | %s' % url_column_method_id,
        ],)

    foo_module = portal.foo_module
    o = foo_module.newContent(title=u'\xe9lisa')
    o.immediateReindexObject()

    request = get_request()
    request['here'] = portal.foo_module
    try:
      rendered = listbox.get_value('default', render_format='list', REQUEST=request)
    except UnicodeError, e:
      self.fail('Rendering failed: %s' % e)
コード例 #7
0
ファイル: PDFTemplate.py プロジェクト: MarkTang/erp5
    def pt_render(self, source=0, extra_context={}):
      doc_xml = ZopePageTemplate.pt_render(self, source=source, extra_context=extra_context)

      # Unmarshall arguments to __call__ API
      args = extra_context.get('options', [])
      kwargs = extra_context.copy()
      if kwargs.has_key('options'): del kwargs['options']
      if kwargs.has_key('context'): del kwargs['context']

      batch_mode = extra_context.get('batch_mode', 0)

      request = extra_context.get('REQUEST', None)
      if not request:
        request = get_request()

      if request.get('debug',0):
        return doc_xml

      report_tool = getToolByName(self, 'portal_report')
      pdf = report_tool.renderPDF(self.pdf_stylesheet, doc_xml, context=self.pt_getContext()['here'], *args, **kwargs)
      if request and not batch_mode:
        request.RESPONSE.setHeader('Content-Type','application/pdf')
        request.RESPONSE.setHeader('Content-Length',len(pdf))
        request.RESPONSE.setHeader('Content-Disposition','inline;filename=%s.pdf' % self.title_or_id())

      return pdf
コード例 #8
0
ファイル: testListBox.py プロジェクト: jerome-nexedi/erp5
 def stepRenderList(self, sequence=None, sequence_list=None, **kw):
     portal = self.getPortal()
     listbox = portal.FooModule_viewFooList.listbox
     request = get_request()
     request["here"] = portal.foo_module
     listboxline_list = listbox.get_value("default", render_format="list", REQUEST=request)
     sequence.edit(listboxline_list=listboxline_list)
コード例 #9
0
ファイル: OOoChart.py プロジェクト: zamananjum0/erp5
 def render_view(self, field, value, REQUEST=None, key=None, render_format='html', render_prefix=None):
   """
     Render a Chart in read-only.
   """
   if REQUEST is None: REQUEST=get_request()
   return self.render(field, key, value, REQUEST, render_format=render_format,
                      render_prefix=render_prefix)
コード例 #10
0
    def __call__(self, *args, **kwargs):
        warn(
            "ERP5Report to be obsolete, please use ReportBox and normal ERP5Form instead.",
            DeprecationWarning)
        if not self.report_method:
            raise KeyError('report method is not set on the report')

        if 'args' not in kwargs:
            kwargs['args'] = args
        form = self
        obj = getattr(form, 'aq_parent', None)
        if obj is not None:
            container = obj.aq_inner.aq_parent
        else:
            container = None
        pt = getattr(self, self.pt)

        report_method = getattr(obj, self.report_method)
        extra_context = self.pt_getContext()
        extra_context['options'] = kwargs
        extra_context['form'] = self
        extra_context['request'] = get_request()
        extra_context[
            'container'] = container  ## PROBLEM NOT TAKEN INTO ACCOUNT
        extra_context['here'] = obj
        extra_context['report_method'] = report_method
        return pt.pt_render(extra_context=extra_context)
コード例 #11
0
  def test_06_LineFields(self, quiet=0, run=run_all_test):
    """
       Line Fields are able to render a list parameter in the form
       of lines. The same behaviour is expected for Line Fields used
       in ListBox objects.
    """
    portal = self.getPortal()
    portal.ListBoxZuite_reset()

    # Reset listbox properties
    listbox = portal.FooModule_viewFooList.listbox
    listbox.ListBox_setPropertyList(
      field_list_method = 'portal_catalog',
      field_columns = ['subject_list | Subjects',],
      field_editable_columns = ['subject_list | Subjects',],
    )

    # Create an new empty object with a list property
    foo_module = portal.foo_module
    word = 'averycomplexwordwhichhaslittlechancetoexistinhtml'
    o = foo_module.newContent(subject_list = [word])

    # Make sure that word is the subject list
    self.assertEqual(word in o.getSubjectList(), True)

    # Reindex
    o.immediateReindexObject()

    # Render the module in html
    request = get_request()
    request['here'] = portal.foo_module
    rendered_listbox = listbox.render(REQUEST=request)

    # Make sure that word is there
    self.assertEqual(rendered_listbox.find(word) > 0, True)
コード例 #12
0
    def pt_render(self, source=0, extra_context={}):
        doc_xml = ZopePageTemplate.pt_render(self,
                                             source=source,
                                             extra_context=extra_context)

        # Unmarshall arguments to __call__ API
        args = extra_context.get('options', [])
        kwargs = extra_context.copy()
        if kwargs.has_key('options'): del kwargs['options']
        if kwargs.has_key('context'): del kwargs['context']

        batch_mode = extra_context.get('batch_mode', 0)

        request = extra_context.get('REQUEST', None)
        if not request:
            request = get_request()

        if request.get('debug', 0):
            return doc_xml

        report_tool = getToolByName(self, 'portal_report')
        pdf = report_tool.renderPDF(self.pdf_stylesheet,
                                    doc_xml,
                                    context=self.pt_getContext()['here'],
                                    *args,
                                    **kwargs)
        if request and not batch_mode:
            request.RESPONSE.setHeader('Content-Type', 'application/pdf')
            request.RESPONSE.setHeader('Content-Length', len(pdf))
            request.RESPONSE.setHeader(
                'Content-Disposition',
                'inline;filename=%s.pdf' % self.title_or_id())

        return pdf
コード例 #13
0
    def test_UTF8URLColumns(self, quiet=0, run=run_all_test):
        """URL column script can return UTF8 encoded string
    """
        portal = self.getPortal()
        portal.ListBoxZuite_reset()

        # We create a script to use as a url column method
        url_column_method_id = 'Base_get%sUrlColumnMethod' % self.id()
        createZODBPythonScript(
            portal.portal_skins.custom, url_column_method_id,
            'selection=None, **kw',
            """return u'http://example.com/?\xe9lisa'.encode('utf8')""")

        listbox = portal.FooModule_viewFooList.listbox
        # here we cover two cases, id has an editable field, title has not
        listbox.ListBox_setPropertyList(field_url_columns=[
            'title | %s' % url_column_method_id,
            'id | %s' % url_column_method_id,
        ], )

        foo_module = portal.foo_module
        o = foo_module.newContent(title=u'\xe9lisa')
        o.immediateReindexObject()

        request = get_request()
        request['here'] = portal.foo_module
        try:
            rendered = listbox.get_value('default',
                                         render_format='list',
                                         REQUEST=request)
        except UnicodeError, e:
            self.fail('Rendering failed: %s' % e)
コード例 #14
0
 def test_ObjectSupport(self):
   # make sure listbox supports rendering of simple objects
   # the only requirement is that objects have a `uid` attribute which is a
   # string starting by new_ (a convention to prevent indexing of objects).
   portal = self.getPortal()
   list_method_id = 'DummyListMethodId'
   portal.ListBoxZuite_reset()
   form = portal.FooModule_viewFooList
   listbox = form.listbox
   listbox.ListBox_setPropertyList(
     field_list_method = list_method_id,
     field_count_method = '',
     field_editable_columns = ['title | title'],
     field_columns = ['title | Title',],)
   form.manage_addField('listbox_title', 'Title', 'StringField')
   
   createZODBPythonScript(
       portal.portal_skins.custom,
       list_method_id,
       'selection=None, **kw',
       "from Products.PythonScripts.standard import Object\n"
       "return [Object(uid='new_', title='Object Title')]")
   
   request = get_request()
   request['here'] = portal.foo_module
   line_list = [l for l in listbox.get_value('default',
                              render_format='list',
                              REQUEST=request) if l.isDataLine()]
   self.assertEquals(1, len(line_list))
   self.assertEquals('Object Title', line_list[0].getColumnProperty('title'))
   html = listbox.render(REQUEST=request)
   self.failUnless('Object Title' in html, html)
コード例 #15
0
  def test_04_UnicodeParameters(self, quiet=0, run=run_all_test):
    """Unicode properties are handled. 
    """
    portal = self.getPortal()
    portal.ListBoxZuite_reset()
    
    # We create a script to use as a list method
    list_method_id = 'ListBox_ParametersListMethod'
    createZODBPythonScript(
        portal.portal_skins.custom,
        list_method_id,
        'selection=None, **kw',
        """return [context.asContext(alternate_title = u'\xe9lisa')]""")
 
    # set the listbox to use this as list method
    listbox = portal.FooModule_viewFooList.listbox
    listbox.ListBox_setPropertyList(
      field_list_method = list_method_id,
      field_count_method = '',
      field_columns = ['alternate_title | Alternate Title',],)
    
    request = get_request()
    request['here'] = portal.foo_module
    try:
      listbox.get_value('default', render_format='list', REQUEST=request)
    except UnicodeError, e:
      self.fail('Rendering failed: %s' % e)
コード例 #16
0
def getCachedPageTemplate(self, id=None, REQUEST=None):
    global cached_template
    global expires_date
    if id is not None:
        # Get the user id and request
        if not REQUEST:
            REQUEST = get_request()
        user_id = self.portal_membership.getAuthenticatedMember(
        ).getIdOrUserName()
        key = (user_id, id)
        # lookup the cache for time
        now = time.time()
        # if cache exists and time is OK, return cache
        expires = expires_date.get(key, now)
        if expires > now:
            LOG('CACHED:', 0, str(id))
            return cached_template[key]
        # else recompute cache
        method = getattr(self, id, None)
        if method is not None:
            cached_template[key] = method(REQUEST=REQUEST)
            expires_date[key] = now + CACHE_DURATION
        return cached_template[key]
    else:
        return ''
コード例 #17
0
  def test_03_DefaultParameters(self, quiet=quiet, run=run_all_test):
    """Defaults parameters are passed as keyword arguments to the list method
    """
    portal = self.getPortal()
    portal.ListBoxZuite_reset()

    # We create a script to use as a list method, in this script, we will check
    # the default parameter.
    list_method_id = 'ListBox_checkDefaultParametersListMethod'
    createZODBPythonScript(
        portal.portal_skins.custom,
        list_method_id,
        'selection=None, dummy_default_param=None, **kw',
"""
if dummy_default_param != 'dummy value':
  raise AssertionError('recieved wrong arguments: %s instead of "dummy value"'
                        % dummy_default_param )
return []
""")
 
    # set the listbox to use this as list method
    listbox = portal.FooModule_viewFooList.listbox
    listbox.ListBox_setPropertyList(
      field_list_method = list_method_id,
      field_count_method = '',
      field_default_params = 'dummy_default_param | dummy value',)
    
    # render the listbox, checks are done by list method itself
    request = get_request()
    request['here'] = portal.foo_module
    listbox.get_value('default', render_format='list', REQUEST=request)
コード例 #18
0
ファイル: testListBox.py プロジェクト: fedoraisahat/erp5
    def test_03_DefaultParameters(self, quiet=quiet, run=run_all_test):
        """Defaults parameters are passed as keyword arguments to the list method
    """
        portal = self.getPortal()
        portal.ListBoxZuite_reset()

        # We create a script to use as a list method, in this script, we will check
        # the default parameter.
        list_method_id = 'ListBox_checkDefaultParametersListMethod'
        createZODBPythonScript(
            portal.portal_skins.custom, list_method_id,
            'selection=None, dummy_default_param=None, **kw',
            textwrap.dedent("""
        if dummy_default_param != 'dummy value':
          raise AssertionError('recieved wrong arguments: %s instead of "dummy value"'
                                % dummy_default_param )
        return []
        """))

        # set the listbox to use this as list method
        listbox = portal.FooModule_viewFooList.listbox
        listbox.ListBox_setPropertyList(
            field_list_method=list_method_id,
            field_count_method='',
            field_default_params='dummy_default_param | dummy value',
        )

        # render the listbox, checks are done by list method itself
        request = get_request()
        request['here'] = portal.foo_module
        listbox.get_value('default', render_format='list', REQUEST=request)
コード例 #19
0
ファイル: testListBox.py プロジェクト: jerome-nexedi/erp5
    def test_ProxyFieldRenderFormatLines(self):
        # tests that listbox default value in render_format=list mode is
        # compatible with proxy field.
        portal = self.getPortal()
        portal.ListBoxZuite_reset()
        form = portal.FooModule_viewFooList
        listbox = form.listbox
        listbox.ListBox_setPropertyList(field_list_method="contentValues", field_columns=["listbox_value | Title"])

        # create a form, to store our proxy field inside
        portal._setObject("Test_view", ERP5Form("Test_view", "View"))
        portal.Test_view.manage_addField("listbox", "listbox", "ProxyField")
        proxy_field = portal.Test_view.listbox
        proxy_field.manage_edit_xmlrpc(
            dict(form_id=form.getId(), field_id="listbox", columns=[("proxy_value", "Proxy")])
        )

        # this proxy field will not delegate its "columns" value
        proxy_field._surcharged_edit(dict(columns=[("proxy_value", "Proxy")]), ["columns"])

        request = get_request()
        request["here"] = portal.foo_module
        line_list = proxy_field.get_value("default", render_format="list", REQUEST=request)
        self.failUnless(isinstance(line_list, list))

        title_line = line_list[0]
        self.failUnless(title_line.isTitleLine())

        # title of columns is the value overloaded by the proxy field.
        self.assertEquals([("proxy_value", "Proxy")], title_line.getColumnItemList())
コード例 #20
0
ファイル: OOoChart.py プロジェクト: ra2003/erp5
 def render_odf(self,
                field,
                key,
                value,
                REQUEST,
                render_format='ooo',
                render_prefix=None):
     """
   Render a Chart for ODT Style.
 """
     if REQUEST is None: REQUEST = get_request()
     form = field.aq_parent
     here = getattr(form, 'aq_parent', REQUEST)
     REQUEST.set('render_prefix', render_prefix)
     #needed to update REQUEST
     argument_dict = self.getArgumentDict(field, REQUEST)
     from xml.marshal.generic import dumps
     dump_args = dumps(argument_dict)
     #remove xml declaration (first processing node)
     dump_args = dump_args[dump_args.index('?>') + 2:]
     content = '''<office:include path="%s/ERP5Site_buildChart"
                              xlink:type="simple" xlink:actuate="onLoad"
                              xlink:show="embed">%s</office:include>
                              ''' % (here.getPath(), dump_args)
     return content
コード例 #21
0
ファイル: testListBox.py プロジェクト: fedoraisahat/erp5
    def test_02_DefaultSort(self, quiet=quiet, run=run_all_test):
        """Defaults sort parameters must be passed to the list method, under the
    'sort_on' key.
    """
        portal = self.getPortal()
        portal.ListBoxZuite_reset()

        # We create a script to use as a list method, in this script, we will check
        # the sort_on parameter.
        list_method_id = 'ListBox_checkSortOnListMethod'
        createZODBPythonScript(
            portal.portal_skins.custom, list_method_id,
            'selection=None, sort_on=None, **kw',
            textwrap.dedent(r"""
        if sort_on != [('title', 'ASC'), ('uid', 'ASC')]:
          raise AssertionError('sort_on is %r' % sort_on)
        return []
        """))

        # set the listbox to use this as list method
        listbox = portal.FooModule_viewFooList.listbox
        listbox.ListBox_setPropertyList(
            field_list_method=list_method_id,
            field_count_method='',
            field_sort='title | ASC\n'
            'uid | ASC',
        )

        # render the listbox, checks are done by list method itself
        request = get_request()
        request['here'] = portal.foo_module
        listbox.get_value('default', render_format='list', REQUEST=request)
コード例 #22
0
    def resetPassword(self, reset_key=None, REQUEST=None):
        """
    """
        # XXX-Aurel : is it used ?
        if REQUEST is None:
            REQUEST = get_request()
        user_login, expiration_date = self._password_request_dict.get(
            reset_key, (None, None))
        site_url = self.getPortalObject().absolute_url()
        if REQUEST and 'came_from' in REQUEST:
            site_url = REQUEST.came_from
        if reset_key is None or user_login is None:
            ret_url = '%s/login_form' % site_url
            return REQUEST.RESPONSE.redirect(ret_url)

        # check date
        current_date = DateTime()
        if current_date > expiration_date:
            msg = translateString("Date has expire.")
            parameter = urlencode(dict(portal_status_message=msg))
            ret_url = '%s/login_form?%s' % (site_url, parameter)
            return REQUEST.RESPONSE.redirect(ret_url)

        # redirect to form as all is ok
        REQUEST.set("password_key", reset_key)
        return self.reset_password_form(REQUEST=REQUEST)
コード例 #23
0
ファイル: Form.py プロジェクト: poses/erp5
def get_value(self, id, REQUEST=None, **kw):
  if REQUEST is None:
    REQUEST = get_request()
  if REQUEST is not None:
    field = REQUEST.get(
      'field__proxyfield_%s_%s_%s' % (self.id, self._p_oid, id),
      self)
  else:
    field = self

  cache_id = ('Form.get_value',
              self._p_oid,
              field._p_oid,
              id)

  try:
    value = field_value_cache[cache_id]
  except KeyError:
    # either returns non callable value (ex. "Title")
    # or a FieldValue instance of appropriate class
    value, cacheable = getFieldValue(self, field, id, **kw)
    # Do not cache if the field is not stored in zodb,
    # because such field must be used for editing field in ZMI
    # and caching sometimes break these field settings at initialization.
    # As the result, we would see broken field editing screen in ZMI.
    if cacheable and self._p_oid:
      field_value_cache[cache_id] = value

  if callable(value):
    return value(field, id, **kw)
  return value
コード例 #24
0
ファイル: PasswordTool.py プロジェクト: yossistern/erp5
  def resetPassword(self, reset_key=None, REQUEST=None):
    """
    """
    # XXX-Aurel : is it used ?
    if REQUEST is None:
      REQUEST = get_request()
    user_login, expiration_date = self._password_request_dict.get(reset_key, (None, None))
    site_url = self.getPortalObject().absolute_url()
    if REQUEST and 'came_from' in REQUEST:
      site_url = REQUEST.came_from
    if reset_key is None or user_login is None:
      ret_url = '%s/login_form' % site_url
      return REQUEST.RESPONSE.redirect( ret_url )

    # check date
    current_date = DateTime()
    if current_date > expiration_date:
      msg = translateString("Date has expire.")
      parameter = urlencode(dict(portal_status_message=msg))
      ret_url = '%s/login_form?%s' % (site_url, parameter)
      return REQUEST.RESPONSE.redirect( ret_url )

    # redirect to form as all is ok
    REQUEST.set("password_key", reset_key)
    return self.reset_password_form(REQUEST=REQUEST)
コード例 #25
0
  def test_02_DefaultSort(self, quiet=quiet, run=run_all_test):
    """Defaults sort parameters must be passed to the list method, under the
    'sort_on' key.
    """
    portal = self.getPortal()
    portal.ListBoxZuite_reset()

    # We create a script to use as a list method, in this script, we will check
    # the sort_on parameter.
    list_method_id = 'ListBox_checkSortOnListMethod'
    createZODBPythonScript(
        portal.portal_skins.custom,
        list_method_id,
        'selection=None, sort_on=None, **kw',
r"""
if sort_on != [('title', 'ASC'), ('uid', 'ASC')]:
  raise AssertionError('sort_on is %r' % sort_on)
return []
""")
 
    # set the listbox to use this as list method
    listbox = portal.FooModule_viewFooList.listbox
    listbox.ListBox_setPropertyList(
      field_list_method = list_method_id,
      field_count_method = '',
      field_sort = 'title | ASC\n'
                   'uid | ASC',)
    
    # render the listbox, checks are done by list method itself
    request = get_request()
    request['here'] = portal.foo_module
    listbox.get_value('default', render_format='list', REQUEST=request)
コード例 #26
0
 def stepRenderList(self, sequence = None, sequence_list = None, **kw):
   portal = self.getPortal()
   listbox = portal.FooModule_viewFooList.listbox
   request = get_request()
   request['here'] = portal.foo_module
   listboxline_list = listbox.get_value('default', render_format = 'list',
                                        REQUEST = request)
   sequence.edit(listboxline_list = listboxline_list)
コード例 #27
0
ファイル: Report.py プロジェクト: joehelmstetler/erp5
    def pushReport(self, context, render_prefix=None):
        self.pushRequest()

        REQUEST = get_request()
        portal_selections = context.portal_selections
        selection_list = [self.selection_name]
        # when the Form which is specified by form_id, has a listbox, make prefixed_selection_name.
        # which is based on specified selection_name in the listbox.
        form_id = self.getFormId()
        if form_id:
            listbox = getattr(getattr(context, form_id), "listbox", None)
            if listbox is not None:
                selection_name = listbox.get_value("selection_name")
                if render_prefix is not None:
                    selection_name = "%s_%s" % (render_prefix, selection_name)
                    REQUEST.other["prefixed_selection_name"] = selection_name
                selection_list.append(selection_name)
        # save report's selection and orignal form's selection,
        # as ListBox will overwrite it
        for selection_name in filter(lambda x: x is not None, selection_list):
            if self.temporary_selection:
                portal_selections.pushSelection(selection_name)
            else:
                if portal_selections.getSelectionFor(selection_name) is None:
                    portal_selections.setSelectionFor(selection_name, Selection(selection_name))

            if self.selection_report_list is not None:
                selection = portal_selections.getSelectionFor(selection_name, REQUEST=REQUEST)
                selection.edit(report_list=self.selection_report_list)
            if self.selection_report_path is not None:
                selection = portal_selections.getSelectionFor(selection_name, REQUEST=REQUEST)
                selection.edit(report_path=self.selection_report_path)
            if self.listbox_display_mode is not None:
                # XXX Dirty fix, to be able to change the display mode in form_view
                REQUEST.list_selection_name = selection_name
                portal_selections.setListboxDisplayMode(
                    REQUEST, self.listbox_display_mode, selection_name=selection_name
                )
            if self.selection_params is not None:
                params = portal_selections.getSelectionParamsFor(selection_name, REQUEST=REQUEST)
                params.update(self.selection_params)
                portal_selections.setSelectionParamsFor(selection_name, params, REQUEST=REQUEST)
            if self.selection_columns is not None:
                portal_selections.setSelectionColumns(selection_name, self.selection_columns, REQUEST=REQUEST)
            if self.selection_sort_order is not None:
                portal_selections.setSelectionSortOrder(selection_name, self.selection_sort_order, REQUEST=REQUEST)
            if self.selection_stats is not None:
                portal_selections.setSelectionStats(selection_name, self.selection_stats, REQUEST=REQUEST)

        # When rendering a report section with a listbox, listbox gets parameters
        # from request.form and edits selection with those parameters, so if you
        # happen to pass explicitly selection params that have the same name as
        # some request parameters (some dialog fields) but different values,
        # listbox would not use your explicit parameters, but the ones from
        # REQUEST.form, so we remove eventual request parameters that have the same
        # name of selections parameters passed explicitly.
        for selection_parameter in self.selection_params or ():
            REQUEST.form.pop(selection_parameter, None)
コード例 #28
0
ファイル: Report.py プロジェクト: MarkTang/erp5
 def pushRequest(self):
   self = aq_base(self)
   if hasattr(self, '_REQUEST'):
     raise ValueError, "can not replace the backupped REQUEST"
   self._REQUEST = {'form': {}, 'other': {},}
   REQUEST = get_request()
   self._REQUEST['form'].update(REQUEST.form)
   self._REQUEST['other'].update(REQUEST.other)
   REQUEST.form.update(self.param_dict)
コード例 #29
0
ファイル: Report.py プロジェクト: joehelmstetler/erp5
 def pushRequest(self):
     self = aq_base(self)
     if hasattr(self, "_REQUEST"):
         raise ValueError, "can not replace the backupped REQUEST"
     self._REQUEST = {"form": {}, "other": {}}
     REQUEST = get_request()
     self._REQUEST["form"].update(REQUEST.form)
     self._REQUEST["other"].update(REQUEST.other)
     REQUEST.form.update(self.param_dict)
コード例 #30
0
    def changeUserPassword(self,
                           password,
                           password_key,
                           password_confirm=None,
                           user_login=None,
                           REQUEST=None,
                           **kw):
        """
    Reset the password for a given login
    """

        # BBB: password_confirm: unused argument
        def error(message):
            # BBB: should "raise Redirect" instead of just returning, simplifying
            #      calling code and making mistakes more difficult
            # BBB: should probably not translate message when REQUEST is None
            message = translateString(message)
            if REQUEST is None:
                return message
            return REQUEST.RESPONSE.redirect(
                site_url + '/login_form?' +
                urlencode({
                    'portal_status_message': message,
                }))

        if REQUEST is None:
            REQUEST = get_request()
        if self.getWebSiteValue():
            site_url = self.getWebSiteValue().absolute_url()
        elif REQUEST and 'came_from' in REQUEST:
            site_url = REQUEST.came_from
        else:
            site_url = self.getPortalObject().absolute_url()
        try:
            register_user_login, expiration_date = self._password_request_dict[
                password_key]
        except KeyError:
            # XXX: incorrect grammar and not descriptive enough
            return error('Key not known. Please ask reset password.')
        if user_login is not None and register_user_login != user_login:
            # XXX: not descriptive enough
            return error("Bad login provided.")
        if DateTime() > expiration_date:
            # XXX: incorrect grammar
            return error("Date has expire.")
        del self._password_request_dict[password_key]
        persons = self.getPortalObject().acl_users.erp5_users.getUserByLogin(
            register_user_login)
        person = persons[0]
        person._forceSetPassword(password)
        person.reindexObject()
        if REQUEST is not None:
            return REQUEST.RESPONSE.redirect(
                site_url + '/login_form?' + urlencode({
                    'portal_status_message':
                    translateString("Password changed."),
                }))
コード例 #31
0
 def pushRequest(self):
   self = aq_base(self)
   if hasattr(self, '_REQUEST'):
     raise ValueError("can not replace the backupped REQUEST")
   self._REQUEST = {'form': {}, 'other': {},}
   REQUEST = get_request()
   self._REQUEST['form'].update(REQUEST.form)
   self._REQUEST['other'].update(REQUEST.other)
   REQUEST.form.update(self.param_dict)
コード例 #32
0
ファイル: testListBox.py プロジェクト: poses/erp5
    def _helperEditableColumn(self, editable_in_listbox, editable_in_line,
                              expected_editable):
        portal = self.getPortal()
        portal.ListBoxZuite_reset()

        field_name = 'editableproperty_%s_%s' \
                        % (editable_in_listbox, editable_in_line)
        field_name = field_name.lower()
        field_id = 'listbox_%s' % field_name

        # Reset listbox properties
        listbox = portal.FooModule_viewFooList.listbox
        kw = dict(
            field_list_method='portal_catalog',
            field_columns=[
                '%s | Check extra' % field_name,
            ],
        )
        if editable_in_listbox:
            kw['field_editable_columns'] = '%s | Check extra' % field_name

        listbox.ListBox_setPropertyList(**kw)

        form = portal.FooModule_viewFooList
        form.manage_addField(field_id, field_name, "StringField")
        field = getattr(form, field_id)

        field.values['default'] = '42'
        field.values['editable'] = editable_in_line
        form.groups['bottom'].remove(field_id)
        form.groups['hidden'].append(field_id)

        # Create an new empty object with a list property
        foo_module = portal.foo_module
        o = foo_module.newContent()

        # Reindex
        o.immediateReindexObject()

        # Render the module in html
        request = get_request()
        request['here'] = portal.foo_module
        rendered_listbox = listbox.render(REQUEST=request)

        html = etree.HTML(rendered_listbox)
        # When a StringField is editable, it is rendered as an input
        # with name: "field_%(field_id)s_%(object_id)s"
        editable_field_list = html.xpath(
            '//input[starts-with(@name, $name)]',
            name='field_%s_' % field_id,
        )

        msg = "editable_in_listbox: %s, editable_in_line: %s" \
                % (editable_in_listbox, editable_in_line)
        self.assertEquals(
            len(editable_field_list) == 1, expected_editable, msg)
コード例 #33
0
 def stepRenderStructure(self, sequence=None, sequence_list=None, **kw):
     portal = self.getPortal()
     context = portal.foo_module['0']
     planningbox = context.Foo_viewPlanningBox.planning_box
     request = get_request()
     request['here'] = context
     #planningboxline_list = planningbox.get_value('default', REQUEST = request)
     basic, planning = planningbox.widget.render_structure(
         field=planningbox, REQUEST=request, context=context)
     sequence.edit(planning_box=planningbox, basic=basic, planning=planning)
コード例 #34
0
ファイル: Report.py プロジェクト: MarkTang/erp5
 def popRequest(self):
   self = aq_base(self)
   if not hasattr(self, '_REQUEST'):
     raise ValueError, "no backupped REQUEST"
   REQUEST = get_request()
   REQUEST.form.clear()
   REQUEST.other.clear()
   REQUEST.form.update(self._REQUEST['form'])
   REQUEST.other.update(self._REQUEST['other'])
   del self._REQUEST
コード例 #35
0
 def popRequest(self):
     self = aq_base(self)
     if not hasattr(self, '_REQUEST'):
         raise ValueError("no backupped REQUEST")
     REQUEST = get_request()
     REQUEST.form.clear()
     REQUEST.other.clear()
     REQUEST.form.update(self._REQUEST['form'])
     REQUEST.other.update(self._REQUEST['other'])
     del self._REQUEST
コード例 #36
0
  def render(self, name='', extension='sxw', source=False):
    """
    returns the OOo document
    """
    if name and not(source):
      request = get_request()
      request.response.setHeader('Content-Disposition',
                              'attachment; filename=%s.%s' % (name, extension))

    self._document.seek(0)
    return self._document.read()
コード例 #37
0
  def _helperEditableColumn(self, editable_in_listbox, editable_in_line,
      expected_editable):
    portal = self.getPortal()
    portal.ListBoxZuite_reset()

    field_name = 'editableproperty_%s_%s' \
                    % (editable_in_listbox, editable_in_line)
    field_name = field_name.lower()
    field_id = 'listbox_%s' % field_name

    # Reset listbox properties
    listbox = portal.FooModule_viewFooList.listbox
    kw = dict(
      field_list_method = 'portal_catalog',
      field_columns = ['%s | Check extra' % field_name,],
    )
    if editable_in_listbox:
      kw['field_editable_columns'] = '%s | Check extra' % field_name

    listbox.ListBox_setPropertyList(**kw)


    form = portal.FooModule_viewFooList
    form.manage_addField(field_id, field_name, "StringField")
    field = getattr(form, field_id)

    field.values['default'] = '42'
    field.values['editable'] = editable_in_line
    form.groups['bottom'].remove(field_id)
    form.groups['hidden'].append(field_id)

    # Create an new empty object with a list property
    foo_module = portal.foo_module
    o = foo_module.newContent()

    # Reindex
    o.immediateReindexObject()

    # Render the module in html
    request = get_request()
    request['here'] = portal.foo_module
    rendered_listbox = listbox.render(REQUEST=request)

    html = etree.HTML(rendered_listbox)
    # When a StringField is editable, it is rendered as an input
    # with name: "field_%(field_id)s_%(object_id)s"
    editable_field_list = html.xpath(
                            '//input[starts-with(@name, $name)]',
                            name='field_%s_' % field_id,
                          )

    msg = "editable_in_listbox: %s, editable_in_line: %s" \
            % (editable_in_listbox, editable_in_line)
    self.assertEquals(len(editable_field_list) == 1, expected_editable, msg)
コード例 #38
0
 def install():
   from ZPublisher.BaseRequest import RequestContainer
   from Products.ERP5Type.Globals import get_request
   portal = self.getPortalObject()
   # BusinessTemplate.install needs a request
   template_tool = portal.aq_base.__of__(portal.aq_parent.__of__(
     RequestContainer(REQUEST=get_request()))).portal_templates
   if template_tool.getInstalledBusinessTemplate(bt_name) is None:
     from Products.ERP5.ERP5Site import getBootstrapBusinessTemplateUrl
     url = getBootstrapBusinessTemplateUrl(bt_name)
     template_tool.download(url).install()
コード例 #39
0
ファイル: ReportBox.py プロジェクト: zamananjum0/erp5
 def render_view(self,
                 field,
                 value,
                 REQUEST=None,
                 key='reportbox',
                 render_prefix=None):
     """
 """
     if REQUEST is None:
         REQUEST = get_request()
     return self.render(field, key, value, REQUEST)
コード例 #40
0
ファイル: ProxyField.py プロジェクト: ra2003/erp5
  def get_value(self, id, **kw):
    if id in self.widget.property_names:
      return ZMIField.get_value(self, id, **kw)
    if not self.is_delegated(id):
      original_template_field = self.getRecursiveTemplateField()
      function = getOriginalGetValueFunction(original_template_field, id)
      if function is not None:
        return function(self, id, **kw)
      else:
        return ZMIField.get_value(self, id, **kw)

    field = self
    proxy_field = self.getTemplateField()
    REQUEST = kw.get('REQUEST', get_request())
    if proxy_field is not None and REQUEST is not None:
      field = REQUEST.get(
        'field__proxyfield_%s_%s_%s' % (self.id, self._p_oid, id),
        self)
      REQUEST.set(
        'field__proxyfield_%s_%s_%s' % (proxy_field.id, proxy_field._p_oid, id),
        field)

    # Don't use cache if field is not stored in zodb, or if target field is
    # defined by a TALES
    if self._p_oid is None or self.tales['field_id'] or self.tales['form_id']:
      return self._get_value(id, **kw)
      # XXX: Are these disabled?
      proxy_field = self.getTemplateField(cache=False)
      if proxy_field is not None:
        return proxy_field.get_value(id, **kw)
      else:
        return None

    cache_id = ('ProxyField.get_value',
                self._p_oid,
                field._p_oid,
                id)

    from Products.ERP5Form.Form import field_value_cache
    try:
      value = field_value_cache[cache_id]
    except KeyError:
      # either returns non callable value (ex. "Title")
      # or a FieldValue instance of appropriate class
      value, cacheable = self.getFieldValue(field, id, **kw)
      if cacheable:
        field_value_cache[cache_id] = value

    if value is _USE_ORIGINAL_GET_VALUE_MARKER:
      return proxy_field.get_value(id, **kw)

    if callable(value):
      return value(field, id, **kw)
    return value
コード例 #41
0
ファイル: PropertySheetTool.py プロジェクト: Verde1705/erp5
 def install():
   from ZPublisher.BaseRequest import RequestContainer
   from Products.ERP5Type.Globals import get_request
   portal = self.getPortalObject()
   # BusinessTemplate.install needs a request
   template_tool = portal.aq_base.__of__(portal.aq_parent.__of__(
     RequestContainer(REQUEST=get_request()))).portal_templates
   if template_tool.getInstalledBusinessTemplate(bt_name) is None:
     from Products.ERP5.ERP5Site import getBootstrapBusinessTemplateUrl
     url = getBootstrapBusinessTemplateUrl(bt_name)
     template_tool.download(url).install()
コード例 #42
0
ファイル: ProxyField.py プロジェクト: poses/erp5
  def get_value(self, id, **kw):
    if id in self.widget.property_names:
      return ZMIField.get_value(self, id, **kw)
    if not self.is_delegated(id):
      original_template_field = self.getRecursiveTemplateField()
      function = getOriginalGetValueFunction(original_template_field, id)
      if function is not None:
        return function(self, id, **kw)
      else:
        return ZMIField.get_value(self, id, **kw)

    field = self
    proxy_field = self.getTemplateField()
    REQUEST = kw.get('REQUEST', get_request())
    if proxy_field is not None and REQUEST is not None:
      field = REQUEST.get(
        'field__proxyfield_%s_%s_%s' % (self.id, self._p_oid, id),
        self)
      REQUEST.set(
        'field__proxyfield_%s_%s_%s' % (proxy_field.id, proxy_field._p_oid, id),
        field)

    # Don't use cache if field is not stored in zodb, or if target field is
    # defined by a TALES
    if self._p_oid is None or self.tales['field_id'] or self.tales['form_id']:
      return self._get_value(id, **kw)
      # XXX: Are these disabled?
      proxy_field = self.getTemplateField(cache=False)
      if proxy_field is not None:
        return proxy_field.get_value(id, **kw)
      else:
        return None

    cache_id = ('ProxyField.get_value',
                self._p_oid,
                field._p_oid,
                id)

    from Products.ERP5Form.Form import field_value_cache
    try:
      value = field_value_cache[cache_id]
    except KeyError:
      # either returns non callable value (ex. "Title")
      # or a FieldValue instance of appropriate class
      value, cacheable = self.getFieldValue(field, id, **kw)
      if cacheable:
        field_value_cache[cache_id] = value

    if value is _USE_ORIGINAL_GET_VALUE_MARKER:
      return proxy_field.get_value(id, **kw)

    if callable(value):
      return value(field, id, **kw)
    return value
コード例 #43
0
ファイル: tool.erp5.PasswordTool.py プロジェクト: ra2003/erp5
    def changeUserPassword(self,
                           password,
                           password_key,
                           password_confirm=None,
                           user_login=None,
                           REQUEST=None,
                           **kw):
        """
    Reset the password for a given login
    """

        # BBB: password_confirm: unused argument
        def error(message):
            # BBB: should "raise Redirect" instead of just returning, simplifying
            #      calling code and making mistakes more difficult
            # BBB: should probably not translate message when REQUEST is None
            message = translateString(message)
            return redirect(REQUEST, site_url, message)

        if REQUEST is None:
            REQUEST = get_request()
        if self.getWebSiteValue():
            site_url = self.getWebSiteValue().absolute_url()
        elif REQUEST and 'came_from' in REQUEST:
            site_url = REQUEST.came_from
        else:
            site_url = self.getPortalObject().absolute_url()
        try:
            register_user_login, expiration_date = self._password_request_dict[
                password_key]
        except (KeyError, TypeError):
            # XXX: incorrect grammar and not descriptive enough
            return error('Key not known. Please ask reset password.')
        if user_login is not None and register_user_login != user_login:
            # XXX: not descriptive enough
            return error("Bad login provided.")
        if DateTime() > expiration_date:
            # XXX: incorrect grammar
            return error("Date has expire.")
        del self._password_request_dict[password_key]
        portal = self.getPortalObject()
        user_dict, = portal.acl_users.searchUsers(
            login=register_user_login,
            exact_match=True,
        )
        login_dict, = user_dict['login_list']
        login = portal.unrestrictedTraverse(login_dict['path'])
        login.checkPasswordValueAcceptable(
            password)  # this will raise if password does not match policy
        login._forceSetPassword(password)
        login.reindexObject()
        return redirect(REQUEST, site_url,
                        translateString("Password changed."))
コード例 #44
0
ファイル: ObjectMessage.py プロジェクト: Verde1705/erp5
  def getObject(self):
    """
    Get the Object.
    """
    from Products.ERP5Type.Globals import get_request
    request = get_request()['PARENTS']
    if request is not None:
      for item in request:
        if item.meta_type == 'ERP5 Site':
          return item.unrestrictedTraverse(self.object_relative_url)

    return None
コード例 #45
0
    def getObject(self):
        """
    Get the Object.
    """
        from Products.ERP5Type.Globals import get_request
        request = get_request()['PARENTS']
        if request is not None:
            for item in request:
                if item.meta_type == 'ERP5 Site':
                    return item.unrestrictedTraverse(self.object_relative_url)

        return None
コード例 #46
0
 def render(self, field, key, value, REQUEST, render_prefix=None):
     """
   Render editor
 """
     if REQUEST is None:
         REQUEST = get_request()
     here = REQUEST['here']
     text_editor = field.get_value('text_editor')
     if text_editor == "svg_editor":
         svg_editor_support = getattr(here, 'svg_editor_support', None)
         if svg_editor_support is not None:
             return svg_editor_support.pt_render()
     elif text_editor == "spreadsheet_editor":
         sheet_editor_support = getattr(here, 'sheet_editor_support', None)
         if sheet_editor_support is not None:
             return sheet_editor_support.pt_render()
     elif text_editor == 'ace':
         ace_editor_support = getattr(here, 'ace_editor_support', None)
         if ace_editor_support is not None:
             return ace_editor_support.pt_render(extra_context={
                 'field': field,
                 'content': value,
                 'id': key
             })
     elif text_editor == 'codemirror':
         code_mirror_support = getattr(here, 'code_mirror_support', None)
         if code_mirror_support is not None:
             mode = "python"
             portal_type = here.getPortalType()
             if portal_type == "Web Page":
                 mode = "htmlmixed"
             elif portal_type == "Web Script":
                 mode = "javascript"
             elif portal_type == "Web Style":
                 mode = "css"
             site_root = here.getWebSiteValue() or here.getPortalObject()
             portal_type = here.getPortalType()
             return code_mirror_support(
                 field=field,
                 content=value,
                 field_id=key,
                 portal_url=site_root.absolute_url(),
                 mode=mode,
                 keymap=site_root.portal_preferences.
                 getPreferredSourceCodeEditorKeymap(),
                 portal_type=portal_type)
     elif text_editor != 'text_area':
         return here.fckeditor_wysiwyg_support.pt_render(extra_context={
             'inputvalue': value,
             'inputname': key
         })
     return Widget.TextAreaWidget.render(self, field, key, value, REQUEST)
コード例 #47
0
    def _physicalPathToVirtualPath(self, path):
        """
      Remove the path to the VirtualRoot from a physical path
      and add the path to the WebSite if any
    """
        if isinstance(path, str):
            path = path.split('/')

        # Every Web Section acts as a mini site though layout for document editing is the root layout
        #website_path = self._v_request.get(WEBSECTION_KEY, self._v_request.get(WEBSITE_KEY, None))
        # Only consider Web Site for absolute_url
        request = getattr(self, '_v_request', None)
        if request is None: request = self._v_request = get_request()
        # In ignore_layout case, we only remove empty element from path
        # XXX more support required for ignore_layout?
        if request.get('ignore_layout', None):
            return HTTPRequest.physicalPathToVirtualPath(request, path)
        website_path = request.get(WEBSITE_KEY, None)
        select_language = request.get(WEBSITE_LANGUAGE_KEY, None)
        if website_path:
            website_path = tuple(website_path)  # Make sure all path are tuples
            path = tuple(path)  # Make sure all path are tuples
            if select_language:
                website_path = website_path + (select_language,
                                               )  # Add the language part
            # Search for the common part index
            # XXX more testing should be added to check
            # if the URL is the kind of URL which is a Web Site
            common_index = 0
            i = 0
            path_len = len(path)
            for name in website_path:
                if i >= path_len:
                    break
                if path[i] == name:
                    common_index = i
                i += 1
            # Insert the web site path after the common part of the path
            if path_len > common_index + 1:
                path = website_path + path[common_index + 1:]
        rpp = request.other.get('VirtualRootPhysicalPath', ('', ))
        i = 0
        for name in rpp[:len(path)]:
            if path[i] == name:
                i = i + 1
            else:
                break
        #if self._v_request.has_key(DOCUMENT_NAME_KEY):
        #  # Replace the last id of the path with the name which
        #  # was used to lookup the document
        #  path = path[:-1] + (self._v_request[DOCUMENT_NAME_KEY],)
        return path[i:]
コード例 #48
0
ファイル: Form.py プロジェクト: poses/erp5
 def __call__(self, field, id, **kw):
   # By default, pages are editable and
   # fields are editable if they are set to editable mode
   # However, if the REQUEST defines editable_mode to 0
   # then all fields become read only.
   # This is useful to render ERP5 content as in a web site (ECommerce)
   # editable_mode should be set for example by the page template
   # which defines the current layout
   REQUEST = kw.get('REQUEST', get_request())
   if REQUEST is not None:
     if not REQUEST.get('editable_mode', 1):
       return 0
   return self.value
コード例 #49
0
ファイル: testPlanningBox.py プロジェクト: Verde1705/erp5
 def stepRenderStructure(self, sequence = None, sequence_list = None, **kw):
   portal = self.getPortal()
   context = portal.foo_module['0']
   planningbox = context.Foo_viewPlanningBox.planning_box
   request = get_request()
   request['here'] = context
   #planningboxline_list = planningbox.get_value('default', REQUEST = request)
   basic, planning = planningbox.widget.render_structure(field=planningbox,
                                                         REQUEST=request,
                                                         context=context)
   sequence.edit(planning_box = planningbox,
                   basic=basic,
                   planning=planning)
コード例 #50
0
 def test_ListboxRequestParameterPropagandation(self):
   """
     Test that rendering a listbox field will set respective form & field_id of current form
     in REQUEST for further usage by used by litsbox's columns methods.
   """
   portal = self.getPortal()
   request = get_request()
   portal.ListBoxZuite_reset()
   form = portal.FooModule_viewFooList
   self.assertEqual(None, request.get('listbox_form_id'))
   form.render()
   self.assertEqual(form.getId(), request.get('listbox_form_id'))
   self.assertEqual(form.listbox.getId(), request.get('listbox_field_id'))
コード例 #51
0
ファイル: Form.py プロジェクト: Soufianeterhzaz/erp5
 def __call__(self, field, id, **kw):
   REQUEST = get_request()
   try:
     form = field.aq_parent
     ob = REQUEST.get('cell', getattr(form, 'aq_parent', None))
     value = self.value
     try:
       if value not in (None, ''):
         # If a default value is defined on the field, it has precedence
         value = ob.getProperty(self.key, d=value)
       else:
         # else we should give a chance to the accessor to provide
         # a default value (including None)
         value = ob.getProperty(self.key)
     except Unauthorized:
       value = ob.getProperty(self.key, d=value, checked_permission='View')
       REQUEST = kw.get('REQUEST', get_request())
       if REQUEST is not None:
         REQUEST.set('read_only_%s' % self.key, 1)
   except (KeyError, AttributeError):
     value = None
   return self.returnValue(field, id, value)
コード例 #52
0
ファイル: testListBox.py プロジェクト: fedoraisahat/erp5
 def test_ListboxRequestParameterPropagandation(self):
     """
   Test that rendering a listbox field will set respective form & field_id of current form
   in REQUEST for further usage by used by litsbox's columns methods.
 """
     portal = self.getPortal()
     request = get_request()
     portal.ListBoxZuite_reset()
     form = portal.FooModule_viewFooList
     self.assertEqual(None, request.get('listbox_form_id'))
     form.render()
     self.assertEqual(form.getId(), request.get('listbox_form_id'))
     self.assertEqual(form.listbox.getId(), request.get('listbox_field_id'))
コード例 #53
0
ファイル: WebSite.py プロジェクト: bhuvanaurora/erp5
  def _physicalPathToVirtualPath(self, path):
    """
      Remove the path to the VirtualRoot from a physical path
      and add the path to the WebSite if any
    """
    if isinstance(path, str):
      path = path.split( '/')

    # Every Web Section acts as a mini site though layout for document editing is the root layout
    #website_path = self._v_request.get(WEBSECTION_KEY, self._v_request.get(WEBSITE_KEY, None))
    # Only consider Web Site for absolute_url
    request = getattr(self, '_v_request', None)
    if request is None: request = self._v_request = get_request()
    # In ignore_layout case, we only remove empty element from path
    # XXX more support required for ignore_layout?
    if request.get('ignore_layout', None):
      return HTTPRequest.physicalPathToVirtualPath(request, path)
    website_path = request.get(WEBSITE_KEY, None)
    select_language = request.get(WEBSITE_LANGUAGE_KEY, None)
    if website_path:
      website_path = tuple(website_path)    # Make sure all path are tuples
      path = tuple(path)                    # Make sure all path are tuples
      if select_language:
        website_path = website_path + (select_language,)      # Add the language part
      # Search for the common part index
      # XXX more testing should be added to check
      # if the URL is the kind of URL which is a Web Site
      common_index = 0
      i = 0
      path_len = len(path)
      for name in website_path:
        if i >= path_len:
          break
        if path[i] == name:
          common_index = i
        i += 1
      # Insert the web site path after the common part of the path
      if path_len > common_index + 1:
        path = website_path + path[common_index + 1:]
    rpp = request.other.get('VirtualRootPhysicalPath', ('', ))
    i = 0
    for name in rpp[:len(path)]:
      if path[i] == name:
        i = i + 1
      else:
        break
    #if self._v_request.has_key(DOCUMENT_NAME_KEY):
    #  # Replace the last id of the path with the name which
    #  # was used to lookup the document
    #  path = path[:-1] + (self._v_request[DOCUMENT_NAME_KEY],)
    return path[i:]
コード例 #54
0
ファイル: PasswordTool.py プロジェクト: yossistern/erp5
  def changeUserPassword(self, password, password_key, password_confirm=None,
                         user_login=None, REQUEST=None, **kw):
    """
    Reset the password for a given login
    """
    # BBB: password_confirm: unused argument
    def error(message):
      # BBB: should "raise Redirect" instead of just returning, simplifying
      #      calling code and making mistakes more difficult
      # BBB: should probably not translate message when REQUEST is None
      message = translateString(message)
      if REQUEST is None:
        return message
      return REQUEST.RESPONSE.redirect(
        site_url + '/login_form?' + urlencode({
          'portal_status_message': message,
        })
      )

    if REQUEST is None:
      REQUEST = get_request()
    if self.getWebSiteValue():
      site_url = self.getWebSiteValue().absolute_url()
    elif REQUEST and 'came_from' in REQUEST:
      site_url = REQUEST.came_from
    else:
      site_url = self.getPortalObject().absolute_url()
    try:
      register_user_login, expiration_date = self._password_request_dict[
        password_key]
    except KeyError:
      # XXX: incorrect grammar and not descriptive enough
      return error('Key not known. Please ask reset password.')
    if user_login is not None and register_user_login != user_login:
      # XXX: not descriptive enough
      return error("Bad login provided.")
    if DateTime() > expiration_date:
      # XXX: incorrect grammar
      return error("Date has expire.")
    del self._password_request_dict[password_key]
    persons = self.getPortalObject().acl_users.erp5_users.getUserByLogin(
      register_user_login)
    person = persons[0]
    person._forceSetPassword(password)
    person.reindexObject()
    if REQUEST is not None:
      return REQUEST.RESPONSE.redirect(
        site_url + '/login_form?' + urlencode({
          'portal_status_message': translateString("Password changed."),
        })
      )
コード例 #55
0
ファイル: Form.py プロジェクト: poses/erp5
 def __call__(self, field, id, **kw):
   try:
     form = field.aq_parent
     ob = getattr(form, 'aq_parent', None)
     value = self.value
     try:
       value = ob.getProperty(self.key)
     except Unauthorized:
       value = ob.getProperty(self.key, d=value, checked_permission='View')
       REQUEST = kw.get('REQUEST', get_request())
       if REQUEST is not None:
         REQUEST.set('read_only_%s' % self.key, 1)
   except (KeyError, AttributeError):
     value = None
   return self.returnValue(field, id, value)
コード例 #56
0
 def render_view(self, field, value, REQUEST=None, render_prefix=None):
   """
   Render read only field.
   """
   if (value not in ((), [], None, '')) and field.get_value('allow_jump'):
     if not isinstance(value, (list, tuple)):
       value = value,
     html_string = '<br />'.join(
       '<a class="relationfieldlink" href="%s">%s</a>' % (
         escape(jump_reference.absolute_url()),
         escape(display_value),
       )
       for jump_reference, display_value in zip(
         getattr(
           self._getContextValue(field, REQUEST),
           'get%sValueList' % ''.join(
             part.capitalize()
             for part in field.get_value('base_category').split('_')
           )
         )(
           portal_type=[x[0] for x in field.get_value('portal_type')],
           filter=dict(field.get_value('parameter_list')),
         ),
         value,
       )
     )
   else:
     html_string = self.default_widget_rendering_instance.render_view(
       field,
       value,
       REQUEST=REQUEST,
     )
     if REQUEST is None:
       REQUEST = get_request()
     relation_html_string = self.render_relation_link(field, value, REQUEST)
     if relation_html_string:
       html_string += NBSP + NBSP + relation_html_string
   extra = field.get_value('extra')
   if extra not in (None, ''):
     html_string = "<div %s>%s</div>" % (extra, html_string)
   css_class = field.get_value('css_class')
   if css_class not in ('', None):
     html_string = '<span class="%s">%s</span>' % (
       escape(css_class),
       html_string,
     )
   return html_string