slider.class.php 117 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589
  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 = array();
  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' || $isSlidesFromStream) // || $isSlidesFromPosts
  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. //echo $childLang .'||'. $lang.'--';
  2171. if($childLang == $lang){
  2172. $arrSlides[] = $child;
  2173. $childAdded = true;
  2174. break;
  2175. }
  2176. }
  2177. if($childAdded == false && $parentLang == "all")
  2178. $arrSlides[] = $parentSlide;
  2179. }
  2180. return($arrSlides);
  2181. }
  2182. /**
  2183. *
  2184. * get array of slide names
  2185. */
  2186. public function getArrSlideNames(){
  2187. if(empty($this->arrSlides))
  2188. $this->getSlidesFromGallery();
  2189. $arrSlideNames = array();
  2190. foreach($this->arrSlides as $number=>$slide){
  2191. $slideID = $slide->getID();
  2192. $filename = $slide->getImageFilename();
  2193. $slideTitle = $slide->getParam("title","Slide");
  2194. $slideName = $slideTitle;
  2195. if(!empty($filename))
  2196. $slideName .= " ($filename)";
  2197. $arrChildrenIDs = $slide->getArrChildrenIDs();
  2198. $arrSlideNames[$slideID] = array("name"=>$slideName,"arrChildrenIDs"=>$arrChildrenIDs,"title"=>$slideTitle);
  2199. }
  2200. return($arrSlideNames);
  2201. }
  2202. /**
  2203. *
  2204. * get array of slides numbers by id's
  2205. */
  2206. public function getSlidesNumbersByIDs($publishedOnly = false){
  2207. if(empty($this->arrSlides))
  2208. $this->getSlides($publishedOnly);
  2209. $arrSlideNumbers = array();
  2210. $counter = 0;
  2211. if(empty($this->arrSlides)) return $arrSlideNumbers;
  2212. foreach($this->arrSlides as $slide){
  2213. $counter++;
  2214. $slideID = $slide->getID();
  2215. $arrSlideNumbers[$slideID] = $counter;
  2216. }
  2217. return($arrSlideNumbers);
  2218. }
  2219. /**
  2220. *
  2221. * get slider params for export slider
  2222. */
  2223. private function getParamsForExport(){
  2224. $exportParams = $this->arrParams;
  2225. //modify background image
  2226. $urlImage = RevSliderFunctions::getVal($exportParams, "background_image");
  2227. if(!empty($urlImage))
  2228. $exportParams["background_image"] = $urlImage;
  2229. return($exportParams);
  2230. }
  2231. /**
  2232. *
  2233. * get slides for export
  2234. */
  2235. public function getSlidesForExport($useDummy = false){
  2236. $arrSlides = $this->getSlidesFromGallery(false, true);
  2237. $arrSlidesExport = array();
  2238. foreach($arrSlides as $slide){
  2239. $slideNew = array();
  2240. $slideNew["id"] = $slide->getID();
  2241. $slideNew["params"] = $slide->getParamsForExport();
  2242. $slideNew["slide_order"] = $slide->getOrder();
  2243. $slideNew["layers"] = $slide->getLayersForExport($useDummy);
  2244. $slideNew["settings"] = $slide->getSettings();
  2245. $arrSlidesExport[] = $slideNew;
  2246. }
  2247. return apply_filters('revslider_getSlidesForExport', $arrSlidesExport);
  2248. }
  2249. /**
  2250. *
  2251. * get slides for export
  2252. */
  2253. public function getStaticSlideForExport($useDummy = false){
  2254. $arrSlidesExport = array();
  2255. $slide = new RevSlide();
  2256. $staticID = $slide->getStaticSlideID($this->id);
  2257. if($staticID !== false){
  2258. $slideNew = array();
  2259. $slide->initByStaticID($staticID);
  2260. $slideNew["params"] = $slide->getParamsForExport();
  2261. $slideNew["slide_order"] = $slide->getOrder();
  2262. $slideNew["layers"] = $slide->getLayersForExport($useDummy);
  2263. $slideNew["settings"] = $slide->getSettings();
  2264. $arrSlidesExport[] = $slideNew;
  2265. }
  2266. return apply_filters('revslider_getStaticSlideForExport', $arrSlidesExport);
  2267. }
  2268. /**
  2269. * get slides number
  2270. */
  2271. public function getNumSlides($publishedOnly = false){
  2272. if(empty($this->arrSlides))
  2273. $this->getSlides($publishedOnly);
  2274. $numSlides = count($this->arrSlides);
  2275. return($numSlides);
  2276. }
  2277. /**
  2278. * get slides number
  2279. */
  2280. public function getNumSlidesRaw($publishedOnly = false){
  2281. if(empty($this->arrSlides)){
  2282. $ret = $this->getSlidesCountRaw($publishedOnly);
  2283. $numSlides = count($ret);
  2284. }else{
  2285. $numSlides = count($this->arrSlides);
  2286. }
  2287. return($numSlides);
  2288. }
  2289. /**
  2290. * get real slides number, from posts, social streams ect.
  2291. */
  2292. public function getNumRealSlides($publishedOnly = false, $type = 'post'){
  2293. $numSlides = count($this->arrSlides);
  2294. switch($type){
  2295. case 'post':
  2296. if($this->getParam('fetch_type', 'cat_tag') == 'next_prev'){
  2297. $numSlides = 2;
  2298. }else{
  2299. $numSlides = $this->getParam('max_slider_posts', count($this->arrSlides));
  2300. if(intval($numSlides) == 0) $numSlides = '∞';
  2301. //$this->getSlidesFromPosts($publishedOnly);
  2302. //$numSlides = count($this->arrSlides);
  2303. }
  2304. break;
  2305. case 'facebook':
  2306. $numSlides = $this->getParam('facebook-count', count($this->arrSlides));
  2307. break;
  2308. case 'twitter':
  2309. $numSlides = $this->getParam('twitter-count', count($this->arrSlides));
  2310. break;
  2311. case 'instagram':
  2312. $numSlides = $this->getParam('instagram-count', count($this->arrSlides));
  2313. break;
  2314. case 'flickr':
  2315. $numSlides = $this->getParam('flickr-count', count($this->arrSlides));
  2316. break;
  2317. case 'youtube':
  2318. $numSlides = $this->getParam('youtube-count', count($this->arrSlides));
  2319. break;
  2320. case 'vimeo':
  2321. $numSlides = $this->getParam('vimeo-count', count($this->arrSlides));
  2322. break;
  2323. }
  2324. return($numSlides);
  2325. }
  2326. /**
  2327. * get real slides number, from posts, social streams ect.
  2328. */
  2329. public function getNumRealStreamSlides($publishedOnly = false){
  2330. $this->getSlidesFromStream($publishedOnly);
  2331. $numSlides = count($this->arrSlides);
  2332. return($numSlides);
  2333. }
  2334. /**
  2335. * get sliders array - function don't belong to the object!
  2336. */
  2337. public function getArrSliders($orders = false, $templates = 'neither'){
  2338. $order_fav = false;
  2339. if($orders !== false && key($orders) != 'favorite'){
  2340. $order_direction = reset($orders);
  2341. $do_order = key($orders);
  2342. }else{
  2343. $do_order = 'id';
  2344. $order_direction = 'ASC';
  2345. if(is_array($orders) && key($orders) == 'favorite'){
  2346. $order_direction = reset($orders);
  2347. $order_fav = true;
  2348. }
  2349. }
  2350. //$where = "`type` != 'template' ";
  2351. $where = "`type` != 'template' OR `type` IS NULL";
  2352. $response = $this->db->fetch(RevSliderGlobals::$table_sliders,$where,$do_order,'',$order_direction);
  2353. $arrSliders = array();
  2354. foreach($response as $arrData){
  2355. $slider = new RevSlider();
  2356. $slider->initByDBData($arrData);
  2357. /*
  2358. This part needs to stay for backwards compatibility. It is used in the update process from v4x to v5x
  2359. */
  2360. if($templates === true){
  2361. if($slider->getParam("template","false") == "false") continue;
  2362. }elseif($templates === false){
  2363. if($slider->getParam("template","false") == "true") continue;
  2364. }
  2365. $arrSliders[] = $slider;
  2366. }
  2367. if($order_fav === true){
  2368. $temp = array();
  2369. $temp_not = array();
  2370. foreach($arrSliders as $key => $slider){
  2371. if($slider->isFavorite()){
  2372. $temp_not[] = $slider;
  2373. }else{
  2374. $temp[] = $slider;
  2375. }
  2376. }
  2377. $arrSliders = array();
  2378. $arrSliders = ($order_direction == 'ASC') ? array_merge($temp, $temp_not) : array_merge($temp_not, $temp);
  2379. }
  2380. return($arrSliders);
  2381. }
  2382. /**
  2383. * get array of alias
  2384. */
  2385. public function getAllSliderAliases(){
  2386. $where = "`type` != 'template'";
  2387. $response = $this->db->fetch(RevSliderGlobals::$table_sliders,$where,"id");
  2388. $arrAliases = array();
  2389. foreach($response as $arrSlider){
  2390. $arrAliases[] = $arrSlider["alias"];
  2391. }
  2392. return($arrAliases);
  2393. }
  2394. /**
  2395. * get array of alias
  2396. */
  2397. public function getAllSliderForAdminMenu(){
  2398. $arrSliders = $this->getArrSliders();
  2399. $arrShort = array();
  2400. if(!empty($arrSliders)){
  2401. foreach($arrSliders as $slider){
  2402. $id = $slider->getID();
  2403. $title = $slider->getTitle();
  2404. $alias = $slider->getAlias();
  2405. $arrShort[$id] = array('title' => $title, 'alias' => $alias);
  2406. }
  2407. }
  2408. return($arrShort);
  2409. }
  2410. /**
  2411. *
  2412. * get array of slider id -> title
  2413. */
  2414. public function getArrSlidersShort($exceptID = null,$filterType = self::SLIDER_TYPE_ALL){
  2415. $arrSliders = $this->getArrSliders();
  2416. $arrShort = array();
  2417. foreach($arrSliders as $slider){
  2418. $id = $slider->getID();
  2419. $isFromPosts = $slider->isSlidesFromPosts();
  2420. $isTemplate = $slider->getParam("template","false");
  2421. //filter by gallery only
  2422. if($filterType == self::SLIDER_TYPE_POSTS && $isFromPosts == false)
  2423. continue;
  2424. if($filterType == self::SLIDER_TYPE_GALLERY && $isFromPosts == true)
  2425. continue;
  2426. //filter by template type
  2427. if($filterType == self::SLIDER_TYPE_TEMPLATE && $isFromPosts == false)
  2428. continue;
  2429. //filter by except
  2430. if(!empty($exceptID) && $exceptID == $id)
  2431. continue;
  2432. $title = $slider->getTitle();
  2433. $arrShort[$id] = $title;
  2434. }
  2435. return($arrShort);
  2436. }
  2437. /**
  2438. *
  2439. * get array of sliders with slides, short, assoc.
  2440. */
  2441. public function getArrSlidersWithSlidesShort($filterType = self::SLIDER_TYPE_ALL){
  2442. $arrSliders = self::getArrSlidersShort(null, $filterType);
  2443. $output = array();
  2444. foreach($arrSliders as $sliderID=>$sliderName){
  2445. $slider = new RevSlider();
  2446. $slider->initByID($sliderID);
  2447. $isFromPosts = $slider->isSlidesFromPosts();
  2448. $isTemplate = $slider->getParam("template","false");
  2449. //filter by gallery only
  2450. if($filterType == self::SLIDER_TYPE_POSTS && $isFromPosts == false)
  2451. continue;
  2452. if($filterType == self::SLIDER_TYPE_GALLERY && $isFromPosts == true)
  2453. continue;
  2454. //filter by template type
  2455. if($filterType == self::SLIDER_TYPE_TEMPLATE && $isFromPosts == false) //$isTemplate == "false")
  2456. continue;
  2457. $sliderTitle = $slider->getTitle();
  2458. $arrSlides = $slider->getArrSlidesFromGalleryShort();
  2459. foreach($arrSlides as $slideID=>$slideName){
  2460. $output[$slideID] = $sliderName.", ".$slideName;
  2461. }
  2462. }
  2463. return($output);
  2464. }
  2465. /**
  2466. *
  2467. * get max order
  2468. */
  2469. public function getMaxOrder(){
  2470. $this->validateInited();
  2471. $maxOrder = 0;
  2472. $arrSlideRecords = $this->db->fetch(RevSliderGlobals::$table_slides,$this->db->prepare("slider_id = %s", array($this->id)),"slide_order desc","","limit 1");
  2473. if(empty($arrSlideRecords))
  2474. return($maxOrder);
  2475. $maxOrder = $arrSlideRecords[0]["slide_order"];
  2476. return($maxOrder);
  2477. }
  2478. /**
  2479. *
  2480. * get setting - start with slide
  2481. */
  2482. public function getStartWithSlideSetting(){
  2483. $numSlides = $this->getNumSlides();
  2484. $startWithSlide = $this->getParam("start_with_slide","1");
  2485. if(is_numeric($startWithSlide)){
  2486. $startWithSlide = (int)$startWithSlide - 1;
  2487. if($startWithSlide < 0)
  2488. $startWithSlide = 0;
  2489. if($startWithSlide >= $numSlides)
  2490. $startWithSlide = 0;
  2491. }else
  2492. $startWithSlide = 0;
  2493. return($startWithSlide);
  2494. }
  2495. /**
  2496. * return if the slides source is from posts
  2497. */
  2498. public function isSlidesFromPosts(){
  2499. $this->validateInited();
  2500. $sourceType = $this->getParam("source_type","gallery");
  2501. if($sourceType == "posts" || $sourceType == "specific_posts" || $sourceType == "current_post" || $sourceType == "woocommerce")
  2502. return(true);
  2503. return(false);
  2504. }
  2505. /**
  2506. * return if the slides source is from stream
  2507. */
  2508. public function isSlidesFromStream(){
  2509. $this->validateInited();
  2510. $sourceType = $this->getParam("source_type","gallery");
  2511. if($sourceType != "posts" && $sourceType != "specific_posts" && $sourceType != "current_post" && $sourceType != "woocommerce" && $sourceType != "gallery")
  2512. return($sourceType);
  2513. return(false);
  2514. }
  2515. /**
  2516. *
  2517. * get posts from categories (by the slider params).
  2518. */
  2519. private function getPostsFromCategories($publishedOnly = false){
  2520. $this->validateInited();
  2521. $catIDs = $this->getParam("post_category");
  2522. $data = RevSliderFunctionsWP::getCatAndTaxData($catIDs);
  2523. $taxonomies = $data["tax"];
  2524. $catIDs = $data["cats"];
  2525. $sortBy = $this->getParam("post_sortby",self::DEFAULT_POST_SORTBY);
  2526. $sortDir = $this->getParam("posts_sort_direction",self::DEFAULT_POST_SORTDIR);
  2527. $maxPosts = $this->getParam("max_slider_posts","30");
  2528. if(empty($maxPosts) || !is_numeric($maxPosts))
  2529. $maxPosts = -1;
  2530. $postTypes = $this->getParam("post_types","any");
  2531. //set direction for custom order
  2532. if($sortBy == RevSliderFunctionsWP::SORTBY_MENU_ORDER)
  2533. $sortDir = RevSliderFunctionsWP::ORDER_DIRECTION_ASC;
  2534. //Events integration
  2535. $arrAddition = array();
  2536. if($publishedOnly == true)
  2537. $arrAddition["post_status"] = RevSliderFunctionsWP::STATE_PUBLISHED;
  2538. if(RevSliderEventsManager::isEventsExists()){
  2539. $filterType = $this->getParam("events_filter",RevSliderEventsManager::DEFAULT_FILTER);
  2540. $arrAddition = RevSliderEventsManager::getWPQuery($filterType, $sortBy);
  2541. }
  2542. $slider_id = $this->getID();
  2543. $arrPosts = RevSliderFunctionsWP::getPostsByCategory($slider_id, $catIDs,$sortBy,$sortDir,$maxPosts,$postTypes,$taxonomies,$arrAddition);
  2544. return($arrPosts);
  2545. }
  2546. /**
  2547. * get related posts from current one
  2548. * @since: 5.1.1
  2549. */
  2550. public function getPostsFromRelated(){
  2551. $my_posts = array();
  2552. $sortBy = $this->getParam("post_sortby",self::DEFAULT_POST_SORTBY);
  2553. $sortDir = $this->getParam("posts_sort_direction",self::DEFAULT_POST_SORTDIR);
  2554. $max_posts = $this->getParam("max_slider_posts","30");
  2555. if(empty($max_posts) || !is_numeric($max_posts))
  2556. $max_posts = -1;
  2557. $post_id = get_the_ID();
  2558. $tags_string = '';
  2559. $post_tags = get_the_tags();
  2560. if ($post_tags) {
  2561. foreach ($post_tags as $post_tag) {
  2562. $tags_string .= $post_tag->slug . ',';
  2563. }
  2564. }
  2565. $query = array(
  2566. 'exclude' => $post_id,
  2567. 'numberposts' => $max_posts,
  2568. 'order' => $sortDir,
  2569. 'tag' => $tags_string
  2570. );
  2571. if(strpos($sortBy, "meta_num_") === 0){
  2572. $metaKey = str_replace("meta_num_", "", $sortBy);
  2573. $query["orderby"] = "meta_value_num";
  2574. $query["meta_key"] = $metaKey;
  2575. }else
  2576. if(strpos($sortBy, "meta_") === 0){
  2577. $metaKey = str_replace("meta_", "", $sortBy);
  2578. $query["orderby"] = "meta_value";
  2579. $query["meta_key"] = $metaKey;
  2580. }else
  2581. $query["orderby"] = $sortBy;
  2582. $get_relateds = apply_filters('revslider_get_related_posts', $query, $post_id);
  2583. $tag_related_posts = get_posts($get_relateds);
  2584. if(count($tag_related_posts) < $max_posts){
  2585. $ignore = array();
  2586. foreach($tag_related_posts as $tag_related_post){
  2587. $ignore[] = $tag_related_post->ID;
  2588. }
  2589. $article_categories = get_the_category($post_id);
  2590. $category_string = '';
  2591. foreach($article_categories as $category) {
  2592. $category_string .= $category->cat_ID . ',';
  2593. }
  2594. $max = $max_posts - count($tag_related_posts);
  2595. $excl = implode(',', $ignore);
  2596. $query = array(
  2597. 'exclude' => $excl,
  2598. 'numberposts' => $max,
  2599. 'category' => $category_string
  2600. );
  2601. if(strpos($sortBy, "meta_num_") === 0){
  2602. $metaKey = str_replace("meta_num_", "", $sortBy);
  2603. $query["orderby"] = "meta_value_num";
  2604. $query["meta_key"] = $metaKey;
  2605. }else
  2606. if(strpos($sortBy, "meta_") === 0){
  2607. $metaKey = str_replace("meta_", "", $sortBy);
  2608. $query["orderby"] = "meta_value";
  2609. $query["meta_key"] = $metaKey;
  2610. }else
  2611. $query["orderby"] = $sortBy;
  2612. $get_relateds = apply_filters('revslider_get_related_posts', $query, $post_id);
  2613. $cat_related_posts = get_posts($get_relateds);
  2614. $tag_related_posts = $tag_related_posts + $cat_related_posts;
  2615. }
  2616. foreach($tag_related_posts as $post){
  2617. $the_post = array();
  2618. if(method_exists($post, "to_array"))
  2619. $the_post = $post->to_array();
  2620. else
  2621. $the_post = (array)$post;
  2622. if($the_post['ID'] == $post_id) continue;
  2623. $my_posts[] = $the_post;
  2624. }
  2625. return $my_posts;
  2626. }
  2627. /**
  2628. * get popular posts
  2629. * @since: 5.1.1
  2630. */
  2631. public function getPostsFromPopular($max_posts = false){
  2632. $post_id = get_the_ID();
  2633. if($max_posts == false){
  2634. $max_posts = $this->getParam("max_slider_posts","30");
  2635. if(empty($max_posts) || !is_numeric($max_posts))
  2636. $max_posts = -1;
  2637. }else{
  2638. $max_posts = intval($max_posts);
  2639. }
  2640. $my_posts = array();
  2641. $args = array(
  2642. 'post_type' => 'any',
  2643. 'posts_per_page' => $max_posts,
  2644. 'suppress_filters' => 0,
  2645. 'meta_key' => '_thumbnail_id',
  2646. 'orderby' => 'comment_count',
  2647. 'order' => 'DESC'
  2648. );
  2649. $args = apply_filters('revslider_get_popular_posts', $args, $post_id);
  2650. $posts = get_posts($args);
  2651. foreach($posts as $post){
  2652. if(method_exists($post, "to_array"))
  2653. $my_posts[] = $post->to_array();
  2654. else
  2655. $my_posts[] = (array)$post;
  2656. }
  2657. return $my_posts;
  2658. }
  2659. /**
  2660. * get recent posts
  2661. * @since: 5.1.1
  2662. */
  2663. public function getPostsFromRecent($max_posts = false){
  2664. $post_id = get_the_ID();
  2665. if($max_posts == false){
  2666. $max_posts = $this->getParam("max_slider_posts","30");
  2667. if(empty($max_posts) || !is_numeric($max_posts))
  2668. $max_posts = -1;
  2669. }else{
  2670. $max_posts = intval($max_posts);
  2671. }
  2672. $my_posts = array();
  2673. $args = array(
  2674. 'post_type' => 'any',
  2675. 'posts_per_page' => $max_posts,
  2676. 'suppress_filters' => 0,
  2677. 'meta_key' => '_thumbnail_id',
  2678. 'orderby' => 'date',
  2679. 'order' => 'DESC'
  2680. );
  2681. $args = apply_filters('revslider_get_latest_posts', $args, $post_id);
  2682. $posts = get_posts($args);
  2683. foreach($posts as $post){
  2684. if(method_exists($post, "to_array"))
  2685. $my_posts[] = $post->to_array();
  2686. else
  2687. $my_posts[] = (array)$post;
  2688. }
  2689. return $my_posts;
  2690. }
  2691. /**
  2692. * get recent posts
  2693. * @since: 5.1.1
  2694. */
  2695. public function getPostsNextPrevious(){
  2696. $my_posts = array();
  2697. $startup_next_post = get_next_post();
  2698. if (!empty( $startup_next_post )){
  2699. if(method_exists($startup_next_post, "to_array"))
  2700. $my_posts[] = $startup_next_post->to_array();
  2701. else
  2702. $my_posts[] = (array)$startup_next_post;
  2703. }
  2704. $startup_previous_post = get_previous_post();
  2705. if (!empty( $startup_previous_post )){
  2706. if(method_exists($startup_previous_post, "to_array"))
  2707. $my_posts[] = $startup_previous_post->to_array();
  2708. else
  2709. $my_posts[] = (array)$startup_previous_post;
  2710. }
  2711. return $my_posts;
  2712. }
  2713. /**
  2714. * get products from categories (by the slider params).
  2715. * @since: 5.1.0
  2716. */
  2717. private function getProductsFromCategories($publishedOnly = false){
  2718. $this->validateInited();
  2719. $catIDs = $this->getParam("product_category");
  2720. $data = RevSliderFunctionsWP::getCatAndTaxData($catIDs);
  2721. $taxonomies = $data["tax"];
  2722. $catIDs = $data["cats"];
  2723. $sortBy = $this->getParam("product_sortby",self::DEFAULT_POST_SORTBY);
  2724. $sortDir = $this->getParam("product_sort_direction",self::DEFAULT_POST_SORTDIR);
  2725. $maxPosts = $this->getParam("max_slider_products","30");
  2726. if(empty($maxPosts) || !is_numeric($maxPosts))
  2727. $maxPosts = -1;
  2728. $postTypes = $this->getParam("product_types","any");
  2729. //set direction for custom order
  2730. if($sortBy == RevSliderFunctionsWP::SORTBY_MENU_ORDER)
  2731. $sortDir = RevSliderFunctionsWP::ORDER_DIRECTION_ASC;
  2732. //Events integration
  2733. $arrAddition = array();
  2734. if($publishedOnly == true)
  2735. $arrAddition["post_status"] = RevSliderFunctionsWP::STATE_PUBLISHED;
  2736. $arrAddition = array_merge($arrAddition, RevSliderWooCommerce::getMetaQuery($this->getParams()));
  2737. $tax_addition = array();
  2738. if(isset($arrAddition['tax_query'])){
  2739. $tax_addition = $arrAddition['tax_query'];
  2740. unset($arrAddition['tax_query']);
  2741. }
  2742. $slider_id = $this->getID();
  2743. $arrPosts = RevSliderFunctionsWP::getPostsByCategory($slider_id, $catIDs,$sortBy,$sortDir,$maxPosts,$postTypes,$taxonomies,$arrAddition,$tax_addition);
  2744. return($arrPosts);
  2745. }
  2746. /**
  2747. *
  2748. * get posts from specific posts list
  2749. */
  2750. private function getPostsFromSpecificList($gal_ids = array()){
  2751. $is_gal = false;
  2752. $additional = array();
  2753. if(!empty($gal_ids) && $gal_ids[0]){
  2754. $strPosts = $gal_ids;
  2755. $strPosts = apply_filters('revslider_set_posts_list_gal', $strPosts, $this->getID());
  2756. $is_gal = true;
  2757. }else{
  2758. if(isset($gal_ids[0])){
  2759. unset($gal_ids[0]);
  2760. $strPosts = implode(",", $gal_ids);
  2761. $additional['order'] = "none";
  2762. $additional['orderby'] = "post__in";
  2763. }else {
  2764. $strPosts = $this->getParam("posts_list", "");
  2765. $additional['order'] = $this->getParam("posts_sort_direction", "DESC");
  2766. $additional['orderby'] = $this->getParam("post_sortby", "");
  2767. }
  2768. $strPosts = apply_filters('revslider_set_posts_list', $strPosts, $this->getID());
  2769. }
  2770. $slider_id = $this->getID();
  2771. $arrPosts = RevSliderFunctionsWP::getPostsByIDs($strPosts, $slider_id, $is_gal, $additional);
  2772. return($arrPosts);
  2773. }
  2774. /**
  2775. * update sortby option
  2776. */
  2777. public function updatePostsSortbyFromData($data){
  2778. $sliderID = RevSliderFunctions::getVal($data, "sliderID");
  2779. $sortBy = RevSliderFunctions::getVal($data, "sortby");
  2780. RevSliderFunctions::validateNotEmpty($sortBy,"sortby");
  2781. $this->initByID($sliderID);
  2782. $arrUpdate = array();
  2783. $arrUpdate["post_sortby"] = $sortBy;
  2784. $this->updateParam($arrUpdate);
  2785. }
  2786. /**
  2787. *
  2788. * replace image urls
  2789. */
  2790. public function replaceImageUrlsFromData($data){
  2791. $sliderID = RevSliderFunctions::getVal($data, "sliderid");
  2792. $urlFrom = RevSliderFunctions::getVal($data, "url_from");
  2793. RevSliderFunctions::validateNotEmpty($urlFrom,"url from");
  2794. $urlTo = RevSliderFunctions::getVal($data, "url_to");
  2795. $this->initByID($sliderID);
  2796. $arrSildes = $this->getSlides();
  2797. foreach($arrSildes as $slide){
  2798. $slide->replaceImageUrls($urlFrom, $urlTo);
  2799. }
  2800. $slide = new RevSlide();
  2801. $staticID = $slide->getStaticSlideID($sliderID);
  2802. if($staticID !== false){
  2803. $slide->initByStaticID($staticID);
  2804. $slide->replaceImageUrls($urlFrom, $urlTo, $staticID);
  2805. }
  2806. }
  2807. public function resetSlideSettings($data){
  2808. $sliderID = RevSliderFunctions::getVal($data, "sliderid");
  2809. $this->initByID($sliderID);
  2810. $arrSildes = $this->getSlides();
  2811. foreach($arrSildes as $slide){
  2812. $slide->reset_slide_values($data);
  2813. }
  2814. }
  2815. public static function clear_error_in_string($m){
  2816. return 's:'.strlen($m[2]).':"'.$m[2].'";';
  2817. }
  2818. }
  2819. /**
  2820. * old classname extends new one (old classnames will be obsolete soon)
  2821. * @since: 5.0
  2822. **/
  2823. class RevSlider extends RevSliderSlider {}
  2824. ?>