PageRenderTime 45ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/backwpup/inc/class-install.php

https://bitbucket.org/cesarmedrano/cesarmedrano
PHP | 310 lines | 239 code | 21 blank | 50 comment | 40 complexity | 5648880a8116f3c5e9c52c51f9d633af MD5 | raw file
  1. <?php
  2. /**
  3. * Class for upgrade / deactivation / uninstall
  4. */
  5. class BackWPup_Install {
  6. /**
  7. * Creates DB und updates settings
  8. */
  9. public static function activate() {
  10. //do upgrade from version 2.x
  11. if ( ! get_site_option( 'backwpup_version' ) && get_option( 'backwpup' ) && get_option( 'backwpup_jobs' ) )
  12. self::upgrade_from_version_two();
  13. //create new option on not ms blogs
  14. if ( ! is_multisite() && ! get_option( 'backwpup_jobs', FALSE ) )
  15. add_option( 'backwpup_jobs', array( ), NULL, 'no');
  16. //remove old schedule
  17. wp_clear_scheduled_hook( 'backwpup_cron' );
  18. //make new schedule
  19. $activejobs = BackWPup_Option::get_job_ids( 'activetype', 'wpcron' );
  20. if ( ! empty( $activejobs ) ) {
  21. foreach ( $activejobs as $id ) {
  22. $cronnxet = BackWPup_Cron::cron_next( BackWPup_Option::get( $id, 'cron') );
  23. wp_schedule_single_event( $cronnxet, 'backwpup_cron', array( 'id' => $id ) );
  24. }
  25. }
  26. //add check Cleanup schedule
  27. wp_clear_scheduled_hook( 'backwpup_check_cleanup' );
  28. wp_schedule_event( time(), 'twicedaily', 'backwpup_check_cleanup' );
  29. //add user role
  30. $role = get_role( 'administrator' );
  31. $role->add_cap( 'backwpup' ); // BackWPup general accesses (like Dashboard)
  32. $role->add_cap( 'backwpup_jobs' ); // accesses for job page
  33. $role->add_cap( 'backwpup_jobs_edit' ); // user can edit/delete/copy/export jobs
  34. $role->add_cap( 'backwpup_jobs_start' ); // user can start jobs
  35. $role->add_cap( 'backwpup_backups' ); // accesses for backups page
  36. $role->add_cap( 'backwpup_backups_download' ); // user can download backup files
  37. $role->add_cap( 'backwpup_backups_delete' ); // user can delete backup files
  38. $role->add_cap( 'backwpup_logs' ); // accesses for logs page
  39. $role->add_cap( 'backwpup_logs_delete' ); // user can delete log files
  40. $role->add_cap( 'backwpup_settings' ); // accesses for settings page
  41. add_role( 'backwpup_admin', __( 'BackWPup Admin', 'backwpup' ), array(
  42. 'backwpup' => TRUE,
  43. 'backwpup_jobs' => TRUE,
  44. 'backwpup_jobs_edit' => TRUE,
  45. 'backwpup_jobs_start' => TRUE,
  46. 'backwpup_backups' => TRUE,
  47. 'backwpup_backups_download' => TRUE,
  48. 'backwpup_backups_delete' => TRUE,
  49. 'backwpup_logs' => TRUE,
  50. 'backwpup_logs_delete' => TRUE,
  51. 'backwpup_settings' => TRUE,
  52. ) );
  53. add_role( 'backwpup_check', __( 'BackWPup jobs checker', 'backwpup' ), array(
  54. 'backwpup' => TRUE,
  55. 'backwpup_jobs' => TRUE,
  56. 'backwpup_jobs_edit' => FALSE,
  57. 'backwpup_jobs_start' => FALSE,
  58. 'backwpup_backups' => TRUE,
  59. 'backwpup_backups_download' => FALSE,
  60. 'backwpup_backups_delete' => FALSE,
  61. 'backwpup_logs' => TRUE,
  62. 'backwpup_logs_delete' => FALSE,
  63. 'backwpup_settings' => FALSE,
  64. ) );
  65. add_role( 'backwpup_helper', __( 'BackWPup jobs helper', 'backwpup' ), array(
  66. 'backwpup' => TRUE,
  67. 'backwpup_jobs' => TRUE,
  68. 'backwpup_jobs_edit' => FALSE,
  69. 'backwpup_jobs_start' => TRUE,
  70. 'backwpup_backups' => TRUE,
  71. 'backwpup_backups_download' => TRUE,
  72. 'backwpup_backups_delete' => TRUE,
  73. 'backwpup_logs' => TRUE,
  74. 'backwpup_logs_delete' => TRUE,
  75. 'backwpup_settings' => FALSE,
  76. ) );
  77. //add cfg options to database prevent false false if option not exists
  78. $cfg_options = BackWPup_Option::defaults( 'cfg', NULL );
  79. foreach ( $cfg_options as $cfg => $option ) {
  80. //options to exclude
  81. if ( in_array( $cfg, array( 'dropboxappkey', 'dropboxappsecret', 'dropboxsandboxappkey', 'dropboxsandboxappsecret', 'sugarsynckey', 'sugarsyncsecret', 'sugarsyncappid' ) ) )
  82. continue;
  83. //detect if option already exists
  84. $test_option_exists = get_site_option( 'backwpup_cfg_' . $cfg, 'TEST12345TEST' );
  85. //add option if not exists
  86. if ( $test_option_exists == 'TEST12345TEST')
  87. add_site_option( 'backwpup_cfg_' . $cfg, $option );
  88. }
  89. //update version
  90. update_site_option( 'backwpup_version', BackWPup::get_plugin_data( 'Version' ) );
  91. //show trailing page again
  92. update_site_option( 'backwpup_about_page', FALSE );
  93. }
  94. /**
  95. *
  96. * Cleanup on Plugin deactivation
  97. *
  98. * @return void
  99. */
  100. public static function deactivate() {
  101. wp_clear_scheduled_hook( 'backwpup_cron' );
  102. $activejobs = BackWPup_Option::get_job_ids( 'activetype', 'wpcron' );
  103. if ( ! empty( $activejobs ) ) {
  104. foreach ( $activejobs as $id ) {
  105. wp_clear_scheduled_hook( 'backwpup_cron', array( 'id' => $id ) );
  106. }
  107. }
  108. wp_clear_scheduled_hook( 'backwpup_check_cleanup' );
  109. remove_role( 'backwpup_admin' );
  110. remove_role( 'backwpup_helper' );
  111. remove_role( 'backwpup_check' );
  112. $role = get_role( 'administrator' );
  113. $role->remove_cap( 'backwpup' );
  114. $role->remove_cap( 'backwpup_jobs' );
  115. $role->remove_cap( 'backwpup_jobs_edit' );
  116. $role->remove_cap( 'backwpup_jobs_start' );
  117. $role->remove_cap( 'backwpup_backups' );
  118. $role->remove_cap( 'backwpup_backups_download' );
  119. $role->remove_cap( 'backwpup_backups_delete' );
  120. $role->remove_cap( 'backwpup_logs' );
  121. $role->remove_cap( 'backwpup_logs_delete' );
  122. $role->remove_cap( 'backwpup_settings' );
  123. //to reschedule on activation and so on
  124. update_site_option( 'backwpup_version', BackWPup::get_plugin_data( 'version' ) .'-inactive' );
  125. }
  126. private static function upgrade_from_version_two() {
  127. //load options
  128. $cfg = get_option( 'backwpup' ); //only exists in Version 2
  129. $jobs = get_option( 'backwpup_jobs' );
  130. //delete old options
  131. delete_option( 'backwpup' );
  132. delete_option( 'backwpup_jobs' );
  133. //add new option default structure and without auto load cache
  134. if ( ! is_multisite() )
  135. add_option( 'backwpup_jobs', array( ), NULL, 'no');
  136. //upgrade cfg
  137. //if old value switch it to new
  138. if ( ! empty( $cfg[ 'dirlogs' ] ) )
  139. $cfg[ 'logfolder' ] = $cfg[ 'dirlogs' ];
  140. if ( ! empty( $cfg[ 'httpauthpassword' ] ) ) {
  141. if ( preg_match('%^[a-zA-Z0-9/+]*={0,2}$%', $cfg[ 'httpauthpassword' ] ) )
  142. $cfg[ 'httpauthpassword' ] = base64_decode( $cfg[ 'httpauthpassword' ] );
  143. $cfg[ 'httpauthpassword' ] = BackWPup_Encryption::encrypt( $cfg[ 'httpauthpassword' ] );
  144. }
  145. // delete old not needed vars
  146. unset( $cfg[ 'dirtemp' ], $cfg[ 'dirlogs' ], $cfg[ 'logfilelist' ], $cfg[ 'jobscriptruntime' ], $cfg[ 'jobscriptruntimelong' ], $cfg[ 'last_activate' ], $cfg[ 'disablewpcron' ], $cfg[ 'phpzip' ], $cfg[ 'apicronservice' ], $cfg[ 'mailsndemail' ], $cfg[ 'mailsndname' ], $cfg[ 'mailmethod' ], $cfg[ 'mailsendmail' ], $cfg[ 'mailhost' ], $cfg[ 'mailpass' ], $cfg[ 'mailhostport' ], $cfg[ 'mailsecure' ], $cfg[ 'mailuser' ] );
  147. //save in options
  148. foreach ( $cfg as $cfgname => $cfgvalue )
  149. BackWPup_Option::update( 'cfg', $cfgname, $cfgvalue );
  150. //Put old jobs to new if exists
  151. foreach ( $jobs as $jobid => $jobvalue ) {
  152. //convert general settings
  153. if ( empty( $jobvalue[ 'jobid' ] ) )
  154. $jobvalue[ 'jobid' ] = $jobid;
  155. if ( empty( $jobvalue[ 'activated' ] ) )
  156. $jobvalue[ 'activetype' ] = '';
  157. else
  158. $jobvalue[ 'activetype' ] = 'wpcron';
  159. if ( ! isset( $jobvalue[ 'cronselect' ] ) && ! isset( $jobvalue[ 'cron' ] ) )
  160. $jobvalue[ 'cronselect' ] = 'basic';
  161. elseif ( ! isset( $jobvalue[ 'cronselect' ] ) && isset( $jobvalue[ 'cron' ] ) )
  162. $jobvalue[ 'cronselect' ] = 'advanced';
  163. $jobvalue[ 'backuptype' ] = 'archive';
  164. $jobvalue[ 'type' ] = explode( '+', $jobvalue[ 'type' ] ); //save as array
  165. foreach ( $jobvalue[ 'type' ] as $key => $type ) {
  166. if ( $type == 'DB' )
  167. $jobvalue[ 'type' ][ $key ] = 'DBDUMP';
  168. if ( $type == 'OPTIMIZE' )
  169. $jobvalue[ 'type' ][ $key ] = 'DBOPTIMIZE';
  170. if ( $type == 'CHECK' )
  171. $jobvalue[ 'type' ][ $key ] = 'DBCHECK';
  172. if ( $type == 'MAIL' )
  173. $jobvalue[ 'type' ][ $key ] = 'EMAIL';
  174. }
  175. $jobvalue[ 'archivename' ] = $jobvalue[ 'fileprefix' ] . '%Y-%m-%d_%H-%i-%s';
  176. $jobvalue[ 'archiveformat' ] = $jobvalue[ 'fileformart' ];
  177. //convert active destinations
  178. $jobvalue[ 'destinations' ] = array();
  179. if ( ! empty( $jobvalue[ 'backupdir' ] ) and $jobvalue[ 'backupdir' ] != '/' )
  180. $jobvalue[ 'destinations' ][ ] = 'FOLDER';
  181. if ( ! empty( $jobvalue[ 'mailaddress' ] ) )
  182. $jobvalue[ 'destinations' ][ ] = 'MAIL';
  183. if ( ! empty( $jobvalue[ 'ftphost' ] ) and ! empty( $jobvalue[ 'ftpuser' ] ) and ! empty( $jobvalue[ 'ftppass' ] ) )
  184. $jobvalue[ 'destinations' ][ ] = 'FTP';
  185. if ( ! empty( $jobvalue[ 'dropetoken' ] ) and ! empty( $jobvalue[ 'dropesecret' ] ) )
  186. $jobvalue[ 'destinations' ][ ] = 'DROPBOX';
  187. if ( ! empty( $jobvalue[ 'sugarrefreshtoken' ] ) and ! empty( $jobvalue[ 'sugarroot' ] ) )
  188. $jobvalue[ 'destinations' ][ ] = 'SUGARSYNC';
  189. if ( ! empty( $jobvalue[ 'awsAccessKey' ] ) and ! empty( $jobvalue[ 'awsSecretKey' ] ) and ! empty( $jobvalue[ 'awsBucket' ] ) )
  190. $jobvalue[ 'destinations' ][ ] = 'S3';
  191. if ( ! empty( $jobvalue[ 'GStorageAccessKey' ] ) and ! empty( $jobvalue[ 'GStorageSecret' ] ) and ! empty( $jobvalue[ 'GStorageBucket' ] ) and !in_array( 'S3', $jobvalue[ 'destinations' ] ) )
  192. $jobvalue[ 'destinations' ][ ] = 'S3';
  193. if ( ! empty( $jobvalue[ 'rscUsername' ] ) and ! empty( $jobvalue[ 'rscAPIKey' ] ) and ! empty( $jobvalue[ 'rscContainer' ] ) )
  194. $jobvalue[ 'destinations' ][ ] = 'RSC';
  195. if ( ! empty( $jobvalue[ 'msazureHost' ] ) and ! empty( $jobvalue[ 'msazureAccName' ] ) and ! empty( $jobvalue[ 'msazureKey' ] ) and ! empty( $jobvalue[ 'msazureContainer' ] ) )
  196. $jobvalue[ 'destinations' ][ ] = 'MSAZURE';
  197. //convert dropbox
  198. $jobvalue[ 'dropboxtoken' ] = ''; //new app key are set must reauth
  199. $jobvalue[ 'dropboxsecret' ] = '';
  200. $jobvalue[ 'dropboxroot' ] = 'dropbox';
  201. $jobvalue[ 'dropboxmaxbackups' ] = $jobvalue[ 'dropemaxbackups' ];
  202. $jobvalue[ 'dropboxdir' ] = $jobvalue[ 'dropedir' ];
  203. unset( $jobvalue[ 'dropetoken' ], $jobvalue[ 'dropesecret' ], $jobvalue[ 'droperoot' ], $jobvalue[ 'dropemaxbackups' ], $jobvalue[ 'dropedir' ] );
  204. //convert amazon S3
  205. $jobvalue[ 's3accesskey' ] = $jobvalue[ 'awsAccessKey' ];
  206. $jobvalue[ 's3secretkey' ] = BackWPup_Encryption::encrypt( $jobvalue[ 'awsSecretKey' ] );
  207. $jobvalue[ 's3bucket' ] = $jobvalue[ 'awsBucket' ];
  208. //get aws region
  209. $jobvalue[ 's3region' ] = 'us-east-1';
  210. $jobvalue[ 's3base_url' ] = '';
  211. $jobvalue[ 's3storageclass' ] = !empty( $jobvalue[ 'awsrrs' ] ) ? 'REDUCED_REDUNDANCY' : '';
  212. $jobvalue[ 's3dir' ] = $jobvalue[ 'awsdir' ];
  213. $jobvalue[ 's3maxbackups' ] = $jobvalue[ 'awsmaxbackups' ];
  214. unset( $jobvalue[ 'awsAccessKey' ], $jobvalue[ 'awsSecretKey' ], $jobvalue[ 'awsBucket' ], $jobvalue[ 'awsrrs' ], $jobvalue[ 'awsdir' ], $jobvalue[ 'awsmaxbackups' ] );
  215. //convert google storage
  216. $jobvalue[ 's3accesskey' ] = $jobvalue[ 'GStorageAccessKey' ];
  217. $jobvalue[ 's3secretkey' ] = BackWPup_Encryption::encrypt( $jobvalue[ 'GStorageSecret' ] );
  218. $jobvalue[ 's3bucket' ] = $jobvalue[ 'GStorageBucket' ];
  219. $jobvalue[ 's3region' ] = 'google-storage';
  220. $jobvalue[ 's3base_url' ] = '';
  221. $jobvalue[ 's3ssencrypt' ] = '';
  222. $jobvalue[ 's3dir' ] = $jobvalue[ 'GStoragedir' ];
  223. $jobvalue[ 's3maxbackups' ] = $jobvalue[ 'GStoragemaxbackups' ];
  224. unset( $jobvalue[ 'GStorageAccessKey' ], $jobvalue[ 'GStorageSecret' ], $jobvalue[ 'GStorageBucket' ], $jobvalue[ 'GStoragedir' ], $jobvalue[ 'GStoragemaxbackups' ] );
  225. //convert MS Azure storage
  226. $jobvalue[ 'msazureaccname' ] = $jobvalue[ 'msazureAccName' ];
  227. $jobvalue[ 'msazurekey' ] = BackWPup_Encryption::encrypt( $jobvalue[ 'msazureKey' ] );
  228. $jobvalue[ 'msazurecontainer' ] = $jobvalue[ 'msazureContainer' ];
  229. unset( $jobvalue[ 'msazureHost' ], $jobvalue[ 'msazureAccName' ], $jobvalue[ 'msazureKey' ], $jobvalue[ 'msazureContainer' ] );
  230. //convert FTP
  231. if ( preg_match('%^[a-zA-Z0-9/+]*={0,2}$%', $jobvalue[ 'ftppass' ]) )
  232. $jobvalue[ 'ftppass' ] = base64_decode( $jobvalue[ 'ftppass' ] );
  233. $jobvalue[ 'ftppass' ] = BackWPup_Encryption::encrypt( $jobvalue[ 'ftppass' ] );
  234. if ( ! empty( $jobvalue[ 'ftphost' ] ) && strstr( $jobvalue[ 'ftphost' ], ':' ) )
  235. list( $jobvalue[ 'ftphost' ], $jobvalue[ 'ftphostport' ] ) = explode( ':', $jobvalue[ 'ftphost' ], 2 );
  236. //convert Sugarsync
  237. //convert Mail
  238. $jobvalue[ 'emailaddress' ] = $jobvalue[ 'mailaddress' ];
  239. $jobvalue[ 'emailefilesize' ] = $jobvalue[ 'mailefilesize' ];
  240. unset( $jobvalue[ 'mailaddress' ], $jobvalue[ 'mailefilesize' ] );
  241. //convert RSC
  242. $jobvalue[ 'rscusername' ] = $jobvalue[ 'rscUsername' ];
  243. $jobvalue[ 'rscapikey' ] = $jobvalue[ 'rscAPIKey' ];
  244. $jobvalue[ 'rsccontainer' ] = $jobvalue[ 'rscContainer' ];
  245. //convert jobtype DB Dump
  246. $jobvalue[ 'dbdumpexclude' ] = $jobvalue[ 'dbexclude' ];
  247. unset( $jobvalue[ 'dbexclude' ], $jobvalue['dbshortinsert'] );
  248. //convert jobtype DBDUMP, DBCHECK, DBOPTIMIZE
  249. $jobvalue[ 'dbdumpmaintenance' ] = $jobvalue['maintenance'];
  250. $jobvalue[ 'dbcheckmaintenance' ] = $jobvalue['maintenance'];
  251. $jobvalue[ 'dboptimizemaintenance' ] = $jobvalue['maintenance'];
  252. $jobvalue[ 'dbcheckrepair' ] = TRUE;
  253. unset( $jobvalue[ 'maintenance' ] );
  254. //convert jobtype wpexport
  255. //convert jobtype file
  256. $excludes = array();
  257. foreach ( $jobvalue[ 'backuprootexcludedirs' ] as $folder ) {
  258. $excludes[] = basename( $folder );
  259. }
  260. $jobvalue[ 'backuprootexcludedirs' ] = $excludes;
  261. $excludes = array();
  262. foreach ( $jobvalue[ 'backupcontentexcludedirs' ] as $folder ) {
  263. $excludes[] = basename( $folder );
  264. }
  265. $jobvalue[ 'backupcontentexcludedirs' ] = $excludes;
  266. $excludes = array();
  267. foreach ( $jobvalue[ 'backuppluginsexcludedirs' ] as $folder ) {
  268. $excludes[] = basename( $folder );
  269. }
  270. $jobvalue[ 'backuppluginsexcludedirs' ]= $excludes;
  271. $excludes = array();
  272. foreach ( $jobvalue[ 'backupthemesexcludedirs' ] as $folder ) {
  273. $excludes[] = basename( $folder );
  274. }
  275. $jobvalue[ 'backupthemesexcludedirs' ] = $excludes;
  276. $excludes = array();
  277. foreach ( $jobvalue[ 'backupuploadsexcludedirs' ] as $folder ) {
  278. $excludes[] = basename( $folder );
  279. }
  280. $jobvalue[ 'backupuploadsexcludedirs' ] = $excludes;
  281. //delete not longer needed
  282. unset( $jobvalue[ 'cronnextrun' ], $jobvalue[ 'fileprefix' ], $jobvalue[ 'fileformart' ], $jobvalue[ 'scheduleintervaltype' ], $jobvalue[ 'scheduleintervalteimes' ], $jobvalue[ 'scheduleinterval' ], $jobvalue[ 'dropemail' ], $jobvalue[ 'dropepass' ], $jobvalue[ 'dropesignmethod' ] );
  283. //save in options
  284. foreach ( $jobvalue as $jobvaluename => $jobvaluevalue )
  285. BackWPup_Option::update( $jobvalue[ 'jobid' ], $jobvaluename, $jobvaluevalue );
  286. }
  287. set_site_transient( 'backwpup_upgrade_from_version_two', TRUE, 3600*24*7);
  288. }
  289. }