<?php class OptionsModelWpf extends ModelWpf { private $_values = array(); private $_valuesLoaded = false; public function get( $optKey ) { $this->_loadOptValues(); return isset($this->_values[ $optKey ]) ? $this->_values[ $optKey ]['value'] : false; } public function getChanged( $optKey ) { $this->_loadOptValues(); return isset($this->_values[ $optKey ]) ? $this->_values[ $optKey ]['changed_on'] : false; } public function isEmpty( $optKey ) { $value = $this->get($optKey); return ( false === $value ); } public function save( $optKey, $val, $ignoreDbUpdate = false ) { $this->_loadOptValues(); if (!isset($this->_values[ $optKey ]) || $this->_values[ $optKey ]['value'] != $val) { if (isset($this->_values[ $optKey ]) || !isset($this->_values[ $optKey ]['value'])) { $this->_values[ $optKey ] = array(); } $this->_values[ $optKey ]['value'] = $val; $this->_values[ $optKey ]['changed_on'] = time(); if (!$ignoreDbUpdate) { $this->_updateOptsInDb(); } } } public function getAll() { $this->_loadOptValues(); return $this->_values; } /** * Pass throught refferer - to not lose memory for copy of same opts array */ public function fillInValues( &$options ) { $this->_loadOptValues(); foreach ($options as $cKey => $cData) { foreach ($cData['opts'] as $optKey => $optData) { $value = 0; $changedOn = 0; // Retrive value from saved options if (isset($this->_values[ $optKey ])) { $value = $this->_values[ $optKey ]['value']; $changedOn = isset($this->_values[ $optKey ]['changed_on']) ? $this->_values[ $optKey ]['changed_on'] : ''; } elseif (isset($optData['def'])) { // If there were no saved data - set it as default $value = $optData['def']; } $options[ $cKey ]['opts'][ $optKey ]['value'] = $value; $options[ $cKey ]['opts'][ $optKey ]['changed_on'] = $changedOn; if (!isset($this->_values[ $optKey ]['value'])) { $this->_values[ $optKey ]['value'] = $value; } } } } public function saveGroup( $d = array() ) { if (isset($d['opt_values']) && is_array($d['opt_values']) && !empty($d['opt_values'])) { DispatcherWpf::doAction('beforeSaveOpts', $d); foreach ( $d['opt_values'] as $code => $val ) { if ( 'indexing_schedule' === $code ) { if ( '1' === $val ) { if ( ! wp_next_scheduled( 'wpf_calc_meta_indexing_shedule' ) ) { wp_schedule_event( time(), 'hourly', 'wpf_calc_meta_indexing_shedule' ); } } else { wp_unschedule_hook( 'wpf_calc_meta_indexing_shedule' ); } } else if ( 'optimizing_schedule' === $code ) { if ( '1' === $val ) { if ( ! wp_next_scheduled( 'wpf_calc_meta_optimizing_shedule' ) ) { wp_schedule_event( time(), 'hourly', 'wpf_calc_meta_optimizing_shedule' ); } } else { wp_unschedule_hook( 'wpf_calc_meta_optimizing_shedule' ); } } $this->save( $code, $val, true ); } $this->_updateOptsInDb(); return true; } else { $this->pushError(esc_html__('Empty data to save option', 'woo-product-filter')); } return false; } private function _updateOptsInDb() { update_option(WPF_CODE . '_opts_data', $this->_values); } private function _loadOptValues() { if (!$this->_valuesLoaded) { $this->_values = get_option(WPF_CODE . '_opts_data'); if (empty($this->_values)) { $this->_values = array(); } $this->_valuesLoaded = true; } } }