PHPExcel
10 years ago
PHPExcel.php
10 years ago
api.php
10 years ago
arraytoxml.php
10 years ago
chunk.php
10 years ago
config.php
10 years ago
download.php
10 years ago
handler.php
10 years ago
helper.php
10 years ago
input.php
10 years ago
render.php
10 years ago
session.php
10 years ago
upload.php
10 years ago
handler.php
144 lines
| 1 | <?php |
| 2 | |
| 3 | class PMXI_Handler extends PMXI_Session { |
| 4 | |
| 5 | /** cookie name */ |
| 6 | private $_cookie; |
| 7 | |
| 8 | /** session due to expire timestamp */ |
| 9 | private $_session_expiring; |
| 10 | |
| 11 | /** session expiration timestamp */ |
| 12 | private $_session_expiration; |
| 13 | |
| 14 | /** Bool based on whether a cookie exists **/ |
| 15 | private $_has_cookie = false; |
| 16 | |
| 17 | /** |
| 18 | * Constructor for the session class. |
| 19 | * |
| 20 | * @access public |
| 21 | * @return void |
| 22 | */ |
| 23 | public function __construct() { |
| 24 | |
| 25 | $this->set_session_expiration(); |
| 26 | |
| 27 | $this->_import_id = $this->generate_import_id(); |
| 28 | |
| 29 | $this->_data = $this->get_session_data(); |
| 30 | |
| 31 | //add_action( 'shutdown', array( $this, 'save_data' ), 20 ); |
| 32 | |
| 33 | } |
| 34 | |
| 35 | /** |
| 36 | * Return true if the current user has an active session, i.e. a cookie to retrieve values |
| 37 | * @return boolean |
| 38 | */ |
| 39 | public function has_session() { |
| 40 | return isset( $_COOKIE[ $this->_cookie ] ) || $this->_has_cookie || is_user_logged_in(); |
| 41 | } |
| 42 | |
| 43 | /** |
| 44 | * set_session_expiration function. |
| 45 | * |
| 46 | * @access public |
| 47 | * @return void |
| 48 | */ |
| 49 | public function set_session_expiration() { |
| 50 | $this->_session_expiring = time() + intval( apply_filters( 'wpallimport_session_expiring', 60 * 60 * 47 ) ); // 47 Hours |
| 51 | $this->_session_expiration = time() + intval( apply_filters( 'wpallimport_session_expiration', 60 * 60 * 48 ) ); // 48 Hours |
| 52 | } |
| 53 | |
| 54 | public function generate_import_id() { |
| 55 | |
| 56 | $input = new PMXI_Input(); |
| 57 | $import_id = $input->get('id', 'new'); |
| 58 | |
| 59 | return $import_id; |
| 60 | |
| 61 | } |
| 62 | |
| 63 | /** |
| 64 | * get_session_data function. |
| 65 | * |
| 66 | * @access public |
| 67 | * @return array |
| 68 | */ |
| 69 | public function get_session_data() { |
| 70 | return (array) get_option( '_wpallimport_session_' . $this->_import_id . '_', array() ); |
| 71 | } |
| 72 | |
| 73 | /** |
| 74 | * save_data function. |
| 75 | * |
| 76 | * @access public |
| 77 | * @return void |
| 78 | */ |
| 79 | public function save_data() { |
| 80 | // Dirty if something changed - prevents saving nothing new |
| 81 | if ( $this->_dirty && $this->has_session() ) { |
| 82 | |
| 83 | $session_option = '_wpallimport_session_' . $this->_import_id . '_'; |
| 84 | $session_expiry_option = '_wpallimport_session_expires_' . $this->_import_id . '_'; |
| 85 | |
| 86 | wp_cache_delete( 'notoptions', 'options' ); |
| 87 | wp_cache_delete( $session_option, 'options' ); |
| 88 | wp_cache_delete( $session_expiry_option, 'options' ); |
| 89 | |
| 90 | if ( false === get_option( $session_option ) ) { |
| 91 | add_option( $session_option, $this->_data, '', 'no' ); |
| 92 | add_option( $session_expiry_option, $this->_session_expiration, '', 'no' ); |
| 93 | } else { |
| 94 | update_option( $session_option, $this->_data ); |
| 95 | } |
| 96 | } |
| 97 | } |
| 98 | |
| 99 | public function convertData( $import_id ){ |
| 100 | |
| 101 | $this->_import_id = 'new'; |
| 102 | |
| 103 | $this->_data = $this->get_session_data(); |
| 104 | |
| 105 | $this->set_session_expiration(); |
| 106 | |
| 107 | $this->_import_id = $import_id; |
| 108 | |
| 109 | $this->clean_session(); |
| 110 | |
| 111 | $this->_dirty = true; |
| 112 | |
| 113 | $this->save_data(); |
| 114 | } |
| 115 | |
| 116 | public function clean_session( $import_id = 'new' ){ |
| 117 | |
| 118 | global $wpdb; |
| 119 | |
| 120 | $now = time(); |
| 121 | $expired_sessions = array(); |
| 122 | $wpallimport_session_expires = $wpdb->get_results( $wpdb->prepare("SELECT option_name, option_value FROM $wpdb->options WHERE option_name LIKE %s", "_wpallimport_session_expires_" . $import_id . "_%") ); |
| 123 | |
| 124 | $expired_sessions[] = "_wpallimport_session_{$import_id}_"; // Session key |
| 125 | |
| 126 | foreach ( $wpallimport_session_expires as $wpallimport_session_expire ) { |
| 127 | //if ( $now > intval( $wpallimport_session_expire->option_value ) ) { |
| 128 | //$session_id = substr( $wpallimport_session_expire->option_name, 29 ); |
| 129 | $expired_sessions[] = $wpallimport_session_expire->option_name; // Expires key |
| 130 | //$expired_sessions[] = "_wpallimport_session_$session_id"; // Session key |
| 131 | //} |
| 132 | } |
| 133 | |
| 134 | if ( ! empty( $expired_sessions ) ) { |
| 135 | $expired_sessions_chunked = array_chunk( $expired_sessions, 100 ); |
| 136 | |
| 137 | foreach ( $expired_sessions_chunked as $chunk ) { |
| 138 | $option_names = implode( "','", $chunk ); |
| 139 | $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name IN ('$option_names')" ); |
| 140 | } |
| 141 | } |
| 142 | |
| 143 | } |
| 144 | } |