You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
361 lines
9.6 KiB
PHTML
361 lines
9.6 KiB
PHTML
8 months ago
|
<?php
|
||
|
namespace DeployerForGit;
|
||
|
|
||
|
/**
|
||
|
* Data Manager class
|
||
|
*/
|
||
|
class DataManager {
|
||
|
|
||
|
/**
|
||
|
* Update flush cache setting
|
||
|
*
|
||
|
* @param boolean $enabled true if need to enable, false otherwise.
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public function update_flush_cache_setting( $enabled = false ) {
|
||
|
$option_name = $this->get_flush_cache_option_name();
|
||
|
|
||
|
$string_value = $enabled ? '1' : '0';
|
||
|
|
||
|
return update_option( $option_name, $string_value );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Update alert notification setting
|
||
|
*
|
||
|
* @param boolean $enabled true if need to enable, false otherwise.
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public function update_alert_notification_setting( $enabled = false ) {
|
||
|
$option_name = $this->get_alert_notification_option_name();
|
||
|
|
||
|
$string_value = $enabled ? '1' : '0';
|
||
|
|
||
|
return update_option( $option_name, $string_value );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get flush cache option name
|
||
|
*
|
||
|
* @return boolean, false if not enabled, true if enabled
|
||
|
*/
|
||
|
public function get_flush_cache_setting() {
|
||
|
$option_name = $this->get_flush_cache_option_name();
|
||
|
$option_value = get_option( $option_name, '0' );
|
||
|
|
||
|
$bool_result = ( $option_value === '0' ) ? false : true;
|
||
|
|
||
|
return $bool_result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get alert notification option name
|
||
|
*
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public function get_alert_notification_setting() {
|
||
|
$option_name = $this->get_alert_notification_option_name();
|
||
|
$option_value = get_option( $option_name, '0' );
|
||
|
|
||
|
$bool_result = ( $option_value === '0' ) ? false : true;
|
||
|
|
||
|
return $bool_result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will reverify the theme saved in database and will remove if it's not exist.
|
||
|
*/
|
||
|
private function reverify_theme_lists() {
|
||
|
return $this->reverify_package_lists( 'theme' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will reverify the plugin saved in database and will remove if it's not exist.
|
||
|
*/
|
||
|
private function reverify_plugin_lists() {
|
||
|
return $this->reverify_package_lists( 'plugin' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will reverify the theme details.
|
||
|
*
|
||
|
* @param string $type Type of package (theme or plugin).
|
||
|
* @return void
|
||
|
*/
|
||
|
private function reverify_package_lists( $type = 'theme' ) {
|
||
|
$type = ( $type === 'theme' ) ? 'theme' : 'plugin';
|
||
|
|
||
|
if ( $type === 'theme' ) {
|
||
|
$option_name = $this->get_themes_option_name();
|
||
|
} else {
|
||
|
$option_name = $this->get_plugins_option_name();
|
||
|
}
|
||
|
|
||
|
$package_list = get_option( $option_name, array() );
|
||
|
|
||
|
foreach ( $package_list as $package_data ) {
|
||
|
if ( $type === 'theme' ) {
|
||
|
$theme = wp_get_theme( $package_data['slug'] );
|
||
|
|
||
|
if ( ! $theme->exists() ) {
|
||
|
$this->remove_package_details( $package_data['slug'], 'theme' );
|
||
|
}
|
||
|
} else {
|
||
|
$plugin_path = WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $package_data['slug'];
|
||
|
|
||
|
if ( ! file_exists( $plugin_path ) ) {
|
||
|
$this->remove_package_details( $package_data['slug'], 'plugin' );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will return the theme details.
|
||
|
*
|
||
|
* @param string $slug Theme slug.
|
||
|
* @param string $type Type of package (theme or plugin).
|
||
|
* @return array|bool Array of theme details if found, false otherwise.
|
||
|
*/
|
||
|
private function get_package( $slug = '', $type = 'theme' ) {
|
||
|
$type = ( $type === 'theme' ) ? 'theme' : 'plugin';
|
||
|
|
||
|
if ( $type === 'theme' ) {
|
||
|
$package_list = $this->get_theme_list();
|
||
|
} else {
|
||
|
$package_list = $this->get_plugin_list();
|
||
|
}
|
||
|
|
||
|
foreach ( $package_list as $package_details ) {
|
||
|
// If the theme_stylesheet matches the one we're looking to update.
|
||
|
if ( $package_details['slug'] === $slug ) {
|
||
|
|
||
|
return $package_details;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will return the theme details.
|
||
|
*
|
||
|
* @param string $theme_slug Theme slug.
|
||
|
* @return array|bool Array of theme details if found, false otherwise.
|
||
|
*/
|
||
|
public function get_theme( $theme_slug = '' ) {
|
||
|
return $this->get_package( $theme_slug, 'theme' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will return the plugin details.
|
||
|
*
|
||
|
* @param string $plugin_slug Plugin slug.
|
||
|
* @return array|bool Array of plugin details if found, false otherwise.
|
||
|
*/
|
||
|
public function get_plugin( $plugin_slug = '' ) {
|
||
|
return $this->get_package( $plugin_slug, 'plugin' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will return the list of all stored theme details.
|
||
|
*
|
||
|
* @return array Array of all stored theme details.
|
||
|
*/
|
||
|
public function get_theme_list() {
|
||
|
// synchronize existing themes with plugin options.
|
||
|
$this->reverify_theme_lists();
|
||
|
|
||
|
// Get all stored theme details.
|
||
|
$option_name = $this->get_themes_option_name();
|
||
|
return get_option( $option_name, array() );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will return the list of all stored plugin details.
|
||
|
*
|
||
|
* @return array Array of all stored plugin details.
|
||
|
*/
|
||
|
public function get_plugin_list() {
|
||
|
// synchronize existing themes with plugin options.
|
||
|
$this->reverify_plugin_lists();
|
||
|
|
||
|
// Get all stored theme details.
|
||
|
$option_name = $this->get_plugins_option_name();
|
||
|
return get_option( $option_name, array() );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will return the option name for storing alert notification setting.
|
||
|
*
|
||
|
* @return string Option name for storing alert notification setting.
|
||
|
*/
|
||
|
private function get_alert_notification_option_name() {
|
||
|
return DFG_SLUG . '_alert_notification';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will return the option name for storing flush cache setting.
|
||
|
*
|
||
|
* @return string Option name for storing flush cache setting.
|
||
|
*/
|
||
|
private function get_flush_cache_option_name() {
|
||
|
return DFG_SLUG . '_flush_cache';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will return the option name for storing theme details.
|
||
|
*
|
||
|
* @return string Option name for storing theme details.
|
||
|
*/
|
||
|
private function get_themes_option_name() {
|
||
|
return DFG_SLUG . '_themes_list';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will return the option name for storing plugin details.
|
||
|
*
|
||
|
* @return string Option name for storing plugin details.
|
||
|
*/
|
||
|
private function get_plugins_option_name() {
|
||
|
return DFG_SLUG . '_plugins_list';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will check if the data is correct.
|
||
|
*
|
||
|
* @param array $data Array of package data to save.
|
||
|
* @return bool true if saved successfully, false otherwise.
|
||
|
*/
|
||
|
private function option_value_is_correct( $data ) {
|
||
|
if ( ! is_array( $data ) ) {
|
||
|
return false; }
|
||
|
|
||
|
foreach ( array( 'slug', 'repo_url', 'branch', 'provider', 'is_private_repository', 'options' ) as $name ) {
|
||
|
if ( ! array_key_exists( $name, $data ) ) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( ! is_bool( $data['is_private_repository'] ) ) {
|
||
|
return false; }
|
||
|
|
||
|
if ( ! is_array( $data['options'] ) ) {
|
||
|
return false; }
|
||
|
|
||
|
if ( $data['is_private_repository'] === true ) {
|
||
|
|
||
|
$access_token_exist = array_key_exists( 'access_token', $data['options'] );
|
||
|
$user_pwd_exist = array_key_exists( 'username', $data['options'] ) && array_key_exists( 'password', $data['options'] );
|
||
|
|
||
|
if ( ! $access_token_exist && ! $user_pwd_exist ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if ( $data['provider'] === 'github' && ! $access_token_exist ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if ( $data['provider'] === 'gitea' && ! $access_token_exist ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if ( $data['provider'] === 'bitbucket' && ! $user_pwd_exist ) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will save theme data to the DB.
|
||
|
*
|
||
|
* @param array $new_data Array of package data to save.
|
||
|
* @param string $type Type of package (theme or plugin).
|
||
|
* @return bool true if saved successfully, false otherwise.
|
||
|
*/
|
||
|
public function store_package_details( $new_data, $type = 'theme' ) {
|
||
|
$type = ( $type === 'theme' ) ? 'theme' : 'plugin';
|
||
|
|
||
|
if ( ! $this->option_value_is_correct( $new_data ) ) {
|
||
|
return false; }
|
||
|
|
||
|
$data_updated = false;
|
||
|
|
||
|
if ( $type === 'theme' ) {
|
||
|
// Get all stored theme details.
|
||
|
$packages_list = $this->get_theme_list();
|
||
|
} else {
|
||
|
// Get all stored plugin details.
|
||
|
$packages_list = $this->get_plugin_list();
|
||
|
}
|
||
|
|
||
|
// Iterate over each packages details.
|
||
|
foreach ( $packages_list as &$details ) {
|
||
|
// If the theme_stylesheet matches the one we're looking to update.
|
||
|
if ( $details['slug'] === $new_data['slug'] ) {
|
||
|
// Update theme data URL for this theme.
|
||
|
$details = $new_data;
|
||
|
$data_updated = true;
|
||
|
|
||
|
// Since we've found and updated the theme we're interested in, we can break the loop.
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// check if nothing was updated.
|
||
|
if ( ! $data_updated ) {
|
||
|
// append to existing data.
|
||
|
$packages_list[] = $new_data;
|
||
|
}
|
||
|
|
||
|
if ( $type === 'theme' ) {
|
||
|
$option_name = $this->get_themes_option_name();
|
||
|
} else {
|
||
|
$option_name = $this->get_plugins_option_name();
|
||
|
}
|
||
|
// Save the updated package details back to the options.
|
||
|
return update_option( $option_name, $packages_list );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method which will remove theme data from the DB.
|
||
|
*
|
||
|
* @param string $slug Theme slug.
|
||
|
* @param string $type Type of package (theme or plugin).
|
||
|
* @return bool true if saved successfully, false otherwise.
|
||
|
*/
|
||
|
private function remove_package_details( $slug = '', $type = 'theme' ) {
|
||
|
$type = ( $type === 'theme' ) ? 'theme' : 'plugin';
|
||
|
|
||
|
if ( empty( $slug ) ) {
|
||
|
return false; }
|
||
|
|
||
|
if ( $type === 'theme' ) {
|
||
|
// Get all stored theme details.
|
||
|
$option_name = $this->get_themes_option_name();
|
||
|
} else {
|
||
|
// Get all stored plugin details.
|
||
|
$option_name = $this->get_plugins_option_name();
|
||
|
}
|
||
|
|
||
|
$packages_details = get_option( $option_name, array() );
|
||
|
|
||
|
// Iterate over each theme's details.
|
||
|
foreach ( $packages_details as $key => $package_details ) {
|
||
|
// If the theme_stylesheet matches the one we're looking to update.
|
||
|
if ( $package_details['slug'] === $slug ) {
|
||
|
// Update theme data URL for this theme.
|
||
|
unset( $packages_details[ $key ] );
|
||
|
|
||
|
// Since we've found and removed the theme we're interested in, we can break the loop.
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Save the updated theme details back to the options.
|
||
|
return update_option( $option_name, $packages_details );
|
||
|
}
|
||
|
}
|