| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517 |
- <?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 );
- $form_cache = WPN_Helper::get_nf_cache( $id );
- if( $form_cache && isset ( $form_cache[ 'settings' ] ) ){
- $this->_object->update_settings( $form_cache[ 'settings' ] );
- }
- return $this;
- }
- /**
- * 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( $where || $fresh || ! $this->_fields ){
- $form_cache = WPN_Helper::get_nf_cache( $form_id );
- 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" );
- return $this->_fields;
- }
- /**
- * 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
|