Wsparcie » Wtyczki » Rejestr zdarzeń

  • Rozwiązany Piotr Po

    (@potreb)


    Witam.
    Postanowiłem napisać własną wtyczkę logowania zdarzeń w systemie worpdress. W chwili obecnej robię eksport logów do pliku i mam mały problem. Pewien kod:

    public function wpr_admin_options() {
    
            $logs_storage_time = apply_filters('wpr_time_values', array(
    			'1 day'=>__( '1 days', 'wpr' ),
    			'2 days'=>__( '2 days', 'wpr' ),
    			'10 days'=>__( '10 days', 'wpr' ),
    			'30 days'=>__( '30 days', 'wpr' ),
    			'60 days'=>__( '60 days', 'wpr' ),
    			'90 days'=>__( '90 days', 'wpr' ),
    			'180 days'=>__( '180 days', 'wpr' ),
    			'1 years'=>__( '1 year', 'wpr' ),
    			'2 years'=>__( '2 years', 'wpr' ),
    			'3 years'=>__( '3 years', 'wpr' ),
    			'5 years'=>__( '5 years', 'wpr' ),
    			'0'=>__('Unlimited', 'wpr')
            ));
    
    		if( isset($this->_post['wpr_hidden'] ) AND isset( $this->_post['submit']) AND $this->_post['wpr_hidden'] == 'Rizlaz' ) {
    			check_admin_referer( 'wpr-options' );
    			foreach( $this->actions as $input ) {
    				foreach( $input as $key => $value ) {
    					$options[$key] = !empty($this->_post[$key]) ? 1 : 0;
    				}
    			}
    			$options['keep_logs_for'] = !empty($this->_post['keep_logs_for']) ? $this->_post['keep_logs_for'] : 100;
    
    			update_option('wpr_options', $options);
    			wp_safe_redirect( add_query_arg('updated', 'true', wp_get_referer() ) );
    		}
    
    		if( isset($this->_post['wpr_hidden'] ) AND isset( $this->_post['export']) AND $this->_post['wpr_hidden'] == 'Rizlaz' ) {
    			$this->export();
    		}
    
    		require_once('wpr-options.php');
    	}
    
    	public function export() {
    		ob_clean();
    		$sitename = sanitize_key( get_bloginfo( 'name' ) );
    		if ( ! empty($sitename) ) $sitename .= '.';
    		$filename = $sitename . 'log.' . date( 'Y-m-d' ) . '.csv';
    		header( 'Content-Description: File Transfer' );
    		header( 'Content-Disposition: attachment; filename=' . $filename );
    		header( 'Content-Type: text/csv; charset=' . get_option( 'blog_charset' ), true );
    		$output = "";
    		foreach($this->export_data($this->_post['export_logs_date']) as $row) {
    			if($row['id']) unset($row['id']);
    			if($row['date']) $row['date'] = date("Y-m-d H:i:s", $row['date']);
    			$output .= implode('; ', $row) . PHP_EOL;
    		}
    		echo $output;
    		exit();
    	}

    Czy mogę wywołać funkcję eksportu (this->export) bez używania funkcji ob_clean??

    Ogólnie wtyczka ma rejestrować wszystko co robią redaktorzy, administratorzy systemu tj (dodawanie, usuwanie, aktualizowanie – wpisów, stron, załączników, użytkowników oraz włączanie/wyłączanie pluginów, błędne logowanie, wylogowanie, poprawne zalogowanie).

    Jest to moja pierwsza wtyczka więc może nie jest to najlepszy twór.

Viewing 2 replies - 1 through 2 (of 2 total)
  • To zależy, w którym miejscu będziesz ją wołał.

    Wysyłasz w tej funkcji nagłówki, więc żeby się to powiodło, nie możesz przed jej wywołaniem niczego wypisywać. Jeśli więc wywołasz tę funkcję odpowiednio wcześnie, to będzie OK.

    PS. Jeśli wpr_hidden to zabezpieczenie sprawdzające, czy naprawdę został wysłany Twój formularz, to lepiej byłoby używać nonce’ów 😉

    Dzięki, dopiero wdrażam się w wordpress-a, poczytam o nonce’ach bo jeszcze całego codexa nie przeczytałem 🙂

    Użyłem nonce’ów w taki sposób:

    wp_nonce_field( 'save', 'options-wrp' ); //formularz
    if( !check_admin_referer('save','options-wrp') ) exit(); //odbieranie

    Eksport przerzuciłem do init:

    add_action( 'init', array( $this, 'export' ) );

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘Rejestr zdarzeń’ is closed to new replies.