apply_locks', $package); //$package = apply_filters('wpdm_after_prepare_package_data', $package); $unqid = uniqid(); $stock_limit = (int) get_post_meta( $ID, '__wpdm_quota', true ); $download_count = (int) get_post_meta( $ID, '__wpdm_download_count', true ); if ( $stock_limit > $download_count || $stock_limit == 0 ) { $lock = 0; $extras['embed'] = $embed; $data = self::activeLocks( $ID, $extras ); $terms_lock = (int) get_post_meta( $ID, '__wpdm_terms_lock', true ); $terms_page = (int) get_post_meta( $ID, '__wpdm_terms_page', true ); $terms_title = get_post_meta( $ID, '__wpdm_terms_title', true ); $terms_conditions = get_post_meta( $ID, '__wpdm_terms_conditions', true ); if ( $terms_page ) { $terms_page = get_post( $terms_page ); $terms_title = $terms_page->post_title; $terms_conditions = $terms_page->post_content; } $terms_check_label = get_post_meta( $ID, '__wpdm_terms_check_label', true ); if ( $terms_lock !== 0 && ( ! function_exists( 'wpdmpp_effective_price' ) || wpdmpp_effective_price( $ID ) == 0 ) ) { if ( ! self::isLocked( $ID ) && ! $embed ) { $data = "{$link_label}"; } else { $data = $data ? $data : $download_link; } if ( $embed == 1 ) { $data = "
{$terms_title}
{$terms_conditions}
"; } } if ( $data != "" ) { $data = apply_filters( 'wpdm_download_link', $data, $extras + array( 'ID' => $ID, 'id' => $ID ) ); return $data; } $data = $download_link; } else { $data = ""; } if ( $data == 'loginform' ) { return WPDM()->user->login->form(); } $data = apply_filters( 'wpdm_download_link', $data, $extras + array( 'ID' => $ID, 'id' => $ID ) ); return $data; } /** * @usage Generate download url for public/open downloads, the url will not work for the packages with lock option * * @param $ID * @param $ext * * @return string */ public function getDownloadURL( $ID, $ext = array() ) { if ( self::isLocked( $ID ) && ! Session::get( '__wpdm_unlocked_' . $ID ) ) { return '#locked'; } if ( ! is_array( $ext ) ) { $ext = []; } $ext['wpdmdl'] = $ID; $ext['refresh'] = uniqid() . time(); $permalink = get_permalink( $ID ); $permalink = apply_filters( "wpdm_download_url_base", $permalink, $ID ); $download_url = add_query_arg( $ext, $permalink ); $flat = (int) get_option( '__wpdm_flat_download_url', 0 ); $code = json_encode( $ext ); $code = base64_encode( $code ); $code = rtrim( $code, '=' ); $filename = isset( $ext['filename'] ) ? $ext['filename'] : ''; if ( isset( $ext['ind'] ) && $filename == '' ) { $files = $this->getFiles( $ID ); $filename = wpdm_basename( $files[ $ext['ind'] ] ); } if ( ! isset( $ext['ind'] ) && $filename == '' ) { $files = $this->getFiles( $ID ); if ( count( $files ) > 1 ) { $filename = sanitize_file_name( get_the_title( $ID ) ) . ".zip"; } else { $filename = array_shift( $files ); $filename = wpdm_basename( $filename ); } } if ( $flat ) { $download_url = home_url( "/wpdmdl/{$ID}-{$code}/{$filename}" ); } return $download_url; } /** * @param $ID * * @return false|string */ public function getMasterDownloadURL( $ID ) { $package_url = get_permalink( $ID ); $params['wpdmdl'] = $ID; $params['masterkey'] = get_post_meta( $ID, '__wpdm_masterkey', true ); $download_url = add_query_arg( $params, $package_url ); return $download_url; } /** * @param $ID * @param $Key * * @return bool */ public function validateMasterKey( $ID, $Key ) { if ( $Key === '' ) { return false; } $masterKey = get_post_meta( $ID, '__wpdm_masterkey', true ); if ( $masterKey === '' ) { return false; } if ( $masterKey === $Key ) { return true; } return false; } /** * @param $ID * @param int $usageLimit * @param int $expirePeriod seconds * * @return string */ function expirableDownloadLink( $ID, $usageLimit = 10, $expirePeriod = 999999, $sessionOnly = true ) { $key = uniqid(); $exp = array( 'use' => $usageLimit, 'expire' => time() + $expirePeriod ); if ( ! $sessionOnly ) { update_post_meta( $ID, "__wpdmkey_" . $key, $exp ); } else { TempStorage::set( "__wpdmkey_{$key}_{$ID}", $exp, time() + $expirePeriod ); } //Session::set( '__wpdm_unlocked_'.$ID , 1 ); //$download_url = $this->getDownloadURL($ID, "_wpdmkey={$key}"); $permalink = get_permalink( $ID ); $permalink = apply_filters( "wpdm_download_url_base", $permalink, $ID ); $download_url = add_query_arg( array( "wpdmdl" => $ID, "_wpdmkey" => $key ), $permalink ); return $download_url; } /** * @param $ID * @param int $usageLimit * @param int $expirePeriod seconds * * @return string */ static function expirableDownloadPage( $ID, $usageLimit = 10, $expirePeriod = 604800, $sessionOnly = true ) { $key = uniqid(); $exp = array( 'use' => $usageLimit, 'expire' => time() + $expirePeriod ); if ( ! $sessionOnly ) { update_post_meta( $ID, "__wpdmkey_" . $key, $exp ); } else { TempStorage::set( "__wpdmkey_{$key}_{$ID}", $exp, time() + $expirePeriod ); } $download_page_key = Crypt::encrypt( array( 'pid' => $ID, 'key' => $key ) ); $download_page = home_url( "wpdm-download/{$download_page_key}" ); return $download_page; } /** * @usage Fetch link/page template and return generated html * * @param $template * @param $vars * @param string $type * * @return mixed|string */ public function fetchTemplate( $template, $vars, $type = 'link' ) { if ( ! is_array( $vars ) && is_int( $vars ) && $vars > 0 ) { $vars = array( 'ID' => $vars ); } if ( ! isset( $vars['ID'] ) || intval( $vars['ID'] ) < 1 ) { return ''; } $loginmsg = Messages::login_required( $vars['ID'] ); if ( ! is_user_logged_in() && count( self::allowedRoles( $vars['ID'] ) ) >= 0 && ! self::userCanAccess( $vars['ID'] ) ) { $loginform = wpdm_login_form( array( 'redirect' => get_permalink( $vars['ID'] ) ) ); $hide_all_message = get_option( '__wpdm_login_form', 0 ) == 1 ? $loginform : stripcslashes( str_replace( array( "[loginform]", "[this_url]", "[package_url]" ), array( $loginform, __::valueof($_SERVER, 'REQUEST_URI', ['validate' => 'txt']), get_permalink( $vars['ID'] ) ), $loginmsg ) ); if ( get_option( '_wpdm_hide_all', 0 ) == 1 ) { return $type == 'page' ? $hide_all_message : ''; } } if ( is_user_logged_in() && ! self::userCanAccess( $vars['ID'] ) && get_option( '_wpdm_hide_all', 0 ) == 1 ) { return $type != 'page' ? "" : get_option( '__wpdm_permission_denied_msg', __( "You are not allowed to download this item!", "download-manager" ) ); } /*$default['link'] = 'link-template-default.php'; $default['page'] = 'page-template-default.php'; if ($template == '') { if (!isset($vars['page_template'])) $vars['page_template'] = 'page-template-1col.php'; if (!isset($vars['template'])) $vars['template'] = 'link-template-calltoaction3.php'; $template = $type == 'page' ? $vars['page_template'] : $vars['template']; } if ($template == '') $template = $default[$type]; //$templates = maybe_unserialize(get_option("_fm_".$type."_templates", true)); //if(isset($templates[$template]) && isset($templates[$template]['content'])) $template = $templates[$template]['content']; $template_content = WPDM()->packageTemplate->get($template, $type, true); if ($template_content) $template = $template_content; else if (!strpos(strip_tags($template), "]")) { $template = wpdm_basename($template); $template = str_replace(".php", "", $template) . ".php"; $themeltpldir = get_stylesheet_directory() . '/download-manager/' . $type . '-templates/'; $pthemeltpldir = get_template_directory() . '/download-manager/' . $type . '-templates/'; //if(!file_exists($ltpldir) || !file_exists($ltpldir.$template)) $ltpldir = WPDM_TPL_DIR . $type . '-templates/'; $template_file = ''; if (file_exists($themeltpldir . $template)) $template_file = ($themeltpldir . $template); // Apply if available in the child theme else if (file_exists($pthemeltpldir . $template)) $template_file = ($pthemeltpldir . $template); // Apply if available in the parent theme else if (file_exists($ltpldir . $template)) $template_file = ($ltpldir . $template); else if (file_exists($ltpldir . $type . "-template-" . $template)) $template_file = ($ltpldir . $type . "-template-" . $template); else $template_file = (wpdm_tpl_path($default[$type], $ltpldir)); if ($template_file !== '') { ob_start(); $ID = $vars['ID']; global $wp_filter; $all_tc = $wp_filter['the_content']; unset($wp_filter['the_content']); remove_filter("the_content", "wpdm_downloadable"); include $template_file; $template = ob_get_clean(); $wp_filter['the_content'] = $all_tc; //add_filter("the_content", "wpdm_downloadable"); if (!preg_match("/\[([^\]]+)\]/", $template, $found)) { return $template; } } }*/ $ret = $this->prepare( $vars['ID'], $template, $type ); if ( ! is_wp_error( $ret ) ) { $vars = $this->packageData; } else { return ''; } // Get template content $template = $this->getTemplateContent( $template, $vars['ID'], $type ); if ( isset( $vars['__loginform_only'] ) && $vars['__loginform_only'] != '' ) { return $vars['__loginform_only']; } preg_match_all( "/\[cf ([^\]]+)\]/", $template, $cfmatches ); preg_match_all( "/\[thumb_([0-9]+)x([0-9]+)\]/", $template, $matches ); preg_match_all( "/\[thumb_url_([0-9]+)x([0-9]+)\]/", $template, $umatches ); preg_match_all( "/\[thumb_gallery_([0-9]+)x([0-9]+)\]/", $template, $gmatches ); preg_match_all( "/\[excerpt_([0-9]+)\]/", $template, $xmatches ); preg_match_all( "/\[pdf_thumb_([0-9]+)x([0-9]+)\]/", $template, $pmatches ); preg_match_all( "/\[txt=([^\]]+)\]/", $template, $txtmatches ); preg_match_all( "/\[hide_empty:([^\]]+)\]/", $template, $hematches ); preg_match_all( "/\[video_player_([0-9]+)\]/", $template, $vdmatches ); preg_match_all( "/\[product_preview_([0-9]+)x([0-9]+)\]/", $template, $ppmatches ); preg_match_all( "/\[file_list_extended_([0-9]+)x([0-9]+)x([0-9]+)\]/", $template, $flematches ); preg_match_all( "/\[image_gallery_([0-9]+)x([0-9]+)x([0-9]+)\]/", $template, $igematches ); //$thumb = wp_get_attachment_image_src(get_post_thumbnail_id($vars['ID']), 'full'); //$vars['preview'] = $thumb['0']; //$vars['featured_image'] = ($vars['preview'] != '')?"{$vars[":""; $tfiles = $vars['files']; $pdf = is_array( $tfiles ) ? array_shift( $tfiles ) : ""; $ext = FileSystem::fileExt( $pdf ); // [video_player_...] foreach ( $vdmatches[0] as $nd => $scode ) { $scode = str_replace( array( '[', ']' ), '', $scode ); $vars[ $scode ] = self::videoPlayer( $vars['ID'], $vars['files'], $vdmatches[1][ $nd ] ); } //Replace all file list extended tags foreach ( $flematches[0] as $nd => $scode ) { $scode = str_replace( array( "[", "]" ), "", $scode ); $vars[ $scode ] = FileList::Box( $vars, $flematches[1][ $nd ], $flematches[2][ $nd ], $flematches[3][ $nd ] ); } //Replace all image gallery tags foreach ( $igematches[0] as $nd => $scode ) { $scode = str_replace( array( "[", "]" ), "", $scode ); $vars[ $scode ] = FileList::imageGallery( $vars, $igematches[1][ $nd ], $igematches[2][ $nd ], $igematches[3][ $nd ] ); } //Replace all txt variables foreach ( $txtmatches[0] as $nd => $scode ) { $scode = str_replace( array( '[', ']' ), '', $scode ); $vars[ $scode ] = __( $txtmatches[1][ $nd ], "download-manager" ); } // Parse [pdf_thumb] tag in link/page template if ( strpos( $template, 'pdf_thumb' ) ) { if ( $ext == 'pdf' ) { $pdf_preview = FileSystem::pdfThumbnail( $pdf, $vars['ID'] ); $vars['pdf_thumb'] = "{$vars["; $vars['pdf_thumb_url'] = $pdf_preview; $vars['pdf_name'] = str_replace( [ "pdf", "PDF" ], "", wp_basename( $pdf ) ); } else { $vars['pdf_thumb'] = $vars['preview'] != '' ? "{$vars[" : ""; } } // Parse [pdf_thumb_WxH] tag in link/page template foreach ( $pmatches[0] as $nd => $scode ) { $imsrc = wpdm_dynamic_thumb( FileSystem::pdfThumbnail( $pdf, $vars['ID'] ), array( $pmatches[1][ $nd ], $pmatches[2][ $nd ] ) ); $scode = str_replace( array( "[", "]" ), "", $scode ); $vars[ $scode ] = $imsrc != '' ? "{$vars[" : ''; } // Parse [file_type] tag in link/page template if ( strpos( $template, 'file_type' ) ) { $vars['file_types'] = self::fileTypes( $vars['ID'], false ); if ( is_array( $vars['file_types'] ) ) { $vars['file_types'] = implode( ", ", $vars['file_types'] ); } $vars['file_type_icons'] = self::fileTypes( $vars['ID'] ); } $crop = get_option( '__wpdm_crop_thumbs', true ); // [thumb_WxH] foreach ( $matches[0] as $nd => $scode ) { $imsrc = wpdm_dynamic_thumb( $vars['preview'], array( $matches[1][ $nd ], $matches[2][ $nd ] ), $crop ); $scode = str_replace( array( "[", "]" ), "", $scode ); $vars[ $scode ] = $vars['preview'] != '' ? "{$vars[" : ''; } // [thumb_url...] foreach ( $umatches[0] as $nd => $scode ) { $scode = str_replace( array( "[", "]" ), "", $scode ); $vars[ $scode ] = $vars['preview'] != '' ? wpdm_dynamic_thumb( $vars['preview'], array( $umatches[1][ $nd ], $umatches[2][ $nd ] ), $crop ) : ''; } // [thumb_gallery...] foreach ( $gmatches[0] as $nd => $scode ) { $scode = str_replace( array( "[", "]" ), "", $scode ); $vars[ $scode ] = $this->additionalPreviewImages( $vars, $gmatches[1][ $nd ], $gmatches[2][ $nd ] ); } // [product_preview...] foreach ( $ppmatches[0] as $nd => $scode ) { $scode = str_replace( array( "[", "]" ), "", $scode ); $vars[ $scode ] = self::productPreview( $vars['ID'], $vars['files'], $ppmatches[1][ $nd ], $ppmatches[2][ $nd ] ); } // [excerpt_...] foreach ( $xmatches[0] as $nd => $scode ) { $ss = substr( strip_tags( $vars['description'] ), 0, intval( $xmatches[1][ $nd ] ) ); $tmp = explode( " ", substr( strip_tags( $vars['description'] ), intval( $xmatches[1][ $nd ] ) ) ); $bw = array_shift( $tmp ); $ss .= $bw; $scode = str_replace( array( "[", "]" ), "", $scode ); $vars[ $scode ] = $ss . '...'; } if ( $type == 'page' && ( strpos( $template, '[similar_downloads]' ) || strpos( $vars['description'], '[similar_downloads]' ) ) ) { $vars['similar_downloads'] = $this->similarPackages( $vars, 6 ); } if ( strpos( $template, 'doc_preview' ) ) { $vars['doc_preview'] = self::docPreview( $vars ); } if ( substr_count( $template, 'video_preview_modal' ) ) { $vars['video_preview_modal'] = self::videoPreviewModal( $vars, $type ); } $vars['fav_button'] = self::favBtn( $vars['ID'] ); $vars['fav_button_sm'] = self::favBtn( $vars['ID'], array( 'size' => 'btn-sm', 'a2f_label' => "   " . __( "Add to favourite", "download-manager" ), 'rff_label' => "   " . __( "Remove from favourite", "download-manager" ) ) ); $vars['fav_button_ico_sm'] = self::favBtn( $vars['ID'], array( 'size' => 'btn-sm', 'a2f_label' => "", 'rff_label' => "" ) ); $vars['fav_button_ico'] = self::favBtn( $vars['ID'], array( 'size' => '', 'a2f_label' => "", 'rff_label' => "" ) ); // If need to re-process any data before fetch template $vars['__template_type'] = $type; $vars = apply_filters( "wdm_before_fetch_template", $vars, $template, $type ); foreach ( $hematches[0] as $index => $hide_empty ) { $hide_empty = str_replace( array( '[', ']' ), '', $hide_empty ); if ( ! isset( $vars[ $hematches[1][ $index ] ] ) || ( $vars[ $hematches[1][ $index ] ] == '' || $vars[ $hematches[1][ $index ] ] == '0' ) ) { $vars[ $hide_empty ] = 'wpdm_hide wpdm_remove_empty'; } else { $value[ $hide_empty ] = ''; } } $keys = array(); $values = array(); foreach ( $vars as $key => $value ) { if ( ! is_array( $value ) && ! is_object( $value ) ) { $keys[] = "[$key]"; $values[] = $value; } } $loginform = wpdm_login_form( array( 'redirect' => get_permalink( $vars['ID'] ) ) ); $hide_all_message = get_option( '__wpdm_login_form', 0 ) == 1 ? $loginform : stripcslashes( str_replace( array( "[loginform]", "[this_url]", "[package_url]" ), array( $loginform, __::valueof($_SERVER, 'REQUEST_URI', ['validate' => 'txt']), get_permalink( $vars['ID'] ) ), $loginmsg ) ); if ( $vars['download_link'] == 'blocked' && $type == 'link' ) { return ""; } if ( $vars['download_link'] == 'blocked' && $type == 'page' ) { return get_option( '__wpdm_permission_denied_msg' ); } if ( $vars['download_link'] == 'loginform' && $type == 'link' ) { return ""; } if ( $vars['download_link'] == 'loginform' && $type == 'page' ) { return $hide_all_message; } $template = str_replace( $keys, $values, @stripcslashes( $template ) ); $template = apply_filters( "wpdm_after_fetch_template", $template, $vars ); //wp_reset_query(); //wp_reset_postdata(); return $template; } /*public static function parseTemplate($template, $post, $type = 'link') { if (!strpos(strip_tags($template), "]")) { $ltpldir = get_stylesheet_directory() . '/download-manager/' . $type . '-templates/'; if (!file_exists($ltpldir) || !file_exists($ltpldir . $template)) $ltpldir = WPDM_BASE_DIR . '/tpls/' . $type . '-templates/'; if (file_exists(TEMPLATEPATH . '/' . $template)) $template = file_get_contents(TEMPLATEPATH . '/' . $template); else if (file_exists($ltpldir . $template)) $template = file_get_contents($ltpldir . $template); else if (file_exists($ltpldir . $template . '.php')) $template = file_get_contents($ltpldir . $template . '.php'); else if (file_exists($ltpldir . $type . "-template-" . $template . '.php')) $template = file_get_contents($ltpldir . $type . "-template-" . $template . '.php'); } preg_match_all("/\[([^\]]+)\]/", $template, $matched); $post = (array)$post; $post['title'] = $post['post_title']; foreach ($matched[1] as $id => $key) { switch ($key) { case 'page_link': $post[$key] = "{$post['post_title']}"; break; case 'page_url': $post[$key] = get_permalink($post['ID']); break; case 'file_size': $post[$key] = get_post_meta($post['ID'], '__wpdm_package_size', true); break; default: $post[$key] = get_post_meta($post['ID'], '__wpdm_' . $key, true); break; } } $post = apply_filters("wdm_before_fetch_template", $post, $template, $type); $vars = array_keys($post); $vals = array_values($post); foreach ($vars as &$var) { $var = "[$var]"; } $template = str_replace($vars, $vals, $template); $template = apply_filters("wpdm_after_fetch_template", $template, $vars); wp_reset_query(); return $template; }*/ /** * @usage Find attached files types with a package * * @param $ID * @param bool|true $img * * @return array|string */ public static function fileTypes( $ID, $img = true, $size = 16 ) { $files = maybe_unserialize( get_post_meta( $ID, '__wpdm_files', true ) ); $ext = array(); if ( is_array( $files ) ) { foreach ( $files as $f ) { $f = trim( $f ); $ext[] = FileSystem::fileExt( $f ); } } $ext = array_unique( $ext ); $exico = ''; foreach ( $ext as $exi ) { $exico .= "{$exi} "; } if ( $img ) { return $exico; } return $ext; } /** * @param $package * * @return string * @usage Generate Google Doc Preview */ public function docPreview( $package ) { //$files = $package['files']; $files = $this->getFiles( $package['ID'] ); if ( ! is_array( $files ) ) { return ""; } $ind = - 1; $fext = ''; foreach ( $files as $i => $sfile ) { $ifile = $sfile; $sfile = explode( ".", $sfile ); $fext = end( $sfile ); if ( in_array( end( $sfile ), array( 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx' ) ) ) { $ind = $i; break; } } if ( $ind == - 1 ) { return ""; } $ext = count( $files ) > 1 ? 'ind=' . $ind : ''; $params = array( 'ind' => $ind, 'filename' => $files[ $ind ] ); $url = $this->getDownloadURL( $package['ID'], $params ); $url .= "&open=1"; if ( strpos( $ifile, "://" ) ) { $url = $ifile; } $doc_preview_html = FileSystem::docViewer( $url, $package['ID'], $fext ); $doc_preview_html = apply_filters( 'wpdm_doc_preview', $doc_preview_html, $package, $url, $fext ); return $doc_preview_html; } /** * Get additional preview images * * @param $file * @param $w * @param $h * * @return string */ function additionalPreviewImages( $file, $w, $h ) { $file['additional_previews'] = maybe_unserialize( get_post_meta( $file['ID'], '__wpdm_additional_previews', true ) ); $k = 0; $img = ''; $id = uniqid(); if ( $file['additional_previews'] ) { foreach ( $file['additional_previews'] as $p ) { ++ $k; if ( is_numeric( $p ) ) { $img .= ""; } else { $img .= ""; } } } $js = ""; // ""; return $img . $js; } /** * @usage Generates view preview modal link of the given package * * @param $package * @param int $embed * @param array $extras * * @return string */ public function videoPreviewModal( $package, $template_type = 'link' ) { if ( is_int( $package ) ) { $package = get_post( $package, ARRAY_A ); } $link_label = wpdm_valueof( $package, 'link_label' ); $link_label = $link_label ? $link_label : $this->linkLabel( $package['ID'] ); $style = wpdm_download_button_style( $template_type === 'page', $package['ID'] ); $files = isset( $package['files'] ) ? $package['files'] : $this->getFiles( $package['ID'] ); $video = ""; foreach ( $files as $file ) { if ( substr_count( $file, 'youtu.be' ) || substr_count( $file, 'youtube.com' ) || substr_count( $file, 'vimeo.com' ) ) { $video = $file; } } $link = "{$link_label}"; return $link; } /** * Get package link label * * @param $ID * * @return mixed|string|void */ public function linkLabel( $ID ) { $link_label = get_post_meta( $ID, '__wpdm_link_label', true ); $link_label = esc_attr( $link_label ); $link_label = $link_label ? $link_label : __( "Download", "download-manager" ); return $link_label; } /** * @usage Create New Package * * @param $data * * @return mixed */ public static function create( $package_data ) { if ( isset( $package_data['post_type'] ) ) { unset( $package_data['post_type'] ); } $package_data_core = array( 'post_title' => '', 'post_content' => '', 'post_excerpt' => '', 'post_status' => 'publish', 'post_type' => 'wpdmpro', 'post_author' => get_current_user_id(), 'ping_status' => get_option( 'default_ping_status' ), 'post_parent' => 0, 'menu_order' => 0, 'to_ping' => '', 'pinged' => '', 'post_password' => '', 'guid' => '', 'post_content_filtered' => '', 'import_id' => 0 ); $package_data_meta = array( 'files' => array(), 'fileinfo' => array(), 'package_dir' => '', 'link_label' => __( "Download", "download-manager" ), 'download_count' => 0, 'view_count' => 0, 'version' => '1.0.0', 'stock' => 0, 'package_size' => 0, 'package_size_b' => 0, 'access' => '', 'individual_file_download' => - 1, 'cache_zip' => - 1, 'template' => 'link-template-panel.php', 'page_template' => 'page-template-1col-flat.php', 'password_lock' => '0', 'facebook_lock' => '0', 'gplusone_lock' => '0', 'linkedin_lock' => '0', 'tweet_lock' => '0', 'email_lock' => '0', 'icon' => '', 'import_id' => 0 ); foreach ( $package_data_core as $key => &$value ) { $value = isset( $package_data[ $key ] ) ? $package_data[ $key ] : $package_data_core[ $key ]; } if ( ! isset( $package_data['ID'] ) ) { $post_id = wp_insert_post( $package_data_core ); } else { $post_id = $package_data['ID']; $package_data_core['ID'] = $post_id; wp_update_post( $package_data_core ); } foreach ( $package_data_meta as $key => $value ) { $value = isset( $package_data[ $key ] ) ? $package_data[ $key ] : $package_data_meta[ $key ]; update_post_meta( $post_id, '__wpdm_' . $key, $value ); } if ( isset( $package_data['cats'] ) ) { wp_set_post_terms( $post_id, $package_data['cats'], 'wpdmcategory' ); } if ( isset( $package_data['featured_image'] ) ) { $wp_filetype = wp_check_filetype( wp_basename( $package_data['featured_image'] ), null ); if ( __::is_url( $package_data['featured_image'] ) ) { $upload_dir = wp_upload_dir(); $file_path = $upload_dir['path'] . '/' . sanitize_file_name( $package_data['post_title'] ) . '.' . $wp_filetype['ext']; //$data = remote_get($package_data['featured_image']); //$ret = copy($package_data['featured_image'], $file_path); //if(!$ret) wpdmdd($package_data['featured_image']); file_put_contents( $file_path, wpdm_remote_get( $package_data['featured_image'] ) ); $package_data['featured_image'] = $file_path; } $mime_type = ''; if ( isset( $wp_filetype['type'] ) && $wp_filetype['type'] ) { $mime_type = $wp_filetype['type']; } unset( $wp_filetype ); $attachment = array( 'post_mime_type' => $mime_type, 'post_parent' => $post_id, 'post_title' => wp_basename( $package_data['featured_image'] ), 'post_status' => 'inherit' ); $attachment_id = wp_insert_attachment( $attachment, $package_data['featured_image'], $post_id ); unset( $attachment ); if ( ! is_wp_error( $attachment_id ) ) { $attachment_data = wp_generate_attachment_metadata( $attachment_id, $package_data['featured_image'] ); wp_update_attachment_metadata( $attachment_id, $attachment_data ); unset( $attachment_data ); set_post_thumbnail( $post_id, $attachment_id ); } } return $post_id; } /** * @param $id * @param array $atfb * * @return string */ public static function favBtn( $id, $atfb = array(), $count = true ) { if ( empty( $atfb ) ) { $atfb = array( 'size' => '', 'a2f_label' => "  " . __( "Add to favourite", "download-manager" ), 'rff_label' => "   " . __( "Remove from favourite", "download-manager" ) ); } $atfb = apply_filters( "wpdm_fav_btn", $atfb, $id ); $myfavs = maybe_unserialize( get_user_meta( get_current_user_id(), '__wpdm_favs', true ) ); $ufavs = maybe_unserialize( get_post_meta( $id, '__wpdm_favs', true ) ); $pfc = is_array( $ufavs ) ? count( $ufavs ) : 0; $btnclass = is_array( $myfavs ) && in_array( $id, $myfavs ) ? 'btn-danger' : 'btn-secondary'; $label = is_array( $myfavs ) && in_array( $id, $myfavs ) ? $atfb['rff_label'] : $atfb['a2f_label']; extract( $atfb ); if ( $count ) { return "
"; } else { return ""; } } /** * Shows favourite count * * @param $id * * @return int */ public static function favCount( $id ) { $ufavs = maybe_unserialize( get_post_meta( $id, '__wpdm_favs', true ) ); $pfc = is_array( $ufavs ) ? count( $ufavs ) : 0; return $pfc; } /** * @param $ID * @param $emails * @param string $names * @param int $usageLimit * @param int $expireTime * * @usage mail package link to specified email address * @since 4.7.4 */ static function emailDownloadLink( $ID, $emails, $names = '', $usageLimit = 3, $expireTime = 604800 ) { if ( ! is_array( $emails ) ) { $emails = explode( ",", $emails ); } if ( ! is_array( $names ) ) { $names = explode( ",", $names ); } $title = get_the_title( $ID ); $banner = get_the_post_thumbnail_url( $ID, array( 600, 400 ) ); $logo = get_site_icon_url(); foreach ( $emails as $index => $email ) { $download_link = WPDM()->package->expirableDownloadLink( $ID, $usageLimit, $expireTime ); $download_page_link = WPDM()->package->expirableDownloadPage( $ID, $usageLimit, $expireTime ); $params = array( 'to_email' => $email, 'name' => isset( $names[ $index ] ) ? $names[ $index ] : '', 'package_name' => $title, 'download_url' => $download_link, 'download_page_url' => $download_page_link, 'img_logo' => $logo, 'banner' => $banner ); \WPDM\__\Email::send( "email-lock", $params ); } } /** * Check if specified link or page template have the tag * * @param null $template * @param $tag * * @return bool|string */ static function templateHasTag( $template = null, $tag = '' ) { if ( ! $template ) { return true; } else if ( is_string( $tag ) ) { return substr_count( $template, "[{$tag}]" ); } else if ( is_array( $tag ) ) { foreach ( $tag as $t ) { if ( substr_count( $template, "[{$t}]" ) ) { return true; } } } return false; } /** * Returns package icon * * @param $ID * * @return string */ static function icon( $ID, $html = false, $class = '' ) { $icon = get_post_meta( $ID, '__wpdm_icon', true ); if ( $icon == '' ) { $file_types = WPDM()->package->fileTypes( $ID, false ); if ( count( $file_types ) ) { if ( count( $file_types ) == 1 ) { $tmpavar = $file_types; $ext = $tmpvar = array_shift( $tmpavar ); } else { $ext = 'zip'; } } else { $ext = "unknown"; } if ( $ext === '' ) { $ext = 'wpdm'; } $icon = FileSystem::fileTypeIcon( $ext ); } if ( $html ) { $icon = "Icon"; } return apply_filters( "wpdm_package_icon", $icon, $ID ); } /** * Create a copy of a given package * * @param $ID * * @return int|\WP_Error */ static function copy( $ID, $author = null, $new_meta = array() ) { $old_pack = (array) get_post( $ID ); $package = array( 'post_title' => $old_pack['post_title'], 'post_content' => $old_pack['post_content'], 'post_status' => $old_pack['post_status'], 'comment_status' => $old_pack['comment_status'], 'ping_status' => $old_pack['ping_status'], 'post_type' => 'wpdmpro' ); if ( $author ) { $package['post_author'] = $author; } $new_ID = wp_insert_post( $package ); $meta = get_post_meta( $ID ); foreach ( $meta as $key => $value ) { foreach ( $value as $v ) { update_post_meta( $new_ID, $key, maybe_unserialize( $v ) ); } } if ( is_array( $new_meta ) ) { foreach ( $new_meta as $key => $value ) { update_post_meta( $new_ID, $key, maybe_unserialize( $value ) ); } } return $new_ID; } static function dummy() { $package = array( 'post_title' => __( 'Sample Package', 'download-manager' ), 'post_content' => 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. ', 'excerpt' => 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s', 'post_status' => 'publish', 'download_link' => 'Download', 'download_link_extended' => 'Download', ); return $package; } /** * @param null $ID * * @return array Additional preview image urls */ function additionalPreviews( $ID = null ) { $ID = $ID ? $ID : $this->ID; if ( ! $ID && is_singular( 'wpdmpro' ) ) { $ID = get_the_ID(); } if ( ! $ID ) { return array(); } $additional_previews = get_post_meta( $ID, '__wpdm_additional_previews', true ); $previews = array(); foreach ( $additional_previews as $media_id ) { $previews[] = wp_get_attachment_url( $media_id ); } return $previews; } function getThumbnail( $ID, $FILEID, $size ) { if ( ! $this->files ) { $this->files = self::getFiles( $ID, true ); } $file = wpdm_valueof( $this->files, $FILEID ); $imgext = array( 'png', 'jpg', 'jpeg', 'gif' ); $ext = FileSystem::fileExt( $file ); $thumb = ''; $abspath = WPDM()->package->locateFile( $file ); if ( in_array( $ext, $imgext ) && $abspath ) { $thumb = FileSystem::imageThumbnail( $abspath, $size[0], $size[1], WPDM_USE_GLOBAL, true ); } else if ( $ext === 'svg' ) { $thumb = str_replace( ABSPATH, home_url( '/' ), $file ); } else if ( strtolower( $ext ) === 'pdf' && class_exists( 'Imagick' ) ) { $thumb = FileSystem::pdfThumbnail( $file, md5( $file ) ); } else { $thumb = FileSystem::fileTypeIcon( $ext ); } return apply_filters( "wpdm_file_thumbnail", $thumb, [ 'file' => $file, 'FILEID' => $FILEID, 'ID' => $ID, 'size' => $size ] ); } function locateFile( $file ) { if ( file_exists( $file ) ) { return $file; } if ( file_exists( UPLOAD_DIR . $file ) ) { return UPLOAD_DIR . $file; } return false; } function addViewCount() { //__::isAuthentic( '__wpdm_view_count', NONCE_KEY, 'read', false ); $id = (int) ( $_REQUEST['id'] ); $views = (int) get_post_meta( $id, '__wpdm_view_count', true ); update_post_meta( $id, '__wpdm_view_count', $views + 1 ); wp_send_json( [ 'views' => $views + 1 ] ); } /** * @usage Find similar packages * * @param null $package_id * @param int $count * @param bool|true $html * * @return array|bool|string */ function similarPackages( $package_id = null, $count = 5, $html = true ) { $id = $package_id ? $package_id : get_the_ID(); if ( is_array( $package_id ) ) { $id = $package_id['ID']; } $tags = wp_get_post_terms( $id, 'wpdmtag' ); $cats = wp_get_post_terms( $id, 'wpdmcategory' ); $posts = array(); if ( $tags ) { $tag_ids = array(); foreach ( $tags as $individual_tag ) { $tag_ids[] = $individual_tag->term_id; } foreach ( $cats as $individual_cat ) { $cat_ids[] = $individual_cat->term_id; } $args = array( 'post_type' => 'wpdmpro', 'tax_query' => [ [ 'taxonomy' => 'wpdmtag', 'field' => 'id', 'terms' => $tag_ids, 'operator' => 'IN' ], [ 'taxonomy' => 'wpdmcategory', 'field' => 'id', 'terms' => $cat_ids, 'operator' => 'IN' ], 'relation' => 'OR' ], 'post__not_in' => array( $id ), 'posts_per_page' => $count ); $posts = get_posts( $args ); if ( ! $html ) { return $posts; } $html = ""; //Filter hook to change related packages/downloads template $template = apply_filters( "wpdm_replated_package_template", "link-template-panel.php", $package_id ); $cols = apply_filters( "wpdm_replated_package_columns", 6, $package_id ); foreach ( $posts as $p ) { $package['ID'] = $p->ID; $package['post_title'] = $p->post_title; $package['post_content'] = $p->post_content; $package['post_excerpt'] = $p->post_excerpt; $html .= "
" . wpdm_fetch_template( $template, $package, 'link' ) . "
"; } } if ( count( $posts ) == 0 ) { $html = "
" . __( "No related download found!", "download-manager" ) . "
"; } $html = "
" . $html . "
"; wp_reset_query(); return $html; } function search( $keyword = '' ) { $keyword = wpdm_query_var( 'search' ) ?: $keyword; if ( $keyword ) { $query = new Query(); $query->search( $keyword ); if ( wpdm_query_var( 'premium', 'int' ) > 0 ) { $query->meta( '__wpdm_base_price', 0, '>' ); $query->meta_relation( 'AND' ); } $query->process(); $packages = $query->packages(); foreach ( $packages as &$package ) { $package = (object) [ 'ID' => $package->ID, 'post_title' => $package->post_title, 'post_content' => $package->post_content ]; } if ( wpdm_query_var( 'premium', 'int' ) > 0 && function_exists( 'wpdmpp_product_license_options' ) ) { foreach ( $packages as &$package ) { $licenses = wpdmpp_product_license_options( $package->ID ); $package->licenses = count( $licenses ) > 0 ? $licenses : null; } } wp_send_json( [ 'total' => $query->count, 'packages' => $packages, 'q' => $query->params ] ); } } }