{"id":293044,"date":"2026-05-27T10:25:47","date_gmt":"2026-05-27T10:25:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/onedrive-file-uploader-for-forms\/"},"modified":"2026-06-22T03:19:54","modified_gmt":"2026-06-22T03:19:54","slug":"digiexpert8-forms-file-uploader-for-onedrive","status":"publish","type":"plugin","link":"https:\/\/ca.wordpress.org\/plugins\/digiexpert8-forms-file-uploader-for-onedrive\/","author":23465689,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.4","stable_tag":"1.1.4","tested":"6.9.5","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"DigiExpert8 Forms File Uploader for OneDrive","header_author":"digiexpert8","header_description":"Uploads Gravity Forms and WPForms file uploads to Microsoft OneDrive. Independent plugin, not affiliated with Microsoft.","assets_banners_color":"396298","last_updated":"2026-06-22 03:19:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/digiexpert8-forms-file-uploader-for-onedrive\/","header_author_uri":"https:\/\/profiles.wordpress.org\/digiexpert8\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":172,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"digiexpert8","date":"2026-05-27 10:25:30"},"1.1.3":{"tag":"1.1.3","author":"digiexpert8","date":"2026-05-27 10:27:32"},"1.1.4":{"tag":"1.1.4","author":"digiexpert8","date":"2026-06-22 03:19:54"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3550458,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3550458,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3550458,"resolution":"772x250","location":"assets","locale":"","width":1480,"height":545}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.3","1.1.4"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[1152,1655,193907,28211,130711],"plugin_category":[],"plugin_contributors":[264621],"plugin_business_model":[],"class_list":["post-293044","plugin","type-plugin","status-publish","hentry","plugin_tags-contact-form-7","plugin_tags-gravity-forms","plugin_tags-microsoft-graph","plugin_tags-onedrive","plugin_tags-wpforms","plugin_contributors-digiexpert8","plugin_committers-digiexpert8"],"banners":{"banner":"https:\/\/ps.w.org\/digiexpert8-forms-file-uploader-for-onedrive\/assets\/banner-772x250.png?rev=3550458","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/digiexpert8-forms-file-uploader-for-onedrive\/assets\/icon-128x128.png?rev=3550458","icon_2x":"https:\/\/ps.w.org\/digiexpert8-forms-file-uploader-for-onedrive\/assets\/icon-256x256.png?rev=3550458","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>DigiExpert8 Forms File Uploader for OneDrive is an independent plugin and is not affiliated with, endorsed by, or sponsored by Microsoft.<\/p>\n\n<p>The plugin provides:<\/p>\n\n<ul>\n<li>Microsoft OAuth2 connection flow for OneDrive.<\/li>\n<li>Gravity Forms, WPForms, and Contact Form 7 file upload support.<\/li>\n<li>Form ID and Field ID filtering per provider.<\/li>\n<li>Folder templates always control the OneDrive folder path and support placeholders: <code>{form_title}<\/code>, <code>{provider}<\/code>, <code>{form_id}<\/code>, <code>{entry_id}<\/code>, <code>{date}<\/code>, <code>{submission_folder}<\/code>.<\/li>\n<li>Field placeholders are supported, including Gravity Forms and WPForms values like <code>{field_3}<\/code>, Gravity sub-inputs like <code>{field_1_3}<\/code>, and name-based placeholders like <code>{passport_number}<\/code>, <code>{full_name}<\/code>, or <code>{applicant_name}<\/code>.<\/li>\n<li>Optional Gravity Forms entry PDF summary upload.<\/li>\n<li>Optional local file deletion after successful upload.<\/li>\n<li>Encrypted storage for client secret and tokens.<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to Microsoft OneDrive through Microsoft Graph.<\/p>\n\n<p>It sends data to Microsoft only when:\n* an administrator clicks <code>Connect OneDrive<\/code> and completes OAuth authorization\n* a configured form submission triggers a file upload to OneDrive\n* optional Gravity Forms PDF summary upload is enabled and a PDF summary is uploaded<\/p>\n\n<p>Data sent to Microsoft may include:\n* OAuth authorization data required to obtain access and refresh tokens\n* uploaded file contents\n* remote folder and file names built from plugin settings and form submission context<\/p>\n\n<p>Folder template examples:\n* <code>{form_title}_{field_3}_{field_48}_{entry_id}<\/code>\n* <code>IDLV_Alex Smith_A1234567_987<\/code>\n* <code>{form_title}_{full_name}_{passport_number}_{entry_id}<\/code>\n* <code>{provider}\/{form_id}\/{field_3}\/{entry_id}<\/code>\n* <code>{provider}\/{form_id}\/{field_1_3}-{field_1_6}\/{entry_id}<\/code>\n* <code>{provider}\/{form_id}\/{submission_folder}<\/code><\/p>\n\n<p>Service provider:\n* Microsoft OneDrive \/ Microsoft Graph<\/p>\n\n<p>Service documentation and terms:\n* Microsoft Graph: https:\/\/learn.microsoft.com\/graph\/overview\n* Microsoft Terms of Use: https:\/\/www.microsoft.com\/servicesagreement\n* Microsoft Privacy Statement: https:\/\/privacy.microsoft.com\/privacystatement<\/p>\n\n<h3>Troubleshooting<\/h3>\n\n<ul>\n<li><code>AADSTS50011<\/code> redirect mismatch:\n\n<ul>\n<li>The Redirect URI in Entra must exactly match the plugin value, including protocol (<code>https:\/\/<\/code>), domain, path, and trailing slash behavior.<\/li>\n<\/ul><\/li>\n<li><code>OneDrive connection failed<\/code> after clicking Connect:\n\n<ul>\n<li>Save settings first and confirm Tenant ID, Client ID, and Client Secret are not empty.<\/li>\n<li>If secret is regenerated in Entra, paste new secret Value in plugin and save again.<\/li>\n<\/ul><\/li>\n<li>Permission errors from Graph:\n\n<ul>\n<li>Confirm <code>Files.ReadWrite<\/code> is delegated permission (not application permission).<\/li>\n<li>Confirm consent was granted in the same tenant\/account you sign in with.<\/li>\n<\/ul><\/li>\n<li>Upload size issues:\n\n<ul>\n<li>Current upload call uses Microsoft Graph simple upload (<code>PUT ...\/content<\/code>), which supports up to 250 MB per file.<\/li>\n<li>Resumable\/chunked upload sessions are not implemented in this plugin version.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h3>Security Notes<\/h3>\n\n<ul>\n<li>Only users with <code>manage_options<\/code> can configure or connect OneDrive.<\/li>\n<li>OAuth state is validated to prevent CSRF.<\/li>\n<li>Settings forms and actions use WordPress nonces.<\/li>\n<li>Secrets and tokens are encrypted at rest using site salts.<\/li>\n<li>Upload path building sanitizes all path segments.<\/li>\n<li>Local path resolution is restricted to the WordPress uploads directory.<\/li>\n<\/ul>\n\n<h3>Known Limits<\/h3>\n\n<ul>\n<li>This version uploads immediately on form completion.<\/li>\n<li>Large\/resumable upload sessions are not yet implemented.<\/li>\n<li>Upload retries\/queue management are not yet implemented.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Copy <code>digiexpert8-forms-file-uploader-for-onedrive<\/code> into <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin in WordPress admin.<\/li>\n<li>Open <code>DigiExpert8 Forms File Uploader for OneDrive<\/code> in the WordPress admin menu.<\/li>\n<li>Follow the detailed setup steps below.<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Preserved existing refresh tokens when Microsoft token refresh responses do not include a replacement refresh token.<\/li>\n<li>Improved local upload URL resolution for protocol\/domain aliases, encoded filenames, and query strings.<\/li>\n<li>Fixed fallback URL downloads being rejected before upload when a form plugin returns a URL that cannot be mapped directly to the uploads directory.<\/li>\n<li>Improved WPForms and Contact Form 7 uploaded file detection for newer\/nested file payloads.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Made the configured Folder Template authoritative for OneDrive folder paths across providers.<\/li>\n<li>Added form title and field placeholder support for folder templates, including Gravity Forms, WPForms, and Contact Form 7 field values.<\/li>\n<li>Changed the default folder template to <code>{form_title}_{field_3}_{field_48}_{entry_id}<\/code> with updated admin examples.<\/li>\n<li>Removed automatic duplicate-folder suffixing so deterministic templates stay unchanged.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Added WordPress.org submission polish for external service disclosure and public metadata.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Added WordPress.com Marketplace-friendly metadata headers.<\/li>\n<li>Added Plugins screen Settings link.<\/li>\n<li>Added non-breaking extension hooks for upload context and Gravity Forms folder\/file customization.<\/li>\n<li>Updated debug logging to prefer WooCommerce logger when available.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added optional Gravity Forms entry PDF summary upload to the same OneDrive submission folder.<\/li>\n<li>Added admin setting to enable or disable Gravity Forms PDF summary upload.<\/li>\n<li>Kept existing file-upload behavior unchanged by default.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial production release.<\/li>\n<\/ul>","raw_excerpt":"Uploads Gravity Forms, WPForms, and Contact Form 7 files to Microsoft OneDrive with secure OAuth and configurable filtering.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/293044","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=293044"}],"author":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/digiexpert8"}],"wp:attachment":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=293044"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=293044"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=293044"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=293044"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=293044"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=293044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}