{ "info": { "author": "Benoit Suttor - CIRB/CIBG", "author_email": "bsuttor@cirb.irisnet.be", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Plone", "Framework :: Plone :: 4.0", "Framework :: Plone :: 4.1", "Framework :: Plone :: 4.2", "Intended Audience :: End Users/Desktop", "Intended Audience :: System Administrators", "License :: OSI Approved :: GNU General Public License (GPL)", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": ".. contents::\n\nIntroduction\n============\n\nThis product adds support for FAQ's in Plone. It defines Archetypes-based\ncontent types \"FAQ Item\", \"FAQ Folder\" and \"FAQ group\". It defines two views\nfor the \"FAQ folder\" type. For all content types, you can set a content\nobject's language using the \"Language\" field. \n\nFeatures:\n\n- Two views for a FAQ Folder:\n\n * `index_view` shows links to FAQ Items in the FAQ Folder\n * `all_view` shows FAQ Items and their answers on one page\n- A viewlet on FAQ Items which displays a link to the contact form.\n- The FAQ Folder's views are available also on a Topic, so you can\n compose Topics of FAQ Items according to your own criteria and\n view them in the same way you would view a FAQ Folder.\n- In a CollectionPortlet with id `faq`, links will be opened in an overlay.\n\nChangelog\n=========\n\n0.5 (2012-07-02)\n----------------\n\n- Tested Plone 4.2 compatibility. [hvelarde]\n- Added installation and content type tests. [hvelarde]\n- Added buildout configurations for development and testing. [hvelarde]\n- Fixed package distribution. [hvelarde]\n- Fix view entry for types [lepri]\n- Create menu entry for views [lepri]\n- Fixed \"NameError: global name 'cat' is not defined\". [hvelarde]\n- Brazilian portuguese translation added [lepri]\n- Fix rst markup in documentation formatting\n- Add viewlet to link to contact form\n- Show \"related items\" in `onefaqview`.\n\n\n0.4 (2011-04-12)\n----------------\n\n- Add a view for one single faq (no more the default view)\n\n\n0.3 (2011-03-09)\n----------------\n\n- Add English in locales\n- Add index view\n- Change template for AnySurfer compliant\n- Created recipe with ZopeSkel\n [Benoit Suttor - CIRB/CIBG]\n\n\nDetailed information\n====================\n\nThis is a full-blown functional test. The emphasis here is on testing what\nthe user may input and see, and the system is largely tested as a black box.\nWe use PloneTestCase to set up this test as well, so we have a full Plone site\nto play with. We *can* inspect the state of the portal, e.g. using \nself.portal and self.folder, but it is often frowned upon since you are not\ntreating the system as a black box. Also, if you, for example, log in or set\nroles using calls like self.setRoles(), these are not reflected in the test\nbrowser, which runs as a separate session.\n\nBeing a doctest, we can tell a story here.\n\nFirst, we must perform some setup. We use the testbrowser that is shipped\nwith Five, as this provides proper Zope 2 integration. Most of the \ndocumentation, though, is in the underlying zope.testbrower package.\n\n >>> from Products.Five.testbrowser import Browser\n >>> browser = Browser()\n >>> portal_url = self.portal.absolute_url()\n\nThe following is useful when writing and debugging testbrowser tests. It lets\nus see all error messages in the error_log.\n\n >>> self.portal.error_log._ignored_exceptions = ()\n\nWith that in place, we can go to the portal front page and log in. We will\ndo this using the default user from PloneTestCase:\n\n >>> from Products.PloneTestCase.setup import portal_owner, default_password\n\n >>> browser.open(portal_url)\n\nWe have the login portlet, so let's use that.\n\n >>> browser.getControl(name='__ac_name').value = portal_owner\n >>> browser.getControl(name='__ac_password').value = default_password\n >>> browser.getControl(name='submit').click()\n\nHere, we set the value of the fields on the login form and then simulate a\nsubmit click.\n\nWe then test that we are still on the portal front page:\n\n >>> browser.url == portal_url\n True\n\nAnd we ensure that we get the friendly logged-in message:\n\n >>> \"You are now logged in\" in browser.contents\n True\n\n\nThe FaqGroup content type\n-------------------------\n\nIn this section we are tesing the FaqGroup content type by performing\nbasic operations like adding, updadating and deleting FaqGroup content\nitems.\n\nAdding a new FaqGroup content item\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWe use the 'Add new' menu to add a new content item.\n\n >>> browser.getLink('Add new').click()\n\nThen we select the type of item we want to add. In this case we select\n'FaqGroup' and click the 'Add' button to get to the add form.\n\n >>> browser.getControl('FaqGroup').click()\n >>> browser.getControl(name='form.button.Add').click()\n >>> 'FaqGroup' in browser.contents\n True\n\nNow we fill the form and submit it.\n\n >>> browser.getControl(name='title').value = 'FaqGroup Sample'\n >>> browser.getControl('Save').click()\n >>> 'Changes saved' in browser.contents\n True\n\nAnd we are done! We added a new 'FaqGroup' content item to the portal.\n\nUpdating an existing FaqGroup content item\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nLet's click on the 'edit' tab and update the object attribute values.\n\n >>> browser.getLink('Edit').click()\n >>> browser.getControl(name='title').value = 'New FaqGroup Sample'\n >>> browser.getControl('Save').click()\n\nWe check that the changes were applied.\n\n >>> 'Changes saved' in browser.contents\n True\n >>> 'New FaqGroup Sample' in browser.contents\n True\n\nRemoving a/an FaqGroup content item\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf we go to the home page, we can see a tab with the 'New FaqGroup\nSample' title in the global navigation tabs.\n\n >>> browser.open(portal_url)\n >>> 'New FaqGroup Sample' in browser.contents\n True\n\nNow we are going to delete the 'New FaqGroup Sample' object. First we\ngo to the contents tab and select the 'New FaqGroup Sample' for\ndeletion.\n\n >>> browser.getLink('Contents').click()\n >>> browser.getControl('New FaqGroup Sample').click()\n\nWe click on the 'Delete' button.\n\n >>> browser.getControl('Delete').click()\n >>> 'Item(s) deleted' in browser.contents\n True\n\nSo, if we go back to the home page, there is no longer a 'New FaqGroup\nSample' tab.\n\n >>> browser.open(portal_url)\n >>> 'New FaqGroup Sample' in browser.contents\n False\n\nAdding a new FaqGroup content item as contributor\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nNot only site managers are allowed to add FaqGroup content items, but\nalso site contributors.\n\nLet's logout and then login as 'contributor', a portal member that has the\ncontributor role assigned.\n\n >>> browser.getLink('Log out').click()\n >>> browser.open(portal_url)\n >>> browser.getControl(name='__ac_name').value = 'contributor'\n >>> browser.getControl(name='__ac_password').value = default_password\n >>> browser.getControl(name='submit').click()\n >>> browser.open(portal_url)\n\nWe use the 'Add new' menu to add a new content item.\n\n >>> browser.getLink('Add new').click()\n\nWe select 'FaqGroup' and click the 'Add' button to get to the add form.\n\n >>> browser.getControl('FaqGroup').click()\n >>> browser.getControl(name='form.button.Add').click()\n >>> 'FaqGroup' in browser.contents\n True\n\nNow we fill the form and submit it.\n\n >>> browser.getControl(name='title').value = 'FaqGroup Sample'\n >>> browser.getControl('Save').click()\n >>> 'Changes saved' in browser.contents\n True\n\nDone! We added a new FaqGroup content item logged in as contributor.\n\nFinally, let's login back as manager.\n\n >>> browser.getLink('Log out').click()\n >>> browser.open(portal_url)\n >>> browser.getControl(name='__ac_name').value = portal_owner\n >>> browser.getControl(name='__ac_password').value = default_password\n >>> browser.getControl(name='submit').click()\n >>> browser.open(portal_url)\n\n\nThe FaqItem content type\n------------------------\n\nIn this section we are tesing the FaqItem content type by performing\nbasic operations like adding, updadating and deleting FaqItem content\nitems.\n\nAdding a new FaqItem content item\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWe use the 'Add new' menu to add a new content item.\n\n >>> browser.getLink('Add new').click()\n\nThen we select the type of item we want to add. In this case we select\n'FaqItem' and click the 'Add' button to get to the add form.\n\n >>> browser.getControl('FaqItem').click()\n >>> browser.getControl(name='form.button.Add').click()\n >>> 'FaqItem' in browser.contents\n True\n\nNow we fill the form and submit it.\n\n >>> browser.getControl(name='title').value = 'FaqItem Sample'\n >>> browser.getControl('Save').click()\n >>> 'Changes saved' in browser.contents\n True\n\nAnd we are done! We added a new 'FaqItem' content item to the portal.\n\nUpdating an existing FaqItem content item\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nLet's click on the 'edit' tab and update the object attribute values.\n\n >>> browser.getLink('Edit').click()\n >>> browser.getControl(name='title').value = 'New FaqItem Sample'\n >>> browser.getControl('Save').click()\n\nWe check that the changes were applied.\n\n >>> 'Changes saved' in browser.contents\n True\n >>> 'New FaqItem Sample' in browser.contents\n True\n\nRemoving a/an FaqItem content item\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf we go to the home page, we can see a tab with the 'New FaqItem\nSample' title in the global navigation tabs.\n\n >>> browser.open(portal_url)\n >>> 'New FaqItem Sample' in browser.contents\n True\n\nNow we are going to delete the 'New FaqItem Sample' object. First we\ngo to the contents tab and select the 'New FaqItem Sample' for\ndeletion.\n\n >>> browser.getLink('Contents').click()\n >>> browser.getControl('New FaqItem Sample').click()\n\nWe click on the 'Delete' button.\n\n >>> browser.getControl('Delete').click()\n >>> 'Item(s) deleted' in browser.contents\n True\n\nSo, if we go back to the home page, there is no longer a 'New FaqItem\nSample' tab.\n\n >>> browser.open(portal_url)\n >>> 'New FaqItem Sample' in browser.contents\n False\n\nAdding a new FaqItem content item as contributor\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nNot only site managers are allowed to add FaqItem content items, but\nalso site contributors.\n\nLet's logout and then login as 'contributor', a portal member that has the\ncontributor role assigned.\n\n >>> browser.getLink('Log out').click()\n >>> browser.open(portal_url)\n >>> browser.getControl(name='__ac_name').value = 'contributor'\n >>> browser.getControl(name='__ac_password').value = default_password\n >>> browser.getControl(name='submit').click()\n >>> browser.open(portal_url)\n\nWe use the 'Add new' menu to add a new content item.\n\n >>> browser.getLink('Add new').click()\n\nWe select 'FaqItem' and click the 'Add' button to get to the add form.\n\n >>> browser.getControl('FaqItem').click()\n >>> browser.getControl(name='form.button.Add').click()\n >>> 'FaqItem' in browser.contents\n True\n\nNow we fill the form and submit it.\n\n >>> browser.getControl(name='title').value = 'FaqItem Sample'\n >>> browser.getControl('Save').click()\n >>> 'Changes saved' in browser.contents\n True\n\nDone! We added a new FaqItem content item logged in as contributor.\n\nFinally, let's login back as manager.\n\n >>> browser.getLink('Log out').click()\n >>> browser.open(portal_url)\n >>> browser.getControl(name='__ac_name').value = portal_owner\n >>> browser.getControl(name='__ac_password').value = default_password\n >>> browser.getControl(name='submit').click()\n >>> browser.open(portal_url)\n\n\nThe FaqFolder content type\n--------------------------\n\nIn this section we are tesing the FaqFolder content type by performing\nbasic operations like adding, updadating and deleting FaqFolder content\nitems.\n\nAdding a new FaqFolder content item\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWe use the 'Add new' menu to add a new content item.\n\n >>> browser.getLink('Add new').click()\n\nThen we select the type of item we want to add. In this case we select\n'FaqFolder' and click the 'Add' button to get to the add form.\n\n >>> browser.getControl('FaqFolder').click()\n >>> browser.getControl(name='form.button.Add').click()\n >>> 'FaqFolder' in browser.contents\n True\n\nNow we fill the form and submit it.\n\n >>> browser.getControl(name='title').value = 'FaqFolder Sample'\n >>> browser.getControl('Save').click()\n >>> 'Changes saved' in browser.contents\n True\n\nAnd we are done! We added a new 'FaqFolder' content item to the portal.\n\nUpdating an existing FaqFolder content item\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nLet's click on the 'edit' tab and update the object attribute values.\n\n >>> browser.getLink('Edit').click()\n >>> browser.getControl(name='title').value = 'New FaqFolder Sample'\n >>> browser.getControl('Save').click()\n\nWe check that the changes were applied.\n\n >>> 'Changes saved' in browser.contents\n True\n >>> 'New FaqFolder Sample' in browser.contents\n True\n\nRemoving a/an FaqFolder content item\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf we go to the home page, we can see a tab with the 'New FaqFolder\nSample' title in the global navigation tabs.\n\n >>> browser.open(portal_url)\n >>> 'New FaqFolder Sample' in browser.contents\n True\n\nNow we are going to delete the 'New FaqFolder Sample' object. First we\ngo to the contents tab and select the 'New FaqFolder Sample' for\ndeletion.\n\n >>> browser.getLink('Contents').click()\n >>> browser.getControl('New FaqFolder Sample').click()\n\nWe click on the 'Delete' button.\n\n >>> browser.getControl('Delete').click()\n >>> 'Item(s) deleted' in browser.contents\n True\n\nSo, if we go back to the home page, there is no longer a 'New FaqFolder\nSample' tab.\n\n >>> browser.open(portal_url)\n >>> 'New FaqFolder Sample' in browser.contents\n False\n\nAdding a new FaqFolder content item as contributor\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nNot only site managers are allowed to add FaqFolder content items, but\nalso site contributors.\n\nLet's logout and then login as 'contributor', a portal member that has the\ncontributor role assigned.\n\n >>> browser.getLink('Log out').click()\n >>> browser.open(portal_url)\n >>> browser.getControl(name='__ac_name').value = 'contributor'\n >>> browser.getControl(name='__ac_password').value = default_password\n >>> browser.getControl(name='submit').click()\n >>> browser.open(portal_url)\n\nWe use the 'Add new' menu to add a new content item.\n\n >>> browser.getLink('Add new').click()\n\nWe select 'FaqFolder' and click the 'Add' button to get to the add form.\n\n >>> browser.getControl('FaqFolder').click()\n >>> browser.getControl(name='form.button.Add').click()\n >>> 'FaqFolder' in browser.contents\n True\n\nNow we fill the form and submit it.\n\n >>> browser.getControl(name='title').value = 'FaqFolder Sample'\n >>> browser.getControl('Save').click()\n >>> 'Changes saved' in browser.contents\n True\n\nDone! We added a new FaqFolder content item logged in as contributor.\n\nFinally, let's login back as manager.\n\n >>> browser.getLink('Log out').click()\n >>> browser.open(portal_url)\n >>> browser.getControl(name='__ac_name').value = portal_owner\n >>> browser.getControl(name='__ac_password').value = default_password\n >>> browser.getControl(name='submit').click()\n >>> browser.open(portal_url)\n\n\n\n\nContributors\n============\n\n- Benoit Suttor - CIRB/CIBG, Author\n- Gustavo Lepri\n- H\u00e9ctor Velarde", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://www.cirb.irisnet.be", "keywords": "plone faq", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "collective.linguafaq", "package_url": "https://pypi.org/project/collective.linguafaq/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/collective.linguafaq/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://www.cirb.irisnet.be" }, "release_url": "https://pypi.org/project/collective.linguafaq/0.5/", "requires_dist": null, "requires_python": null, "summary": "A simple multilanguage faq", "version": "0.5" }, "last_serial": 787930, "releases": { "0.1dev-r118339": [ { "comment_text": "", "digests": { "md5": "3b5d282b2894f899625ea0952dd7050a", "sha256": "14787934d0f8be5a0a6195e58e93e7e5c5b2f43df4943826a4e8b1f951a718c5" }, "downloads": -1, "filename": "collective.linguafaq-0.1dev-r118339.tar.gz", "has_sig": false, "md5_digest": "3b5d282b2894f899625ea0952dd7050a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 95592, "upload_time": "2010-05-31T10:49:32", "url": "https://files.pythonhosted.org/packages/39/66/38d60bf42fa1d0cea01bf933a47804874503ab3b2d894c7b27e735715d53/collective.linguafaq-0.1dev-r118339.tar.gz" }, { "comment_text": "", "digests": { "md5": "66ab9afbaf0e6e26727c58ea7b62b1bd", "sha256": "3e6ad6b0ea83a67cf25c8e3f89b899326f374e00413e7e460e624e360e96c400" }, "downloads": -1, "filename": "collective.linguafaq-0.1dev-r118339.win32.exe", "has_sig": false, "md5_digest": "66ab9afbaf0e6e26727c58ea7b62b1bd", "packagetype": "bdist_wininst", "python_version": "any", "requires_python": null, "size": 180963, "upload_time": "2010-05-31T10:49:33", "url": "https://files.pythonhosted.org/packages/72/e8/a16690d16b8e1bde91da0660b3ac2bb37b05d480503e56d6e6c4676e4677/collective.linguafaq-0.1dev-r118339.win32.exe" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "a7d17a1ec0e760bde2adb7e8faba907f", "sha256": "96f27ee8202c73a9c3b16da8d5d95dbd0b1f087d561939d21c8d1c2621a031c9" }, "downloads": -1, "filename": "collective.linguafaq-0.2.tar.gz", "has_sig": false, "md5_digest": "a7d17a1ec0e760bde2adb7e8faba907f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 549920, "upload_time": "2010-06-14T11:33:04", "url": "https://files.pythonhosted.org/packages/52/33/455d18dbf31ee4a341d7cbf7e1fbb0f0faacc534ca28a57a77f7c6e2771b/collective.linguafaq-0.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "169f82e9e2fc4415728112281370fd61", "sha256": "5cad577ab8b6205b040ce4b1c6b2ca10bbeaae8f52acef77cc21f0e7c328f882" }, "downloads": -1, "filename": "collective.linguafaq-0.2.win32.exe", "has_sig": false, "md5_digest": "169f82e9e2fc4415728112281370fd61", "packagetype": "bdist_wininst", "python_version": "any", "requires_python": null, "size": 304287, "upload_time": "2010-06-14T11:33:05", "url": "https://files.pythonhosted.org/packages/a9/f4/5afd3587cc2dc8474ab04a210d803367bef5bcd59bfd85332d9e8dc41880/collective.linguafaq-0.2.win32.exe" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "903975dc29f56bf913743c83eeca5ce9", "sha256": "563157d927d7f3ee6ca19c68b051270f53ee7738f042123064cec3904186bf63" }, "downloads": -1, "filename": "collective.linguafaq-0.3.tar.gz", "has_sig": false, "md5_digest": "903975dc29f56bf913743c83eeca5ce9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 95238, "upload_time": "2011-03-09T11:57:19", "url": "https://files.pythonhosted.org/packages/77/1b/f59daf3ac06fa7424c69d100f9ec445335382447fcbb2251906e99d1dae8/collective.linguafaq-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "7aa466698081bcaa65f583ab01274ec1", "sha256": "a6bb9c2cf62b5ac87fec3cccdd286d2035f1d25edc0f694ff7d416631bd7bb2e" }, "downloads": -1, "filename": "collective.linguafaq-0.4.tar.gz", "has_sig": false, "md5_digest": "7aa466698081bcaa65f583ab01274ec1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 95575, "upload_time": "2011-04-12T14:19:38", "url": "https://files.pythonhosted.org/packages/5c/ba/d420e3fbcc6b21d6ce1c1cfdf03dceb7401135dcb07f6feb627a3594e4b9/collective.linguafaq-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "872efab2c738f55692407614381118f1", "sha256": "d787670dd864c78c194978727e6cfa1251302bb6907740b37b1aebdf6e9d7e59" }, "downloads": -1, "filename": "collective.linguafaq-0.5.tar.gz", "has_sig": false, "md5_digest": "872efab2c738f55692407614381118f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106091, "upload_time": "2012-07-03T16:36:50", "url": "https://files.pythonhosted.org/packages/8a/9b/5cceae8538c066f43b8e0b915892ec7f3c418228729ed50adacb1d9c06b0/collective.linguafaq-0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "872efab2c738f55692407614381118f1", "sha256": "d787670dd864c78c194978727e6cfa1251302bb6907740b37b1aebdf6e9d7e59" }, "downloads": -1, "filename": "collective.linguafaq-0.5.tar.gz", "has_sig": false, "md5_digest": "872efab2c738f55692407614381118f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106091, "upload_time": "2012-07-03T16:36:50", "url": "https://files.pythonhosted.org/packages/8a/9b/5cceae8538c066f43b8e0b915892ec7f3c418228729ed50adacb1d9c06b0/collective.linguafaq-0.5.tar.gz" } ] }