{ "info": { "author": "David Glick, Groundwire", "author_email": "davidglick@groundwire.org", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Programming Language :: Python" ], "description": "Introduction\n============\n\n``pfg.drafts`` adds support for Plone users to save copies of PloneFormGen\nforms in progress and restore the saved values later. This removes the need\nfor users to fill out a lengthy form in one sitting.\n\nThe package adds a new display option for Form Folders, called \"Form View with\nDrafts\". If selected, a message is shown prompting the user to save a draft\nof the form. (It also adds an additional button at the bottom of the form which\ndoes the same thing.) If the user clicks this, they are presented with a\nregistration form to create a site account with which to associate the saved\ndata. After registration, the form is saved.\n\nWhen the user returns to the form, if logged in, the form will be repopulated\nwith the saved values automatically. If logged out, the user can click a link\nto log in and restore their values. Then the form can be submitted normally\nwhen the form is complete.\n\nCompatibility\n-------------\n\n``pfg.drafts`` has been tested with Plone 4 and PloneFormGen 1.6.0.\n\nInstallation\n------------\n\n1. Add pfg.drafts to your buildout, and activate it via the Plone Add-ons\n control panel.\n2. Go to the Security control panel and turn on \"Enable self-registration\"\n and \"Let users select their own passwords\". (If the latter is off,\n users will not be able to immediately register. You may want to add\n captcha to the registration form to prevent mechanical registrations.)\n3. Go to the form for which you want to enable drafts, and change its\n display layout to \"Form View with Drafts\", using the Display menu.\n\nImplementation Details\n----------------------\n\nDrafts are stored in a BTree in a custom tool (portal_fg_drafts), keyed by\nform UID and user id.\n\nTo save form values, Javascript changes the action of the form to go to the\ncustom @@fg_save_draft view, which writes the values to portal_fg_drafts.\nAny FileUpload objects are marshalled specially into a pickleable\nFakeFieldStorage object.\n\nWhen the form is visited, the custom display template (pfg_draft_view.cpt)\ncalls the portal_fg_draft tool's retrieveDraft method to repopulate the\nrequest form with any saved data for the current form and user. Values in\nthe request take precedence over values from the draft, so the saved values\nwon't clobber new values after a validation error.\n\nWhen the form is submitted, it is processed via the custom\npfg_draft_validate.vpy script. This augments the submitted values with values\nfrom the draft (such as fileuploads that were saved but cannot be repopulated)\nand then processes the form normally. If the form passes validation, the\nsaved draft (if any) is deleted from the portal_fg_drafts tool.\n\nCredits\n-------\n\n``pfg.drafts`` was created by `Web Collective`_ and David Glick. Thanks to\nBryan Wilson and Fulvio Casali.\n\n.. _`Web Collective`: http://webcollective.coop\n\nChangelog\n=========\n\n1.1.2 (2011-01-12)\n------------------\n\n- Add registerClass to declare an add permission for PFGDraftStorage so that\n it can be pasted.\n [davisagli]\n\n1.1.1 (2011-01-06)\n------------------\n\n- Fix missing import.\n [davisagli]\n\n1.1 (2011-01-06)\n----------------\n\n- Make it possible for Managers to load another user's draft for debugging,\n by adding debug_user=[username] to the query string. If a draft loaded in\n this way is submitted, the draft is not removed from the draft storage.\n [davisagli]\n\n1.0.1 (2011-01-06)\n------------------\n\n- Make sure file uploads don't get lost when a draft is saved a second time.\n [davisagli]\n\n- Fill the correct slot to inject javascript for main_templates based on the\n classic Plone theme instead of sunburst.\n [davisagli]\n\n1.0 (2010-12-20)\n----------------\n\n- Fix error in including widget javascript.\n [davisagli]\n\n1.0b1 (2010-12-09)\n------------------\n\n- Initial release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://svn.plone.org/svn/collective/pfg.drafts/trunk", "keywords": "ploneformgen form draft save", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "pfg.drafts", "package_url": "https://pypi.org/project/pfg.drafts/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/pfg.drafts/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://svn.plone.org/svn/collective/pfg.drafts/trunk" }, "release_url": "https://pypi.org/project/pfg.drafts/1.1.2/", "requires_dist": null, "requires_python": null, "summary": "Allows users to save drafts of PloneFormGen forms in progress", "version": "1.1.2" }, "last_serial": 796188, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "28d9fd659ead86f65a1bc0e8d84ff2eb", "sha256": "443ec14391d525cf83cdccf85c68fcea929981d6812b768ea9693509fd3862ed" }, "downloads": -1, "filename": "pfg.drafts-1.0.zip", "has_sig": true, "md5_digest": "28d9fd659ead86f65a1bc0e8d84ff2eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27544, "upload_time": "2010-12-20T23:10:37", "url": "https://files.pythonhosted.org/packages/72/c3/2a6a8b7b1eefc4cab9781c2f92df281358a16b194147336d4e3a29bdb24d/pfg.drafts-1.0.zip" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "7a006d4a458ef0612b0523ced9d4a3db", "sha256": "16cf6f1ab36698d25b4dd5ae3b34ea76a9f2154a0eb77ac50a0181d9f3b54827" }, "downloads": -1, "filename": "pfg.drafts-1.0.1.zip", "has_sig": true, "md5_digest": "7a006d4a458ef0612b0523ced9d4a3db", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28039, "upload_time": "2011-01-06T21:28:51", "url": "https://files.pythonhosted.org/packages/2a/3a/f2c0c5fb2c6cb9fdd67e71d72ce680081cad7797c29e02a7b773e718d915/pfg.drafts-1.0.1.zip" } ], "1.0b1": [ { "comment_text": "", "digests": { "md5": "6717e1841de3f1cd74ca4a08f39e6ccf", "sha256": "a20fc8f8734d40856b1f6528a44f0614e380d63a20b4d6529bbe51b81ceae378" }, "downloads": -1, "filename": "pfg.drafts-1.0b1.zip", "has_sig": true, "md5_digest": "6717e1841de3f1cd74ca4a08f39e6ccf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27510, "upload_time": "2010-12-10T00:10:38", "url": "https://files.pythonhosted.org/packages/bd/e3/cc23430f41bf4040bfca8802e9b9d8a7d2a38e85279c89f69204731e783c/pfg.drafts-1.0b1.zip" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "c2ef92ef0cc2d732a4afdeff5400d054", "sha256": "c593e8d2b0b94c32a14526d5c85632d0905fa715feb1adbd71ca40d509adf08b" }, "downloads": -1, "filename": "pfg.drafts-1.1.zip", "has_sig": true, "md5_digest": "c2ef92ef0cc2d732a4afdeff5400d054", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28397, "upload_time": "2011-01-06T22:01:47", "url": "https://files.pythonhosted.org/packages/c2/0b/16b9941dc7766792f50d9c4020eb7e65e3462c02e7f09a50a9c47da18931/pfg.drafts-1.1.zip" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "568ae2c6f1ec2bdc0121a21cf09719da", "sha256": "62a80177dac72d0e544819f7ebcb0bc015e62bdbaa05cef90837760b72d3e073" }, "downloads": -1, "filename": "pfg.drafts-1.1.1.zip", "has_sig": true, "md5_digest": "568ae2c6f1ec2bdc0121a21cf09719da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28586, "upload_time": "2011-01-06T22:09:03", "url": "https://files.pythonhosted.org/packages/b8/d2/c27d94101ade5fe8585d5fcaae2cdd48635db40925a3f89df903f07f3ee2/pfg.drafts-1.1.1.zip" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "47271364ad0ed586a09ee1cd74f78bdb", "sha256": "7d413e2fd0b27aa8327f655d79f31e06928f87538bbf10d75faf010f4eda978e" }, "downloads": -1, "filename": "pfg.drafts-1.1.2.zip", "has_sig": true, "md5_digest": "47271364ad0ed586a09ee1cd74f78bdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29103, "upload_time": "2011-01-12T20:24:16", "url": "https://files.pythonhosted.org/packages/3e/13/798cde04a70de2c3828b932de0cac5dae1ca876733ce811e11339c72a1ea/pfg.drafts-1.1.2.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "47271364ad0ed586a09ee1cd74f78bdb", "sha256": "7d413e2fd0b27aa8327f655d79f31e06928f87538bbf10d75faf010f4eda978e" }, "downloads": -1, "filename": "pfg.drafts-1.1.2.zip", "has_sig": true, "md5_digest": "47271364ad0ed586a09ee1cd74f78bdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29103, "upload_time": "2011-01-12T20:24:16", "url": "https://files.pythonhosted.org/packages/3e/13/798cde04a70de2c3828b932de0cac5dae1ca876733ce811e11339c72a1ea/pfg.drafts-1.1.2.zip" } ] }