Beispiel #1
0
  public function manage() { 

    global $meow_provider, $wf;
    
    $this->setup_view( array(
        "title_args" => array( "text" => __("Site Content", MASTERPRESS_DOMAIN) )
      )
    );

    
    $site = $wf->site();
    
    MasterPress::$view->sets = self::assigned_field_sets();
    
    MPC::incl("meta");
    MPV::incl("meta");
    
    if (MPC::is_postback()) {
      // save the meta - this code should be moved into the controller at some stage
      MPC_Meta::save_site_meta($site->id());
      // redirect back to here
      wp_redirect( MasterPress::admin_url( "site-content", "manage", array("updated" => "true"), false ) );
      exit();
    }
    
  } 
  function update() {
    
    if ($this->dirty && $this->exists()) {
      
      $this->dirty = false; // do this now in case of any SQL errors
      $this->updated = true;
      
      global $wpdb;
      global $wf, $meow_provider;
  
      $value_type = null;
      
      $object_type = $meow_provider->type_key($this->object);
   
      $object_id = $this->object->id();
      
      if ($object_type == "term") {
        $tax = $this->object->taxonomy->name();
        
        if ($tax && !is_woof_silent($tax)) {
          $value_type = $tax;
        }
      }

      /* Delete the old post meta */
  
			$this->object->switch_site();
			
      $set_name = $this->name;
  
      foreach ( $this->info->fields as $field) {
        
        if (!$field->disabled && $field->in_current_site()) {
         
          $meta_name = $set_name.".".$field->name;

          MPC_Meta::delete_object_meta($object_type, $object_id, $meta_name);
  
          // now go through the properties too

          $dont_care = MPFT::type_class($field->type);
    
          foreach (MPFT::type_properties($field->type) as $prop) {
            MPC_Meta::delete_object_meta($object_type, $object_id, $meta_name.":".$prop);
          }
        
        }
      
      }
  
      $model_id_prop_stored = array();
  
    
      // Create the new values
    
      foreach( $this->_items as $set_index => $set_item ) {
      
        foreach ($this->info->fields as $field) {
          
          if (!$field->disabled && $field->in_current_site()) {

            // here the field type should prepare the value, if necessary
    
            // grab the type
    
            $model_id = $field->id;
    
            $model = $field;
    
            $field_item = $this->field($field->name, $set_index);
      
            if ($field_item->exists()) {
              
              $value = $field_item->raw();
              
              $val = MPU::db_encode($value);
    
              if ($type_class = MPFT::type_class($model->type)) {
                $val = MPU::db_encode( call_user_func_array( array($type_class, "value_for_save"), array($value, $model)) );
              }
              
  
              // create the post meta
    
              $meta_name = MPFT::meta_key($set_name, $field->name);
    
              //echo "would add $object_type, $object_id, $meta_name, $val<br>";

              
              if (! (!$this->info->allow_multiple && $val == "") ) {
                // don't record blank entries for non-multiple field sets, as this is wasteful
              
                MPC_Meta::add_object_meta($object_type, $object_id, "{$meta_name}", $val, $value_type);

                // now store the properties
    
                foreach (MPFT::type_properties($model->type) as $prop) {

                  if ($prop == "field_id" && !isset($model_id_prop_stored[$model_id])) {
                    $model_id_prop_stored[$model_id] = true;
          
                    MPC_Meta::add_object_meta($object_type, $object_id, "{$meta_name}:{$prop}", $model_id, $value_type);
        
                  } else {

                    $prop_value = $field_item->prop_val($prop);
        
                    if (!isset($prop_value)) {
                      $prop_value = "";
                    }
                    
                    if ($prop != "field_id") {
                      MPC_Meta::add_object_meta($object_type, $object_id, "{$meta_name}:{$prop}", $prop_value, $value_type);
                    }
                  
                  } // $prop = field_id

                } // foreach MPFT::type_properties
            
              } // if (!allow_multiple)
            
            } // if (field_item->exists)
          
          } // if (!field->disabled)
        
    
        } // endforeach $fields
    
    
      } // endforeach ($this->items)

      $this->object->restore_site();

    } // if ($dirty)
    
    
  }
