Beispiel #1
0
 /**
  * Gather the data that will be deployed
  *
  * @param string $raw - doesn't optimize the deploy data for transit
  * @return array
  */
 public function get_deploy_data($raw = false, $preflight = false)
 {
     $this->_deploy_data = array('taxonomies' => array(), 'users' => array(), 'post_types' => array(), 'menus' => array(), 'bookmarks' => array());
     foreach ($this->data as $key => $group) {
         switch ($key) {
             case 'post_types':
                 foreach ($group as $post_type => $post_ids) {
                     if (!empty($post_ids)) {
                         // start all our post objects
                         foreach ($post_ids as $post_id) {
                             try {
                                 $posts[$post_id] = new cfd_post($post_id);
                             } catch (Exception $e) {
                                 // no real error handling yet
                                 error_log('cfd_post object error: ' . $e->getMessage() . ' - ' . __FILE__ . '::' . __LINE__);
                             }
                         }
                         // sort the post objects
                         $post_type_object = get_post_type_object($post_type);
                         if ($post_type_object->hierarchical) {
                             $posts = $this->sort_posts_by_parent($posts);
                         }
                         //  process the post objects
                         foreach ($posts as $post) {
                             // pull post and distribute parts across the deploy data
                             $this->parse_post_for_deploy($post, $raw);
                         }
                         // cleanup
                         unset($posts);
                     }
                 }
                 break;
             case 'users':
                 if (!empty($group)) {
                     $this->_deploy_data['users'] = array_merge($this->_deploy_data['users'], $this->get_users_by_ids($group));
                 }
                 break;
             case 'taxonomies':
                 if (!empty($group)) {
                     foreach ($group as $tax_type => $term_ids) {
                         if (!empty($term_ids)) {
                             foreach ($this->get_terms($tax_type, $term_ids) as $slug => $term) {
                                 $this->_deploy_data['taxonomies'][$tax_type][$slug] = $term;
                             }
                         }
                     }
                 }
                 break;
             case 'bookmarks':
                 if (!empty($group)) {
                     foreach ($group as $bookmark_id) {
                         $bookmark = $this->get_bookmark($bookmark_id);
                         if (!empty($bookmark->link_category)) {
                             $link_cats = $bookmark->link_category;
                             $bookmark->link_category = array();
                             foreach ($link_cats as $key => $term) {
                                 $bookmark->link_category[] = $term->slug;
                                 $this->_deploy_data['taxonomies']['link_category'][$term->slug] = $term;
                             }
                         }
                         $this->_deploy_data['bookmarks'][$bookmark->link_url] = $bookmark;
                     }
                 }
                 break;
             case 'menus':
                 if (!empty($group)) {
                     foreach ($group as $menu_id) {
                         try {
                             $menu = new cfd_menu($menu_id);
                             if ($raw) {
                                 $this->_deploy_data['menus'][$menu->guid()] = $menu;
                             } else {
                                 $this->_deploy_data['menus'][$menu->guid()] = $menu->get_data_for_transit();
                             }
                         } catch (Exception $e) {
                             // no real error handling yet
                             error_log('cfd_menu object error: ' . $e->getMessage . ' - ' . __FILE__ . '::' . __LINE__);
                         }
                     }
                 }
                 break;
         }
     }
     // we have to wait to reorder taxonomies since post_types & bookmarks can add to the list of terms
     foreach ($this->_deploy_data['taxonomies'] as $tax_type => &$terms) {
         $taxonomy = get_taxonomy($tax_type);
         if ($taxonomy->hierarchical) {
             $terms = $this->sort_terms_by_parent($terms);
         }
     }
     // raw returns objects, not-raw returns data ready for transit
     if (!$raw) {
         array_walk_recursive($this->_deploy_data, array($this, 'object_to_array'));
         #array_walk_recursive($this->_deploy_data, array($this, 'trim_scalar'));
     }
     if ($preflight) {
         foreach ($this->_deploy_data['post_types'] as $post_type => $objects) {
             if (!empty($objects)) {
                 foreach ($objects as $key => $post_obj) {
                     $this->_deploy_data['post_types'][$post_type][$key]['post']['post_content'] = md5($post_obj['post']['post_content']);
                     if (!empty($post_obj['post']['post_excerpt'])) {
                         $this->_deploy_data['post_types'][$post_type][$key]['post']['post_excerpt'] = md5($post_obj['post']['post_excerpt']);
                     }
                 }
             }
         }
     }
     // make absolutely sure that attachments are last in the post_types array
     if (!empty($this->_deploy_data['post_types']['attachment'])) {
         $a = $this->_deploy_data['post_types']['attachment'];
         unset($this->_deploy_data['post_types']['attachment']);
         $this->_deploy_data['post_types']['attachment'] = $a;
     }
     return $this->_deploy_data;
 }
 protected function compare_menus($data)
 {
     $menus = array();
     if (count($data)) {
         foreach ($data as $menu) {
             try {
                 $m = new cfd_menu($menu['guid']);
                 $menus[$m->guid()] = array('guid' => $m->guid(), 'last_modified' => $m->last_modified());
             } catch (Exception $e) {
                 // doesn't exist, which is fine here
             }
         }
     }
     return $menus;
 }