{"_id":"apostrophe-update-forms","_rev":"35-97b732bdd33fac4fda60f169d81bfa78","name":"apostrophe-update-forms","dist-tags":{"latest":"0.5.8"},"versions":{"0.5.1":{"name":"apostrophe-update-forms","version":"0.5.1","keywords":["apostrophe","CMS","forms"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-update-forms@0.5.1","maintainers":[{"name":"boutell","email":"boutell@boutell.com"}],"homepage":"https://github.com/punkave/apostrophe-update-forms#readme","bugs":{"url":"https://github.com/punkave/apostrophe-update-forms/issues"},"dist":{"shasum":"db84148408fa6861f010c84ba5df52a43f027a17","tarball":"https://registry.npmjs.org/apostrophe-update-forms/-/apostrophe-update-forms-0.5.1.tgz","integrity":"sha512-3RyNbxInix5JIZhGEp9cPJGI7+XiQrUbaMlj8mzkU81t6n2GLmzhgvVRepOP2oKb/gO1VdpKL0WsyQS++m1+FQ==","signatures":[{"sig":"MEUCIQDiDI2zOU79WyS3FGqiLF1Yx3MXSwiDM4z3x82SFIkdhwIgc2srYVkvdkdrPnX5zFu38yIfcw1ySMq0yeUMttPwrlE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"db84148408fa6861f010c84ba5df52a43f027a17","gitHead":"b2d43c8826509b4d3009d9a7a0b9e57bbd4466fe","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"boutell@boutell.com"},"repository":{"url":"git+https://github.com/punkave/apostrophe-update-forms.git","type":"git"},"_npmVersion":"3.6.0","description":"Helps your website's contributors update out-of-date information via simple, targeted forms that display just a few fields. Unlike apostrophe-moderator this is focused on updating existing content and minimizing all forms of friction that discourage updat","directories":{},"_nodeVersion":"0.10.41","dependencies":{"qs":"^5.0.0","async":"^1.5.2","lodash":"2.4.x","csv-stringify":"^1.0.2","apostrophe-snippets":"^0.5.87"},"_npmOperationalInternal":{"tmp":"tmp/apostrophe-update-forms-0.5.1.tgz_1456344738480_0.6548894220031798","host":"packages-6-west.internal.npmjs.com"}},"0.5.2":{"name":"apostrophe-update-forms","version":"0.5.2","keywords":["apostrophe","CMS","forms"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-update-forms@0.5.2","maintainers":[{"name":"boutell","email":"boutell@boutell.com"}],"homepage":"https://github.com/punkave/apostrophe-update-forms#readme","bugs":{"url":"https://github.com/punkave/apostrophe-update-forms/issues"},"dist":{"shasum":"b2e5f171a85c248d6d2de52cd0a716cee4943bfa","tarball":"https://registry.npmjs.org/apostrophe-update-forms/-/apostrophe-update-forms-0.5.2.tgz","integrity":"sha512-RmPRrP9dhOTbT8d4q2LiTVPWsX0kmqOFHhm3kNH+StIrceUO/qDHf5ui678VOYHiIXgNqiAMMVfyyg0NiVmbqA==","signatures":[{"sig":"MEQCIFrortFB03J4sZ30Kq3asGp6BysnUqxAMumCc3JhcBgiAiBB5/EtCuEHm6kPyPDLE1jo/OxW9DTD1rLhp7K/Zqzymg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"b2e5f171a85c248d6d2de52cd0a716cee4943bfa","gitHead":"a1e70e07a0e1ae20b988de7358011a6b222306eb","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"boutell@boutell.com"},"repository":{"url":"git+https://github.com/punkave/apostrophe-update-forms.git","type":"git"},"_npmVersion":"3.6.0","description":"Helps your website's contributors update out-of-date information via simple, targeted forms that display just a few fields. Unlike apostrophe-moderator this is focused on updating existing content and minimizing all forms of friction that discourage updat","directories":{},"_nodeVersion":"0.10.41","dependencies":{"qs":"^5.0.0","async":"^1.5.2","lodash":"2.4.x","csv-stringify":"^1.0.2","apostrophe-snippets":"^0.5.87"},"_npmOperationalInternal":{"tmp":"tmp/apostrophe-update-forms-0.5.2.tgz_1457542520698_0.9610962844453752","host":"packages-12-west.internal.npmjs.com"}},"0.5.3":{"name":"apostrophe-update-forms","version":"0.5.3","keywords":["apostrophe","CMS","forms"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-update-forms@0.5.3","maintainers":[{"name":"boutell","email":"boutell@boutell.com"}],"homepage":"https://github.com/punkave/apostrophe-update-forms#readme","bugs":{"url":"https://github.com/punkave/apostrophe-update-forms/issues"},"dist":{"shasum":"312d0fe7ef1065912a055b614681c0e35b68b53b","tarball":"https://registry.npmjs.org/apostrophe-update-forms/-/apostrophe-update-forms-0.5.3.tgz","integrity":"sha512-rJOXDImND2ndhd4PLdXGm9/P252L9/I1Pa7EfHCq8kEQhSJztyNwMvWtB0M52BXei4Orri9H6c3qgVhMXnpXwg==","signatures":[{"sig":"MEQCIBOkd2NE5N+pCnnYXRjpXN17j6XDY9/t11OTwh5KrC/IAiBoDAmVxtIVsUH7WLhgdPElxw5OoW1Ef5jnhBrwQH6PoA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"312d0fe7ef1065912a055b614681c0e35b68b53b","gitHead":"bda3f3b023dbd501129e52fda7c70855f0037e55","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"boutell@boutell.com"},"repository":{"url":"git+https://github.com/punkave/apostrophe-update-forms.git","type":"git"},"_npmVersion":"3.6.0","description":"Helps your website's contributors update out-of-date information via simple, targeted forms that display just a few fields. Unlike apostrophe-moderator this is focused on updating existing content and minimizing all forms of friction that discourage updat","directories":{},"_nodeVersion":"0.10.41","dependencies":{"qs":"^5.0.0","async":"^1.5.2","lodash":"2.4.x","csv-stringify":"^1.0.2","apostrophe-snippets":"^0.5.87"},"_npmOperationalInternal":{"tmp":"tmp/apostrophe-update-forms-0.5.3.tgz_1458064983077_0.7486750951502472","host":"packages-13-west.internal.npmjs.com"}},"0.5.4":{"name":"apostrophe-update-forms","version":"0.5.4","keywords":["apostrophe","CMS","forms"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-update-forms@0.5.4","maintainers":[{"name":"boutell","email":"boutell@boutell.com"}],"homepage":"https://github.com/punkave/apostrophe-update-forms#readme","bugs":{"url":"https://github.com/punkave/apostrophe-update-forms/issues"},"dist":{"shasum":"720da3030a6629ecd2c5e880e4b7e53cfe2f446a","tarball":"https://registry.npmjs.org/apostrophe-update-forms/-/apostrophe-update-forms-0.5.4.tgz","integrity":"sha512-Er/5R/6VL7PmFWpRghjnpSOK/kLh+muleMQSkArmV7tQskT60pVq4sPoM6lyTq7ayFo7vYKq6lK0z0NtXvtOWQ==","signatures":[{"sig":"MEQCID8AaZDH36WD1OLGJ5ekQWXVn5ljsbWmpD0BpMm0H/4OAiAqVQtOwxHUTCjxDRhgkUebqTN28PUYiGJGvrUQYXwFaA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"720da3030a6629ecd2c5e880e4b7e53cfe2f446a","gitHead":"ae41c3445e98bee78da57ffb411d7f7335bdc6b0","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"boutell@boutell.com"},"repository":{"url":"git+https://github.com/punkave/apostrophe-update-forms.git","type":"git"},"_npmVersion":"3.6.0","description":"Helps your website's contributors update out-of-date information via simple, targeted forms that display just a few fields. Unlike apostrophe-moderator this is focused on updating existing content and minimizing all forms of friction that discourage updat","directories":{},"_nodeVersion":"0.10.41","dependencies":{"qs":"^5.0.0","async":"^1.5.2","lodash":"2.4.x","csv-stringify":"^1.0.2","apostrophe-snippets":"^0.5.87"},"_npmOperationalInternal":{"tmp":"tmp/apostrophe-update-forms-0.5.4.tgz_1459876834053_0.2079355102032423","host":"packages-12-west.internal.npmjs.com"}},"0.5.5":{"name":"apostrophe-update-forms","version":"0.5.5","keywords":["apostrophe","CMS","forms"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-update-forms@0.5.5","maintainers":[{"name":"boutell","email":"boutell@boutell.com"}],"homepage":"https://github.com/punkave/apostrophe-update-forms#readme","bugs":{"url":"https://github.com/punkave/apostrophe-update-forms/issues"},"dist":{"shasum":"418675de8e66be186b13f4291ad07dcf4ae02512","tarball":"https://registry.npmjs.org/apostrophe-update-forms/-/apostrophe-update-forms-0.5.5.tgz","integrity":"sha512-0ppX1w029bGL+Yw3uNpIaN4NtwGAucqwynxs1eywdgWggNuXXkNYYmuSAmrt4ABtEsY2i7jm1kRIr/Ps/Pu02g==","signatures":[{"sig":"MEYCIQD7fhMe8cK20i/dJNMWgtNkpyJdxU7KcfQVeb7w2LQa9QIhANoh8OMU6ZaKTEXEof9z/4Hed/7RcSfxR5uIxNXEM93m","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"418675de8e66be186b13f4291ad07dcf4ae02512","gitHead":"352574f30ad848f9cee325a58ee977167ca7ed52","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"boutell@boutell.com"},"repository":{"url":"git+https://github.com/punkave/apostrophe-update-forms.git","type":"git"},"_npmVersion":"3.6.0","description":"Helps your website's contributors update out-of-date information via simple, targeted forms that display just a few fields. Unlike apostrophe-moderator this is focused on updating existing content and minimizing all forms of friction that discourage updat","directories":{},"_nodeVersion":"0.10.41","dependencies":{"qs":"^5.0.0","async":"^1.5.2","lodash":"2.4.x","csv-stringify":"^1.0.2","apostrophe-snippets":"^0.5.87"},"_npmOperationalInternal":{"tmp":"tmp/apostrophe-update-forms-0.5.5.tgz_1459978039234_0.6786370205227286","host":"packages-12-west.internal.npmjs.com"}},"0.5.7":{"name":"apostrophe-update-forms","version":"0.5.7","keywords":["apostrophe","CMS","forms"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-update-forms@0.5.7","maintainers":[{"name":"alexgilbert","email":"alex@punkave.com"},{"name":"austinstarin","email":"austin@punkave.com"},{"name":"boutell","email":"boutell@boutell.com"},{"name":"colpanik","email":"kerry@punkave.com"},{"name":"grdunn","email":"grdunn@gmail.com"},{"name":"jimmyh","email":"jimmy@punkave.com"},{"name":"kyjoya","email":"kyleejacker@gmail.com"},{"name":"mcoppola","email":"coppola@punkave.com"},{"name":"stuartromanek","email":"stuart@punkave.com"}],"homepage":"https://github.com/punkave/apostrophe-update-forms#readme","bugs":{"url":"https://github.com/punkave/apostrophe-update-forms/issues"},"dist":{"shasum":"b1e3c1a1b481e93d097fe59f21732337e48398ff","tarball":"https://registry.npmjs.org/apostrophe-update-forms/-/apostrophe-update-forms-0.5.7.tgz","integrity":"sha512-WsStASw/Fb+3w0ueZqQoBw6kxgF34fCXTM2R4llzpNouYOdGe8h+MEpHr0XAEzEJ9AteBZcAm3pqQT6PRVPLew==","signatures":[{"sig":"MEUCICHZHXae3jRbJDAQ3LzBvl6P7V5cEaDX9lH04OvqfJR9AiEAmJUTYcdoK7EgAuz1C0VfuXy9k5kDVaLxzn91VfWSOOg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"b1e3c1a1b481e93d097fe59f21732337e48398ff","gitHead":"35c684019d186118ff1fe822bf8257fce0ad3f9f","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"boutell@boutell.com"},"repository":{"url":"git+https://github.com/punkave/apostrophe-update-forms.git","type":"git"},"_npmVersion":"3.6.0","description":"Helps your website's contributors update out-of-date information via simple, targeted forms that display just a few fields. Unlike apostrophe-moderator this is focused on updating existing content and minimizing all forms of friction that discourage updat","directories":{},"_nodeVersion":"0.10.41","dependencies":{"qs":"^5.0.0","async":"^1.5.2","lodash":"2.4.x","csv-stringify":"^1.0.2","apostrophe-snippets":"^0.5.87"},"_npmOperationalInternal":{"tmp":"tmp/apostrophe-update-forms-0.5.7.tgz_1463431216999_0.9712783934082836","host":"packages-16-east.internal.npmjs.com"}},"0.5.8":{"name":"apostrophe-update-forms","version":"0.5.8","keywords":["apostrophe","CMS","forms"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-update-forms@0.5.8","maintainers":[{"name":"alexgilbert","email":"alex@punkave.com"},{"name":"austinstarin","email":"austin@punkave.com"},{"name":"boutell","email":"boutell@boutell.com"},{"name":"colpanik","email":"kerry@punkave.com"},{"name":"grdunn","email":"grdunn@gmail.com"},{"name":"jimmyh","email":"jimmy@punkave.com"},{"name":"kyjoya","email":"kyleejacker@gmail.com"},{"name":"mcoppola","email":"coppola@punkave.com"},{"name":"stuartromanek","email":"stuart@punkave.com"}],"homepage":"https://github.com/punkave/apostrophe-update-forms#readme","bugs":{"url":"https://github.com/punkave/apostrophe-update-forms/issues"},"dist":{"shasum":"d5c2cfb457ed5ebc7d905ba95eeb4274960a78d6","tarball":"https://registry.npmjs.org/apostrophe-update-forms/-/apostrophe-update-forms-0.5.8.tgz","integrity":"sha512-9nYA9feZowfWgu+02kV4rkadwWZa+W8jDJkpBtufGJh4ReurswI5I8AwH4OrZUSAYWYFec/Xu+wSYpqrqBtgog==","signatures":[{"sig":"MEYCIQC5HHLedv0+MHr65msHVveZZ5JlYMPsBYToTYFONf1uogIhANxbEFwDcKBVCpFl4qjxOwR7OtKU28NJgm7QF+DqvjOQ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"d5c2cfb457ed5ebc7d905ba95eeb4274960a78d6","gitHead":"9faa15b1641a16982694a3e0c39fc6418a37619b","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"boutell@boutell.com"},"repository":{"url":"git+https://github.com/punkave/apostrophe-update-forms.git","type":"git"},"_npmVersion":"2.15.9","description":"Helps your website's contributors update out-of-date information via simple, targeted forms that display just a few fields. Unlike apostrophe-moderator this is focused on updating existing content and minimizing all forms of friction that discourage updat","directories":{},"_nodeVersion":"4.6.1","dependencies":{"qs":"^5.0.0","async":"^1.5.2","lodash":"2.4.x","csv-stringify":"^1.0.2","apostrophe-snippets":"^0.5.87"},"_npmOperationalInternal":{"tmp":"tmp/apostrophe-update-forms-0.5.8.tgz_1478207842974_0.7519331260118634","host":"packages-12-west.internal.npmjs.com"}}},"time":{"created":"2016-02-24T20:12:21.111Z","modified":"2026-01-26T19:10:52.728Z","0.5.1":"2016-02-24T20:12:21.111Z","0.5.2":"2016-03-09T16:55:22.921Z","0.5.3":"2016-03-15T18:03:05.564Z","0.5.4":"2016-04-05T17:20:36.346Z","0.5.5":"2016-04-06T21:27:21.542Z","0.5.7":"2016-05-16T20:40:19.580Z","0.5.8":"2016-11-03T21:17:25.063Z"},"bugs":{"url":"https://github.com/punkave/apostrophe-update-forms/issues"},"author":{"name":"P'unk Avenue LLC"},"license":"MIT","homepage":"https://github.com/punkave/apostrophe-update-forms#readme","keywords":["apostrophe","CMS","forms"],"repository":{"url":"git+https://github.com/punkave/apostrophe-update-forms.git","type":"git"},"description":"Helps your website's contributors update out-of-date information via simple, targeted forms that display just a few fields. Unlike apostrophe-moderator this is focused on updating existing content and minimizing all forms of friction that discourage updat","maintainers":[{"email":"alex@apostrophecms.com","name":"alexgilbert"},{"email":"tom@apostrophecms.com","name":"boutell"},{"email":"stuart+npm@apostrophecms.com","name":"romanek"},{"email":"robert.means1969+apostrophecms@gmail.com","name":"bodonkey"},{"email":"kerry@punkave.com","name":"colpanik"},{"email":"stuart@punkave.com","name":"stuartromanek"},{"email":"mcoppola832@gmail.com","name":"mcoppola"},{"email":"kyleejacker@gmail.com","name":"kyjoya"},{"email":"austin.starin@gmail.com","name":"austinstarin"},{"email":"ajchappelle@gmail.com","name":"arti5m"},{"email":"grdunn@gmail.com","name":"grdunn"},{"email":"matthew.mance@gmail.com","name":"mtthwmnc"}],"readme":"# apostrophe-update-forms\n\n## CURRENTLY FOR 0.5, NOT 2.0\n\nThis module is not currently for Apostrophe 2.0.\n\nHelps your website's contributors update out-of-date information via simple, targeted forms that display just a few fields. Unlike apostrophe-moderator this module is focused on updating existing content, and minimizing all forms of friction that discourage updates.\n\n## Configuration\n\nLet's allow all fields of `event` to be potentially offered in an update form:\n\n```\n'apostrophe-update-forms': {\n  types: {\n    event: {}\n  }\n}\n```\n\nNow let's restrict the fields of `editableSchool` that can be offered this way to those that have a certain property:\n\n```\n'apostrophe-update-forms': {\n  types: {\n    editableSchool: {\n      allowedField: function(field) {\n        return field.leaderAccess;\n      }\n    }\n  }\n}\n```\n\nWe can also enumerate the allowed fields:\n\n```\n'apostrophe-update-forms': {\n  types: {\n    'event': {\n      allowedFields: [ 'startDate', 'endDate' ]\n    }\n  }\n}\n```\n\nYou may configure this module for any number of snippet types or page types by adding subproperties to `types`. The property name should match the instance name or page type. If it's powered by schemas and `site.pages.getManager(type)` can find it, you can update it with this module.\n\nNow add the update forms menu to `outerLayout.html`:\n\n```\n  {{ aposUpdateFormsMenu(permissions) }}\n```\n\nNow you can create update forms via that menu. For each form you'll pick the type of object you want to update (if you configured more than one), and then add one or more fields to a list.\n\n## Sending out update form links via mail merge\n\nTo make practical use of the update forms you need a way to display them to the right people, en masse. By far the most effective way is a mail merge: exporting a spreadsheet with the snippet's title, the recipient's name and email address, and a unique URL that allows that specific person to *update that specific snippet without logging in.* Combined with any good bulk email software you can accomplish your goal with that information.\n\nGo to \"Manage Update Forms,\" locate the row for the form you want, and click \"Mail Merge.\" A CSV file will be generated and downloaded. Check it out in your spreadsheet software first, then use it to email your contributors. You'll want to insert the `url` column at the appropriate point in each message via your mail merge software.\n\n## Configuring mail merge\n\n**By default, Apostrophe will look for a `person` who has been specifically granted permissions for that one snippet.** If there is more than one only the first found is used. Since Apostrophe automatically grants editing permissions to the person who created a snippet, this works great for most projects.\n\nHowever there are three other acceptable ways to specify the field for each type that connects it to the right person:\n\n```\nevent: {\n  mailMerge: {\n    field: '_author'\n  }\n}\n```\n\nApostrophe will use the `person` referred to by the existing `_author` `joinByOne` join in your schema for events.\n\n```\nevent: {\n  mailMerge: {\n    field: 'contactEmail',\n    personField: 'email'\n  }\n}\n```\n\nApostrophe will look for a `person` whose `email` property matches the `contactEmail` property of the snippet.\n\n```\nevent {\n  mailMerge: {\n    getPeople: function(req, objects, callback) { ... }\n  }\n}\n```\n\nApostrophe will call your `getPeople` function, which is responsible for fetching the appropriate `person` snippets for the given objects and setting the `_person` property of each object to the appropriate person. If there is no suitable person, leave it undefined.\n\n## Customizing the template\n\nYou can override `views/updateForm.html` to suit yourself. The forms are schema driven and there is only one template because admins can make any number of custom forms at any time, so they need to be fully automated in their rendering.\n\n## Media\n\nCurrently the user cannot upload media unless they already happen to be logged in. It's on our TODO list to fix this so slideshow widgets can be part of the content being updated. It's not hard to port this logic which already exists in `apostrophe-moderator`.\n\n## Security concerns\n\n`apostrophe-update-forms` grants the user permission to edit the specific snippet for the duration of their session. Eventually it will also provide permission to upload media for the duration of their session. For security reasons, they are not logged into their Apostrophe account in the normal sense.\n\n## Changelog\n\n0.5.8: fixed a bug that prevented the \"field and personField\" approach to mailMerge configuration from working.\n\n0.5.5: emit events before and after converting the form to make enhancement at the project level simple.\n\n0.5.4: factored out `getMailMergeHeadings` and `getMailMergeRow` methods to allow project-level extension of the data to be included in mailmerges. Keep in mind that joins are performed as specified in your schema, so everything you need is likely to be there.\n","readmeFilename":"README.md"}