PluginProbe
WP-Stateless – Google Cloud Storage / 2.1.7
WP-Stateless – Google Cloud Storage v2.1.7
4.4.3 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.3.0 2.3.1 2.3.2 3.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.2.0 3.2.1 3.2.2 All 62 releases
wp-stateless / lib / classes / compatibility / gravity-forms.php

gravity-forms.php in WP-Stateless – Google Cloud Storage 2.1.7, at lib/classes/compatibility/gravity-forms.php

154 lines 6.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: Gravity Forms
4 * Plugin URI: https://www.gravityforms.com/
5 *
6 * Compatibility Description: Enables support for these Gravity Forms features:
7 * file upload field, post image field, custom file upload field type.
8 *
9 */
10
11 namespace wpCloud\StatelessMedia {
12
13 if(!class_exists('wpCloud\StatelessMedia\GravityForm')) {
14
15 class GravityForm extends ICompatibility {
16 protected $id = 'gravity-form';
17 protected $title = 'Gravity Forms';
18 protected $constant = 'WP_STATELESS_COMPATIBILITY_GF';
19 protected $description = 'Enables support for these Gravity Forms features: file upload field, post image field, custom file upload field type.';
20 protected $plugin_file = 'gravityforms/gravityforms.php';
21
22 public function module_init($sm){
23 do_action('sm:sync::register_dir', '/gravity_forms/');
24 add_filter( 'gform_save_field_value', array($this, 'gform_save_field_value'), 10, 5 );
25 add_action( 'sm::synced::nonMediaFiles', array($this, 'modify_db'), 10, 3);
26
27 add_action( 'gform_file_path_pre_delete_file', array($this, 'gform_file_path_pre_delete_file'), 10, 2);
28 }
29
30 /**
31 * On gform save field value sync file to GCS and alter the file url to GCS link.
32 *
33 * @param $value
34 * @param $lead
35 * @param $field
36 * @param $form
37 * @param $input_id
38 */
39 public function gform_save_field_value( $value, $lead, $field, $form, $input_id ) {
40 $type = \GFFormsModel::get_input_type($field);
41 if($type == 'fileupload'){
42 $dir = wp_upload_dir();
43 $position = strpos($value, 'gravity_forms/');
44
45 if( $position !== false ){
46 $name = substr($value, $position);
47 $absolutePath = $dir['basedir'] . '/' . $name;
48 // doing sync
49 do_action( 'sm:sync::syncFile', $name, $absolutePath);
50 $value = ud_get_stateless_media()->get_gs_host() . '/' . $name;
51 // Todo add filter.
52 }
53 }
54 else if($type == 'post_image'){
55 add_action( 'gform_after_create_post', function($post_id, $lead, $form) use ($value, $field){
56 global $wpdb;
57 $dir = wp_upload_dir();
58 $lead_detail_id = $lead['id'];
59 $gf_upload_root = \GFFormsModel::get_upload_root();
60 $gf_upload_url_root = \GFFormsModel::get_upload_url_root();
61 $lead_detail_table = \GFFormsModel::get_lead_details_table_name();
62
63 $position = strpos($value, 'gravity_forms/');
64 $_name = substr($value, $position); // gravity_forms/
65 $arr_name = explode('|:|', $_name);
66 $name = rgar( $arr_name, 0 ); // Removed |:| from end of the url.
67
68 // doing sync
69 do_action( 'sm:sync::syncFile', $name, $dir['basedir'] . '/' . $name);
70
71 $value = ud_get_stateless_media()->get_gs_host() . '/' . $_name;
72 // Todo add filter.
73 $result = $wpdb->update( $lead_detail_table, array( 'value' => $value ), array( 'lead_id' => $lead_detail_id, 'form_id' => $form['id'], 'field_number' => $field['id'], ), array( '%s' ), array( '%d' ) );
74 }, 10, 3);
75 }
76 return $value;
77 }
78
79 /**
80 * Modify value in database after sync from Sync tab.
81 *
82 */
83 public function modify_db( $file_path, $fullsizepath, $media ){
84 global $wpdb;
85 $position = strpos($file_path, 'gravity_forms/');
86 $is_index = strpos($file_path, 'index.html');
87
88 if( $position !== false && !$is_index ){
89 $dir = wp_upload_dir();
90 $file_path = trim($file_path, '/');
91
92 $file_url = ud_get_stateless_media()->get_gs_host() . '/' . $file_path;
93 // Todo add filter.
94
95 // We need to get results from db because of post image field have extra data at the end of url.
96 // Unless we would loss those data.
97 // xyz.jpg|:|tile|:|description|:|
98 $query = sprintf(
99 "
100 SELECT id, value FROM {$wpdb->prefix}rg_lead_detail
101 WHERE value like '%s';
102 "
103 , '%' . $file_path . '%'
104 );
105 $results = $wpdb->get_results( $query );
106
107 foreach ($results as $result) {
108 $position = strpos($result->value, $dir['baseurl']);
109 if($position !== false){
110 $result->value = str_replace($dir['baseurl'], ud_get_stateless_media()->get_gs_host(), $result->value);
111 $query = sprintf(
112 "
113 UPDATE {$wpdb->prefix}rg_lead_detail
114 SET value = '%s'
115 WHERE id = %d
116 "
117 , $result->value, $result->id
118 );
119 $entries = $wpdb->get_results( $query );
120 }
121
122 }
123
124 }
125 }
126
127 /**
128 * Delete file from GCS
129 */
130 public function gform_file_path_pre_delete_file( $file_path, $url ){
131 $file_path = wp_normalize_path($file_path);
132 $gs_host = wp_normalize_path( ud_get_stateless_media()->get_gs_host() );
133 $dir = wp_upload_dir();
134 $is_stateless = strpos($file_path, $gs_host);
135
136 // If the url is a GCS link then remove it from GCS.
137 if($is_stateless !== false){
138 $gs_name = substr($file_path, strpos($file_path, '/gravity_forms/'));
139 $file_path = $dir['basedir'] . $gs_name;
140
141 $client = ud_get_stateless_media()->get_client();
142 if( !is_wp_error( $client ) ) {
143 $client->remove_media( trim($gs_name, '/') );
144 }
145 }
146
147 return $file_path;
148 }
149 }
150
151 }
152
153 }
154