default = array(
'activate' => false,
'cache_type' => 'file',
'frontend' => 'false',
'wp-login' => 'cache',
'admin' => 'cache',
'file_cache_dir' => '',
'error_mes' => false,
);
$this->setting = get_option( 'psta_settings', array() );
if ( ! $this->setting ) {
$this->setting = array();
}
$this->setting = array_merge( $this->default, $this->setting );
if ($this->setting['activate'] == true) {
$this->check();
}
}
private function check() {
$s =& $this->setting;
if ( $s['cache_type'] == 'apc' ) {
if ( ! function_exists( 'apc_store' ) ) {
$this->error_mes( 'apc is not enable.' );
return false;
}
}
if ( $s['cache_type'] == 'file' ) {
if ( $s['file_cache_dir'] == '' ) {
$dir = plugin_dir_path( __FILE__ ) . 'cache';
$dir = dirname( __FILE__ );
$dir = preg_replace( '/\\\\/', '/', $dir );
$dir = $dir . '/cache';
} else {
$dir = $s['file_cache_dir'];
}
if ( ! file_exists( $dir ) || ! is_dir( $dir ) ) {
$this->error_mes( 'file_cahce_dir is not exists.' );
return false;
}
if ( ! is_writable( $dir ) ) {
$this->error_mes( 'file_cache_dir is not writable.' );
return false;
}
$this->file_cache_dir = $dir;
}
add_filter( 'override_load_textdomain', array( $this, 'load_textdomain' ), 10, 3 );
}
public function update_psta_settings() {
if ( isset( $_POST['psta_update'] ) ) {
if ( isset( $_POST['cache_force_delete'] ) ) {
switch ( $this->setting['cache_type'] ) {
case 'apc' :
if ( function_exists( 'apc_clear_cache' ) ) {
apc_clear_cache( 'user' );
}
break;
case 'file' :
$this->file_cache_dir;
if ( $dh = opendir( $this->file_cache_dir ) ) {
while ( ( $file = readdir( $dh ) ) !== false ) {
if ( is_file( $this->file_cache_dir . '/' . $file ) ) {
@unlink( $this->file_cache_dir . '/' . $file );
}
}
}
}
}
$post_data = stripslashes_deep( $_POST );
check_admin_referer( 'prime_strategy_translate_accelerator' );
$setting = array();
foreach ( $this->default as $key => $def ) {
if ( $key == 'activate' && ! isset( $post_data['activate'] ) ) {
$post_data['activate'] = false;
}
if ( $key != 'error_mes' ) {
$setting[$key] = $post_data[$key];
}
}
$this->setting = $setting;
update_option( 'psta_settings', $setting );
}
}
public function load_plugin_textdomain() {
load_plugin_textdomain( 'prime-strategy-transelate-accelerator', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
}
private function error_mes($mes) {
$s =& $this->setting;
if ( is_admin() && $s['error_mes'] == true) {
echo $mes . '
';
}
}
public function load_textdomain( $dum, $domain, $mofile ) {
$s =& $this->setting;
$segment = 'frontend';
if ( is_admin() ) {
$segment = 'admin';
} elseif ( preg_match( '/wp-(login|signup|register)\.php/', $_SERVER['REQUEST_URI'] ) ) {
$segment = 'wp-login';
}
if ( $s[$segment] == 'cutoff' ) {
return true;
} elseif ($s[$segment] == 'cache' ) {
if ( false !== $this->cache_control( $domain, $mofile ) ) {
return true;
}
}
return false;
}
private function cache_control( $domain, $mofile ) {
global $l10n;
$s =& $this->setting;
do_action( 'load_textdomain', $domain, $mofile );
$mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain );
if ( ! is_readable( $mofile ) ) return false;
$mo = new MO();
$cache = false;
if ( $s['cache_type'] == 'apc' ) {
$cache = apc_fetch( $mofile, $ret );
} elseif ( $s['cache_type'] == 'file' ) {
$file = preg_replace( '/^.*?wp-content/', '', $mofile );
$file = preg_replace( '/\\\\|\//', '_', $file);
$file = $this->file_cache_dir . '/' . $file;
if ( file_exists( $file ) ) {
$cache = file_get_contents( $file );
$cache = unserialize( $cache );
}
}
if ( is_object( $cache ) ) {
$mo = $cache;
} else {
if ( !$mo->import_from_file( $mofile ) ) {
return false;
}
$mo->_gettext_select_plural_form = null;
if ($s['cache_type'] == 'apc') {
apc_store($mofile, $mo);
} elseif ($s['cache_type'] == 'file') {
$cache = serialize($mo);
file_put_contents( $file, $cache );
}
}
if ( isset( $l10n[$domain] ) ) {
$mo->merge_with( $l10n[$domain] );
}
$l10n[$domain] = &$mo;
}
public function psta_deactivation() {
delete_option( 'psta_settings' );
}
public function add_setting_menu() {
add_options_page( 'Translate Accelerator', 'Translate Accelerator', 'manage_options', basename( __FILE__ ), array( &$this, 'setting_page' ) );
}
public function setting_page() {
$s = $this->setting;
?>