Beispiel #3
0
  public static function save_meta($object_id, $object_type) {
    
    global $wpdb, $meow_provider;
    global $wf;
    
    do_action("mp_pre_save_meta", $object_id, $object_type);
    
    if (apply_filters("mp_do_save_meta", $do = true, $object_id, $object_type)) { 
    
      MPM::incl("field");

      $object_type_type = "";
    
      $current_data = array();

      if ($object_type == "post") {

        // check the edit post meta cap for this type
      
        $cap = "edit_post";
      
        $post = $wf->post($object_id);

      
        if ($post->exists()) {
          $type = $post->type();
      
          $cap = $type->cap("edit_post", "edit_post");
      
          // update the template meta
        
          if ($type->supports("mp-page-attributes")) {
            if (isset($_POST["page_template"])) {
              $template = $_POST["page_template"];
            
              if ($template == "") {
                delete_post_meta($object_id, "_wp_page_template");
              } else {
                update_post_meta($object_id, "_wp_page_template", $template);
              }
            }
          
          }
        
        }
      
        if ( !current_user_can( $cap, $object_id ) ) {
          return $object_id;
        }

      
      } else if ($object_type == "term") {
      
        // check the edit terms cap for the taxonomy
        $cap = "manage_categories";

        $taxonomy_name = self::infer_taxonomy_name();
        $tax = $wf->taxonomy($taxonomy_name);
      
        $object_type_type = $taxonomy_name;
      
        if ($tax->exists()) {
          $cap = $tax->cap("edit_terms", "manage_categories");
        }
    
        if ( !current_user_can( $cap ) ) {
          return $object_id;
        }
      } else if ($object_type == "user") {
        if ( !current_user_can( 'edit_users' ) ) {
          return $object_id;
        }
      } else if ($object_type == "site") {
        if ( !current_user_can( 'edit_posts' ) ) {
          return $object_id;
        }
      }
  
      $meta = self::post_val('mp_meta', array());
      $meta_order = self::post_val('mp_meta_order', array());
      $meta_model = self::post_val('mp_meta_model', array());
      $meta_prop = self::post_val('mp_meta_prop', array());
      $meta_field_ids = self::post_val('mp_meta_field_ids', array());

      $meta_dirty = self::post_val('mp_meta_dirty', array());
      $meta_versions = self::post_val('mp_meta_versions', array());

      $field_models = array();
    
      if (is_array($meta_field_ids)) {
        $meta_field_ids = array_unique($meta_field_ids);
      
        $results = MPM_Field::find_by_id_in($meta_field_ids);
      
        foreach ($results as $field) {
          $field_models[$field->id] = $field;
        }
      
      }
    
      $wpdb->show_errors();
    
      if (isset($_POST["mp_meta_model"])) {
      
        if ($object_type == "post") {
          if ( $the_post = wp_is_post_revision( $object_id ) ) {
            $object_id = $the_post;
          }
        } 

        try {
          $meow_provider->create_version($object_id, $object_type, $object_type_type, "initial", $meta_versions);
        } catch( Exception $e) {
          // silently catch, we REALLY don't want this to prevent a data save if something goes wrong!
        }
      
        /* Delete the old post meta */

        foreach ( $meta_model as $set_name => $fields ) {
        
          foreach ($fields as $field_name => $model_id) {
            $field = $field_models[$model_id];
          
            $meta_name = $set_name.".".$field_name;

            self::delete_object_meta($object_type, $object_id, $meta_name);
        
            // now go through the properties too

            $dont_care = MPFT::type_class($field->type);
          
            foreach (MPFT::type_properties($field->type) as $prop) {
              self::delete_object_meta($object_type, $object_id, $meta_name.":".$prop);
            }
             
          
          }
        
        }

        $model_id_prop_stored = array();
      
        // Create the new values
        foreach( $meta as $set_name => $set_items ) {
        
          $set_index = 0;
        
          if (is_array($set_items)) {
        
            foreach ($set_items as $fields) {

              $set_index++;

          
              foreach ($fields as $field_name => $value) {
            
                // here the field type should prepare the value, if necessary
            
                // grab the type
            
                $model_id = $meta_model[$set_name][$field_name];
            
                $model = $field_models[$model_id];
            
                $val = MPU::db_encode($value);
            
                if ($model) {
              
                  if ($type_class = MPFT::type_class($model->type)) {
                    $val = MPU::db_encode(call_user_func_array( array($type_class, "value_for_save"), array($value, $model)));
                  }
            
                  // create the post meta
              
                  $meta_name = MPFT::meta_key($set_name, $field_name);
              
                  self::add_object_meta($object_type, $object_id, "{$meta_name}", $val);

                  // now store the properties
              
                  foreach (MPFT::type_properties($model->type) as $prop) {

                    if ($prop == "field_id" && !isset($model_id_prop_stored[$model_id])) {
                      $model_id_prop_stored[$model_id] = true;

                      self::add_object_meta($object_type, $object_id, "{$meta_name}:{$prop}", $model_id);
                  
                    } else {
                  
                      $prop_set_index = $meta_order[$set_name][$set_index];

                      if (isset($meta_prop[$set_name][(int) $prop_set_index][$field_name][$prop])) {
                        $prop_value = $meta_prop[$set_name][(int) $prop_set_index][$field_name][$prop];
                      }
                  
                      if (isset($prop_value)) {
                        self::add_object_meta($object_type, $object_id, "{$meta_name}:{$prop}", $prop_value);
                      }
                  
                    }

                  }
          
              
                }
            
              } // endforeach $fields
          
          
              // fill in blanks for any values that weren't submitted (this happens with checkboxes that are not checked)
          
              foreach ($meta_model[$set_name] as $field_name => $model_id) {
                if (!isset($fields[$field_name])) {
                  $meta_name = MPFT::meta_key($set_name, $field_name);
                  self::add_object_meta($object_type, $object_id, "{$meta_name}", "");
              
                  // now store the properties for blanks (if required)
              
                  foreach (MPFT::type_properties($field->type) as $prop) {

                    if ($prop == "field_id" && !isset($model_id_prop_stored[$model_id])) {
                      $model_id_prop_stored[$model_id] = true;
                      self::add_object_meta($object_type, $object_id, "{$meta_name}:{$prop}", $model_id);

                    } else {
                  
                      if (isset($meta_prop[$set_name][$set_index][$field_name][$prop])) {
                        $prop_value = $meta_prop[$set_name][$set_index][$field_name][$prop];
                        self::add_object_meta($object_type, $object_id, "{$meta_name}:{$prop}", $prop_value);
                      }
                  
                    }

                  }

              
                }

              }

          
            } 

    
          } // endif is_array(set_items)


        } // foreach $set_name => $set_items


        // create the current content version

        if (!self::$version_saved) {
          try {
            $meow_provider->create_version($object_id, $object_type, $object_type_type, $meta_dirty, $meta_versions);
          } catch( Exception $e) {
          
            // silently catch, we REALLY don't want this to prevent a data save if something goes wrong!
          }

          self::$version_saved = true;
        }
      
      } // isset $_POST["mp_meta_model"]
    
    }
  
    do_action("mp_after_save_meta", $object_id, $object_type);

    
  }