Current Path : /home/church/www/wp-content/plugins/ninja-forms/includes/Abstracts/ |
Current File : /home/church/www/wp-content/plugins/ninja-forms/includes/Abstracts/ModelFactory.php |
<?php if ( ! defined( 'ABSPATH' ) ) exit; /** * Class NF_Abstracts_ModelFactory */ class NF_Abstracts_ModelFactory { /** * Database Object * * @var */ protected $_db; /** * The last set object. * Used to create context between two objects in a chain. * * @var object */ protected $_object; /** * Form */ protected $_form; /** * Fields * * An array of field model objects. * * @var array */ protected $_fields = array(); /** * Actions * * An array of action model objects. * * @var array */ protected $_actions = array(); /** * Objects * * An array of generic model objects. * * @var array */ protected $_objects = array(); //----------------------------------------------------- // Public Methods //----------------------------------------------------- /** * NF_Abstracts_ModelFactory constructor. * @param $db * @param $id */ public function __construct( $db, $id ) { $this->_db = $db; $this->_object = $this->_form = new NF_Database_Models_Form( $this->_db, $id ); if(WPN_Helper::use_cache()) { $form_cache = WPN_Helper::get_nf_cache( $id ); if( $form_cache && isset ( $form_cache[ 'settings' ] ) ){ $this->_object->update_settings( $form_cache[ 'settings' ] ); } } return $this; } /** * PHP MAGIC method for catching undefined methods. * Use this as a passthrough for methods of the form model. * * @param $method (String) The name of the called method. * @param $args (Array) The arguments supplied to the method. * * @return (Mixed) Will match the return type of the supplied method. * * @since UPDATE_VERSION_ON_MERGE */ public function __call( $method, $args ) { // If this is a method of the form model... if ( method_exists( $this->_object, $method ) ) { // Instantiate a reflector method. $mirror = new ReflectionMethod( get_class( $this->_object ), $method ); // If the method is not private... if ( ! $mirror->isPrivate() ) { // If args were supplied... if ( ! empty( $args ) ) { // Pass them into the function. return $this->_object->{$method}( $args ); } return $this->_object->{$method}(); } } } /** * Returns the parent object set by the constructor for chained methods. * * @return object */ public function get() { $object = $this->_object; $this->_object = $this->_form; return $object; } /** * Get Forms * * Returns an array of Form Model Objects. * * @param array $where * @return array|bool */ public function get_forms( array $where = array() ) { if( 'form' != $this->_object->get_type() ) return FALSE; return $this->_object->find( NULL, $where ); } /** * Export Form * * A wrapper for the Form Model export method. * * @param bool|FALSE $return * @return array */ public function export_form( $return = FALSE ) { $form_id = $this->_object->get_id(); return NF_Database_Models_Form::export( $form_id, $return ); } /** * Import Form * * A wrapper for the Form Model import method. * * @param $import * @param $decode_utf8 * @param $id * @param $is_conversion */ public function import_form( $import, $decode_utf8 = TRUE, $id = FALSE, $is_conversion = FALSE ) { if( ! is_array( $import ) ){ // Check to see if user turned off UTF-8 encoding if( $decode_utf8 ) { $data = WPN_Helper::utf8_decode( json_decode( WPN_Helper::json_cleanup( html_entity_decode( $import ) ), true ) ); } else { $data = json_decode( WPN_Helper::json_cleanup( html_entity_decode( $import ) ), true ); } if( ! is_array( $data ) ) { if( $decode_utf8 ) { $data = WPN_Helper::utf8_decode( json_decode( WPN_Helper::json_cleanup( $import ), true ) ); } else { $data = json_decode( WPN_Helper::json_cleanup( $import ), true ); } } if( ! is_array( $data ) ){ $data = WPN_Helper::maybe_unserialize( $import ); if( ! is_array( $data ) ){ return false; } } $import = $data; } return NF_Database_Models_Form::import( $import, $id, $is_conversion ); } /* * FIELDS */ /** * Sets the parent object for chained methods as a Field. * * @param string $id * @return $this */ public function field( $id = '' ) { $form_id = $this->_object->get_id(); $this->_object = new NF_Database_Models_Field( $this->_db, $id, $form_id ); return $this; } /** * Returns a field object. * * @param $id * @return NF_Database_Models_Field */ public function get_field( $id ) { if( isset( $this->_fields[ $id ] ) ){ return $this->_fields[ $id ]; } /* MISSING FORM ID FALLBACK */ /* if( ! $form_id ){ $form_id = $wpdb->get_var( $wpdb->prepare( "SELECT parent_id from {$wpdb->prefix}nf3_fields WHERE id = %d", $id )); $this->_object = $this->_form = new NF_Database_Models_Form( $this->_db, $id ); } */ if( ! $this->_fields ){ $this->get_fields(); } if( ! isset( $this->_fields[ $id ] ) ){ $form_id = $this->_object->get_id(); $this->_fields[ $id ] = new NF_Database_Models_Field( $this->_db, $id, $form_id ); } return $this->_fields[ $id ]; } /** * Returns an array of field objects for the set form (object). * * @param array $where * @param bool|FALSE $fresh * @return array */ public function get_fields( $where = array(), $fresh = FALSE) { $field_by_key = array(); $form_id = $this->_object->get_id(); if ( ! $form_id && empty( $where ) ) { $this->_fields = array(); } if( $where || $fresh || ! $this->_fields ){ // @TODO: Remove the second half of this IF block and replace it with a required update check. if(0 !== $form_id && (WPN_Helper::use_cache() || 1 == $form_id)) { $form_cache = WPN_Helper::get_nf_cache( $form_id ); } else { $form_cache = false; } if( ! $form_cache ) { $model_shell = new NF_Database_Models_Field($this->_db, 0); $fields = $model_shell->find($form_id, $where); foreach ($fields as $field) { $this->_fields[$field->get_id()] = $field; $field_by_key[ $field->get_setting( 'key' ) ] = $field; } } else { foreach( $form_cache[ 'fields' ] as $cached_field ){ $field = new NF_Database_Models_Field( $this->_db, $cached_field[ 'id' ], $form_id ); $field->update_settings( $cached_field[ 'settings' ] ); $this->_fields[$field->get_id()] = $field; $field_by_key[ $field->get_setting( 'key' ) ] = $field; } } /* * If a filter is registered to modify field order, then use that filter. * If not, then usort??. */ $order = apply_filters( 'ninja_forms_get_fields_sorted', array(), $this->_fields, $field_by_key, $form_id ); if ( ! empty( $order ) ) { $this->_fields = $order; } } /* * Broke the sub edit screen order when I have this enabled. */ // usort( $this->_fields, "NF_Abstracts_Field::sort_by_order" ); if ( $fresh ) { return $this->_fields; } return apply_filters( 'ninja_forms_get_fields', $this->_fields, $form_id ); } /** * Import Field * * A wrapper for the Form Model import method. * * @param $import */ public function import_field( $settings, $field_id = '', $is_conversion = FALSE ) { $settings = maybe_unserialize( $settings ); NF_Database_Models_Field::import( $settings, $field_id, $is_conversion ); } /* * ACTIONS */ /** * Sets the parent object for chained methods as an Action. * * @param string $id * @return $this */ public function action( $id ='' ) { $form_id = $this->_object->get_id(); $this->_object = new NF_Database_Models_Action( $this->_db, $id, $form_id ); return $this; } /** * Returns an action object. * * @param $id * @return NF_Database_Models_Action */ public function get_action( $id ) { $form_id = $this->_object->get_id(); return $this->_actions[ $id ] = new NF_Database_Models_Action( $this->_db, $id, $form_id ); } /** * Returns an array of action objects for the set form (object). * * @param array $where * @param bool|FALSE $fresh * @return array */ public function get_actions( $where = array(), $fresh = FALSE) { if( $where || $fresh || ! $this->_actions ){ $form_id = $this->_object->get_id(); $model_shell = new NF_Database_Models_Action($this->_db, 0); $actions = $model_shell->find($form_id, $where); foreach ($actions as $action) { $action->get_setting( 'type' ); // Pre-load the type of action for usort() $this->_actions[$action->get_id()] = $action; } } usort( $this->_actions, 'NF_Abstracts_Action::sort_actions' ); return $this->_actions; } /* * OBJECTS */ /** * Sets the parent object for chained methods as an Object. * * @param string $id * @return $this */ public function object( $id = '' ) { $parent_id = $this->_object->get_id(); $parent_type = $this->_object->get_type(); $this->_object = new NF_Database_Models_Object( $this->_db, $id, $parent_id, $parent_type ); return $this; } /** * Returns an object. * * @param $id * @return NF_Database_Models_Object */ public function get_object( $id ) { return $this->_objects[ $id ] = new NF_Database_Models_Object( $this->_db, $id ); } /** * Returns an array of objects for the set object. * * @param array $where * @param bool|FALSE $fresh * @return array */ public function get_objects( $where = array(), $fresh = FALSE) { if( $where || $fresh || ! $this->_objects ){ $form_id = $this->_object->get_id(); $model_shell = new NF_Database_Models_Object( $this->_db, 0 ); $objects = $model_shell->find( $form_id, $where ); foreach( $objects as $object ){ $this->_objects[ $object->get_id() ] = $object; } } return $this->_objects; } /* * SUBMISSIONS */ /** * Submission * * Returns a single submission by ID, * or an empty submission. * * @param string $id * @return $this */ public function sub( $id = '' ) { $form_id = $this->_object->get_id(); $this->_object = new NF_Database_Models_Submission( $id, $form_id ); return $this; } /** * Get Submission * * Returns a single submission by ID. * * @param $id * @return NF_Database_Models_Submission */ public function get_sub( $id ) { $parent_id = $this->_object->get_id(); return $this->_objects[ $id ] = new NF_Database_Models_Submission( $id, $parent_id ); } /** * Get Submissions * * Returns an array of Submission Model Objects. * * @param array $where * @param bool|FALSE $fresh * @return array */ public function get_subs( $where = array(), $fresh = FALSE, $sub_ids = array() ) { if( $where || $fresh || $sub_ids || ! $this->_objects ){ $form_id = $this->_object->get_id(); $model_shell = new NF_Database_Models_Submission( 0 ); $objects = $model_shell->find( $form_id, $where, $sub_ids ); foreach( $objects as $object ){ $this->_objects[ $object->get_id() ] = $object; } } return $this->_objects; } /** * Export Submissions * * A wrapper for the Submission Model export method. * * @param array $sub_ids * @param bool|FALSE $return * @return string */ public function export_subs( array $sub_ids = array(), $return = FALSE ) { $form_id = $this->_object->get_id(); return NF_Database_Models_Submission::export( $form_id, $sub_ids, $return ); } /* * GENERIC */ /** * Get Model * * A generic method call for any object model type. * * @param $id * @param $type * @return bool|NF_Database_Models_Action|NF_Database_Models_Field|NF_Database_Models_Form|NF_Database_Models_Object */ public function get_model( $id, $type ) { global $wpdb; switch( $type ){ case 'form': return new NF_Database_Models_Form( $wpdb, $id ); break; case 'field': return new NF_Database_Models_Field( $wpdb, $id ); break; case 'action': return new NF_Database_Models_Action( $wpdb, $id ); break; case 'object': return new NF_Database_Models_Object( $wpdb, $id ); break; default: return FALSE; } } } // End Class NF_Abstracts_ModelFactory