/**
  * Export template and template part data.
  * 
  * @since 1.0.0
  * @access public
  */
 public function do_export()
 {
     $actions = array('export_tf_theme', 'export_tf_template', 'export_tf_template_part', 'export_tf_content_builder');
     if (isset($_GET['action']) && in_array($_GET['action'], $actions) && wp_verify_nonce($_GET['_wpnonce'], 'export_tf_nonce')) {
         global $TF;
         include_once sprintf("%s/includes/utilities/export.php", $TF->framework_path());
         $template = get_post($_GET['post']);
         $meta_file = $this->get_filename_data($template->post_type);
         $name_prefix = $meta_file['name'];
         $basename = sanitize_file_name($meta_file['file']);
         $filename = sanitize_file_name($name_prefix . '-' . $template->post_name . '.' . date('Y-m-d') . '.xml');
         $ids = 'tf_theme' == $template->post_type ? TF_Model::get_theme_data_post_ids($template->ID, $template->post_name) : array($template->ID);
         $ids = TF_Model::find_attachment_ids_from_posts($ids);
         // Include all attachments ID from each post content shortcode builder.
         ob_start();
         export_td(array('content' => $template->post_type, 'ids' => $ids, 'filename' => $filename));
         $output = ob_get_contents();
         ob_end_clean();
         // Load WP Filesystem
         if (!function_exists('WP_Filesystem')) {
             require_once ABSPATH . 'wp-admin/includes/file.php';
         }
         WP_Filesystem();
         global $wp_filesystem;
         if (class_exists('ZipArchive')) {
             $datafile = $basename;
             $wp_filesystem->put_contents($datafile, $output, FS_CHMOD_FILE);
             $files_to_zip = array($datafile);
             $ext = pathinfo($filename, PATHINFO_EXTENSION);
             $file = str_replace('.' . $ext, '.zip', $filename);
             $result = tf_create_zip($files_to_zip, $file, true);
         }
         if (isset($result) && $result) {
             if (isset($file) && file_exists($file)) {
                 ob_start();
                 header('Pragma: public');
                 header('Expires: 0');
                 header("Content-type: application/force-download");
                 header('Content-Disposition: attachment; filename="' . $file . '"');
                 header("Content-Transfer-Encoding: Binary");
                 header("Content-length: " . filesize($file));
                 header('Connection: close');
                 ob_clean();
                 flush();
                 echo $wp_filesystem->get_contents($file);
                 unlink($datafile);
                 unlink($file);
                 exit;
             } else {
                 return false;
             }
         } else {
             if (ini_get('zlib.output_compression')) {
                 /**
                  * Turn off output buffer compression for proper zip download.
                  * @since 2.0.2
                  */
                 $srv_stg = 'ini' . '_' . 'set';
                 call_user_func($srv_stg, 'zlib.output_compression', 'Off');
             }
             ob_start();
             header('Content-Type: application/force-download');
             header('Pragma: public');
             header('Expires: 0');
             header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
             header('Cache-Control: private', false);
             header('Content-Disposition: attachment; filename="' . $filename . '"');
             header('Content-Transfer-Encoding: binary');
             ob_clean();
             flush();
             echo $output;
             exit;
         }
         die;
     }
 }
 /**
  * Delete associated template and template part data.
  * 
  * @since 1.0.0
  * @access public
  * @param int $post_id 
  */
 public function delete_associated_templates($post_id)
 {
     // If this is just a revision, don't send the email.
     if (wp_is_post_revision($post_id)) {
         return;
     }
     // If this isn't a 'tf_theme' post, don't update it.
     if ($this->post_type != get_post_type($post_id)) {
         return;
     }
     $theme = get_post($post_id);
     $datas = TF_Model::get_theme_data_post_ids($post_id, $theme->post_name);
     if (count($datas) > 0) {
         foreach ($datas as $data) {
             if ($post_id == $data) {
                 continue;
             }
             wp_delete_post($data, true);
         }
     }
 }