{ "info": { "author": "RedTurtle Technology", "author_email": "sviluppoplone@redturtle.it", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Plone", "Framework :: Plone :: 4.2", "Framework :: Plone :: 4.3", "Programming Language :: JavaScript", "Programming Language :: Python", "Programming Language :: Python :: 2.7" ], "description": ".. contents:: **Table of contents**\n\nRead carefully!\n===============\n\nEven if this product is giving you an high level Plone user interface, **it's not designed for end users**\nor \"*normal*\" site administrators.\nYou must be a `Python regular expression`__ expert (probably a Grand Master).\n\n__ http://docs.python.org/2/howto/regex.html\n\nAlso: when used this product can **slow down** your running Plone site.\n\n.. Note:: **backup** your Plone site and be careful\n\nIntroduction\n============\n\nThis product will give to your Plone site managers a tool for performing text search using `regular expressions`__\nquery and optionally performing text substitutions on the main rich text field of your site's contents.\n\n__ http://en.wikipedia.org/wiki/Regular_expression\n\nA usecase\n=========\n\nYou are working at the Ministry of Truth in the super-state of Oceania.\nWar history say that Oceania is allied with Eastasia and in war with Eurasia.\n\nYou are in charge of keeping the Oceania web site updated and the Party choosed Plone as the unique CMS available.\n\nThen the Party apply the Doublethink, and history change: Oceania had never been allied with Eastasia, but\nit's allied with Eurasia (and in war with Eastasia).\nYou must quickly updated the Plone site.\n\nYou need to quickly review all document where Eastasia and Eurasia are named and, if needed, switch the two names.\nYou can't simply perform a bach substitution because you must read the context on which the term to be replaced is\nused.\n\nFor example: a document that talk about Eastasia as a friend must be changed, a document that describe the\ngeographical position of Eurasia can remain untouched.\n\nHow to use\n==========\n\nThis product is designed for performing the same text type of replacement operation on many documents without\ngoing to edit every ones.\n\nBy default the product works with all know rich text fields of Plone contents, that are:\n\n* text field from Page content type\n* text field from Event content type\n* text field from News Item content type\n* text field from Collection content type (old-style also)\n\nYou can extending the set above providing 3rd party extensions (see below).\n\nAccessing the \"*Bulk modify contents*\" panel\n--------------------------------------------\n\nIn your \"Site setup\" section you will find a new \"*Bulk modify contents*\" panel.\nAll operations take places from this page.\n\nBasic search\n------------\n\nThe upper section of the page is about searching contents.\n\n.. image:: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-01.png/image_large\n :alt: Search form\n :target: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-01.png/\n\nYou must select which content types you want to inspect by checking the \"**Content types**\" section.\nAlthough this selection display all content types, note that only a subset of them usable (for example: the Link\ncontent types is not using any text field right now).\n\nThis selection will trigger a catalog search of all types in the selection (so keep this selection at minimum).\n\nThe most important field is the \"**Search regex**\", where you must write a regular expression.\nFor every content type found, it's text field will be loaded and text inside wil be parsed for searching matches\nwith the regex.\n\nYou can change some regex search configuration option using the \"**Regex flags**\" set of checkboxes.\n\nNow you can hit the search button below.\n\nResults\n-------\n\nResults of the search are displayed in a table at the bottom of the page.\n\n.. image:: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-02.png/image_large\n :alt: Search form\n :target: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-02.png/\n\nThe table will contain a preview of the found text and minimal information about the content.\nPlease note that a single document can be found multiple time in the table as the minimal entity is the text match,\nnot the document itself.\n\nReplace text\n------------\n\nThe simpler way of performing text replacement is get filling the \"**Default replacement**\" text area.\n\n.. image:: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-05.png/image_large\n :alt: Search form\n :target: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-05.png/\n\nThe table of results will change, providing a graphical preview of what will be changed applying your\nreplacement expression.\n\n.. image:: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-03.png/image_large\n :alt: Search form\n :target: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-03.png/\n\nThe user must now select all replacement that he really want to apply, the click the \"**Modify selected**\" button.\nOnly selected matches are changed.\n\n.. image:: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-04.png/image_large\n :alt: Search form\n :target: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-04.png/\n\nReplacing options\n-----------------\n\nWhen changing text you are (obviously) changing a Plone content, so you have some additional option available:\n\n*Do not update anything (silent change)*\n Useful if you want to fix some contents without updating other metadata from the content itself.\n Only the text field (and the Plone full text index) will be updated.\n \n Site members will never notice this type of changes.\n*Update modification time*\n Update also the last modification time of the document.\n*Create a new version (if possible)*\n Full modification. If the content type is versionable, a new version will be saved.\n\nAdvanced use\n============\n\nAdvanced server side operations\n-------------------------------\n\nSometimes a simple text regex expression is not enough.\nThis product is supporting a way of handling really complex text substitution by calling some server side\ncomponents.\n\nBy default, only one handler is available: \"**Convert internal links to resolveuid usage**\", that can transform\nPlone internal links to content to a form that use the \"``resolveuid``\" call.\nThis can be used in Plone sites where the TinyMCE option \"*Link using UIDs*\" were not enabled by mistake\n(something like the feature given by Kupu editor).\n\n.. image:: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-06.png/image_large\n :alt: Search form\n :target: http://blog.redturtle.it/pypi-images/rt.bulkmodify/rt.bulkmodify-0.1-06.png/\n\nAdding new server side special handlers\n---------------------------------------\n\nProving new ``IBulkModifyReplacementHandler`` utility will automatically display new special replacement::\n\n \n\nExtending handled types\n-----------------------\n\nTo being able to change a text field of a type not handled, you must provide a proper adapter with a 3rd party\nproduct::\n\n \n\nTODO\n====\n\n* Adding a way for using text substitution also as a running script for instance\n* We **really** need JavaScript tests\n* JavaScript is all but optimized\n* The product is designed for performing multiple write commit on ZODB, but probably a\n way of performing a single huge write operation can be useful\n\nCredits\n=======\n\nDeveloped with the support of `Regione Emilia Romagna`__;\nRegione Emilia Romagna supports the `PloneGov initiative`__.\n\n__ http://www.regione.emilia-romagna.it/\n__ http://www.plonegov.it/\n\nAuthors\n=======\n\nThis product was developed by RedTurtle Technology team.\n\n.. image:: http://www.redturtle.it/redturtle_banner.png\n :alt: RedTurtle Technology Site\n :target: http://www.redturtle.it/\n\n\nChangelog\n=========\n\n0.4.1 (2014-05-29)\n------------------\n\n- Requires zope.tal >= 3.6.1 if on Python 2.6. This close `#2`__.\n [keul]\n- Make ``portal_css`` and ``portal_javascript`` happy: do not add\n load condition for JavaScript and CSS. This prevent fragmentation on\n loaded resources\n [keul]\n\n__ https://github.com/RedTurtle/rt.bulkmodify/issues/2\n\n0.4 (2013-10-07)\n----------------\n\n- Nicely display types check, plus a select all/none command\n [keul]\n- Show a counter for documents really checked (means: for documents where\n the ``IBulkModifyContentChanger`` adapter has been found)\n [keul]\n- Show an HTML preview also when replacing text (this close #3)\n [keul]\n- Do not break if \"text\" can't be read (for example: for ComputedField named \"text\")\n [keul]\n\n0.3 (2013-04-02)\n----------------\n\n- Calling a new search after a change were not working until\n you re-start the instance\n [keul]\n- Fixed broken tests\n [keul]\n- Better UI after changes (display only one message per content, and keep\n the content title)\n [keul]\n- Calling additional changes on the same content were not working\n (or worst: it could perform a wrong substitution)\n [keul]\n- Fixed a bug in the label/checkbox association when you have multiple match on same element\n [keul]\n- Added a new checkbox type, for selecting all matches of the same document\n [keul]\n\n0.2 (2013-03-26)\n----------------\n\n- Kept a link to content after server changes\n [keul]\n- Open links in new windows\n [keul]\n- When a document is updated multiple times, only *one* new\n version is created\n [keul]\n- When request for replacements are submitted show a spinner and disable\n checkbox\n [keul]\n- Display a counter about running searches\n [keul]\n- JSHint cleanup and fix for Internet Explorer\n [keul]\n- Is now possible to pause, then continue, a search operation\n [keul]\n\n0.1.1 (2013-03-15)\n------------------\n\n- When loading data from Archetypes field, use the ``raw`` format.\n This prevent substitution from destroying ``resolveuid`` usage.\n [keul]\n- When performing searches, display immediately the \"loading\" info,\n not after the first completed request\n [keul]\n\n0.1 (2013-03-14)\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://plone.org/products/rt.bulkmodify", "keywords": "plone batch bulk regex", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "rt.bulkmodify", "package_url": "https://pypi.org/project/rt.bulkmodify/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/rt.bulkmodify/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://plone.org/products/rt.bulkmodify" }, "release_url": "https://pypi.org/project/rt.bulkmodify/0.4.1/", "requires_dist": null, "requires_python": null, "summary": "An administration tool for performing mass text substitution on Plone contents", "version": "0.4.1" }, "last_serial": 1107572, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "05c7b9c33abea48003027d441f21388f", "sha256": "d81532758ab80a897c59048b553b8568e455f550d0e2a095a82638d05338e577" }, "downloads": -1, "filename": "rt.bulkmodify-0.1.zip", "has_sig": false, "md5_digest": "05c7b9c33abea48003027d441f21388f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55388, "upload_time": "2013-03-14T16:48:01", "url": "https://files.pythonhosted.org/packages/d3/67/0be8ef5e574e848a7b1a257cd748266cc5e03432f63749432c877e326404/rt.bulkmodify-0.1.zip" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "5ac59bf384512c891fdd1555816dbf33", "sha256": "06a6905a9af7b4034c30d75020d6ffb5380f812cfc79b8d6091e898ee4f26b2f" }, "downloads": -1, "filename": "rt.bulkmodify-0.1.1.zip", "has_sig": false, "md5_digest": "5ac59bf384512c891fdd1555816dbf33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56046, "upload_time": "2013-03-15T12:49:00", "url": "https://files.pythonhosted.org/packages/ac/b4/5202c96190a63ff26321d5d7484b97118eb835f6476b9c806710c3adaa65/rt.bulkmodify-0.1.1.zip" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "9640907900e12315f813003508b44ed3", "sha256": "b83476bce66c02aabe7ca52d9f840790ccbdb9efa959694614899292a09b07f1" }, "downloads": -1, "filename": "rt.bulkmodify-0.2.zip", "has_sig": false, "md5_digest": "9640907900e12315f813003508b44ed3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60244, "upload_time": "2013-03-26T08:18:34", "url": "https://files.pythonhosted.org/packages/c9/0a/a8bd128ed85319146a739ea282297acebedbbbbb01d670919738e3ca3b26/rt.bulkmodify-0.2.zip" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "7f985251791afaefc2c92f57b7049005", "sha256": "d6271dfdbf85d53b4418ab680be187d99dc212b05841917f9a33d3970112b783" }, "downloads": -1, "filename": "rt.bulkmodify-0.3.zip", "has_sig": false, "md5_digest": "7f985251791afaefc2c92f57b7049005", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 61791, "upload_time": "2013-04-02T15:00:26", "url": "https://files.pythonhosted.org/packages/b1/b0/5cdb35fbfdf82f8c76b858d3dcbd5ba5392eed2b269fed178c47489c55b7/rt.bulkmodify-0.3.zip" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "bfa84fb2a1a1fe36f1c1e7d03e0d854a", "sha256": "6396928840aa09c157fb3543b7044836148762076f1bbfadddb470a18e19b0bc" }, "downloads": -1, "filename": "rt.bulkmodify-0.4.zip", "has_sig": false, "md5_digest": "bfa84fb2a1a1fe36f1c1e7d03e0d854a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63179, "upload_time": "2013-10-07T13:33:38", "url": "https://files.pythonhosted.org/packages/a5/48/4a388ec1a44d34c2679ceb2b1443e600af5d1eb25d0ebc66379947cbee98/rt.bulkmodify-0.4.zip" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "4a9c0e8be6ee074f2f1998811454759f", "sha256": "57ca81da060ad44ff241fc633bcc01ec2c9e5ec960b8b69b6eedfe375c84e29a" }, "downloads": -1, "filename": "rt.bulkmodify-0.4.1.zip", "has_sig": false, "md5_digest": "4a9c0e8be6ee074f2f1998811454759f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64690, "upload_time": "2014-05-29T10:51:41", "url": "https://files.pythonhosted.org/packages/f9/03/b10c00be229da156ba3a3857244cbb59769fca59501cd399f16857a7f343/rt.bulkmodify-0.4.1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4a9c0e8be6ee074f2f1998811454759f", "sha256": "57ca81da060ad44ff241fc633bcc01ec2c9e5ec960b8b69b6eedfe375c84e29a" }, "downloads": -1, "filename": "rt.bulkmodify-0.4.1.zip", "has_sig": false, "md5_digest": "4a9c0e8be6ee074f2f1998811454759f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64690, "upload_time": "2014-05-29T10:51:41", "url": "https://files.pythonhosted.org/packages/f9/03/b10c00be229da156ba3a3857244cbb59769fca59501cd399f16857a7f343/rt.bulkmodify-0.4.1.zip" } ] }