Ejemplo n.º 1
0
 /**
  * Load and return all ids of redirections that are involved in circular redirection.
  * 
  * @since 1.0.0
  * @access public
  *
  * @return array Ids of all circular redirections.
  */
 public function get_circular_redirections($force_reload = false)
 {
     if (isset($this->_circular_ids) && !$force_reload) {
         return $this->_circular_ids;
     }
     global $wpdb;
     $query = "SELECT redirection_id, redirect_from, redirect_to, status_code FROM " . self::get_database_table() . " ORDER BY redirect_from DESC";
     $circulars = $wpdb->get_results($query, ARRAY_A);
     // Clean up results and make a readable array.
     $circulars_clean = array();
     foreach ($circulars as $circular) {
         extract($circular);
         $redirect_from = '/' . trim(am_str_replace_recursive('//', '/', $redirect_from), '/');
         $redirect_to = am_str_replace_recursive('//', '/', $redirect_to);
         if ('/' !== $redirect_to) {
             $redirect_to = rtrim($redirect_to, '/');
         }
         $circulars_clean[$redirection_id] = compact('redirect_from', 'redirect_to', 'status_code');
     }
     $this->_circular_ids = array();
     //fu($circulars_clean);
     $circular_redirection_ids = array();
     foreach ($circulars_clean as $redirection_id => $circular) {
         // If the current redirection has already been handled, continue.
         if (array_key_exists($redirection_id, $this->_parsed_redirections) || in_array($redirection_id, $this->_circular_ids)) {
             continue;
         }
         $is_circular = false;
         extract($circular);
         $current_circular_redirection_ids = array($redirection_id);
         //fu($this->get_next_redirection( $circulars_clean, $redirect_to ) );
         while ($redirection_id_new = $this->get_next_redirection($circulars_clean, $redirect_to)) {
             if ($redirection_id == $redirection_id_new || in_array($redirection_id_new, $current_circular_redirection_ids)) {
                 $is_circular = true;
                 $this->_circular_ids = array_unique(array_merge($this->_circular_ids, $current_circular_redirection_ids));
                 break;
             }
             $current_circular_redirection_ids[] = $redirection_id_new;
             $redirect_to = $circulars_clean[$redirection_id_new]['redirect_to'];
         }
         //fu($redirect_to);
         if (!$is_circular) {
             //          $this->_parsed_redirections[ $redirection_id ] = compact( 'redirect_from', 'redirect_to', 'status_code' );
             // Set all chain redirections as parsed.
             if (!empty($current_circular_redirection_ids)) {
                 foreach ($current_circular_redirection_ids as $redirection_id) {
                     $this->_parsed_redirections[$redirection_id] = $circulars_clean[$redirection_id];
                     $this->_parsed_redirections[$redirection_id]['redirect_to'] = $redirect_to;
                 }
             }
             //fu($this->_parsed_redirections);
         }
     }
     return $this->_circular_ids;
 }
 /**
  * Clean up and set the "redirect_to" field.
  *
  * @param string $redirect_to
  */
 public function set_redirect_to($redirect_to)
 {
     $redirect_to = am_str_replace_recursive('//', '/', $redirect_to);
     if ('/' !== $redirect_to) {
         $redirect_to = rtrim($redirect_to, '/');
     }
     $this->_redirect_to = $redirect_to;
 }
Ejemplo n.º 3
0
 /** ************************************************************************
  * Optional. You can handle your bulk actions anywhere or anyhow you prefer.
  * For this example package, we will handle it in the class to keep things
  * clean and organized.
  * 
  * @see $this->prepare_items()
  **************************************************************************/
 function save_redirections($data, $action = 'save')
 {
     if (!isset($data) || !isset($action)) {
         return null;
     }
     global $wpdb;
     if ('save' == $action) {
         // Remove the "add-new-redirection" entry.
         if (isset($data[-1])) {
             unset($data[-1]);
         }
         $result = null;
         foreach ($data as $redirection_id => $redirection) {
             extract($redirection);
             // Correct all slash issues.
             $redirect_from = '/' . trim(am_str_replace_recursive('//', '/', $redirect_from), '/');
             $redirect_to = am_str_replace_recursive('//', '/', $redirect_to);
             if ('/' !== $redirect_to) {
                 $redirect_to = rtrim($redirect_to, '/');
             }
             $result = $wpdb->update(RedirectMan::get_database_table(), compact('redirect_from', 'redirect_to', 'status_code'), array('redirection_id' => $redirection_id), array('%s', '%s', '%d'), array('%d'));
             if (false !== $result) {
                 if (0 < $result) {
                     $this->_affected_ids[] = $redirection_id;
                 }
             } else {
                 $this->_operation = 'error';
                 $this->_status_message = _n('Error occured while saving Redirection!', 'Error occured while saving Redirections!', count($data), 'redirectman');
                 break;
             }
         }
         if (false !== $result) {
             //&& count( $this->_affected_ids ) > 0 ) {
             $this->_status_message = sprintf(_n('%d Redirection updated!', '%d Redirections updated!', count($this->_affected_ids), 'redirectman'), count($this->_affected_ids));
             $this->_operation = 'updated';
         }
     } elseif ('save_new' == $action) {
         if (isset($data[-1]) && ($redirection = $data[-1])) {
             extract($redirection);
             if (am_strornull($redirect_from)) {
                 // Correct all slash issues.
                 $redirect_from = '/' . trim(am_str_replace_recursive('//', '/', $redirect_from), '/');
                 $redirect_to = am_str_replace_recursive('//', '/', $redirect_to);
                 if ('/' !== $redirect_to) {
                     $redirect_to = rtrim($redirect_to, '/');
                 }
                 $result = $wpdb->insert(RedirectMan::get_database_table(), compact('redirect_from', 'redirect_to', 'status_code'), array('%s', '%s', '%d'));
                 if ($result) {
                     if (isset($wpdb->insert_id)) {
                         $this->_affected_ids = array($wpdb->insert_id);
                     }
                     $this->_operation = 'added';
                     $this->_status_message = __('New Redirection Added!', 'redirectman');
                 } else {
                     $this->_operation = 'error';
                     $this->_status_message = __('Error occured while adding new Redirection!', 'redirectman');
                 }
             }
         }
     }
 }