_oFactory = $oFactory; $this->_sClassName = $oFactory->oProp->sClassName; $this->_sPageSlug = $sPageSlug; $this->_oFactory->addInPageTabs( $this->_sPageSlug, // target page slug array( 'tab_slug' => $this->_sTabSlug, 'title' => __( 'Export', 'admin-page-framework-loader' ), ) ); // load + page slug + tab slug add_action( 'load_' . $this->_sPageSlug . '_' . $this->_sTabSlug, array( $this, 'replyToLoadTab' ) ); } /** * Triggered when the tab is loaded. */ public function replyToLoadTab( $oFactory ) { add_action( 'do_' . $this->_sPageSlug . '_' . $this->_sTabSlug, array( $this, 'replyToDoTab' ) ); $oFactory->addSettingSections( $this->_sPageSlug, array( 'section_id' => $this->_sSectionID, 'tab_slug' => $this->_sTabSlug, 'title' => __( 'Export Data', 'admin-page-frameowork-demo' ), 'description' => __( 'After exporting the options, change and save new options and then import the file to see if the options get restored.', 'admin-page-framework-loader' ), ) ); $oFactory->addSettingFields( $this->_sSectionID, // target section id array( 'field_id' => 'export_format_type', 'title' => __( 'Export Format Type', 'admin-page-framework-loader' ), 'type' => 'radio', 'description' => __( 'Choose the file format. Array means the PHP serialized array.', 'admin-page-framework-loader' ), 'label' => array( 'json' => __( 'JSON', 'admin-page-framework-loader' ), 'array' => __( 'Serialized Array', 'admin-page-framework-loader' ), 'text' => __( 'Text', 'admin-page-framework-loader' ), ), 'default' => 'json', ), array( // Single Export Button 'field_id' => 'export_single', 'type' => 'export', 'description' => __( 'Download the saved option data.', 'admin-page-framework-loader' ), ), array( // Multiple Export Buttons 'field_id' => 'export_multiple', 'title' => __( 'Multiple Export Buttons', 'admin-page-framework-loader' ), 'type' => 'export', 'label' => __( 'Plain Text', 'admin-page-framework-loader' ), 'file_name' => 'plain_text.txt', 'format' => 'text', 'attributes' => array( 'field' => array( 'style' => 'display: inline; clear: none;', ), ), array( 'label' => __( 'JSON', 'admin-page-framework-loader' ), 'file_name' => 'json.json', 'format' => 'json', ), array( 'label' => __( 'Serialized Array', 'admin-page-framework-loader' ), 'file_name' => 'serialized_array.txt', 'format' => 'array', ), 'description' => __( 'To set a file name, use the file_name argument in the field definition array.', 'admin-page-framework-loader' ) . ' ' . __( 'To set the data format, use the format argument in the field definition array.', 'admin-page-framework-loader' ), ), array( // Custom Data to Export 'field_id' => 'export_custom_data', 'title' => __( 'Custom Exporting Data', 'admin-page-framework-loader' ), 'type' => 'export', 'data' => __( 'Hello World! This is custom export data.', 'admin-page-framework-loader' ), 'file_name' => 'hello_world.txt', 'label' => __( 'Export Custom Data', 'admin-page-framework-loader' ), 'description' => __( 'It is possible to set custom data to be downloaded. For that, use the data argument in the field definition array.', 'admin-page-framework-loader' ), ) ); // export_name_{instantiated class name}_{export section id}_{export field id} add_filter( "export_name_{$this->_oFactory->oProp->sClassName}_{$this->_sSectionID}_export_single", array( $this, 'replyToModifyFileName' ), 10, 5 ); // export_format_{instantiated class name}_{export section id}_{export field id} add_filter( "export_format_{$this->_oFactory->oProp->sClassName}_{$this->_sSectionID}_export_single", array( $this, 'replyToModifyFileType' ), 10, 2 ); } public function replyToDoTab() { } /** * * @remark export_name_{instantiated class name}_{export section id}_{export field id} */ public function replyToModifyFileName( $sFileName, $sFieldID, $sInputID, $vData, $oFactory ) { // Change the exporting file name based on the selected format type in the other field. $sSelectedFormatType = isset( $_POST[ $this->_oFactory->oProp->sOptionKey ][ $this->_sSectionID ]['export_format_type'] ) ? $_POST[ $this->_oFactory->oProp->sOptionKey ][ $this->_sSectionID ]['export_format_type'] : null; $aFileNameParts = pathinfo( $sFileName ); $sFileNameWOExt = $aFileNameParts['filename']; switch( $sSelectedFormatType ) { default: case 'json': $sReturnName = $sFileNameWOExt . '.json'; break; case 'text': case 'array': $sReturnName = $sFileNameWOExt . '.txt'; break; } return $sReturnName; } /** * * * @remark export_format_{instantiated class name}_{export section id}_{export field id} */ public function replyToModifyFileType( $sFormatType, $sFieldID ) { // Set the internal formatting type based on the selected format type in the other field. return isset( $_POST[ $this->_oFactory->oProp->sOptionKey ][ $this->_sSectionID ]['export_format_type'] ) ? $_POST[ $this->_oFactory->oProp->sOptionKey ][ $this->_sSectionID ]['export_format_type'] : $sFormatType; } }