SiteDrive Provider API
This article explains how to use the SiteDrive Provider API. A provider is an integration that provides a way for SiteDrive to source data or files.
sitedrive_provider_register
This function is used to register a custom provider type to SiteDrive.
sitedrive_provider_register('yourType', [ 'name' => __('Your Type') ]);
name | string Name or title of your provider |
icon | string Icon to show in the integrations page |
file_process | callable Set the image of an individual file or set a default image if this is not valid |
download | callable Process file into base64 data |
import | callable The process to import a file into another site using SiteDrive |
finder | callable Grab results of your provider and add them to the SiteDrive file finder |
import_status | callable takes 3 arguments. The default status, the drive, and the file in question. |
upload | callable similar to import. This sends an array with data as a key with the file upload data. This is not a sync request and does not contain information about the last updated time |
is_file_type | callable a detection function prior to running upload . Returning true here will result in the file type being regarded as a file for your provider, then calling the upload function. |
init | callable a function to run if your provider is enabled. This is mostly used to hook into actions and delete files if the file has been deleted outside of SiteDrive. |
The following is a sample from our Gravity Forms integration.
<?php namespace SiteDrive\GravityForms; use GFAPI; use SiteDrive\Data\Files; const LOGO = SITEDRIVE_URL . 'assets/img/gravityforms-default.png'; // Grab a gravity form by our meta key and id we use function getByMetaID($metaID, $sendID = true) { $forms = GFAPI::get_forms(); foreach ($forms as $form) { if ($form[Files::META_KEY] !== $metaID) { continue; } return $sendID ? $form['id'] : $form; } return null; } function getByID($id) { $forms = GFAPI::get_forms(); foreach ($forms as $form) { if ($form['id'] !== (int)$id) { continue; } return $form; } return null; } // Checks if keys in export are that of a gravity forms export function isExport($json) { return !empty($json['fields']) || !empty($json['button']); } // Registry as a provider sitedrive_provider_register('gravityforms', [ 'name' => __('Gravity Forms', SITEDRIVE_LOCALIZE), 'icon' => SITEDRIVE_URL . 'assets/img/gravity-forms-icon.jpg', 'file_process' => function($file) { $file['image'] = LOGO; $file['last_updated'] = get_the_modified_date('U', $file['type_id']); return $file; }, 'import_status' => function($default, $drive, $file) { $metaId = sitedrive_generate_meta_id($drive, $file); // Check if imported at all $imported = getByMetaID($metaId, false); if (empty($imported)) { return Files::NOT_IMPORTED; } // Send status based on updated time $importedUpdated = $imported[Files::META_UPDATED_KEY]; return (int)$importedUpdated === (int)$file['last_updated'] ? Files::SYNCED : FILES::OUT_OF_SYNC; }, 'download' => function($file) { $form = GFAPI::get_form($file['type_id']); return sitedrive_base64_json_encode($form); }, 'import' => function($drive, $file, $contents) { $metaId = sitedrive_generate_meta_id($drive, $file); // Grab json data $json = sitedrive_base64_json_decode($contents); unset($json['id']); $foundID = getByMetaID($metaId); // Set meta key $json[Files::META_KEY] = $metaId; $json[Files::META_UPDATED_KEY] = $file['last_updated']; // Update or add form if ($foundID) { $json['id'] = $foundID; GFAPI::update_form($json); } else { $foundID = GFAPI::add_form($json); } return $foundID; }, 'finder' => function($args = []) { if (!empty($args['offset'])) { return []; } $search = $args['search']; $forms = GFAPI::get_forms(); $results = []; foreach ($forms as $form) { if (!empty($search) && stripos($form['title'], $search) === false) { continue; } $results[] = [ 'name' => $form['title'], 'id' => $form['id'], 'image' => LOGO, 'type' => 'gravityforms', ]; } return [ 'results' => $results, ]; }, // File uploaded is a valid attachment type 'is_file_type' => function($file) { $json = sitedrive_safe_json_decode($file['data']); // Directly from Gravity Forms export if (!empty($json['0'])) { return isExport($json['0']); } // Singular our download return isExport($json); }, 'upload' => function($file) { $json = sitedrive_safe_json_decode($file['data']); // Singular import if (isExport($json)) { $out = []; $out['type_id'] = GFAPI::add_form($json); $form = GFAPI::get_form($out['type_id']); $out['name'] = $form['title']; return $out; } // Multi export from Gravity Forms itself $ids = []; foreach ($json as $form) { $ids[] = GFAPI::add_form($form); } return $ids; }, 'init' => function() { // Delete Attachment handler add_action('gform_after_delete_form', function($form_id) { sitedrive_file_delete_by([ 'type' => 'gravityforms', 'type_id' => $form_id, ]); }); }, ]);
For website builders we primarily use our custom post import however you might wish to have nicer file images when there is no featured image set on a post. We do this on various builders like Bricks.
sitedrive_providers
This function will grab all providers registered to SiteDrive in an array.
Arguments
None
Returns
Array
of providers which is an associative array.
$providers = sitedrive_providers(); foreach ($providers as $provider) { echo $provider['id'] . "\n"; }
sitedrive_provider
Grab a singular provider by an ID.
Arguments
$id |
The ID of provider |
Returns
Associative Array
of the Provider. Or throws an error if trying to grab a provider that does not exist.
sitedrive_provider_enabled
To enable a provider. Pass in an ID and get the status.
Arguments
$id |
The ID of provider |
Returns
bool
if the provider is enabled. Will return false if the provider does not exist.