slider.class.php 113 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577
  1. <?php
  2. /**
  3. * @author ThemePunch <info@themepunch.com>
  4. * @link http://www.themepunch.com/
  5. * @copyright 2015 ThemePunch
  6. */
  7. if( !defined( 'ABSPATH') ) exit();
  8. class RevSliderSlider extends RevSliderElementsBase{
  9. const DEFAULT_POST_SORTBY = "ID";
  10. const DEFAULT_POST_SORTDIR = "DESC";
  11. const VALIDATE_NUMERIC = "numeric";
  12. const VALIDATE_EMPTY = "empty";
  13. const FORCE_NUMERIC = "force_numeric";
  14. const SLIDER_TYPE_GALLERY = "gallery";
  15. const SLIDER_TYPE_POSTS = "posts";
  16. const SLIDER_TYPE_TEMPLATE = "template";
  17. const SLIDER_TYPE_ALL = "all";
  18. private $slider_version = 5;
  19. private $id;
  20. private $title;
  21. private $alias;
  22. private $arrParams;
  23. private $settings;
  24. private $arrSlides = null;
  25. public function __construct(){
  26. parent::__construct();
  27. }
  28. /**
  29. *
  30. * return if the slider is inited or not
  31. */
  32. public function isInited(){
  33. if(!empty($this->id))
  34. return(true);
  35. return(false);
  36. }
  37. /**
  38. *
  39. * validate that the slider is inited. if not - throw error
  40. */
  41. private function validateInited(){
  42. if(empty($this->id))
  43. RevSliderFunctions::throwError("The slider is not initialized!");
  44. }
  45. /**
  46. * init slider by db data
  47. */
  48. public function initByDBData($arrData){
  49. $this->id = $arrData["id"];
  50. $this->title = $arrData["title"];
  51. $this->alias = $arrData["alias"];
  52. $settings = $arrData["settings"];
  53. $settings = (array)json_decode($settings);
  54. $this->settings = $settings;
  55. $params = $arrData["params"];
  56. $params = (array)json_decode($params);
  57. $params = RevSliderBase::translate_settings_to_v5($params);
  58. $this->arrParams = $params;
  59. }
  60. /**
  61. *
  62. * init the slider object by database id
  63. */
  64. public function initByID($sliderID){
  65. RevSliderFunctions::validateNumeric($sliderID,"Slider ID");
  66. try{
  67. $sliderData = $this->db->fetchSingle(RevSliderGlobals::$table_sliders, $this->db->prepare("id = %s", array($sliderID)));
  68. }catch(Exception $e){
  69. $message = $e->getMessage();
  70. echo $message;
  71. exit;
  72. }
  73. $this->initByDBData($sliderData);
  74. }
  75. /**
  76. *
  77. * init slider by alias
  78. */
  79. public function initByAlias($alias){
  80. try{
  81. $where = $this->db->prepare("alias = %s AND `type` != 'template'", array($alias));
  82. $sliderData = $this->db->fetchSingle(RevSliderGlobals::$table_sliders,$where);
  83. }catch(Exception $e){
  84. $arrAliases = $this->getAllSliderAliases();
  85. $strAliases = "";
  86. if(!empty($arrAliases) && is_array($arrAliases)){
  87. $arrAliases = array_slice($arrAliases, 0, 6); //show 6 other, will be enough
  88. $strAliases = "'".sanitize_text_field(implode("' or '", $arrAliases))."'";
  89. }
  90. $errorMessage = 'Slider with alias <strong>'.sanitize_text_field(esc_attr($alias)).'</strong> not found.';
  91. if(!empty($strAliases))
  92. $errorMessage .= ' <br>Maybe you mean: '.$strAliases;
  93. RevSliderFunctions::throwError($errorMessage);
  94. }
  95. $this->initByDBData($sliderData);
  96. }
  97. /**
  98. *
  99. * init by id or alias
  100. */
  101. public function initByMixed($mixed){
  102. if(is_numeric($mixed))
  103. $this->initByID($mixed);
  104. else
  105. $this->initByAlias($mixed);
  106. }
  107. /**
  108. *
  109. * get data functions
  110. */
  111. public function getTitle(){
  112. return($this->title);
  113. }
  114. public function getID(){
  115. return($this->id);
  116. }
  117. public function getParams(){
  118. return($this->arrParams);
  119. }
  120. /*
  121. * return Slider settings
  122. * @since: 5.0
  123. */
  124. public function getSettings(){
  125. return($this->settings);
  126. }
  127. /*
  128. * return true if slider is favorite
  129. * @since: 5.0
  130. */
  131. public function isFavorite(){
  132. if(!empty($this->settings)){
  133. if(isset($this->settings['favorite']) && $this->settings['favorite'] == 'true') return true;
  134. }
  135. return false;
  136. }
  137. /**
  138. *
  139. * set slider params
  140. */
  141. public function setParams($arrParams){
  142. $this->arrParams = $arrParams;
  143. }
  144. /**
  145. * set specific slider param
  146. * @since: 5.1.1
  147. */
  148. public function setParam($param, $value){
  149. $this->arrParams[$param] = $value;
  150. }
  151. /**
  152. *
  153. * get parameter from params array. if no default, then the param is a must!
  154. */
  155. function getParam($name,$default=null,$validateType = null,$title=""){
  156. if($default === null){
  157. $default = "";
  158. }
  159. $value = RevSliderFunctions::getVal($this->arrParams, $name,$default);
  160. //validation:
  161. switch($validateType){
  162. case self::VALIDATE_NUMERIC:
  163. case self::VALIDATE_EMPTY:
  164. $paramTitle = !empty($title)?$title:$name;
  165. if($value !== "0" && $value !== 0 && empty($value))
  166. RevSliderFunctions::throwError("The param <strong>$paramTitle</strong> should not be empty.");
  167. break;
  168. case self::VALIDATE_NUMERIC:
  169. $paramTitle = !empty($title)?$title:$name;
  170. if(!is_numeric($value))
  171. RevSliderFunctions::throwError("The param <strong>$paramTitle</strong> should be numeric. Now it's: $value");
  172. break;
  173. case self::FORCE_NUMERIC:
  174. if(!is_numeric($value)){
  175. $value = 0;
  176. if(!empty($default))
  177. $value = $default;
  178. }
  179. break;
  180. }
  181. return $value;
  182. }
  183. public function getAlias(){
  184. return($this->alias);
  185. }
  186. /**
  187. * get combination of title (alias)
  188. */
  189. public function getShowTitle(){
  190. $showTitle = $this->title;
  191. return($showTitle);
  192. }
  193. /**
  194. *
  195. * get slider shortcode
  196. */
  197. public function getShortcode(){
  198. $shortCode = '[rev_slider alias="'.$this->alias.'"]';
  199. return($shortCode);
  200. }
  201. /**
  202. *
  203. * check if alias exists in DB
  204. */
  205. public function isAliasExistsInDB($alias){
  206. $where = $this->db->prepare("alias = %s ", array($alias));
  207. if(!empty($this->id)){
  208. $where .= $this->db->prepare(" and id != %s AND `type` != 'template'", array($this->id));
  209. }
  210. $response = $this->db->fetch(RevSliderGlobals::$table_sliders,$where);
  211. return(!empty($response));
  212. }
  213. /**
  214. *
  215. * check if alias exists in DB
  216. */
  217. public static function isAliasExists($alias){
  218. global $wpdb;
  219. $response = $wpdb->get_row($wpdb->prepare("SELECT * FROM ".RevSliderGlobals::$table_sliders." WHERE alias = %s AND `type` != 'template'", $alias));
  220. return(!empty($response));
  221. }
  222. /**
  223. *
  224. * validate settings for add
  225. */
  226. private function validateInputSettings($title,$alias,$params){
  227. RevSliderFunctions::validateNotEmpty($title,"title");
  228. RevSliderFunctions::validateNotEmpty($alias,"alias");
  229. if($this->isAliasExistsInDB($alias))
  230. RevSliderFunctions::throwError("Some other slider with alias '$alias' already exists");
  231. }
  232. /**
  233. * set new hero slide id for the Slider
  234. * @since: 5.0
  235. */
  236. public function setHeroSlide($data){
  237. $sliderID = RevSliderFunctions::getVal($data, "slider_id");
  238. RevSliderFunctions::validateNotEmpty($sliderID,"Slider ID");
  239. $this->initByID($sliderID);
  240. $new_slide_id = RevSliderFunctions::getVal($data, "slide_id");
  241. RevSliderFunctions::validateNotEmpty($new_slide_id,"Hero Slide ID");
  242. $this->updateParam(array('hero_active' => intval($new_slide_id)));
  243. return($new_slide_id);
  244. }
  245. /**
  246. *
  247. * create / update slider from options
  248. */
  249. private function createUpdateSliderFromOptions($options, $sliderID = null){
  250. $arrMain = RevSliderFunctions::getVal($options, "main");
  251. $params = RevSliderFunctions::getVal($options, "params");
  252. //trim all input data
  253. $arrMain = RevSliderFunctions::trimArrayItems($arrMain);
  254. $params = RevSliderFunctions::trimArrayItems($params);
  255. $params = array_merge($arrMain,$params);
  256. $title = sanitize_text_field(RevSliderFunctions::getVal($arrMain, "title"));
  257. $alias = sanitize_text_field(RevSliderFunctions::getVal($arrMain, "alias"));
  258. //params css and js check
  259. if(!RevSliderFunctionsWP::isAdminUser() && apply_filters('revslider_restrict_role', true)){
  260. //dont allow css and javascript from users other than administrator
  261. unset($params['custom_css']);
  262. unset($params['custom_javascript']);
  263. }
  264. if(!empty($sliderID)){
  265. $this->initByID($sliderID);
  266. if(!RevSliderFunctionsWP::isAdminUser() && apply_filters('revslider_restrict_role', true)){
  267. //check for js and css, add it to $params
  268. $params['custom_css'] = $this->getParam('custom_css', '');
  269. $params['custom_javascript'] = $this->getParam('custom_javascript', '');
  270. }
  271. }
  272. $this->validateInputSettings($title, $alias, $params);
  273. $jsonParams = json_encode($params);
  274. //insert slider to database
  275. $arrData = array();
  276. $arrData["title"] = $title;
  277. $arrData["alias"] = $alias;
  278. $arrData["params"] = $jsonParams;
  279. $arrData["type"] = '';
  280. if(empty($sliderID)){ //create slider
  281. $arrData['settings'] = json_encode(array('version' => 5.0));
  282. $sliderID = $this->db->insert(RevSliderGlobals::$table_sliders,$arrData);
  283. return($sliderID);
  284. }else{ //update slider
  285. $this->initByID($sliderID);
  286. $settings = $this->getSettings();
  287. $settings['version'] = 5.0;
  288. $arrData['settings'] = json_encode($settings);
  289. $sliderID = $this->db->update(RevSliderGlobals::$table_sliders,$arrData,array("id"=>$sliderID));
  290. }
  291. }
  292. /**
  293. * delete slider from datatase
  294. */
  295. public function deleteSlider(){
  296. $this->validateInited();
  297. //delete slider
  298. $this->db->delete(RevSliderGlobals::$table_sliders, $this->db->prepare("id = %s", array($this->id)));
  299. //delete slides
  300. $this->deleteAllSlides();
  301. $this->deleteStaticSlide();
  302. }
  303. /**
  304. *
  305. * delete all slides
  306. */
  307. private function deleteAllSlides(){
  308. $this->validateInited();
  309. $this->db->delete(RevSliderGlobals::$table_slides, $this->db->prepare("slider_id = %s", array($this->id)));
  310. do_action('revslider_slider_deleteAllSlides', $this->id);
  311. }
  312. /**
  313. *
  314. * delete all slides
  315. */
  316. public function deleteStaticSlide(){
  317. $this->validateInited();
  318. $this->db->delete(RevSliderGlobals::$table_static_slides, $this->db->prepare("slider_id = %s", array($this->id)));
  319. }
  320. /**
  321. *
  322. * get all slide children
  323. */
  324. public function getArrSlideChildren($slideID){
  325. $this->validateInited();
  326. $arrSlides = $this->getSlidesFromGallery();
  327. if(!isset($arrSlides[$slideID]))
  328. RevSliderFunctions::throwError("Slide with id: $slideID not found in the main slides of the slider. Maybe it's child slide.");
  329. $slide = $arrSlides[$slideID];
  330. $arrChildren = $slide->getArrChildren();
  331. return($arrChildren);
  332. }
  333. /**
  334. *
  335. * duplicate slider in datatase
  336. */
  337. private function duplicateSlider($title = false, $prefix = false){
  338. $this->validateInited();
  339. //insert a new slider
  340. $sqlSelect = $this->db->prepare("select ".RevSliderGlobals::FIELDS_SLIDER." from ".RevSliderGlobals::$table_sliders." where id = %s", array($this->id));
  341. $sqlInsert = "insert into ".RevSliderGlobals::$table_sliders." (".RevSliderGlobals::FIELDS_SLIDER.") ($sqlSelect)";
  342. $this->db->runSql($sqlInsert);
  343. $lastID = $this->db->getLastInsertID();
  344. RevSliderFunctions::validateNotEmpty($lastID);
  345. $params = $this->arrParams;
  346. if($title === false){
  347. //get slider number:
  348. $response = $this->db->fetch(RevSliderGlobals::$table_sliders);
  349. $numSliders = count($response);
  350. $newSliderSerial = $numSliders+1;
  351. $newSliderTitle = "Slider".$newSliderSerial;
  352. $newSliderAlias = "slider".$newSliderSerial;
  353. }else{
  354. if($prefix !== false){
  355. $newSliderTitle = sanitize_text_field($title.' '.$params['title']);
  356. $newSliderAlias = sanitize_title($title.' '.$params['title']);
  357. }else{
  358. $newSliderTitle = sanitize_text_field($title);
  359. $newSliderAlias = sanitize_title($title);
  360. }
  361. // Check Duplicate Alias
  362. $sqlTitle = $this->db->fetch(RevSliderGlobals::$table_sliders, $this->db->prepare("alias = %s", array($newSliderAlias)));
  363. if(!empty($sqlTitle)){
  364. $response = $this->db->fetch(RevSliderGlobals::$table_sliders);
  365. $numSliders = count($response);
  366. $newSliderSerial = $numSliders+1;
  367. $newSliderTitle .= $newSliderSerial;
  368. $newSliderAlias .= $newSliderSerial;
  369. }
  370. }
  371. //update params
  372. $params["title"] = $newSliderTitle;
  373. $params["alias"] = $newSliderAlias;
  374. $params["shortcode"] = "[rev_slider alias=\"". $newSliderAlias ."\"]";
  375. //update the new slider with the title and the alias values
  376. $arrUpdate = array();
  377. $arrUpdate["title"] = $newSliderTitle;
  378. $arrUpdate["alias"] = $newSliderAlias;
  379. $jsonParams = json_encode($params);
  380. $arrUpdate["params"] = $jsonParams;
  381. $arrUpdate["type"] = '';//remove the type as we do not want it to be template if it was
  382. $this->db->update(RevSliderGlobals::$table_sliders, $arrUpdate, array("id"=>$lastID));
  383. //duplicate Slides
  384. $slides = $this->db->fetch(RevSliderGlobals::$table_slides, $this->db->prepare("slider_id = %s", array($this->id)));
  385. if(!empty($slides)){
  386. foreach($slides as $slide){
  387. $slide['slider_id'] = $lastID;
  388. $myID = $slide['id'];
  389. unset($slide['id']);
  390. $last_id = $this->db->insert(RevSliderGlobals::$table_slides,$slide);
  391. if(isset($myID)){
  392. $slider_map[$myID] = $last_id;
  393. }
  394. }
  395. }
  396. //duplicate static slide if exists
  397. $slide = new RevSlide();
  398. $staticID = $slide->getStaticSlideID($this->id);
  399. $static_id = 0;
  400. if($staticID !== false){
  401. $record = $this->db->fetchSingle(RevSliderGlobals::$table_static_slides, $this->db->prepare("id = %s", array($staticID)));
  402. unset($record['id']);
  403. $record['slider_id'] = $lastID;
  404. $static_id = $this->db->insert(RevSliderGlobals::$table_static_slides, $record);
  405. }
  406. //update actions
  407. $slides = $this->db->fetch(RevSliderGlobals::$table_slides, $this->db->prepare("slider_id = %s", array($lastID)));
  408. if($static_id > 0){
  409. $slides_static = $this->db->fetch(RevSliderGlobals::$table_static_slides, $this->db->prepare("id = %s", array($static_id)));
  410. $slides = array_merge($slides, $slides_static);
  411. }
  412. if(!empty($slides)){
  413. foreach($slides as $slide){
  414. $c_slide = new RevSlide();
  415. $c_slide->initByData($slide);
  416. $layers = $c_slide->getLayers();
  417. $did_change = false;
  418. foreach($layers as $key => $value){
  419. if(isset($value['layer_action'])){
  420. if(isset($value['layer_action']->jump_to_slide) && !empty($value['layer_action']->jump_to_slide)){
  421. foreach($value['layer_action']->jump_to_slide as $jtsk => $jtsval){
  422. if(isset($slider_map[$jtsval])){
  423. $layers[$key]['layer_action']->jump_to_slide[$jtsk] = $slider_map[$jtsval];
  424. $did_change = true;
  425. }
  426. }
  427. }
  428. }
  429. }
  430. if($did_change === true){
  431. $arrCreate = array();
  432. $my_layers = json_encode($layers);
  433. if(empty($my_layers))
  434. $my_layers = stripslashes(json_encode($layers));
  435. $arrCreate['layers'] = $my_layers;
  436. if($slide['id'] == $static_id){
  437. $this->db->update(RevSliderGlobals::$table_static_slides,$arrCreate,array("id"=>$static_id));
  438. }else{
  439. $this->db->update(RevSliderGlobals::$table_slides,$arrCreate,array("id"=>$slide['id']));
  440. }
  441. }
  442. }
  443. }
  444. //change the javascript api ID to the correct one
  445. $c_slider = new RevSliderSlider();
  446. $c_slider->initByID($lastID);
  447. $cus_js = $c_slider->getParam('custom_javascript', '');
  448. if(strpos($cus_js, 'revapi') !== false){
  449. if(preg_match_all('/revapi[0-9]*/', $cus_js, $results)){
  450. if(isset($results[0]) && !empty($results[0])){
  451. foreach($results[0] as $replace){
  452. $cus_js = str_replace($replace, 'revapi'.$lastID, $cus_js);
  453. }
  454. }
  455. $c_slider->updateParam(array('custom_javascript' => $cus_js));
  456. }
  457. }
  458. return $lastID;
  459. }
  460. /**
  461. * duplicate slide
  462. */
  463. public function duplicateSlide($slideID){
  464. $slide = new RevSlide();
  465. $slide->initByID($slideID);
  466. $order = $slide->getOrder();
  467. $slides = $this->getSlidesFromGallery();
  468. $newOrder = $order+1;
  469. $this->shiftOrder($newOrder);
  470. //do duplication
  471. $sqlSelect = $this->db->prepare("select ".RevSliderGlobals::FIELDS_SLIDE." from ".RevSliderGlobals::$table_slides." where id = %s", array(intval($slideID)));
  472. $sqlInsert = "insert into ".RevSliderGlobals::$table_slides." (".RevSliderGlobals::FIELDS_SLIDE.") ($sqlSelect)";
  473. $this->db->runSql($sqlInsert);
  474. $lastID = $this->db->getLastInsertID();
  475. RevSliderFunctions::validateNotEmpty($lastID);
  476. //update order
  477. $arrUpdate = array("slide_order"=>$newOrder);
  478. $this->db->update(RevSliderGlobals::$table_slides,$arrUpdate, array("id"=>$lastID));
  479. return($lastID);
  480. }
  481. /**
  482. *
  483. * copy / move slide
  484. */
  485. private function copyMoveSlide($slideID,$targetSliderID,$operation){
  486. if($operation == "move"){
  487. $targetSlider = new RevSlider();
  488. $targetSlider->initByID($targetSliderID);
  489. $maxOrder = $targetSlider->getMaxOrder();
  490. $newOrder = $maxOrder+1;
  491. $arrUpdate = array("slider_id"=>$targetSliderID,"slide_order"=>$newOrder);
  492. //update children
  493. $arrChildren = $this->getArrSlideChildren($slideID);
  494. foreach($arrChildren as $child){
  495. $childID = $child->getID();
  496. $this->db->update(RevSliderGlobals::$table_slides,$arrUpdate,array("id"=>$childID));
  497. }
  498. $this->db->update(RevSliderGlobals::$table_slides,$arrUpdate,array("id"=>$slideID));
  499. }else{ //in place of copy
  500. $newSlideID = $this->duplicateSlide($slideID);
  501. $this->duplicateChildren($slideID, $newSlideID);
  502. $this->copyMoveSlide($newSlideID,$targetSliderID,"move");
  503. }
  504. }
  505. /**
  506. *
  507. * shift order of the slides from specific order
  508. */
  509. private function shiftOrder($fromOrder){
  510. $where = $this->db->prepare(" slider_id = %s and slide_order >= %s", array($this->id, $fromOrder));
  511. $sql = "update ".RevSliderGlobals::$table_slides." set slide_order=(slide_order+1) where $where";
  512. $this->db->runSql($sql);
  513. }
  514. /**
  515. *
  516. * create slider in database from options
  517. */
  518. public function createSliderFromOptions($options){
  519. $sliderID = $this->createUpdateSliderFromOptions($options,null);
  520. return($sliderID);
  521. }
  522. /**
  523. *
  524. * export slider from data, output a file for download
  525. */
  526. public function exportSlider($useDummy = false){
  527. $this->validateInited();
  528. $sliderParams = $this->getParamsForExport();
  529. $arrSlides = $this->getSlidesForExport($useDummy);
  530. $arrStaticSlide = $this->getStaticSlideForExport($useDummy);
  531. $usedCaptions = array();
  532. $usedAnimations = array();
  533. $usedImages = array();
  534. $usedSVG = array();
  535. $usedVideos = array();
  536. $usedNavigations = array();
  537. $cfw = array();
  538. if(!empty($arrSlides) && count($arrSlides) > 0) $cfw = array_merge($cfw, $arrSlides);
  539. if(!empty($arrStaticSlide) && count($arrStaticSlide) > 0) $cfw = array_merge($cfw, $arrStaticSlide);
  540. //remove image_id as it is not needed in export
  541. //plus remove background image if solid color or transparent
  542. if(!empty($arrSlides)){
  543. foreach($arrSlides as $k => $s){
  544. if(isset($arrSlides[$k]['params']['image_id'])) unset($arrSlides[$k]['params']['image_id']);
  545. if(isset($arrSlides[$k]['params']["background_type"]) && ($arrSlides[$k]['params']["background_type"] == 'solid' || $arrSlides[$k]['params']["background_type"] == "trans" || $arrSlides[$k]['params']["background_type"] == "transparent")){
  546. if(isset($arrSlides[$k]['params']['background_image']))
  547. $arrSlides[$k]['params']['background_image'] = '';
  548. }
  549. }
  550. }
  551. if(!empty($arrStaticSlide)){
  552. foreach($arrStaticSlide as $k => $s){
  553. if(isset($arrStaticSlide[$k]['params']['image_id'])) unset($arrStaticSlide[$k]['params']['image_id']);
  554. if(isset($arrStaticSlide[$k]['params']["background_type"]) && ($arrStaticSlide[$k]['params']["background_type"] == 'solid' || $arrStaticSlide[$k]['params']["background_type"] == "trans" || $arrStaticSlide[$k]['params']["background_type"] == "transparent")){
  555. if(isset($arrStaticSlide[$k]['params']['background_image']))
  556. $arrStaticSlide[$k]['params']['background_image'] = '';
  557. }
  558. }
  559. }
  560. if(!empty($cfw) && count($cfw) > 0){
  561. foreach($cfw as $key => $slide){
  562. //check if we are transparent and so on
  563. if(isset($slide['params']['image']) && $slide['params']['image'] != '') $usedImages[$slide['params']['image']] = true; //['params']['image'] background url
  564. if(isset($slide['params']['background_image']) && $slide['params']['background_image'] != '') $usedImages[$slide['params']['background_image']] = true; //['params']['image'] background url
  565. if(isset($slide['params']['slide_thumb']) && $slide['params']['slide_thumb'] != '') $usedImages[$slide['params']['slide_thumb']] = true; //['params']['image'] background url
  566. //html5 video
  567. if(isset($slide['params']['background_type']) && $slide['params']['background_type'] == 'html5'){
  568. if(isset($slide['params']['slide_bg_html_mpeg']) && $slide['params']['slide_bg_html_mpeg'] != '') $usedVideos[$slide['params']['slide_bg_html_mpeg']] = true;
  569. if(isset($slide['params']['slide_bg_html_webm']) && $slide['params']['slide_bg_html_webm'] != '') $usedVideos[$slide['params']['slide_bg_html_webm']] = true;
  570. if(isset($slide['params']['slide_bg_html_ogv']) && $slide['params']['slide_bg_html_ogv'] != '') $usedVideos[$slide['params']['slide_bg_html_ogv']] = true;
  571. }else{
  572. if(isset($slide['params']['slide_bg_html_mpeg']) && $slide['params']['slide_bg_html_mpeg'] != '') $slide['params']['slide_bg_html_mpeg'] = '';
  573. if(isset($slide['params']['slide_bg_html_webm']) && $slide['params']['slide_bg_html_webm'] != '') $slide['params']['slide_bg_html_webm'] = '';
  574. if(isset($slide['params']['slide_bg_html_ogv']) && $slide['params']['slide_bg_html_ogv'] != '') $slide['params']['slide_bg_html_ogv'] = '';
  575. }
  576. //image thumbnail
  577. if(isset($slide['layers']) && !empty($slide['layers']) && count($slide['layers']) > 0){
  578. foreach($slide['layers'] as $lKey => $layer){
  579. if(isset($layer['style']) && $layer['style'] != '') $usedCaptions[$layer['style']] = true;
  580. if(isset($layer['animation']) && $layer['animation'] != '' && strpos($layer['animation'], 'customin') !== false) $usedAnimations[str_replace('customin-', '', $layer['animation'])] = true;
  581. if(isset($layer['endanimation']) && $layer['endanimation'] != '' && strpos($layer['endanimation'], 'customout') !== false) $usedAnimations[str_replace('customout-', '', $layer['endanimation'])] = true;
  582. if(isset($layer['image_url']) && $layer['image_url'] != '') $usedImages[$layer['image_url']] = true; //image_url if image caption
  583. if(isset($layer['bgimage_url']) && $layer['bgimage_url'] != '') $usedImages[$layer['bgimage_url']] = true; //image_url if background layer image
  584. if(isset($layer['type']) && ($layer['type'] == 'video' || $layer['type'] == 'audio')){
  585. $video_data = (isset($layer['video_data'])) ? (array) $layer['video_data'] : array();
  586. if(!empty($video_data) && isset($video_data['video_type']) && $video_data['video_type'] == 'html5'){
  587. if(isset($video_data['urlPoster']) && $video_data['urlPoster'] != '') $usedImages[$video_data['urlPoster']] = true;
  588. if(isset($video_data['urlMp4']) && $video_data['urlMp4'] != '') $usedVideos[$video_data['urlMp4']] = true;
  589. if(isset($video_data['urlWebm']) && $video_data['urlWebm'] != '') $usedVideos[$video_data['urlWebm']] = true;
  590. if(isset($video_data['urlOgv']) && $video_data['urlOgv'] != '') $usedVideos[$video_data['urlOgv']] = true;
  591. }elseif(!empty($video_data) && isset($video_data['video_type']) && $video_data['video_type'] != 'html5'){ //video cover image
  592. if($video_data['video_type'] == 'audio'){
  593. if(isset($video_data['urlAudio']) && $video_data['urlAudio'] != '') $usedVideos[$video_data['urlAudio']] = true;
  594. }else{
  595. if(isset($video_data['previewimage']) && $video_data['previewimage'] != '') $usedImages[$video_data['previewimage']] = true;
  596. }
  597. }
  598. if($video_data['video_type'] != 'html5'){
  599. $video_data['urlMp4'] = '';
  600. $video_data['urlWebm'] = '';
  601. $video_data['urlOgv'] = '';
  602. }
  603. if($video_data['video_type'] != 'audio'){
  604. $video_data['urlAudio'] = '';
  605. }
  606. if(isset($layer['video_image_url']) && $layer['video_image_url'] != '') $usedImages[$layer['video_image_url']] = true;
  607. }
  608. if(isset($layer['type']) && $layer['type'] == 'svg'){
  609. if(isset($layer['svg']) && isset($layer['svg']->src)){
  610. $usedSVG[$layer['svg']->src] = true;
  611. }
  612. }
  613. }
  614. }
  615. }
  616. $d = array('usedSVG' => $usedSVG, 'usedImages' => $usedImages, 'usedVideos' => $usedVideos);
  617. $d = apply_filters('revslider_exportSlider_usedMedia', $d, $cfw, $sliderParams, $useDummy); // $arrSlides, $arrStaticSlide,
  618. $usedSVG = $d['usedSVG'];
  619. $usedImages = $d['usedImages'];
  620. $usedVideos = $d['usedVideos'];
  621. }
  622. $arrSliderExport = array("params"=>$sliderParams,"slides"=>$arrSlides);
  623. if(!empty($arrStaticSlide))
  624. $arrSliderExport['static_slides'] = $arrStaticSlide;
  625. $strExport = serialize($arrSliderExport);
  626. //$strExportAnim = serialize(RevSliderOperations::getFullCustomAnimations());
  627. $exportname = (!empty($this->alias)) ? $this->alias.'.zip' : "slider_export.zip";
  628. //add navigations if not default animation
  629. if(isset($sliderParams['navigation_arrow_style'])) $usedNavigations[$sliderParams['navigation_arrow_style']] = true;
  630. if(isset($sliderParams['navigation_bullets_style'])) $usedNavigations[$sliderParams['navigation_bullets_style']] = true;
  631. if(isset($sliderParams['thumbnails_style'])) $usedNavigations[$sliderParams['thumbnails_style']] = true;
  632. if(isset($sliderParams['tabs_style'])) $usedNavigations[$sliderParams['tabs_style']] = true;
  633. $navs = false;
  634. if(!empty($usedNavigations)){
  635. $navs = RevSliderNavigation::export_navigation($usedNavigations);
  636. if($navs !== false) $navs = serialize($navs);
  637. }
  638. $styles = '';
  639. if(!empty($usedCaptions)){
  640. $captions = array();
  641. foreach($usedCaptions as $class => $val){
  642. $cap = RevSliderOperations::getCaptionsContentArray($class);
  643. //set also advanced styles here...
  644. if(!empty($cap))
  645. $captions[] = $cap;
  646. }
  647. $styles = RevSliderCssParser::parseArrayToCss($captions, "\n", true);
  648. }
  649. $animations = '';
  650. if(!empty($usedAnimations)){
  651. $animation = array();
  652. foreach($usedAnimations as $anim => $val){
  653. $anima = RevSliderOperations::getFullCustomAnimationByID($anim);
  654. if($anima !== false) $animation[] = $anima;
  655. }
  656. if(!empty($animation)) $animations = serialize($animation);
  657. }
  658. $usedImages = array_merge($usedImages, $usedVideos);
  659. $usepcl = false;
  660. if(class_exists('ZipArchive')){
  661. $zip = new ZipArchive;
  662. $success = $zip->open(RevSliderGlobals::$uploadsUrlExportZip, ZIPARCHIVE::CREATE | ZipArchive::OVERWRITE);
  663. if($success !== true)
  664. throwError("Can't create zip file: ".RevSliderGlobals::$uploadsUrlExportZip);
  665. }else{
  666. //fallback to pclzip
  667. require_once(ABSPATH . 'wp-admin/includes/class-pclzip.php');
  668. $pclzip = new PclZip(RevSliderGlobals::$uploadsUrlExportZip);
  669. //either the function uses die() or all is cool
  670. $usepcl = true;
  671. }
  672. //add svg to the zip
  673. if(!empty($usedSVG)){
  674. $content_url = content_url();
  675. $content_path = ABSPATH . 'wp-content';
  676. $ud = wp_upload_dir();
  677. $up_dir = $ud['baseurl'];
  678. foreach($usedSVG as $file => $val){
  679. if(strpos($file, 'http') !== false){ //remove all up to wp-content folder
  680. $checkpath = str_replace($content_url, '', $file);
  681. $checkpath2 = str_replace($up_dir, '', $file);
  682. if($checkpath2 === $file){ //we have an SVG like whiteboard, fallback to older export
  683. $checkpath2 = $checkpath;
  684. }
  685. if(is_file($content_path.$checkpath)){
  686. $strExport = str_replace($file, str_replace('/revslider/assets/svg', '', $checkpath2), $strExport);
  687. }
  688. }
  689. }
  690. }
  691. //add images to zip
  692. if(!empty($usedImages)){
  693. $upload_dir = RevSliderFunctionsWP::getPathUploads();
  694. $upload_dir_multisiteless = wp_upload_dir();
  695. $cont_url = $upload_dir_multisiteless['baseurl'];
  696. $cont_url_no_www = str_replace('www.', '', $upload_dir_multisiteless['baseurl']);
  697. $upload_dir_multisiteless = $upload_dir_multisiteless['basedir'].'/';
  698. foreach($usedImages as $file => $val){
  699. if($useDummy == "true"){ //only use dummy images
  700. }else{ //use the real images
  701. if(strpos($file, 'http') !== false){
  702. //check if we are in objects folder, if yes take the original image into the zip-
  703. $remove = false;
  704. $checkpath = str_replace(array($cont_url, $cont_url_no_www), '', $file);
  705. if(is_file($upload_dir.$checkpath)){
  706. if(!$usepcl){
  707. $zip->addFile($upload_dir.$checkpath, 'images/'.$checkpath);
  708. }else{
  709. $v_list = $pclzip->add($upload_dir.$checkpath, PCLZIP_OPT_REMOVE_PATH, $upload_dir, PCLZIP_OPT_ADD_PATH, 'images/');
  710. }
  711. $remove = true;
  712. }elseif(is_file($upload_dir_multisiteless.$checkpath)){
  713. if(!$usepcl){
  714. $zip->addFile($upload_dir_multisiteless.$checkpath, 'images/'.$checkpath);
  715. }else{
  716. $v_list = $pclzip->add($upload_dir_multisiteless.$checkpath, PCLZIP_OPT_REMOVE_PATH, $upload_dir_multisiteless, PCLZIP_OPT_ADD_PATH, 'images/');
  717. }
  718. $remove = true;
  719. }
  720. if($remove){ //as its http, remove this from strexport
  721. $strExport = str_replace(array($cont_url.$checkpath, $cont_url_no_www.$checkpath), $checkpath, $strExport);
  722. }
  723. }else{
  724. if(is_file($upload_dir.$file)){
  725. if(!$usepcl){
  726. $zip->addFile($upload_dir.$file, 'images/'.$file);
  727. }else{
  728. $v_list = $pclzip->add($upload_dir.$file, PCLZIP_OPT_REMOVE_PATH, $upload_dir, PCLZIP_OPT_ADD_PATH, 'images/');
  729. }
  730. }elseif(is_file($upload_dir_multisiteless.$file)){
  731. if(!$usepcl){
  732. $zip->addFile($upload_dir_multisiteless.$file, 'images/'.$file);
  733. }else{
  734. $v_list = $pclzip->add($upload_dir_multisiteless.$file, PCLZIP_OPT_REMOVE_PATH, $upload_dir_multisiteless, PCLZIP_OPT_ADD_PATH, 'images/');
  735. }
  736. }
  737. }
  738. }
  739. }
  740. }
  741. if(!$usepcl){
  742. $zip->addFromString("slider_export.txt", $strExport); //add slider settings
  743. }else{
  744. $list = $pclzip->add(array(array( PCLZIP_ATT_FILE_NAME => 'slider_export.txt',PCLZIP_ATT_FILE_CONTENT => $strExport)));
  745. if ($list == 0) { die("ERROR : '".$pclzip->errorInfo(true)."'"); }
  746. }
  747. if(strlen(trim($animations)) > 0){
  748. if(!$usepcl){
  749. $zip->addFromString("custom_animations.txt", $animations); //add custom animations
  750. }else{
  751. $list = $pclzip->add(array(array( PCLZIP_ATT_FILE_NAME => 'custom_animations.txt',PCLZIP_ATT_FILE_CONTENT => $animations)));
  752. if ($list == 0) { die("ERROR : '".$pclzip->errorInfo(true)."'"); }
  753. }
  754. }
  755. if(strlen(trim($styles)) > 0){
  756. if(!$usepcl){
  757. $zip->addFromString("dynamic-captions.css", $styles); //add dynamic styles
  758. }else{
  759. $list = $pclzip->add(array(array( PCLZIP_ATT_FILE_NAME => 'dynamic-captions.css',PCLZIP_ATT_FILE_CONTENT => $styles)));
  760. if ($list == 0) { die("ERROR : '".$pclzip->errorInfo(true)."'"); }
  761. }
  762. }
  763. if(strlen(trim($navs)) > 0){
  764. if(!$usepcl){
  765. $zip->addFromString("navigation.txt", $navs); //add dynamic styles
  766. }else{
  767. $list = $pclzip->add(array(array( PCLZIP_ATT_FILE_NAME => 'navigation.txt',PCLZIP_ATT_FILE_CONTENT => $navs)));
  768. if ($list == 0) { die("ERROR : '".$pclzip->errorInfo(true)."'"); }
  769. }
  770. }
  771. $static_css = RevSliderOperations::getStaticCss();
  772. if(trim($static_css) !== ''){
  773. if(!$usepcl){
  774. $zip->addFromString("static-captions.css", $static_css); //add slider settings
  775. }else{
  776. $list = $pclzip->add(array(array( PCLZIP_ATT_FILE_NAME => 'static-captions.css',PCLZIP_ATT_FILE_CONTENT => $static_css)));
  777. if ($list == 0) { die("ERROR : '".$pclzip->errorInfo(true)."'"); }
  778. }
  779. }
  780. $enable_slider_pack = apply_filters('revslider_slider_pack_export', false);
  781. if($enable_slider_pack){ //allow for slider packs the automatic creation of the info.cfg
  782. if(!$usepcl){
  783. $zip->addFromString('info.cfg', md5($this->alias)); //add slider settings
  784. }else{
  785. $list = $pclzip->add(array(array( PCLZIP_ATT_FILE_NAME => 'info.cfg',PCLZIP_ATT_FILE_CONTENT => md5($this->alias))));
  786. if ($list == 0) { die("ERROR : '".$pclzip->errorInfo(true)."'"); }
  787. }
  788. }
  789. if(!$usepcl){
  790. $zip->close();
  791. }else{
  792. //do nothing
  793. }
  794. header("Content-type: application/zip");
  795. header("Content-Disposition: attachment; filename=".$exportname);
  796. header("Pragma: no-cache");
  797. header("Expires: 0");
  798. readfile(RevSliderGlobals::$uploadsUrlExportZip);
  799. @unlink(RevSliderGlobals::$uploadsUrlExportZip); //delete file after sending it to user
  800. exit();
  801. }
  802. /**
  803. * import slider from multipart form
  804. * @since: 5.3.1: $updateStatic is now deprecated
  805. */
  806. public function importSliderFromPost($updateAnim = true, $updateStatic = true, $exactfilepath = false, $is_template = false, $single_slide = false, $updateNavigation = true){
  807. $real_slider_id = '';
  808. try{
  809. $upload_dir = wp_upload_dir();
  810. $rem_path = $upload_dir['basedir'].'/rstemp/';
  811. $d_path = $rem_path;
  812. $sliderID = RevSliderFunctions::getPostVariable("sliderid");
  813. $sliderExists = !empty($sliderID);
  814. if($sliderExists)
  815. $this->initByID($sliderID);
  816. if($exactfilepath !== false){
  817. $filepath = $exactfilepath;
  818. }else{
  819. switch ($_FILES['import_file']['error']) {
  820. case UPLOAD_ERR_OK:
  821. break;
  822. case UPLOAD_ERR_NO_FILE:
  823. RevSliderFunctions::throwError(__('No file sent.', 'revslider'));
  824. case UPLOAD_ERR_INI_SIZE:
  825. case UPLOAD_ERR_FORM_SIZE:
  826. RevSliderFunctions::throwError(__('Exceeded filesize limit.', 'revslider'));
  827. default:
  828. break;
  829. }
  830. $filepath = $_FILES["import_file"]["tmp_name"];
  831. }
  832. if(file_exists($filepath) == false)
  833. RevSliderFunctions::throwError(__('Import file not found!!!', 'revslider'));
  834. $importZip = false;
  835. WP_Filesystem();
  836. global $wp_filesystem;
  837. $unzipfile = unzip_file( $filepath, $d_path);
  838. if( is_wp_error($unzipfile) ){
  839. define('FS_METHOD', 'direct'); //lets try direct.
  840. WP_Filesystem(); //WP_Filesystem() needs to be called again since now we use direct !
  841. //@chmod($filepath, 0775);
  842. $unzipfile = unzip_file( $filepath, $d_path);
  843. if( is_wp_error($unzipfile) ){
  844. $d_path = RS_PLUGIN_PATH.'rstemp/';
  845. $rem_path = $d_path;
  846. $unzipfile = unzip_file( $filepath, $d_path);
  847. if( is_wp_error($unzipfile) ){
  848. $f = basename($filepath);
  849. $d_path = str_replace($f, '', $filepath);
  850. $unzipfile = unzip_file( $filepath, $d_path);
  851. }
  852. }
  853. }
  854. if( !is_wp_error($unzipfile) ){
  855. $importZip = true; //raus damit..
  856. //read all files needed
  857. $content = ( $wp_filesystem->exists( $d_path.'slider_export.txt' ) ) ? $wp_filesystem->get_contents( $d_path.'slider_export.txt' ) : '';
  858. if($content == ''){
  859. RevSliderFunctions::throwError(__('slider_export.txt does not exist!', 'revslider'));
  860. }
  861. $animations = ( $wp_filesystem->exists( $d_path.'custom_animations.txt' ) ) ? $wp_filesystem->get_contents( $d_path.'custom_animations.txt' ) : '';
  862. $dynamic = ( $wp_filesystem->exists( $d_path.'dynamic-captions.css' ) ) ? $wp_filesystem->get_contents( $d_path.'dynamic-captions.css' ) : '';
  863. //$static = ( $wp_filesystem->exists( $d_path.'static-captions.css' ) ) ? $wp_filesystem->get_contents( $d_path.'static-captions.css' ) : '';
  864. $navigations = ( $wp_filesystem->exists( $d_path.'navigation.txt' ) ) ? $wp_filesystem->get_contents( $d_path.'navigation.txt' ) : '';
  865. $uid_check = ( $wp_filesystem->exists( $d_path.'info.cfg' ) ) ? $wp_filesystem->get_contents( $d_path.'info.cfg' ) : '';
  866. $version_check = ( $wp_filesystem->exists( $d_path.'version.cfg' ) ) ? $wp_filesystem->get_contents( $d_path.'version.cfg' ) : '';
  867. if($is_template !== false){
  868. if($uid_check != $is_template){
  869. return(array("success"=>false,"error"=>__('Please select the correct zip file, checksum failed!', 'revslider')));
  870. }
  871. }else{ //someone imported a template base Slider, check if it is existing in Base Sliders, if yes, check if it was imported
  872. if($uid_check !== ''){
  873. $tmpl = new RevSliderTemplate();
  874. $tmpl_slider = $tmpl->getThemePunchTemplateSliders();
  875. foreach($tmpl_slider as $tp_slider){
  876. if(!isset($tp_slider['installed'])) continue;
  877. if($tp_slider['uid'] == $uid_check){
  878. $is_template = $uid_check;
  879. break;
  880. }
  881. }
  882. }
  883. }
  884. $db = new RevSliderDB();
  885. //update/insert custom animations
  886. $animations = @unserialize($animations);
  887. if(!empty($animations)){
  888. foreach($animations as $key => $animation){ //$animation['id'], $animation['handle'], $animation['params']
  889. $exist = $db->fetch(RevSliderGlobals::$table_layer_anims, $db->prepare("handle = %s", array($animation['handle'])));
  890. if(!empty($exist)){ //update the animation, get the ID
  891. if($updateAnim == "true"){ //overwrite animation if exists
  892. $arrUpdate = array();
  893. $arrUpdate['params'] = stripslashes(json_encode(str_replace("'", '"', $animation['params'])));
  894. $db->update(RevSliderGlobals::$table_layer_anims, $arrUpdate, array('handle' => $animation['handle']));
  895. $anim_id = $exist['0']['id'];
  896. }else{ //insert with new handle
  897. $arrInsert = array();
  898. $arrInsert["handle"] = 'copy_'.$animation['handle'];
  899. $arrInsert["params"] = stripslashes(json_encode(str_replace("'", '"', $animation['params'])));
  900. $anim_id = $db->insert(RevSliderGlobals::$table_layer_anims, $arrInsert);
  901. }
  902. }else{ //insert the animation, get the ID
  903. $arrInsert = array();
  904. $arrInsert["handle"] = $animation['handle'];
  905. $arrInsert["params"] = stripslashes(json_encode(str_replace("'", '"', $animation['params'])));
  906. $anim_id = $db->insert(RevSliderGlobals::$table_layer_anims, $arrInsert);
  907. }
  908. //and set the current customin-oldID and customout-oldID in slider params to new ID from $id
  909. $content = str_replace(array('customin-'.$animation['id'].'"', 'customout-'.$animation['id'].'"'), array('customin-'.$anim_id.'"', 'customout-'.$anim_id.'"'), $content);
  910. }
  911. //dmp(__("animations imported!",'revslider'));
  912. }
  913. //overwrite/append static-captions.css
  914. /*if(!empty($static)){
  915. if($updateStatic == "true"){ //overwrite file
  916. RevSliderOperations::updateStaticCss($static);
  917. }elseif($updateStatic == 'none'){
  918. //do nothing
  919. }else{//append
  920. $static_cur = RevSliderOperations::getStaticCss();
  921. $static = $static_cur."\n".$static;
  922. RevSliderOperations::updateStaticCss($static);
  923. }
  924. }*/
  925. //overwrite/create dynamic-captions.css
  926. //parse css to classes
  927. $dynamicCss = RevSliderCssParser::parseCssToArray($dynamic);
  928. if(is_array($dynamicCss) && $dynamicCss !== false && count($dynamicCss) > 0){
  929. foreach($dynamicCss as $class => $styles){
  930. //check if static style or dynamic style
  931. $class = trim($class);
  932. if(strpos($class, ',') !== false && strpos($class, '.tp-caption') !== false){ //we have something like .tp-caption.redclass, .redclass
  933. $class_t = explode(',', $class);
  934. foreach($class_t as $k => $cl){
  935. if(strpos($cl, '.tp-caption') !== false) $class = $cl;
  936. }
  937. }
  938. if((strpos($class, ':hover') === false && strpos($class, ':') !== false) || //before, after
  939. strpos($class," ") !== false || // .tp-caption.imageclass img or .tp-caption .imageclass or .tp-caption.imageclass .img
  940. strpos($class,".tp-caption") === false || // everything that is not tp-caption
  941. (strpos($class,".") === false || strpos($class,"#") !== false) || // no class -> #ID or img
  942. strpos($class,">") !== false){ //.tp-caption>.imageclass or .tp-caption.imageclass>img or .tp-caption.imageclass .img
  943. continue;
  944. }
  945. //is a dynamic style
  946. if(strpos($class, ':hover') !== false){
  947. $class = trim(str_replace(':hover', '', $class));
  948. $arrInsert = array();
  949. $arrInsert["hover"] = json_encode($styles);
  950. $arrInsert["settings"] = json_encode(array('hover' => 'true'));
  951. }else{
  952. $arrInsert = array();
  953. $arrInsert["params"] = json_encode($styles);
  954. $arrInsert["settings"] = '';
  955. }
  956. //check if class exists
  957. $result = $db->fetch(RevSliderGlobals::$table_css, $db->prepare("handle = %s", array($class)));
  958. if(!empty($result)){ //update
  959. $db->update(RevSliderGlobals::$table_css, $arrInsert, array('handle' => $class));
  960. }else{ //insert
  961. $arrInsert["handle"] = $class;
  962. $db->insert(RevSliderGlobals::$table_css, $arrInsert);
  963. }
  964. }
  965. //dmp(__("dynamic styles imported!",'revslider'));
  966. }
  967. //update/insert custom animations
  968. $navigations = @unserialize($navigations);
  969. if(!empty($navigations)){
  970. foreach($navigations as $key => $navigation){
  971. $exist = $db->fetch(RevSliderGlobals::$table_navigation, $db->prepare("handle = %s", array($navigation['handle'])));
  972. unset($navigation['id']);
  973. $rh = $navigation["handle"];
  974. if(!empty($exist)){ //create new navigation, get the ID
  975. if($updateNavigation == "true"){ //overwrite navigation if exists
  976. unset($navigation['handle']);
  977. $db->update(RevSliderGlobals::$table_navigation, $navigation, array('handle' => $rh));
  978. }else{
  979. //insert with new handle
  980. $navigation["handle"] = $navigation['handle'].'-'.date('is');
  981. $navigation["name"] = $navigation['name'].'-'.date('is');
  982. $content = str_replace($rh.'"', $navigation["handle"].'"', $content);
  983. $navigation["css"] = str_replace('.'.$rh, '.'.$navigation["handle"], $navigation["css"]); //change css class to the correct new class
  984. $navi_id = $db->insert(RevSliderGlobals::$table_navigation, $navigation);
  985. }
  986. }else{
  987. $navi_id = $db->insert(RevSliderGlobals::$table_navigation, $navigation);
  988. }
  989. }
  990. //dmp(__("navigations imported!",'revslider'));
  991. }
  992. }else{
  993. $message = $unzipfile->get_error_message();
  994. $wp_filesystem->delete($rem_path, true);
  995. return(array("success"=>false,"error"=>$message));
  996. }
  997. //$content = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $content); //clear errors in string //deprecated in newest php version
  998. $content = preg_replace_callback('!s:(\d+):"(.*?)";!', array('RevSliderSlider', 'clear_error_in_string') , $content); //clear errors in string
  999. $arrSlider = @unserialize($content);
  1000. if(empty($arrSlider)){
  1001. $wp_filesystem->delete($rem_path, true);
  1002. RevSliderFunctions::throwError(__('Wrong export slider file format! Please make sure that the uploaded file is either a zip file with a correct slider_export.txt in the root of it or an valid slider_export.txt file.', 'revslider'));
  1003. }
  1004. //update slider params
  1005. $sliderParams = $arrSlider["params"];
  1006. if($sliderExists){
  1007. $sliderParams["title"] = $this->arrParams["title"];
  1008. $sliderParams["alias"] = $this->arrParams["alias"];
  1009. $sliderParams["shortcode"] = $this->arrParams["shortcode"];
  1010. }
  1011. if(isset($sliderParams["background_image"]))
  1012. $sliderParams["background_image"] = RevSliderFunctionsWP::getImageUrlFromPath($sliderParams["background_image"]);
  1013. $import_statics = true;
  1014. if(isset($sliderParams['enable_static_layers'])){
  1015. if($sliderParams['enable_static_layers'] == 'off') $import_statics = false;
  1016. unset($sliderParams['enable_static_layers']);
  1017. }
  1018. $sliderParams['version'] = $version_check;
  1019. $json_params = json_encode($sliderParams);
  1020. //update slider or create new
  1021. if($sliderExists){
  1022. $arrUpdate = array("params"=>$json_params);
  1023. $this->db->update(RevSliderGlobals::$table_sliders,$arrUpdate,array("id"=>$sliderID));
  1024. }else{ //new slider
  1025. $arrInsert = array();
  1026. $arrInsert['params'] = $json_params;
  1027. //check if Slider with title and/or alias exists, if yes change both to stay unique
  1028. $arrInsert['title'] = RevSliderFunctions::getVal($sliderParams, 'title', 'Slider1');
  1029. $arrInsert['alias'] = RevSliderFunctions::getVal($sliderParams, 'alias', 'slider1');
  1030. if($is_template === false){ //we want to stay at the given alias if we are a template
  1031. $talias = $arrInsert['alias'];
  1032. $ti = 1;
  1033. while($this->isAliasExistsInDB($talias)){ //set a new alias and title if its existing in database
  1034. $talias = $arrInsert['alias'] . $ti;
  1035. $ti++;
  1036. }
  1037. if($talias !== $arrInsert['alias']){
  1038. $sliderParams['title'] = $talias;
  1039. $sliderParams['alias'] = $talias;
  1040. $arrInsert['title'] = $talias;
  1041. $arrInsert['alias'] = $talias;
  1042. $json_params = json_encode($sliderParams);
  1043. $arrInsert['params'] = $json_params;
  1044. }
  1045. }
  1046. if($is_template !== false){ //add that we are an template
  1047. $arrInsert['type'] = 'template';
  1048. $sliderParams['uid'] = $is_template;
  1049. $json_params = json_encode($sliderParams);
  1050. $arrInsert['params'] = $json_params;
  1051. }
  1052. $sliderID = $this->db->insert(RevSliderGlobals::$table_sliders,$arrInsert);
  1053. }
  1054. //-------- Slides Handle -----------
  1055. //delete current slides
  1056. if($sliderExists)
  1057. $this->deleteAllSlides();
  1058. //create all slides
  1059. $arrSlides = $arrSlider["slides"];
  1060. $alreadyImported = array();
  1061. $content_url = content_url();
  1062. //wpml compatibility
  1063. $slider_map = array();
  1064. foreach($arrSlides as $sl_key => $slide){
  1065. $params = $slide["params"];
  1066. $layers = $slide["layers"];
  1067. $settings = (isset($slide["settings"])) ? $slide["settings"] : '';
  1068. //convert params images:
  1069. if($importZip === true){ //we have a zip, check if exists
  1070. //remove image_id as it is not needed in import
  1071. if(isset($params['image_id'])) unset($params['image_id']);
  1072. if(isset($params["image"])){
  1073. $params["image"] = RevSliderBase::check_file_in_zip($d_path, $params["image"], $sliderParams["alias"], $alreadyImported);
  1074. $params["image"] = RevSliderFunctionsWP::getImageUrlFromPath($params["image"]);
  1075. }
  1076. if(isset($params["background_image"])){
  1077. $params["background_image"] = RevSliderBase::check_file_in_zip($d_path, $params["background_image"], $sliderParams["alias"], $alreadyImported);
  1078. $params["background_image"] = RevSliderFunctionsWP::getImageUrlFromPath($params["background_image"]);
  1079. }
  1080. if(isset($params["slide_thumb"])){
  1081. $params["slide_thumb"] = RevSliderBase::check_file_in_zip($d_path, $params["slide_thumb"], $sliderParams["alias"], $alreadyImported);
  1082. $params["slide_thumb"] = RevSliderFunctionsWP::getImageUrlFromPath($params["slide_thumb"]);
  1083. }
  1084. if(isset($params["show_alternate_image"])){
  1085. $params["show_alternate_image"] = RevSliderBase::check_file_in_zip($d_path, $params["show_alternate_image"], $sliderParams["alias"], $alreadyImported);
  1086. $params["show_alternate_image"] = RevSliderFunctionsWP::getImageUrlFromPath($params["show_alternate_image"]);
  1087. }
  1088. if(isset($params['background_type']) && $params['background_type'] == 'html5'){
  1089. if(isset($params['slide_bg_html_mpeg']) && $params['slide_bg_html_mpeg'] != ''){
  1090. $params['slide_bg_html_mpeg'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $params["slide_bg_html_mpeg"], $sliderParams["alias"], $alreadyImported, true));
  1091. }
  1092. if(isset($params['slide_bg_html_webm']) && $params['slide_bg_html_webm'] != ''){
  1093. $params['slide_bg_html_webm'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $params["slide_bg_html_webm"], $sliderParams["alias"], $alreadyImported, true));
  1094. }
  1095. if(isset($params['slide_bg_html_ogv']) && $params['slide_bg_html_ogv'] != ''){
  1096. $params['slide_bg_html_ogv'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $params["slide_bg_html_ogv"], $sliderParams["alias"], $alreadyImported, true));
  1097. }
  1098. }
  1099. }
  1100. //convert layers images:
  1101. foreach($layers as $key=>$layer){
  1102. //import if exists in zip folder
  1103. if($importZip === true){ //we have a zip, check if exists
  1104. if(isset($layer["image_url"])){
  1105. $layer["image_url"] = RevSliderBase::check_file_in_zip($d_path, $layer["image_url"], $sliderParams["alias"], $alreadyImported);
  1106. $layer["image_url"] = RevSliderFunctionsWP::getImageUrlFromPath($layer["image_url"]);
  1107. }
  1108. if(isset($layer["bgimage_url"])){
  1109. $layer["bgimage_url"] = RevSliderBase::check_file_in_zip($d_path, $layer["bgimage_url"], $sliderParams["alias"], $alreadyImported);
  1110. $layer["bgimage_url"] = RevSliderFunctionsWP::getImageUrlFromPath($layer["bgimage_url"]);
  1111. }
  1112. if(isset($layer['type']) && ($layer['type'] == 'video' || $layer['type'] == 'audio')){
  1113. $video_data = (isset($layer['video_data'])) ? (array) $layer['video_data'] : array();
  1114. if(!empty($video_data) && isset($video_data['video_type']) && $video_data['video_type'] == 'html5'){
  1115. if(isset($video_data['urlPoster']) && $video_data['urlPoster'] != ''){
  1116. $video_data['urlPoster'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["urlPoster"], $sliderParams["alias"], $alreadyImported));
  1117. }
  1118. if(isset($video_data['urlMp4']) && $video_data['urlMp4'] != ''){
  1119. $video_data['urlMp4'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["urlMp4"], $sliderParams["alias"], $alreadyImported, true));
  1120. }
  1121. if(isset($video_data['urlWebm']) && $video_data['urlWebm'] != ''){
  1122. $video_data['urlWebm'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["urlWebm"], $sliderParams["alias"], $alreadyImported, true));
  1123. }
  1124. if(isset($video_data['urlOgv']) && $video_data['urlOgv'] != ''){
  1125. $video_data['urlOgv'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["urlOgv"], $sliderParams["alias"], $alreadyImported, true));
  1126. }
  1127. }elseif(!empty($video_data) && isset($video_data['video_type']) && $video_data['video_type'] != 'html5'){ //video cover image
  1128. if($video_data['video_type'] == 'audio'){
  1129. if(isset($video_data['urlAudio']) && $video_data['urlAudio'] != ''){
  1130. $video_data['urlAudio'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["urlAudio"], $sliderParams["alias"], $alreadyImported, true));
  1131. }
  1132. }else{
  1133. if(isset($video_data['previewimage']) && $video_data['previewimage'] != ''){
  1134. $video_data['previewimage'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["previewimage"], $sliderParams["alias"], $alreadyImported));
  1135. }
  1136. }
  1137. }
  1138. $layer['video_data'] = $video_data;
  1139. if(isset($layer['video_image_url']) && $layer['video_image_url'] != ''){
  1140. $layer['video_image_url'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $layer["video_image_url"], $sliderParams["alias"], $alreadyImported));
  1141. }
  1142. }
  1143. if(isset($layer['type']) && $layer['type'] == 'svg'){
  1144. if(isset($layer['svg']) && isset($layer['svg']->src)){
  1145. $layer['svg']->src = $content_url.$layer['svg']->src;
  1146. }
  1147. }
  1148. }
  1149. $layer['text'] = stripslashes($layer['text']);
  1150. $layers[$key] = $layer;
  1151. }
  1152. $arrSlides[$sl_key]['layers'] = $layers;
  1153. //create new slide
  1154. $arrCreate = array();
  1155. $arrCreate["slider_id"] = $sliderID;
  1156. $arrCreate["slide_order"] = $slide["slide_order"];
  1157. $d = array('params' => $params, 'sliderParams' => $sliderParams, 'layers' => $layers, 'settings' => $settings, 'alreadyImported' => $alreadyImported);
  1158. $d = apply_filters('revslider_importSliderFromPost_modify_data', $d, 'normal', $d_path);
  1159. $params = $d['params'];
  1160. $sliderParams = $d['sliderParams'];
  1161. $layers = $d['layers'];
  1162. $settings = $d['settings'];
  1163. $alreadyImported = $d['alreadyImported'];
  1164. $my_layers = json_encode($layers);
  1165. if(empty($my_layers))
  1166. $my_layers = stripslashes(json_encode($layers));
  1167. $my_params = json_encode($params);
  1168. if(empty($my_params))
  1169. $my_params = stripslashes(json_encode($params));
  1170. $my_settings = json_encode($settings);
  1171. if(empty($my_settings))
  1172. $my_settings = stripslashes(json_encode($settings));
  1173. $arrCreate["layers"] = $my_layers;
  1174. $arrCreate["params"] = $my_params;
  1175. $arrCreate["settings"] = $my_settings;
  1176. $last_id = $this->db->insert(RevSliderGlobals::$table_slides,$arrCreate);
  1177. if(isset($slide['id'])){
  1178. $slider_map[$slide['id']] = $last_id;
  1179. }
  1180. }
  1181. //change for WPML the parent IDs if necessary
  1182. if(!empty($slider_map)){
  1183. foreach($arrSlides as $sl_key => $slide){
  1184. if(isset($slide['params']['parentid']) && isset($slider_map[$slide['params']['parentid']])){
  1185. $update_id = $slider_map[$slide['id']];
  1186. $parent_id = $slider_map[$slide['params']['parentid']];
  1187. $arrCreate = array();
  1188. $arrCreate["params"] = $slide['params'];
  1189. $arrCreate["params"]['parentid'] = $parent_id;
  1190. $my_params = json_encode($arrCreate["params"]);
  1191. if(empty($my_params))
  1192. $my_params = stripslashes(json_encode($arrCreate["params"]));
  1193. $arrCreate["params"] = $my_params;
  1194. $this->db->update(RevSliderGlobals::$table_slides,$arrCreate,array("id"=>$update_id));
  1195. }
  1196. $did_change = false;
  1197. foreach($slide['layers'] as $key => $value){
  1198. if(isset($value['layer_action'])){
  1199. if(isset($value['layer_action']->jump_to_slide) && !empty($value['layer_action']->jump_to_slide)){
  1200. $value['layer_action']->jump_to_slide = (array)$value['layer_action']->jump_to_slide;
  1201. foreach($value['layer_action']->jump_to_slide as $jtsk => $jtsval){
  1202. if(isset($slider_map[$jtsval])){
  1203. $slide['layers'][$key]['layer_action']->jump_to_slide[$jtsk] = $slider_map[$jtsval];
  1204. $did_change = true;
  1205. }
  1206. }
  1207. }
  1208. }
  1209. $link_slide = RevSliderFunctions::getVal($value, 'link_slide', false);
  1210. if($link_slide != false && $link_slide !== 'nothing'){ //link to slide/scrollunder is set, move it to actions
  1211. if(!isset($slide['layers'][$key]['layer_action'])) $slide['layers'][$key]['layer_action'] = new stdClass();
  1212. switch($link_slide){
  1213. case 'link':
  1214. $link = RevSliderFunctions::getVal($value, 'link');
  1215. $link_open_in = RevSliderFunctions::getVal($value, 'link_open_in');
  1216. $slide['layers'][$key]['layer_action']->action = array('a' => 'link');
  1217. $slide['layers'][$key]['layer_action']->link_type = array('a' => 'a');
  1218. $slide['layers'][$key]['layer_action']->image_link = array('a' => $link);
  1219. $slide['layers'][$key]['layer_action']->link_open_in = array('a' => $link_open_in);
  1220. unset($slide['layers'][$key]['link']);
  1221. unset($slide['layers'][$key]['link_open_in']);
  1222. case 'next':
  1223. $slide['layers'][$key]['layer_action']->action = array('a' => 'next');
  1224. break;
  1225. case 'prev':
  1226. $slide['layers'][$key]['layer_action']->action = array('a' => 'prev');
  1227. break;
  1228. case 'scroll_under':
  1229. $scrollunder_offset = RevSliderFunctions::getVal($value, 'scrollunder_offset');
  1230. $slide['layers'][$key]['layer_action']->action = array('a' => 'scroll_under');
  1231. $slide['layers'][$key]['layer_action']->scrollunder_offset = array('a' => $scrollunder_offset);
  1232. unset($slide['layers'][$key]['scrollunder_offset']);
  1233. break;
  1234. default: //its an ID, so its a slide ID
  1235. $slide['layers'][$key]['layer_action']->action = array('a' => 'jumpto');
  1236. $slide['layers'][$key]['layer_action']->jump_to_slide = array('a' => $slider_map[$link_slide]);
  1237. break;
  1238. }
  1239. $slide['layers'][$key]['layer_action']->tooltip_event = array('a' => 'click');
  1240. unset($slide['layers'][$key]['link_slide']);
  1241. $did_change = true;
  1242. }
  1243. if($did_change === true){
  1244. $arrCreate = array();
  1245. $my_layers = json_encode($slide['layers']);
  1246. if(empty($my_layers))
  1247. $my_layers = stripslashes(json_encode($layers));
  1248. $arrCreate['layers'] = $my_layers;
  1249. $this->db->update(RevSliderGlobals::$table_slides,$arrCreate,array("id"=>$slider_map[$slide['id']]));
  1250. }
  1251. }
  1252. }
  1253. }
  1254. //check if static slide exists and import
  1255. if(isset($arrSlider['static_slides']) && !empty($arrSlider['static_slides']) && $import_statics){
  1256. $static_slide = $arrSlider['static_slides'];
  1257. foreach($static_slide as $slide){
  1258. $params = $slide["params"];
  1259. $layers = $slide["layers"];
  1260. $settings = (isset($slide["settings"])) ? $slide["settings"] : '';
  1261. //remove image_id as it is not needed in import
  1262. if(isset($params['image_id'])) unset($params['image_id']);
  1263. //convert params images:
  1264. if(isset($params["image"])){
  1265. //import if exists in zip folder
  1266. if(strpos($params["image"], 'http') !== false){
  1267. }else{
  1268. if(trim($params["image"]) !== ''){
  1269. if($importZip === true){ //we have a zip, check if exists
  1270. $image = $wp_filesystem->exists( $d_path.'images/'.$params["image"] );
  1271. if(!$image){
  1272. echo $params["image"].__(' not found!<br>', 'revslider');
  1273. }else{
  1274. if(!isset($alreadyImported['images/'.$params["image"]])){
  1275. $importImage = RevSliderFunctionsWP::import_media($d_path.'images/'.$params["image"], $sliderParams["alias"].'/');
  1276. if($importImage !== false){
  1277. $alreadyImported['images/'.$params["image"]] = $importImage['path'];
  1278. $params["image"] = $importImage['path'];
  1279. }
  1280. }else{
  1281. $params["image"] = $alreadyImported['images/'.$params["image"]];
  1282. }
  1283. }
  1284. }
  1285. }
  1286. $params["image"] = RevSliderFunctionsWP::getImageUrlFromPath($params["image"]);
  1287. }
  1288. }
  1289. //convert layers images:
  1290. foreach($layers as $key=>$layer){
  1291. if(isset($layer["image_url"])){
  1292. //import if exists in zip folder
  1293. if(trim($layer["image_url"]) !== ''){
  1294. if(strpos($layer["image_url"], 'http') !== false){
  1295. }else{
  1296. if($importZip === true){ //we have a zip, check if exists
  1297. $image_url = $wp_filesystem->exists( $d_path.'images/'.$layer["image_url"] );
  1298. if(!$image_url){
  1299. echo $layer["image_url"].__(' not found!<br>');
  1300. }else{
  1301. if(!isset($alreadyImported['images/'.$layer["image_url"]])){
  1302. $importImage = RevSliderFunctionsWP::import_media($d_path.'images/'.$layer["image_url"], $sliderParams["alias"].'/');
  1303. if($importImage !== false){
  1304. $alreadyImported['images/'.$layer["image_url"]] = $importImage['path'];
  1305. $layer["image_url"] = $importImage['path'];
  1306. }
  1307. }else{
  1308. $layer["image_url"] = $alreadyImported['images/'.$layer["image_url"]];
  1309. }
  1310. }
  1311. }
  1312. }
  1313. }
  1314. $layer["image_url"] = RevSliderFunctionsWP::getImageUrlFromPath($layer["image_url"]);
  1315. }
  1316. if(isset($layer["bgimage_url"])){
  1317. //import if exists in zip folder
  1318. if(trim($layer["bgimage_url"]) !== ''){
  1319. if(strpos($layer["bgimage_url"], 'http') !== false){
  1320. }else{
  1321. if($importZip === true){ //we have a zip, check if exists
  1322. $bgimage_url = $wp_filesystem->exists( $d_path.'images/'.$layer["bgimage_url"] );
  1323. if(!$bgimage_url){
  1324. echo $layer["bgimage_url"].__(' not found!<br>');
  1325. }else{
  1326. if(!isset($alreadyImported['images/'.$layer["bgimage_url"]])){
  1327. $importImage = RevSliderFunctionsWP::import_media($d_path.'images/'.$layer["bgimage_url"], $sliderParams["alias"].'/');
  1328. if($importImage !== false){
  1329. $alreadyImported['images/'.$layer["bgimage_url"]] = $importImage['path'];
  1330. $layer["bgimage_url"] = $importImage['path'];
  1331. }
  1332. }else{
  1333. $layer["bgimage_url"] = $alreadyImported['images/'.$layer["bgimage_url"]];
  1334. }
  1335. }
  1336. }
  1337. }
  1338. }
  1339. $layer["bgimage_url"] = RevSliderFunctionsWP::getImageUrlFromPath($layer["bgimage_url"]);
  1340. }
  1341. $layer['text'] = stripslashes($layer['text']);
  1342. if(isset($layer['type']) && ($layer['type'] == 'video' || $layer['type'] == 'audio')){
  1343. $video_data = (isset($layer['video_data'])) ? (array) $layer['video_data'] : array();
  1344. if(!empty($video_data) && isset($video_data['video_type']) && $video_data['video_type'] == 'html5'){
  1345. if(isset($video_data['urlPoster']) && $video_data['urlPoster'] != ''){
  1346. $video_data['urlPoster'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["urlPoster"], $sliderParams["alias"], $alreadyImported));
  1347. }
  1348. if(isset($video_data['urlMp4']) && $video_data['urlMp4'] != ''){
  1349. $video_data['urlMp4'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["urlMp4"], $sliderParams["alias"], $alreadyImported, true));
  1350. }
  1351. if(isset($video_data['urlWebm']) && $video_data['urlWebm'] != ''){
  1352. $video_data['urlWebm'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["urlWebm"], $sliderParams["alias"], $alreadyImported, true));
  1353. }
  1354. if(isset($video_data['urlOgv']) && $video_data['urlOgv'] != ''){
  1355. $video_data['urlOgv'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["urlOgv"], $sliderParams["alias"], $alreadyImported, true));
  1356. }
  1357. }elseif(!empty($video_data) && isset($video_data['video_type']) && $video_data['video_type'] != 'html5'){ //video cover image
  1358. if($video_data['video_type'] == 'audio'){
  1359. if(isset($video_data['urlAudio']) && $video_data['urlAudio'] != ''){
  1360. $video_data['urlAudio'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["urlAudio"], $sliderParams["alias"], $alreadyImported, true));
  1361. }
  1362. }else{
  1363. if(isset($video_data['previewimage']) && $video_data['previewimage'] != ''){
  1364. $video_data['previewimage'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $video_data["previewimage"], $sliderParams["alias"], $alreadyImported));
  1365. }
  1366. }
  1367. }
  1368. $layer['video_data'] = $video_data;
  1369. if(isset($layer['video_image_url']) && $layer['video_image_url'] != ''){
  1370. $layer['video_image_url'] = RevSliderFunctionsWP::getImageUrlFromPath(RevSliderBase::check_file_in_zip($d_path, $layer["video_image_url"], $sliderParams["alias"], $alreadyImported));
  1371. }
  1372. }
  1373. if(isset($layer['type']) && $layer['type'] == 'svg'){
  1374. if(isset($layer['svg']) && isset($layer['svg']->src)){
  1375. $layer['svg']->src = $content_url.$layer['svg']->src;
  1376. }
  1377. }
  1378. if(isset($layer['layer_action'])){
  1379. if(isset($layer['layer_action']->jump_to_slide) && !empty($layer['layer_action']->jump_to_slide)){
  1380. foreach($layer['layer_action']->jump_to_slide as $jtsk => $jtsval){
  1381. if(isset($slider_map[$jtsval])){
  1382. $layer['layer_action']->jump_to_slide[$jtsk] = $slider_map[$jtsval];
  1383. }
  1384. }
  1385. }
  1386. }
  1387. $link_slide = RevSliderFunctions::getVal($layer, 'link_slide', false);
  1388. if($link_slide != false && $link_slide !== 'nothing'){ //link to slide/scrollunder is set, move it to actions
  1389. if(!isset($layer['layer_action'])) $layer['layer_action'] = new stdClass();
  1390. switch($link_slide){
  1391. case 'link':
  1392. $link = RevSliderFunctions::getVal($layer, 'link');
  1393. $link_open_in = RevSliderFunctions::getVal($layer, 'link_open_in');
  1394. $layer['layer_action']->action = array('a' => 'link');
  1395. $layer['layer_action']->link_type = array('a' => 'a');
  1396. $layer['layer_action']->image_link = array('a' => $link);
  1397. $layer['layer_action']->link_open_in = array('a' => $link_open_in);
  1398. unset($layer['link']);
  1399. unset($layer['link_open_in']);
  1400. case 'next':
  1401. $layer['layer_action']->action = array('a' => 'next');
  1402. break;
  1403. case 'prev':
  1404. $layer['layer_action']->action = array('a' => 'prev');
  1405. break;
  1406. case 'scroll_under':
  1407. $scrollunder_offset = RevSliderFunctions::getVal($value, 'scrollunder_offset');
  1408. $layer['layer_action']->action = array('a' => 'scroll_under');
  1409. $layer['layer_action']->scrollunder_offset = array('a' => $scrollunder_offset);
  1410. unset($layer['scrollunder_offset']);
  1411. break;
  1412. default: //its an ID, so its a slide ID
  1413. $layer['layer_action']->action = array('a' => 'jumpto');
  1414. $layer['layer_action']->jump_to_slide = array('a' => $slider_map[$link_slide]);
  1415. break;
  1416. }
  1417. $layer['layer_action']->tooltip_event = array('a' => 'click');
  1418. unset($layer['link_slide']);
  1419. $did_change = true;
  1420. }
  1421. $layers[$key] = $layer;
  1422. }
  1423. $d = array('params' => $params, 'layers' => $layers, 'settings' => $settings);
  1424. $d = apply_filters('revslider_importSliderFromPost_modify_data', $d, 'static', $d_path);
  1425. $params = $d['params'];
  1426. $layers = $d['layers'];
  1427. $settings = $d['settings'];
  1428. //create new slide
  1429. $arrCreate = array();
  1430. $arrCreate["slider_id"] = $sliderID;
  1431. $my_layers = json_encode($layers);
  1432. if(empty($my_layers))
  1433. $my_layers = stripslashes(json_encode($layers));
  1434. $my_params = json_encode($params);
  1435. if(empty($my_params))
  1436. $my_params = stripslashes(json_encode($params));
  1437. $my_settings = json_encode($settings);
  1438. if(empty($my_settings))
  1439. $my_settings = stripslashes(json_encode($settings));
  1440. $arrCreate["layers"] = $my_layers;
  1441. $arrCreate["params"] = $my_params;
  1442. $arrCreate["settings"] = $my_settings;
  1443. if($sliderExists){
  1444. unset($arrCreate["slider_id"]);
  1445. $this->db->update(RevSliderGlobals::$table_static_slides,$arrCreate,array("slider_id"=>$sliderID));
  1446. }else{
  1447. $this->db->insert(RevSliderGlobals::$table_static_slides,$arrCreate);
  1448. }
  1449. }
  1450. }
  1451. $c_slider = new RevSliderSlider();
  1452. $c_slider->initByID($sliderID);
  1453. //check to convert styles to latest versions
  1454. RevSliderPluginUpdate::update_css_styles(); //set to version 5
  1455. RevSliderPluginUpdate::add_animation_settings_to_layer($c_slider); //set to version 5
  1456. RevSliderPluginUpdate::add_style_settings_to_layer($c_slider); //set to version 5
  1457. RevSliderPluginUpdate::change_settings_on_layers($c_slider); //set to version 5
  1458. RevSliderPluginUpdate::add_general_settings($c_slider); //set to version 5
  1459. RevSliderPluginUpdate::change_general_settings_5_0_7($c_slider); //set to version 5.0.7
  1460. RevSliderPluginUpdate::change_layers_svg_5_2_5_5($c_slider); //set to version 5.2.5.5
  1461. $cus_js = $c_slider->getParam('custom_javascript', '');
  1462. if(strpos($cus_js, 'revapi') !== false){
  1463. if(preg_match_all('/revapi[0-9]*/', $cus_js, $results)){
  1464. if(isset($results[0]) && !empty($results[0])){
  1465. foreach($results[0] as $replace){
  1466. $cus_js = str_replace($replace, 'revapi'.$sliderID, $cus_js);
  1467. }
  1468. }
  1469. $c_slider->updateParam(array('custom_javascript' => $cus_js));
  1470. }
  1471. }
  1472. $real_slider_id = $sliderID;
  1473. if($is_template !== false){ //duplicate the slider now, as we just imported the "template"
  1474. if($single_slide !== false){ //add now one Slide to the current Slider
  1475. $mslider = new RevSlider();
  1476. //change slide_id to correct, as it currently is just a number beginning from 0 as we did not have a correct slide ID yet.
  1477. $i = 0;
  1478. $changed = false;
  1479. foreach($slider_map as $value){
  1480. if($i == $single_slide['slide_id']){
  1481. $single_slide['slide_id'] = $value;
  1482. $changed = true;
  1483. break;
  1484. }
  1485. $i++;
  1486. }
  1487. if($changed){
  1488. $return = $mslider->copySlideToSlider($single_slide);
  1489. }else{
  1490. return(array("success"=>false,"error"=>__('could not find correct Slide to copy, please try again.', 'revslider'),"sliderID"=>$sliderID));
  1491. }
  1492. }else{
  1493. $mslider = new RevSlider();
  1494. $title = RevSliderFunctions::getVal($sliderParams, 'title', 'slider1');
  1495. $talias = $title;
  1496. $ti = 1;
  1497. while($this->isAliasExistsInDB($talias)){ //set a new alias and title if its existing in database
  1498. $talias = $title . $ti;
  1499. $ti++;
  1500. }
  1501. $real_slider_id = $mslider->duplicateSliderFromData(array('sliderid' => $sliderID, 'title' => $talias));
  1502. }
  1503. }
  1504. $wp_filesystem->delete($rem_path, true);
  1505. }catch(Exception $e){
  1506. $errorMessage = $e->getMessage();
  1507. if(isset($rem_path)){
  1508. $wp_filesystem->delete($rem_path, true);
  1509. }
  1510. return(array("success"=>false,"error"=>$errorMessage,"sliderID"=>$sliderID));
  1511. }
  1512. do_action('revslider_slider_imported', $real_slider_id);
  1513. return(array("success"=>true,"sliderID"=>$real_slider_id));
  1514. }
  1515. /**
  1516. *
  1517. * update slider from options
  1518. */
  1519. public function updateSliderFromOptions($options){
  1520. $sliderID = RevSliderFunctions::getVal($options, "sliderid");
  1521. RevSliderFunctions::validateNotEmpty($sliderID,"Slider ID");
  1522. $this->createUpdateSliderFromOptions($options,$sliderID);
  1523. }
  1524. /**
  1525. *
  1526. * update some params in the slider
  1527. */
  1528. public function updateParam($arrUpdate){
  1529. $this->validateInited();
  1530. $this->arrParams = array_merge($this->arrParams,$arrUpdate);
  1531. $jsonParams = json_encode($this->arrParams);
  1532. $arrUpdateDB = array();
  1533. $arrUpdateDB["params"] = $jsonParams;
  1534. $this->db->update(RevSliderGlobals::$table_sliders,$arrUpdateDB,array("id"=>$this->id));
  1535. }
  1536. /**
  1537. * update some settings in the slider
  1538. */
  1539. public function updateSetting($arrUpdate){
  1540. $this->validateInited();
  1541. $this->settings = array_merge($this->settings,$arrUpdate);
  1542. $jsonParams = json_encode($this->settings);
  1543. $arrUpdateDB = array();
  1544. $arrUpdateDB["settings"] = $jsonParams;
  1545. $this->db->update(RevSliderGlobals::$table_sliders,$arrUpdateDB,array("id"=>$this->id));
  1546. }
  1547. /**
  1548. *
  1549. * delete slider from input data
  1550. */
  1551. public function deleteSliderFromData($data){
  1552. $sliderID = RevSliderFunctions::getVal($data, "sliderid");
  1553. RevSliderFunctions::validateNotEmpty($sliderID,"Slider ID");
  1554. $this->initByID($sliderID);
  1555. $this->deleteSlider();
  1556. return true;
  1557. }
  1558. /**
  1559. *
  1560. * delete slider from input data
  1561. */
  1562. public function duplicateSliderFromData($data){
  1563. $sliderID = RevSliderFunctions::getVal($data, "sliderid");
  1564. RevSliderFunctions::validateNotEmpty($sliderID,"Slider ID");
  1565. $this->initByID($sliderID);
  1566. $slider_id = $this->duplicateSlider(RevSliderFunctions::getVal($data, "title"));
  1567. return $slider_id;
  1568. }
  1569. /**
  1570. * delete slider from input data
  1571. * @since: 5.2.5
  1572. */
  1573. public function duplicateSliderPackageFromData($data){
  1574. $tmpl = new RevSliderTemplate();
  1575. $slider_uid = RevSliderFunctions::getVal($data, "slideruid");
  1576. $uids = $tmpl->get_package_uids($slider_uid);
  1577. foreach($uids as $sid => $uid){
  1578. if($sid < 0){ //one or more still needs to be downloaded...
  1579. return __('Please install Package first to use this feature', 'revslider');
  1580. }
  1581. }
  1582. foreach($uids as $sliderID => $uid){
  1583. $slider = new RevSlider();
  1584. $slider->initByID($sliderID);
  1585. $slider_id = $slider->duplicateSlider(RevSliderFunctions::getVal($data, "title"), true);
  1586. }
  1587. return true;
  1588. }
  1589. /**
  1590. *
  1591. * duplicate slide from input data
  1592. */
  1593. public function duplicateSlideFromData($data){
  1594. //init the slider
  1595. $sliderID = RevSliderFunctions::getVal($data, "sliderID");
  1596. RevSliderFunctions::validateNotEmpty($sliderID,"Slider ID");
  1597. $this->initByID($sliderID);
  1598. //get the slide id
  1599. $slideID = RevSliderFunctions::getVal($data, "slideID");
  1600. RevSliderFunctions::validateNotEmpty($slideID,"Slide ID");
  1601. $newSlideID = $this->duplicateSlide($slideID);
  1602. $this->duplicateChildren($slideID, $newSlideID);
  1603. return(array($sliderID, $newSlideID));
  1604. }
  1605. /**
  1606. * duplicate slide children
  1607. * @param $slideID
  1608. */
  1609. private function duplicateChildren($slideID,$newSlideID){
  1610. $arrChildren = $this->getArrSlideChildren($slideID);
  1611. foreach($arrChildren as $childSlide){
  1612. $childSlideID = $childSlide->getID();
  1613. //duplicate
  1614. $duplicatedSlideID = $this->duplicateSlide($childSlideID);
  1615. //update parent id
  1616. $duplicatedSlide = new RevSlide();
  1617. $duplicatedSlide->initByID($duplicatedSlideID);
  1618. $duplicatedSlide->updateParentSlideID($newSlideID);
  1619. }
  1620. }
  1621. /**
  1622. * copy slide from one Slider to the given Slider ID
  1623. * @since: 5.0
  1624. */
  1625. public function copySlideToSlider($data){
  1626. global $wpdb;
  1627. $sliderID = intval(RevSliderFunctions::getVal($data, "slider_id"));
  1628. RevSliderFunctions::validateNotEmpty($sliderID,"Slider ID");
  1629. $slideID = intval(RevSliderFunctions::getVal($data, "slide_id"));
  1630. RevSliderFunctions::validateNotEmpty($slideID,"Slide ID");
  1631. $tableSliders = $wpdb->prefix . RevSliderGlobals::TABLE_SLIDERS_NAME;
  1632. $tableSlides = $wpdb->prefix . RevSliderGlobals::TABLE_SLIDES_NAME;
  1633. //check if ID exists
  1634. $add_to_slider = $wpdb->get_row($wpdb->prepare("SELECT * FROM $tableSliders WHERE id = %s", $sliderID), ARRAY_A);
  1635. if(empty($add_to_slider))
  1636. return __('Slide could not be duplicated', 'revslider');
  1637. //get last slide in slider for the order
  1638. $slide_order = $wpdb->get_row($wpdb->prepare("SELECT * FROM $tableSlides WHERE slider_id = %s ORDER BY slide_order DESC", $sliderID), ARRAY_A);
  1639. $order = (empty($slide_order)) ? 1 : $slide_order['slide_order'] + 1;
  1640. $slide_to_copy = $wpdb->get_row($wpdb->prepare("SELECT * FROM $tableSlides WHERE id = %s", $slideID), ARRAY_A);
  1641. if(empty($slide_to_copy))
  1642. return __('Slide could not be duplicated', 'revslider');
  1643. unset($slide_to_copy['id']); //remove the ID of Slide, as it will be a new Slide
  1644. $slide_to_copy['slider_id'] = $sliderID; //set the new Slider ID to the Slide
  1645. $slide_to_copy['slide_order'] = $order; //set the next slide order, to set slide to the end
  1646. $response = $wpdb->insert($tableSlides, $slide_to_copy);
  1647. if($response === false) return __('Slide could not be copied', 'revslider');
  1648. return true;
  1649. }
  1650. /**
  1651. * copy / move slide from data
  1652. */
  1653. public function copyMoveSlideFromData($data){
  1654. $sliderID = RevSliderFunctions::getVal($data, "sliderID");
  1655. RevSliderFunctions::validateNotEmpty($sliderID,"Slider ID");
  1656. $this->initByID($sliderID);
  1657. $targetSliderID = RevSliderFunctions::getVal($data, "targetSliderID");
  1658. RevSliderFunctions::validateNotEmpty($sliderID,"Target Slider ID");
  1659. $this->initByID($sliderID);
  1660. if($targetSliderID == $sliderID)
  1661. RevSliderFunctions::throwError("The target slider can't be equal to the source slider");
  1662. $slideID = RevSliderFunctions::getVal($data, "slideID");
  1663. RevSliderFunctions::validateNotEmpty($slideID,"Slide ID");
  1664. $operation = RevSliderFunctions::getVal($data, "operation");
  1665. $this->copyMoveSlide($slideID,$targetSliderID,$operation);
  1666. return($sliderID);
  1667. }
  1668. /**
  1669. * create a slide from input data
  1670. */
  1671. public function createSlideFromData($data,$returnSlideID = false){
  1672. $sliderID = RevSliderFunctions::getVal($data, "sliderid");
  1673. $obj = RevSliderFunctions::getVal($data, "obj");
  1674. RevSliderFunctions::validateNotEmpty($sliderID,"Slider ID");
  1675. $this->initByID($sliderID);
  1676. if(is_array($obj)){ //multiple
  1677. foreach($obj as $item){
  1678. $slide = new RevSlide();
  1679. $slideID = $slide->createSlide($sliderID, $item);
  1680. }
  1681. return(count($obj));
  1682. }else{ //signle
  1683. $urlImage = $obj;
  1684. $slide = new RevSlide();
  1685. $slideID = $slide->createSlide($sliderID, $urlImage);
  1686. if($returnSlideID == true)
  1687. return($slideID);
  1688. else
  1689. return(1); //num slides -1 slide created
  1690. }
  1691. }
  1692. /**
  1693. * update slides order from data
  1694. */
  1695. public function updateSlidesOrderFromData($data){
  1696. $sliderID = RevSliderFunctions::getVal($data, "sliderID");
  1697. $arrIDs = RevSliderFunctions::getVal($data, "arrIDs");
  1698. RevSliderFunctions::validateNotEmpty($arrIDs,"slides");
  1699. $this->initByID($sliderID);
  1700. $isFromPosts = $this->isSlidesFromPosts();
  1701. foreach($arrIDs as $index=>$slideID){
  1702. $order = $index+1;
  1703. if($isFromPosts){
  1704. RevSliderFunctionsWP::updatePostOrder($slideID, $order);
  1705. }else{
  1706. $arrUpdate = array("slide_order"=>$order);
  1707. $where = array("id"=>$slideID);
  1708. $this->db->update(RevSliderGlobals::$table_slides,$arrUpdate,$where);
  1709. }
  1710. }//end foreach
  1711. //update sortby
  1712. if($isFromPosts){
  1713. $arrUpdate = array();
  1714. $arrUpdate["post_sortby"] = RevSliderFunctionsWP::SORTBY_MENU_ORDER;
  1715. $this->updateParam($arrUpdate);
  1716. }
  1717. }
  1718. /**
  1719. *
  1720. * get the "main" and "settings" arrays, for dealing with the settings.
  1721. */
  1722. public function getSettingsFields(){
  1723. $this->validateInited();
  1724. $arrMain = array();
  1725. $arrMain["title"] = $this->title;
  1726. $arrMain["alias"] = $this->alias;
  1727. $arrRespose = array("main"=>$arrMain, "params"=>$this->arrParams);
  1728. return($arrRespose);
  1729. }
  1730. /**
  1731. * get all used fonts in the current Slider
  1732. * @since: 5.1.0
  1733. */
  1734. public function getUsedFonts($full = false){
  1735. $this->validateInited();
  1736. $gf = array();
  1737. $sl = new RevSliderSlide();
  1738. $mslides = $this->getSlides(true);
  1739. $staticID = $sl->getStaticSlideID($this->getID());
  1740. if($staticID !== false){
  1741. $msl = new RevSliderSlide();
  1742. if(strpos($staticID, 'static_') === false){
  1743. $staticID = 'static_'.$this->getID();
  1744. }
  1745. $msl->initByID($staticID);
  1746. if($msl->getID() !== ''){
  1747. $mslides = array_merge($mslides, array($msl));
  1748. }
  1749. }
  1750. if(!empty($mslides)){
  1751. foreach($mslides as $ms){
  1752. $mf = $ms->getUsedFonts($full);
  1753. if(!empty($mf)){
  1754. foreach($mf as $mfk => $mfv){
  1755. if(!isset($gf[$mfk])){
  1756. $gf[$mfk] = $mfv;
  1757. }else{
  1758. foreach($mfv['variants'] as $mfvk => $mfvv){
  1759. $gf[$mfk]['variants'][$mfvk] = true;
  1760. }
  1761. }
  1762. $gf[$mfk]['slide'][] = array('id' => $ms->getID(), 'title' => $ms->getTitle());
  1763. }
  1764. }
  1765. }
  1766. }
  1767. return apply_filters('revslider_getUsedFonts', $gf);
  1768. }
  1769. /**
  1770. * get slides from gallery
  1771. * force from gallery - get the slide from the gallery only
  1772. */
  1773. public function getSlides($publishedOnly = false){
  1774. $arrSlides = $this->getSlidesFromGallery($publishedOnly);
  1775. return($arrSlides);
  1776. }
  1777. /**
  1778. * get slides from gallery
  1779. * get the slides raw, do not initialize them
  1780. * @since: 5.3.0
  1781. */
  1782. public function getSlidesCountRaw($publishedOnly = false){
  1783. $arrSlides = $this->getSlidesCountFromGallery($publishedOnly);
  1784. return($arrSlides);
  1785. }
  1786. /**
  1787. * get first slide from gallery
  1788. * @since: 5.3.0
  1789. */
  1790. public function getFirstSlide($publishedOnly = false){
  1791. $arrSlides = $this->getSlidesFromGallery($publishedOnly, false, true);
  1792. return($arrSlides);
  1793. }
  1794. /**
  1795. * get slides from gallery respecting wpml
  1796. * force from gallery - get the slide from the gallery only
  1797. */
  1798. public function getSlidesWPML($publishedOnly = false, $slide){
  1799. $arrSlides = $this->getSlides($publishedOnly);
  1800. $mslide_list = array();
  1801. //check if WPML is active and change the ID of Slide depending on that.
  1802. if(RevSliderWpml::isWpmlExists() && $this->getParam('use_wpml', 'off') == 'on'){
  1803. $lang = $slide->getParam('lang', 'all');
  1804. if(!empty($arrSlides)){
  1805. foreach($arrSlides as $at_slide){
  1806. $langs = $at_slide->getArrChildrenLangs();
  1807. if(!empty($langs) && is_array($langs)){
  1808. foreach($langs as $l){
  1809. if($l['lang'] == $lang){
  1810. $mslide_list[] = array('id' => $l['slideid'], 'title' => $at_slide->getParam('title', 'Slide'));
  1811. }
  1812. }
  1813. }
  1814. }
  1815. }
  1816. //get cur lang of slide
  1817. }else{
  1818. if(!empty($arrSlides)){
  1819. foreach($arrSlides as $at_slide){
  1820. $mslID = $at_slide->getID();
  1821. $mslide_list[] = array('id' => $mslID, 'title' => $at_slide->getParam('title', 'Slide'));
  1822. }
  1823. }
  1824. }
  1825. return($mslide_list);
  1826. }
  1827. /**
  1828. * get slides from posts
  1829. */
  1830. public function getSlidesFromPosts($publishedOnly = false, $gal_ids = array()){
  1831. $slideTemplates = $this->getSlidesFromGallery($publishedOnly);
  1832. $slideTemplates = RevSliderFunctions::assocToArray($slideTemplates);
  1833. if(count($slideTemplates) == 0) return array();
  1834. $sourceType = $this->getParam("source_type","gallery");
  1835. if(!empty($gal_ids)) $sourceType = 'specific_posts'; //change to specific posts, give the gal_ids to the list
  1836. switch($sourceType){
  1837. case "posts":
  1838. //check where to get posts from
  1839. $sourceType = $this->getParam("fetch_type","cat_tag");
  1840. switch($sourceType){
  1841. case 'cat_tag':
  1842. default:
  1843. $arrPosts = $this->getPostsFromCategories($publishedOnly);
  1844. break;
  1845. case 'related':
  1846. $arrPosts = $this->getPostsFromRelated();
  1847. break;
  1848. case 'popular':
  1849. $arrPosts = $this->getPostsFromPopular();
  1850. break;
  1851. case 'recent':
  1852. $arrPosts = $this->getPostsFromRecent();
  1853. break;
  1854. case 'next_prev':
  1855. $arrPosts = $this->getPostsNextPrevious();
  1856. break;
  1857. }
  1858. break;
  1859. case "current_post":
  1860. global $post;
  1861. $arrPosts = $this->getPostsFromSpecificList(array("",$post->ID));
  1862. break;
  1863. case "specific_posts":
  1864. $arrPosts = $this->getPostsFromSpecificList($gal_ids);
  1865. break;
  1866. case 'woocommerce':
  1867. $arrPosts = $this->getProductsFromCategories($publishedOnly);
  1868. break;
  1869. default:
  1870. RevSliderFunctions::throwError("getSlidesFromPosts error: This source type must be from posts.");
  1871. break;
  1872. }
  1873. $arrSlides = array();
  1874. $templateKey = 0;
  1875. $numTemplates = count($slideTemplates);
  1876. foreach($arrPosts as $postData){
  1877. $slideTemplate = clone $slideTemplates[$templateKey];
  1878. //advance the templates
  1879. $templateKey++;
  1880. if($templateKey == $numTemplates){
  1881. $templateKey = 0;
  1882. $slideTemplates = $this->getSlidesFromGallery($publishedOnly); //reset as clone did not work properly
  1883. $slideTemplates = RevSliderFunctions::assocToArray($slideTemplates);
  1884. }
  1885. $slide = new RevSlide();
  1886. $slide->initByPostData($postData, $slideTemplate, $this->id);
  1887. $arrSlides[] = $slide;
  1888. }
  1889. $this->arrSlides = $arrSlides;
  1890. return($arrSlides);
  1891. }
  1892. /**
  1893. * get slides from posts
  1894. */
  1895. public function getSlidesFromStream($publishedOnly = false){
  1896. $slideTemplates = $this->getSlidesFromGallery($publishedOnly);
  1897. $slideTemplates = RevSliderFunctions::assocToArray($slideTemplates);
  1898. if(count($slideTemplates) == 0) return array();
  1899. $arrPosts = array();
  1900. $max_allowed = 999999;
  1901. $sourceType = $this->getParam("source_type","gallery");
  1902. $additions = array('fb_type' => 'album');
  1903. switch($sourceType){
  1904. case "facebook":
  1905. $facebook = new RevSliderFacebook($this->getParam('facebook-transient','1200'));
  1906. if($this->getParam('facebook-type-source','timeline') == "album"){
  1907. $arrPosts = $facebook->get_photo_set_photos($this->getParam('facebook-album'),$this->getParam('facebook-count',10),$this->getParam('facebook-app-id'),$this->getParam('facebook-app-secret'));
  1908. }
  1909. else{
  1910. $user_id = $facebook->get_user_from_url($this->getParam('facebook-page-url'));
  1911. $arrPosts = $facebook->get_photo_feed($user_id,$this->getParam('facebook-app-id'),$this->getParam('facebook-app-secret'),$this->getParam('facebook-count',10));
  1912. $additions['fb_type'] = $this->getParam('facebook-type-source','timeline');
  1913. $additions['fb_user_id'] = $user_id;
  1914. }
  1915. if(!empty($arrPosts)){
  1916. foreach($arrPosts as $k => $p){
  1917. if(!isset($p->status_type)) continue;
  1918. if(in_array($p->status_type, array("wall_post"))) unset($arrPosts[$k]);
  1919. }
  1920. }
  1921. $max_posts = $this->getParam('facebook-count', '25', self::FORCE_NUMERIC);
  1922. $max_allowed = 25;
  1923. break;
  1924. case "twitter":
  1925. $twitter = new RevSliderTwitter($this->getParam('twitter-consumer-key'),$this->getParam('twitter-consumer-secret'),$this->getParam('twitter-access-token'),$this->getParam('twitter-access-secret'),$this->getParam('twitter-transient','1200'));
  1926. $arrPosts = $twitter->get_public_photos($this->getParam('twitter-user-id'),$this->getParam('twitter-include-retweets'),$this->getParam( 'twitter-exclude-replies'),$this->getParam('twitter-count'),$this->getParam('twitter-image-only'));
  1927. $max_posts = $this->getParam('twitter-count', '500', self::FORCE_NUMERIC);
  1928. $max_allowed = 500;
  1929. $additions['twitter_user'] = $this->getParam('twitter-user-id');
  1930. break;
  1931. case "instagram":
  1932. $instagram = new RevSliderInstagram($this->getParam('instagram-transient','1200'));
  1933. if($this->getParam('instagram-type','user')!="hash"){
  1934. $search_user_id = $this->getParam('instagram-user-id');
  1935. $arrPosts = $instagram->get_public_photos($search_user_id,$this->getParam('instagram-count'));
  1936. }
  1937. else{
  1938. $search_hash_tag = $this->getParam('instagram-hash-tag');
  1939. $arrPosts = $instagram->get_tag_photos($search_hash_tag,$this->getParam('instagram-count'));
  1940. }
  1941. $max_posts = $this->getParam('instagram-count', '33', self::FORCE_NUMERIC);
  1942. $max_allowed = 33;
  1943. break;
  1944. case "flickr":
  1945. $flickr = new RevSliderFlickr($this->getParam('flickr-api-key'),$this->getParam('flickr-transient','1200'));
  1946. switch($this->getParam('flickr-type')){
  1947. case 'publicphotos':
  1948. $user_id = $flickr->get_user_from_url($this->getParam('flickr-user-url'));
  1949. $arrPosts = $flickr->get_public_photos($user_id,$this->getParam('flickr-count'));
  1950. break;
  1951. case 'gallery':
  1952. $gallery_id = $flickr->get_gallery_from_url($this->getParam('flickr-gallery-url'));
  1953. $arrPosts = $flickr->get_gallery_photos($gallery_id,$this->getParam('flickr-count'));
  1954. break;
  1955. case 'group':
  1956. $group_id = $flickr->get_group_from_url($this->getParam('flickr-group-url'));
  1957. $arrPosts = $flickr->get_group_photos($group_id,$this->getParam('flickr-count'));
  1958. break;
  1959. case 'photosets':
  1960. $arrPosts = $flickr->get_photo_set_photos($this->getParam('flickr-photoset'),$this->getParam('flickr-count'));
  1961. break;
  1962. }
  1963. $max_posts = $this->getParam('flickr-count', '99', self::FORCE_NUMERIC);
  1964. break;
  1965. case 'youtube':
  1966. $channel_id = $this->getParam('youtube-channel-id');
  1967. $youtube = new RevSliderYoutube($this->getParam('youtube-api'),$channel_id,$this->getParam('youtube-transient','1200'));
  1968. if($this->getParam('youtube-type-source')=="playlist"){
  1969. $arrPosts = $youtube->show_playlist_videos($this->getParam('youtube-playlist'),$this->getParam('youtube-count'));
  1970. }
  1971. else{
  1972. $arrPosts = $youtube->show_channel_videos($this->getParam('youtube-count'));
  1973. }
  1974. $additions['yt_type'] = $this->getParam('youtube-type-source','channel');
  1975. $max_posts = $this->getParam('youtube-count', '25', self::FORCE_NUMERIC);
  1976. $max_allowed = 50;
  1977. break;
  1978. case 'vimeo':
  1979. $vimeo = new RevSliderVimeo($this->getParam('vimeo-transient','1200'));
  1980. $vimeo_type = $this->getParam('vimeo-type-source');
  1981. switch ($vimeo_type) {
  1982. case 'user':
  1983. $arrPosts = $vimeo->get_vimeo_videos($vimeo_type,$this->getParam('vimeo-username'));
  1984. break;
  1985. case 'channel':
  1986. $arrPosts = $vimeo->get_vimeo_videos($vimeo_type,$this->getParam('vimeo-channelname'));
  1987. break;
  1988. case 'group':
  1989. $arrPosts = $vimeo->get_vimeo_videos($vimeo_type,$this->getParam('vimeo-groupname'));
  1990. break;
  1991. case 'album':
  1992. $arrPosts = $vimeo->get_vimeo_videos($vimeo_type,$this->getParam('vimeo-albumid'));
  1993. break;
  1994. default:
  1995. break;
  1996. }
  1997. $additions['vim_type'] = $this->getParam('vimeo-type-source','user');
  1998. $max_posts = $this->getParam('vimeo-count', '25', self::FORCE_NUMERIC);
  1999. $max_allowed = 60;
  2000. break;
  2001. default:
  2002. RevSliderFunctions::throwError("getSlidesFromStream error: This source type must be from stream.");
  2003. break;
  2004. }
  2005. if($max_posts < 0) $max_posts *= -1;
  2006. $arrPosts = apply_filters('revslider_pre_mod_stream_data', $arrPosts, $sourceType, $this->id);
  2007. while(count($arrPosts) > $max_posts || count($arrPosts) > $max_allowed){
  2008. array_pop($arrPosts);
  2009. }
  2010. $arrPosts = apply_filters('revslider_post_mod_stream_data', $arrPosts, $sourceType, $this->id);
  2011. $arrSlides = array();
  2012. $templateKey = 0;
  2013. $numTemplates = count($slideTemplates);
  2014. if(empty($arrPosts)) RevSliderFunctions::throwError(__('Failed to load Stream', 'revslider'));
  2015. foreach($arrPosts as $postData){
  2016. if(empty($postData)) continue; //ignore empty entries, like from instagram
  2017. $slideTemplate = $slideTemplates[$templateKey];
  2018. //advance the templates
  2019. $templateKey++;
  2020. if($templateKey == $numTemplates)
  2021. $templateKey = 0;
  2022. $slide = new RevSlide();
  2023. $slide->initByStreamData($postData, $slideTemplate, $this->id, $sourceType, $additions);
  2024. $arrSlides[] = $slide;
  2025. }
  2026. $this->arrSlides = $arrSlides;
  2027. return($arrSlides);
  2028. }
  2029. /**
  2030. * get the first slide ID of the current slider
  2031. */
  2032. public function getFirstSlideIdFromGallery(){
  2033. $this->validateInited();
  2034. $arrSlides = array();
  2035. $arrSlideRecords = $this->db->fetch(RevSliderGlobals::$table_slides,$this->db->prepare("slider_id = %s", array($this->id)),"slide_order",'',' LIMIT 0,1');
  2036. foreach ($arrSlideRecords as $record){
  2037. $slide = new RevSlide();
  2038. $slide->initByData($record);
  2039. $slideID = $slide->getID();
  2040. $arrSlides[$slideID] = $slide;
  2041. return $arrSlides;
  2042. }
  2043. return false;
  2044. }
  2045. /**
  2046. * get slides of the current slider
  2047. */
  2048. public function getSlidesFromGallery($publishedOnly = false, $allwpml = false, $first = false){
  2049. //global $rs_slide_template;
  2050. $this->validateInited();
  2051. $arrSlides = array();
  2052. $arrSlideRecords = $this->db->fetch(RevSliderGlobals::$table_slides,$this->db->prepare("slider_id = %s", array($this->id)),"slide_order");
  2053. //add Slides set by postsettings, so slide_template
  2054. /*if(!empty($rs_slide_template)){
  2055. foreach($rs_slide_template as $rs_s_t){
  2056. $rs_s_t_d = $this->db->fetch(RevSliderGlobals::$table_slides,$this->db->prepare("id = %s", array($rs_s_t)),"slide_order");
  2057. foreach($rs_s_t_d as $rs_s_t_d_v){
  2058. $arrSlideRecords[] = $rs_s_t_d_v;
  2059. }
  2060. }
  2061. }*/
  2062. $arrChildren = array();
  2063. foreach ($arrSlideRecords as $record){
  2064. $slide = new RevSlide();
  2065. $slide->initByData($record);
  2066. $slideID = $slide->getID();
  2067. $arrIdsAssoc[$slideID] = true;
  2068. if($publishedOnly == true){
  2069. $state = $slide->getParam("state", "published");
  2070. if($state == "unpublished"){
  2071. continue;
  2072. }
  2073. }
  2074. $parentID = $slide->getParam("parentid","");
  2075. if(!empty($parentID)){
  2076. $lang = $slide->getParam("lang","");
  2077. if(!isset($arrChildren[$parentID]))
  2078. $arrChildren[$parentID] = array();
  2079. $arrChildren[$parentID][] = $slide;
  2080. if(!$allwpml)
  2081. continue; //skip adding to main list
  2082. }
  2083. //init the children array
  2084. $slide->setArrChildren(array());
  2085. $arrSlides[$slideID] = $slide;
  2086. if($first) break; //we only want the first slide!
  2087. }
  2088. //add children array to the parent slides
  2089. foreach($arrChildren as $parentID=>$arr){
  2090. if(!isset($arrSlides[$parentID])){
  2091. continue;
  2092. }
  2093. $arrSlides[$parentID]->setArrChildren($arr);
  2094. }
  2095. $this->arrSlides = $arrSlides;
  2096. return($arrSlides);
  2097. }
  2098. /**
  2099. * get slides of the current slider
  2100. * @since: 5.3.0
  2101. */
  2102. public function getSlidesFromGalleryRaw($publishedOnly = false){
  2103. $this->validateInited();
  2104. $arrSlideRecords = $this->db->fetch(RevSliderGlobals::$table_slides,$this->db->prepare("slider_id = %s", array($this->id)),"slide_order");
  2105. return $arrSlideRecords;
  2106. }
  2107. /**
  2108. * get slides of the current slider
  2109. * @since: 5.3.0
  2110. */
  2111. public function getSlidesCountFromGallery($publishedOnly = false){
  2112. $this->validateInited();
  2113. $sqlSelect = $this->db->prepare("select `id` from ".RevSliderGlobals::$table_slides." where `slider_id` = %s", array($this->id));
  2114. $arrSlideRecords = $this->db->runSqlR($sqlSelect);
  2115. return $arrSlideRecords;
  2116. }
  2117. /**
  2118. *
  2119. * get slide id and slide title from gallery
  2120. */
  2121. public function getArrSlidesFromGalleryShort(){
  2122. $arrSlides = $this->getSlidesFromGallery();
  2123. $arrOutput = array();
  2124. $counter = 0;
  2125. foreach($arrSlides as $slide){
  2126. $slideID = $slide->getID();
  2127. $outputName = 'Slide '.$counter;
  2128. $title = $slide->getParam('title','');
  2129. $counter++;
  2130. if(!empty($title))
  2131. $outputName .= ' - ('.$title.')';
  2132. $arrOutput[$slideID] = $outputName;
  2133. }
  2134. return($arrOutput);
  2135. }
  2136. /**
  2137. *
  2138. * get slides for output
  2139. * one level only without children
  2140. */
  2141. public function getSlidesForOutput($publishedOnly = false, $lang = 'all',$gal_ids = array()){
  2142. $isSlidesFromPosts = $this->isSlidesFromPosts();
  2143. $isSlidesFromStream = $this->isSlidesFromStream();
  2144. if(RevSliderWpml::isWpmlExists() && $this->getParam('use_wpml', 'off') == 'on'){
  2145. $cur_lang = apply_filters( 'wpml_current_language', null );
  2146. $wpml_current_language = apply_filters( 'wpml_current_language', null );
  2147. do_action( 'wpml_switch_language', $lang );
  2148. }
  2149. if($isSlidesFromPosts){
  2150. $arrParentSlides = $this->getSlidesFromPosts($publishedOnly, $gal_ids);
  2151. }elseif($isSlidesFromStream !== false){
  2152. $arrParentSlides = $this->getSlidesFromStream($publishedOnly);
  2153. }else{
  2154. $arrParentSlides = $this->getSlides($publishedOnly);
  2155. }
  2156. if(RevSliderWpml::isWpmlExists() && $this->getParam('use_wpml', 'off') == 'on'){ //switch language back
  2157. do_action( 'wpml_switch_language', $cur_lang );
  2158. }
  2159. if($lang == 'all' || $isSlidesFromPosts || $isSlidesFromStream)
  2160. return($arrParentSlides);
  2161. $arrSlides = array();
  2162. foreach($arrParentSlides as $parentSlide){
  2163. $parentLang = $parentSlide->getLang();
  2164. if($parentLang == $lang)
  2165. $arrSlides[] = $parentSlide;
  2166. $childAdded = false;
  2167. $arrChildren = $parentSlide->getArrChildren();
  2168. foreach($arrChildren as $child){
  2169. $childLang = $child->getLang();
  2170. if($childLang == $lang){
  2171. $arrSlides[] = $child;
  2172. $childAdded = true;
  2173. break;
  2174. }
  2175. }
  2176. if($childAdded == false && $parentLang == "all")
  2177. $arrSlides[] = $parentSlide;
  2178. }
  2179. return($arrSlides);
  2180. }
  2181. /**
  2182. *
  2183. * get array of slide names
  2184. */
  2185. public function getArrSlideNames(){
  2186. if(empty($this->arrSlides))
  2187. $this->getSlidesFromGallery();
  2188. $arrSlideNames = array();
  2189. foreach($this->arrSlides as $number=>$slide){
  2190. $slideID = $slide->getID();
  2191. $filename = $slide->getImageFilename();
  2192. $slideTitle = $slide->getParam("title","Slide");
  2193. $slideName = $slideTitle;
  2194. if(!empty($filename))
  2195. $slideName .= " ($filename)";
  2196. $arrChildrenIDs = $slide->getArrChildrenIDs();
  2197. $arrSlideNames[$slideID] = array("name"=>$slideName,"arrChildrenIDs"=>$arrChildrenIDs,"title"=>$slideTitle);
  2198. }
  2199. return($arrSlideNames);
  2200. }
  2201. /**
  2202. *
  2203. * get array of slides numbers by id's
  2204. */
  2205. public function getSlidesNumbersByIDs($publishedOnly = false){
  2206. if(empty($this->arrSlides))
  2207. $this->getSlides($publishedOnly);
  2208. $arrSlideNumbers = array();
  2209. $counter = 0;
  2210. if(empty($this->arrSlides)) return $arrSlideNumbers;
  2211. foreach($this->arrSlides as $slide){
  2212. $counter++;
  2213. $slideID = $slide->getID();
  2214. $arrSlideNumbers[$slideID] = $counter;
  2215. }
  2216. return($arrSlideNumbers);
  2217. }
  2218. /**
  2219. *
  2220. * get slider params for export slider
  2221. */
  2222. private function getParamsForExport(){
  2223. $exportParams = $this->arrParams;
  2224. //modify background image
  2225. $urlImage = RevSliderFunctions::getVal($exportParams, "background_image");
  2226. if(!empty($urlImage))
  2227. $exportParams["background_image"] = $urlImage;
  2228. return($exportParams);
  2229. }
  2230. /**
  2231. *
  2232. * get slides for export
  2233. */
  2234. public function getSlidesForExport($useDummy = false){
  2235. $arrSlides = $this->getSlidesFromGallery(false, true);
  2236. $arrSlidesExport = array();
  2237. foreach($arrSlides as $slide){
  2238. $slideNew = array();
  2239. $slideNew["id"] = $slide->getID();
  2240. $slideNew["params"] = $slide->getParamsForExport();
  2241. $slideNew["slide_order"] = $slide->getOrder();
  2242. $slideNew["layers"] = $slide->getLayersForExport($useDummy);
  2243. $slideNew["settings"] = $slide->getSettings();
  2244. $arrSlidesExport[] = $slideNew;
  2245. }
  2246. return apply_filters('revslider_getSlidesForExport', $arrSlidesExport);
  2247. }
  2248. /**
  2249. *
  2250. * get slides for export
  2251. */
  2252. public function getStaticSlideForExport($useDummy = false){
  2253. $arrSlidesExport = array();
  2254. $slide = new RevSlide();
  2255. $staticID = $slide->getStaticSlideID($this->id);
  2256. if($staticID !== false){
  2257. $slideNew = array();
  2258. $slide->initByStaticID($staticID);
  2259. $slideNew["params"] = $slide->getParamsForExport();
  2260. $slideNew["slide_order"] = $slide->getOrder();
  2261. $slideNew["layers"] = $slide->getLayersForExport($useDummy);
  2262. $slideNew["settings"] = $slide->getSettings();
  2263. $arrSlidesExport[] = $slideNew;
  2264. }
  2265. return apply_filters('revslider_getStaticSlideForExport', $arrSlidesExport);
  2266. }
  2267. /**
  2268. * get slides number
  2269. */
  2270. public function getNumSlides($publishedOnly = false){
  2271. if($this->arrSlides == null)
  2272. $this->getSlides($publishedOnly);
  2273. $numSlides = count($this->arrSlides);
  2274. return($numSlides);
  2275. }
  2276. /**
  2277. * get slides number
  2278. */
  2279. public function getNumSlidesRaw($publishedOnly = false){
  2280. if($this->arrSlides == null){
  2281. $ret = $this->getSlidesCountRaw($publishedOnly);
  2282. $numSlides = count($ret);
  2283. }else{
  2284. $numSlides = count($this->arrSlides);
  2285. }
  2286. return($numSlides);
  2287. }
  2288. /**
  2289. * get real slides number, from posts, social streams ect.
  2290. */
  2291. public function getNumRealSlides($publishedOnly = false, $type = 'post'){
  2292. $numSlides = count($this->arrSlides);
  2293. switch($type){
  2294. case 'post':
  2295. if($this->getParam('fetch_type', 'cat_tag') == 'next_prev'){
  2296. $numSlides = 2;
  2297. }else{
  2298. $numSlides = $this->getParam('max_slider_posts', count($this->arrSlides));
  2299. if(intval($numSlides) == 0) $numSlides = '∞';
  2300. //$this->getSlidesFromPosts($publishedOnly);
  2301. //$numSlides = count($this->arrSlides);
  2302. }
  2303. break;
  2304. case 'facebook':
  2305. $numSlides = $this->getParam('facebook-count', count($this->arrSlides));
  2306. break;
  2307. case 'twitter':
  2308. $numSlides = $this->getParam('twitter-count', count($this->arrSlides));
  2309. break;
  2310. case 'instagram':
  2311. $numSlides = $this->getParam('instagram-count', count($this->arrSlides));
  2312. break;
  2313. case 'flickr':
  2314. $numSlides = $this->getParam('flickr-count', count($this->arrSlides));
  2315. break;
  2316. case 'youtube':
  2317. $numSlides = $this->getParam('youtube-count', count($this->arrSlides));
  2318. break;
  2319. case 'vimeo':
  2320. $numSlides = $this->getParam('vimeo-count', count($this->arrSlides));
  2321. break;
  2322. }
  2323. return($numSlides);
  2324. }
  2325. /**
  2326. * get real slides number, from posts, social streams ect.
  2327. */
  2328. public function getNumRealStreamSlides($publishedOnly = false){
  2329. $this->getSlidesFromStream($publishedOnly);
  2330. $numSlides = count($this->arrSlides);
  2331. return($numSlides);
  2332. }
  2333. /**
  2334. * get sliders array - function don't belong to the object!
  2335. */
  2336. public function getArrSliders($orders = false, $templates = 'neither'){
  2337. $order_fav = false;
  2338. if($orders !== false && key($orders) != 'favorite'){
  2339. $order_direction = reset($orders);
  2340. $do_order = key($orders);
  2341. }else{
  2342. $do_order = 'id';
  2343. $order_direction = 'ASC';
  2344. if(is_array($orders) && key($orders) == 'favorite'){
  2345. $order_direction = reset($orders);
  2346. $order_fav = true;
  2347. }
  2348. }
  2349. //$where = "`type` != 'template' ";
  2350. $where = "`type` != 'template' OR `type` IS NULL";
  2351. $response = $this->db->fetch(RevSliderGlobals::$table_sliders,$where,$do_order,'',$order_direction);
  2352. $arrSliders = array();
  2353. foreach($response as $arrData){
  2354. $slider = new RevSlider();
  2355. $slider->initByDBData($arrData);
  2356. /*
  2357. This part needs to stay for backwards compatibility. It is used in the update process from v4x to v5x
  2358. */
  2359. if($templates === true){
  2360. if($slider->getParam("template","false") == "false") continue;
  2361. }elseif($templates === false){
  2362. if($slider->getParam("template","false") == "true") continue;
  2363. }
  2364. $arrSliders[] = $slider;
  2365. }
  2366. if($order_fav === true){
  2367. $temp = array();
  2368. $temp_not = array();
  2369. foreach($arrSliders as $key => $slider){
  2370. if($slider->isFavorite()){
  2371. $temp_not[] = $slider;
  2372. }else{
  2373. $temp[] = $slider;
  2374. }
  2375. }
  2376. $arrSliders = array();
  2377. $arrSliders = ($order_direction == 'ASC') ? array_merge($temp, $temp_not) : array_merge($temp_not, $temp);
  2378. }
  2379. return($arrSliders);
  2380. }
  2381. /**
  2382. * get array of alias
  2383. */
  2384. public function getAllSliderAliases(){
  2385. $where = "`type` != 'template'";
  2386. $response = $this->db->fetch(RevSliderGlobals::$table_sliders,$where,"id");
  2387. $arrAliases = array();
  2388. foreach($response as $arrSlider){
  2389. $arrAliases[] = $arrSlider["alias"];
  2390. }
  2391. return($arrAliases);
  2392. }
  2393. /**
  2394. * get array of alias
  2395. */
  2396. public function getAllSliderForAdminMenu(){
  2397. $arrSliders = $this->getArrSliders();
  2398. $arrShort = array();
  2399. if(!empty($arrSliders)){
  2400. foreach($arrSliders as $slider){
  2401. $id = $slider->getID();
  2402. $title = $slider->getTitle();
  2403. $alias = $slider->getAlias();
  2404. $arrShort[$id] = array('title' => $title, 'alias' => $alias);
  2405. }
  2406. }
  2407. return($arrShort);
  2408. }
  2409. /**
  2410. *
  2411. * get array of slider id -> title
  2412. */
  2413. public function getArrSlidersShort($exceptID = null,$filterType = self::SLIDER_TYPE_ALL){
  2414. $arrSliders = $this->getArrSliders();
  2415. $arrShort = array();
  2416. foreach($arrSliders as $slider){
  2417. $id = $slider->getID();
  2418. $isFromPosts = $slider->isSlidesFromPosts();
  2419. $isTemplate = $slider->getParam("template","false");
  2420. //filter by gallery only
  2421. if($filterType == self::SLIDER_TYPE_POSTS && $isFromPosts == false)
  2422. continue;
  2423. if($filterType == self::SLIDER_TYPE_GALLERY && $isFromPosts == true)
  2424. continue;
  2425. //filter by template type
  2426. if($filterType == self::SLIDER_TYPE_TEMPLATE && $isFromPosts == false)
  2427. continue;
  2428. //filter by except
  2429. if(!empty($exceptID) && $exceptID == $id)
  2430. continue;
  2431. $title = $slider->getTitle();
  2432. $arrShort[$id] = $title;
  2433. }
  2434. return($arrShort);
  2435. }
  2436. /**
  2437. *
  2438. * get array of sliders with slides, short, assoc.
  2439. */
  2440. public function getArrSlidersWithSlidesShort($filterType = self::SLIDER_TYPE_ALL){
  2441. $arrSliders = self::getArrSlidersShort(null, $filterType);
  2442. $output = array();
  2443. foreach($arrSliders as $sliderID=>$sliderName){
  2444. $slider = new RevSlider();
  2445. $slider->initByID($sliderID);
  2446. $isFromPosts = $slider->isSlidesFromPosts();
  2447. $isTemplate = $slider->getParam("template","false");
  2448. //filter by gallery only
  2449. if($filterType == self::SLIDER_TYPE_POSTS && $isFromPosts == false)
  2450. continue;
  2451. if($filterType == self::SLIDER_TYPE_GALLERY && $isFromPosts == true)
  2452. continue;
  2453. //filter by template type
  2454. if($filterType == self::SLIDER_TYPE_TEMPLATE && $isFromPosts == false) //$isTemplate == "false")
  2455. continue;
  2456. $sliderTitle = $slider->getTitle();
  2457. $arrSlides = $slider->getArrSlidesFromGalleryShort();
  2458. foreach($arrSlides as $slideID=>$slideName){
  2459. $output[$slideID] = $sliderName.", ".$slideName;
  2460. }
  2461. }
  2462. return($output);
  2463. }
  2464. /**
  2465. *
  2466. * get max order
  2467. */
  2468. public function getMaxOrder(){
  2469. $this->validateInited();
  2470. $maxOrder = 0;
  2471. $arrSlideRecords = $this->db->fetch(RevSliderGlobals::$table_slides,$this->db->prepare("slider_id = %s", array($this->id)),"slide_order desc","","limit 1");
  2472. if(empty($arrSlideRecords))
  2473. return($maxOrder);
  2474. $maxOrder = $arrSlideRecords[0]["slide_order"];
  2475. return($maxOrder);
  2476. }
  2477. /**
  2478. *
  2479. * get setting - start with slide
  2480. */
  2481. public function getStartWithSlideSetting(){
  2482. $numSlides = $this->getNumSlides();
  2483. $startWithSlide = $this->getParam("start_with_slide","1");
  2484. if(is_numeric($startWithSlide)){
  2485. $startWithSlide = (int)$startWithSlide - 1;
  2486. if($startWithSlide < 0)
  2487. $startWithSlide = 0;
  2488. if($startWithSlide >= $numSlides)
  2489. $startWithSlide = 0;
  2490. }else
  2491. $startWithSlide = 0;
  2492. return($startWithSlide);
  2493. }
  2494. /**
  2495. * return if the slides source is from posts
  2496. */
  2497. public function isSlidesFromPosts(){
  2498. $this->validateInited();
  2499. $sourceType = $this->getParam("source_type","gallery");
  2500. if($sourceType == "posts" || $sourceType == "specific_posts" || $sourceType == "current_post" || $sourceType == "woocommerce")
  2501. return(true);
  2502. return(false);
  2503. }
  2504. /**
  2505. * return if the slides source is from stream
  2506. */
  2507. public function isSlidesFromStream(){
  2508. $this->validateInited();
  2509. $sourceType = $this->getParam("source_type","gallery");
  2510. if($sourceType != "posts" && $sourceType != "specific_posts" && $sourceType != "current_post" && $sourceType != "woocommerce" && $sourceType != "gallery")
  2511. return($sourceType);
  2512. return(false);
  2513. }
  2514. /**
  2515. *
  2516. * get posts from categories (by the slider params).
  2517. */
  2518. private function getPostsFromCategories($publishedOnly = false){
  2519. $this->validateInited();
  2520. $catIDs = $this->getParam("post_category");
  2521. $data = RevSliderFunctionsWP::getCatAndTaxData($catIDs);
  2522. $taxonomies = $data["tax"];
  2523. $catIDs = $data["cats"];
  2524. $sortBy = $this->getParam("post_sortby",self::DEFAULT_POST_SORTBY);
  2525. $sortDir = $this->getParam("posts_sort_direction",self::DEFAULT_POST_SORTDIR);
  2526. $maxPosts = $this->getParam("max_slider_posts","30");
  2527. if(empty($maxPosts) || !is_numeric($maxPosts))
  2528. $maxPosts = -1;
  2529. $postTypes = $this->getParam("post_types","any");
  2530. //set direction for custom order
  2531. if($sortBy == RevSliderFunctionsWP::SORTBY_MENU_ORDER)
  2532. $sortDir = RevSliderFunctionsWP::ORDER_DIRECTION_ASC;
  2533. //Events integration
  2534. $arrAddition = array();
  2535. if($publishedOnly == true)
  2536. $arrAddition["post_status"] = RevSliderFunctionsWP::STATE_PUBLISHED;
  2537. if(RevSliderEventsManager::isEventsExists()){
  2538. $filterType = $this->getParam("events_filter",RevSliderEventsManager::DEFAULT_FILTER);
  2539. $arrAddition = RevSliderEventsManager::getWPQuery($filterType, $sortBy);
  2540. }
  2541. $slider_id = $this->getID();
  2542. $arrPosts = RevSliderFunctionsWP::getPostsByCategory($slider_id, $catIDs,$sortBy,$sortDir,$maxPosts,$postTypes,$taxonomies,$arrAddition);
  2543. return($arrPosts);
  2544. }
  2545. /**
  2546. * get related posts from current one
  2547. * @since: 5.1.1
  2548. */
  2549. public function getPostsFromRelated(){
  2550. $my_posts = array();
  2551. $sortBy = $this->getParam("post_sortby",self::DEFAULT_POST_SORTBY);
  2552. $sortDir = $this->getParam("posts_sort_direction",self::DEFAULT_POST_SORTDIR);
  2553. $max_posts = $this->getParam("max_slider_posts","30");
  2554. if(empty($max_posts) || !is_numeric($max_posts))
  2555. $max_posts = -1;
  2556. $post_id = get_the_ID();
  2557. $tags_string = '';
  2558. $post_tags = get_the_tags();
  2559. if ($post_tags) {
  2560. foreach ($post_tags as $post_tag) {
  2561. $tags_string .= $post_tag->slug . ',';
  2562. }
  2563. }
  2564. $query = array(
  2565. 'exclude' => $post_id,
  2566. 'numberposts' => $max_posts,
  2567. 'order' => $sortDir,
  2568. 'tag' => $tags_string
  2569. );
  2570. if(strpos($sortBy, "meta_num_") === 0){
  2571. $metaKey = str_replace("meta_num_", "", $sortBy);
  2572. $query["orderby"] = "meta_value_num";
  2573. $query["meta_key"] = $metaKey;
  2574. }else
  2575. if(strpos($sortBy, "meta_") === 0){
  2576. $metaKey = str_replace("meta_", "", $sortBy);
  2577. $query["orderby"] = "meta_value";
  2578. $query["meta_key"] = $metaKey;
  2579. }else
  2580. $query["orderby"] = $sortBy;
  2581. $get_relateds = apply_filters('revslider_get_related_posts', $query, $post_id);
  2582. $tag_related_posts = get_posts($get_relateds);
  2583. if(count($tag_related_posts) < $max_posts){
  2584. $ignore = array();
  2585. foreach($tag_related_posts as $tag_related_post){
  2586. $ignore[] = $tag_related_post->ID;
  2587. }
  2588. $article_categories = get_the_category($post_id);
  2589. $category_string = '';
  2590. foreach($article_categories as $category) {
  2591. $category_string .= $category->cat_ID . ',';
  2592. }
  2593. $max = $max_posts - count($tag_related_posts);
  2594. $excl = implode(',', $ignore);
  2595. $query = array(
  2596. 'exclude' => $excl,
  2597. 'numberposts' => $max,
  2598. 'category' => $category_string
  2599. );
  2600. if(strpos($sortBy, "meta_num_") === 0){
  2601. $metaKey = str_replace("meta_num_", "", $sortBy);
  2602. $query["orderby"] = "meta_value_num";
  2603. $query["meta_key"] = $metaKey;
  2604. }else
  2605. if(strpos($sortBy, "meta_") === 0){
  2606. $metaKey = str_replace("meta_", "", $sortBy);
  2607. $query["orderby"] = "meta_value";
  2608. $query["meta_key"] = $metaKey;
  2609. }else
  2610. $query["orderby"] = $sortBy;
  2611. $get_relateds = apply_filters('revslider_get_related_posts', $query, $post_id);
  2612. $cat_related_posts = get_posts($get_relateds);
  2613. $tag_related_posts = $tag_related_posts + $cat_related_posts;
  2614. }
  2615. foreach($tag_related_posts as $post){
  2616. $the_post = array();
  2617. if(method_exists($post, "to_array"))
  2618. $the_post = $post->to_array();
  2619. else
  2620. $the_post = (array)$post;
  2621. if($the_post['ID'] == $post_id) continue;
  2622. $my_posts[] = $the_post;
  2623. }
  2624. return $my_posts;
  2625. }
  2626. /**
  2627. * get popular posts
  2628. * @since: 5.1.1
  2629. */
  2630. public function getPostsFromPopular($max_posts = false){
  2631. $post_id = get_the_ID();
  2632. if($max_posts == false){
  2633. $max_posts = $this->getParam("max_slider_posts","30");
  2634. if(empty($max_posts) || !is_numeric($max_posts))
  2635. $max_posts = -1;
  2636. }else{
  2637. $max_posts = intval($max_posts);
  2638. }
  2639. $my_posts = array();
  2640. $args = array(
  2641. 'post_type' => 'any',
  2642. 'posts_per_page' => $max_posts,
  2643. 'suppress_filters' => 0,
  2644. 'meta_key' => '_thumbnail_id',
  2645. 'orderby' => 'comment_count',
  2646. 'order' => 'DESC'
  2647. );
  2648. $args = apply_filters('revslider_get_popular_posts', $args, $post_id);
  2649. $posts = get_posts($args);
  2650. foreach($posts as $post){
  2651. if(method_exists($post, "to_array"))
  2652. $my_posts[] = $post->to_array();
  2653. else
  2654. $my_posts[] = (array)$post;
  2655. }
  2656. return $my_posts;
  2657. }
  2658. /**
  2659. * get recent posts
  2660. * @since: 5.1.1
  2661. */
  2662. public function getPostsFromRecent($max_posts = false){
  2663. $post_id = get_the_ID();
  2664. if($max_posts == false){
  2665. $max_posts = $this->getParam("max_slider_posts","30");
  2666. if(empty($max_posts) || !is_numeric($max_posts))
  2667. $max_posts = -1;
  2668. }else{
  2669. $max_posts = intval($max_posts);
  2670. }
  2671. $my_posts = array();
  2672. $args = array(
  2673. 'post_type' => 'any',
  2674. 'posts_per_page' => $max_posts,
  2675. 'suppress_filters' => 0,
  2676. 'meta_key' => '_thumbnail_id',
  2677. 'orderby' => 'date',
  2678. 'order' => 'DESC'
  2679. );
  2680. $args = apply_filters('revslider_get_latest_posts', $args, $post_id);
  2681. $posts = get_posts($args);
  2682. foreach($posts as $post){
  2683. if(method_exists($post, "to_array"))
  2684. $my_posts[] = $post->to_array();
  2685. else
  2686. $my_posts[] = (array)$post;
  2687. }
  2688. return $my_posts;
  2689. }
  2690. /**
  2691. * get recent posts
  2692. * @since: 5.1.1
  2693. */
  2694. public function getPostsNextPrevious(){
  2695. $my_posts = array();
  2696. $startup_next_post = get_next_post();
  2697. if (!empty( $startup_next_post )){
  2698. if(method_exists($startup_next_post, "to_array"))
  2699. $my_posts[] = $startup_next_post->to_array();
  2700. else
  2701. $my_posts[] = (array)$startup_next_post;
  2702. }
  2703. $startup_previous_post = get_previous_post();
  2704. if (!empty( $startup_previous_post )){
  2705. if(method_exists($startup_previous_post, "to_array"))
  2706. $my_posts[] = $startup_previous_post->to_array();
  2707. else
  2708. $my_posts[] = (array)$startup_previous_post;
  2709. }
  2710. return $my_posts;
  2711. }
  2712. /**
  2713. * get products from categories (by the slider params).
  2714. * @since: 5.1.0
  2715. */
  2716. private function getProductsFromCategories($publishedOnly = false){
  2717. $this->validateInited();
  2718. $catIDs = $this->getParam("product_category");
  2719. $data = RevSliderFunctionsWP::getCatAndTaxData($catIDs);
  2720. $taxonomies = $data["tax"];
  2721. $catIDs = $data["cats"];
  2722. $sortBy = $this->getParam("product_sortby",self::DEFAULT_POST_SORTBY);
  2723. $sortDir = $this->getParam("product_sort_direction",self::DEFAULT_POST_SORTDIR);
  2724. $maxPosts = $this->getParam("max_slider_products","30");
  2725. if(empty($maxPosts) || !is_numeric($maxPosts))
  2726. $maxPosts = -1;
  2727. $postTypes = $this->getParam("product_types","any");
  2728. //set direction for custom order
  2729. if($sortBy == RevSliderFunctionsWP::SORTBY_MENU_ORDER)
  2730. $sortDir = RevSliderFunctionsWP::ORDER_DIRECTION_ASC;
  2731. //Events integration
  2732. $arrAddition = array();
  2733. if($publishedOnly == true)
  2734. $arrAddition["post_status"] = RevSliderFunctionsWP::STATE_PUBLISHED;
  2735. $arrAddition = array_merge($arrAddition, RevSliderWooCommerce::getMetaQuery($this->getParams()));
  2736. $slider_id = $this->getID();
  2737. $arrPosts = RevSliderFunctionsWP::getPostsByCategory($slider_id, $catIDs,$sortBy,$sortDir,$maxPosts,$postTypes,$taxonomies,$arrAddition);
  2738. return($arrPosts);
  2739. }
  2740. /**
  2741. *
  2742. * get posts from specific posts list
  2743. */
  2744. private function getPostsFromSpecificList($gal_ids = array()){
  2745. $is_gal = false;
  2746. $additional = array();
  2747. if(!empty($gal_ids) && $gal_ids[0]){
  2748. $strPosts = $gal_ids;
  2749. $strPosts = apply_filters('revslider_set_posts_list_gal', $strPosts, $this->getID());
  2750. $is_gal = true;
  2751. }else{
  2752. if(isset($gal_ids[0])){
  2753. unset($gal_ids[0]);
  2754. $strPosts = implode(",", $gal_ids);
  2755. $additional['order'] = "none";
  2756. $additional['orderby'] = "post__in";
  2757. }else {
  2758. $strPosts = $this->getParam("posts_list", "");
  2759. $additional['order'] = $this->getParam("posts_sort_direction", "DESC");
  2760. $additional['orderby'] = $this->getParam("post_sortby", "");
  2761. }
  2762. $strPosts = apply_filters('revslider_set_posts_list', $strPosts, $this->getID());
  2763. }
  2764. $slider_id = $this->getID();
  2765. $arrPosts = RevSliderFunctionsWP::getPostsByIDs($strPosts, $slider_id, $is_gal, $additional);
  2766. return($arrPosts);
  2767. }
  2768. /**
  2769. * update sortby option
  2770. */
  2771. public function updatePostsSortbyFromData($data){
  2772. $sliderID = RevSliderFunctions::getVal($data, "sliderID");
  2773. $sortBy = RevSliderFunctions::getVal($data, "sortby");
  2774. RevSliderFunctions::validateNotEmpty($sortBy,"sortby");
  2775. $this->initByID($sliderID);
  2776. $arrUpdate = array();
  2777. $arrUpdate["post_sortby"] = $sortBy;
  2778. $this->updateParam($arrUpdate);
  2779. }
  2780. /**
  2781. *
  2782. * replace image urls
  2783. */
  2784. public function replaceImageUrlsFromData($data){
  2785. $sliderID = RevSliderFunctions::getVal($data, "sliderid");
  2786. $urlFrom = RevSliderFunctions::getVal($data, "url_from");
  2787. RevSliderFunctions::validateNotEmpty($urlFrom,"url from");
  2788. $urlTo = RevSliderFunctions::getVal($data, "url_to");
  2789. $this->initByID($sliderID);
  2790. $arrSildes = $this->getSlides();
  2791. foreach($arrSildes as $slide){
  2792. $slide->replaceImageUrls($urlFrom, $urlTo);
  2793. }
  2794. $slide = new RevSlide();
  2795. $staticID = $slide->getStaticSlideID($sliderID);
  2796. if($staticID !== false){
  2797. $slide->initByStaticID($staticID);
  2798. $slide->replaceImageUrls($urlFrom, $urlTo, $staticID);
  2799. }
  2800. }
  2801. public function resetSlideSettings($data){
  2802. $sliderID = RevSliderFunctions::getVal($data, "sliderid");
  2803. $this->initByID($sliderID);
  2804. $arrSildes = $this->getSlides();
  2805. foreach($arrSildes as $slide){
  2806. $slide->reset_slide_values($data);
  2807. }
  2808. }
  2809. public static function clear_error_in_string($m){
  2810. return 's:'.strlen($m[2]).':"'.$m[2].'";';
  2811. }
  2812. }
  2813. /**
  2814. * old classname extends new one (old classnames will be obsolete soon)
  2815. * @since: 5.0
  2816. **/
  2817. class RevSlider extends RevSliderSlider {}
  2818. ?>