slide.class.php 105 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215
  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. //$rs_slide_template = array();
  9. class RevSliderSlide extends RevSliderElementsBase{
  10. private $id;
  11. private $sliderID;
  12. private $slideOrder;
  13. private $imageUrl;
  14. private $imageID;
  15. private $imageThumb;
  16. private $imageFilepath;
  17. private $imageFilename;
  18. private $params;
  19. private $arrLayers;
  20. private $settings;
  21. private $arrChildren = null;
  22. private $slider;
  23. private $static_slide = false;
  24. private $postData;
  25. public $templateID;
  26. public function __construct(){
  27. parent::__construct();
  28. }
  29. /**
  30. *
  31. * init slide by db record
  32. */
  33. public function initByData($record){
  34. $record = apply_filters('revslider_slide_initByData', $record);
  35. $this->id = $record["id"];
  36. $this->sliderID = $record["slider_id"];
  37. $this->slideOrder = (isset($record["slide_order"])) ? $record["slide_order"] : '';
  38. $params = $record["params"];
  39. $params = (array)json_decode($params);
  40. $layers = $record["layers"];
  41. $layers = (array)json_decode($layers);
  42. $layers = RevSliderFunctions::convertStdClassToArray($layers);
  43. $settings = $record["settings"];
  44. $settings = (array)json_decode($settings);
  45. //$layers = $this->translateLayerSizes($layers);
  46. $imageID = RevSliderFunctions::getVal($params, "image_id");
  47. $imgResolution = RevSliderFunctions::getVal($params, 'image_source_type', 'full');
  48. //get image url and thumb url
  49. if(!empty($imageID)){
  50. $this->imageID = $imageID;
  51. $imageUrl = RevSliderFunctionsWP::getUrlAttachmentImage($imageID, $imgResolution);
  52. if(empty($imageUrl)){
  53. $imageUrl = RevSliderFunctions::getVal($params, "image");
  54. $imgID = RevSliderBase::get_image_id_by_url($imageUrl);
  55. if($imgID !== false){
  56. $imageUrl = RevSliderFunctionsWP::getUrlAttachmentImage($imgID, $imgResolution);
  57. }
  58. }
  59. $this->imageThumb = RevSliderFunctionsWP::getUrlAttachmentImage($imageID,RevSliderFunctionsWP::THUMB_MEDIUM);
  60. }else{
  61. $imageUrl = RevSliderFunctions::getVal($params, "image");
  62. $imgID = RevSliderBase::get_image_id_by_url($imageUrl);
  63. if($imgID !== false && $imgID !== null){
  64. $imageUrl = RevSliderFunctionsWP::getUrlAttachmentImage($imgID, $imgResolution);
  65. }else{ //we may be from the object library
  66. $objlib = new RevSliderObjectLibrary();
  67. $imageUrl = $objlib->get_correct_size_url($imageUrl, $imgResolution); //check for size to be used
  68. }
  69. }
  70. if(is_ssl()){
  71. $imageUrl = str_replace("http://", "https://", $imageUrl);
  72. }
  73. //set image path, file and url
  74. $this->imageUrl = $imageUrl;
  75. $this->imageFilepath = RevSliderFunctionsWP::getImagePathFromURL($this->imageUrl);
  76. $realPath = RevSliderFunctionsWP::getPathContent().$this->imageFilepath;
  77. if(file_exists($realPath) == false || is_file($realPath) == false)
  78. $this->imageFilepath = "";
  79. $this->imageFilename = basename($this->imageUrl);
  80. $this->params = $params;
  81. $this->arrLayers = $layers;
  82. $this->settings = $settings;
  83. }
  84. /**
  85. * set the image by image id
  86. * @since: 5.0
  87. */
  88. public function setImageByID($imageID, $size = 'full'){
  89. $a = apply_filters('revslider_slide_setImageByID', array('imageID' => $imageID, 'size' => $size), $this);
  90. $imageUrl = RevSliderFunctionsWP::getUrlAttachmentImage($a['imageID'], $a['size']);
  91. if(!empty($imageUrl)){
  92. $this->imageID = $a['imageID'];
  93. $this->imageUrl = $imageUrl;
  94. $this->imageThumb = RevSliderFunctionsWP::getUrlAttachmentImage($a['imageID'],RevSliderFunctionsWP::THUMB_MEDIUM);
  95. $this->imageFilename = basename($this->imageUrl);
  96. $this->imageFilepath = RevSliderFunctionsWP::getImagePathFromURL($this->imageUrl);
  97. $realPath = RevSliderFunctionsWP::getPathContent().$this->imageFilepath;
  98. if(file_exists($realPath) == false || is_file($realPath) == false)
  99. $this->imageFilepath = "";
  100. return true;
  101. }
  102. return false;
  103. }
  104. /**
  105. * change the background_type parameter
  106. * @since: 5.0
  107. */
  108. public function setBackgroundType($new_param){
  109. $new_param = apply_filters('revslider_slide_setBackgroundType', $new_param, $this);
  110. $this->params['background_type'] = $new_param;
  111. }
  112. /**
  113. *
  114. * init by another slide
  115. */
  116. public function initBySlide(RevSliderSlide $slide){
  117. $slide = apply_filters('revslider_slide_initBySlide', $slide, $this);
  118. $this->id = "template";
  119. $this->templateID = $slide->getID();
  120. $this->sliderID = $slide->getSliderID();
  121. $this->slideOrder = $slide->getOrder();
  122. $this->imageUrl = $slide->getImageUrl();
  123. $this->imageID = $slide->getImageID();
  124. $this->imageThumb = $slide->getThumbUrl();
  125. $this->imageFilepath = $slide->getImageFilepath();
  126. $this->imageFilename = $slide->getImageFilename();
  127. $this->params = $slide->getParams();
  128. $this->arrLayers = $slide->getLayers();
  129. $this->settings = $slide->getSettings();
  130. $this->arrChildren = $slide->getArrChildrenPure();
  131. }
  132. /**
  133. *
  134. * init slide by post data
  135. */
  136. public function initByStreamData($postData, $slideTemplate, $sliderID, $sourceType, $additions){
  137. $a = apply_filters('revslider_slide_initByStreamData', array('postData' => $postData, 'slideTemplate' => $slideTemplate, 'sliderID' => $sliderID, 'sourceType' => $sourceType, 'additions' => $additions), $this);
  138. $this->postData = array();
  139. $this->postData = (array)$a['postData'];
  140. //init by global template
  141. $this->initBySlide($a['slideTemplate']);
  142. switch($a['sourceType']){
  143. case 'facebook':
  144. $this->initByFacebook($a['sliderID'], $a['additions']);
  145. break;
  146. case 'twitter':
  147. $this->initByTwitter($a['sliderID'], $a['additions']);
  148. break;
  149. case 'instagram':
  150. $this->initByInstagram($a['sliderID']);
  151. break;
  152. case 'flickr':
  153. $this->initByFlickr($a['sliderID']);
  154. break;
  155. case 'youtube':
  156. $this->initByYoutube($a['sliderID'], $a['additions']);
  157. break;
  158. case 'vimeo':
  159. $this->initByVimeo($a['sliderID'], $a['additions']);
  160. break;
  161. default:
  162. $return = apply_filters('revslider_slide_initByStreamData_sourceType', false, $a, $this);
  163. if($return === false)
  164. RevSliderFunctions::throwError(__("Source must be from Stream", 'revslider'));
  165. break;
  166. }
  167. }
  168. /**
  169. * init the data for facebook
  170. * @since: 5.0
  171. * @change: 5.1.1 Facebook Album
  172. */
  173. private function initByFacebook($sliderID, $additions){
  174. $this->postData = apply_filters('revslider_slide_initByFacebook_pre', $this->postData, $sliderID, $additions, $this);
  175. //set some slide params
  176. $this->id = RevSliderFunctions::getVal($this->postData, 'id');
  177. $this->params["title"] = RevSliderFunctions::getVal($this->postData, 'name');
  178. if(isset($this->params['enable_link']) && $this->params['enable_link'] == "true" && isset($this->params['link_type']) && $this->params['link_type'] == "regular"){
  179. $link = RevSliderFunctions::getVal($this->postData, 'link');
  180. $this->params["link"] = str_replace(array("%link%", '{{link}}'), $link, $this->params["link"]);
  181. }
  182. $this->params["state"] = "published";
  183. if($this->params["background_type"] == 'image'){ //if image is choosen, use featured image as background
  184. if($additions['fb_type'] == 'album'){
  185. $this->imageUrl = 'https://graph.facebook.com/'.RevSliderFunctions::getVal($this->postData, 'id').'/picture';
  186. $this->imageThumb = RevSliderFunctions::getVal($this->postData, 'picture');
  187. }else{
  188. $img = $this->get_facebook_timeline_image();
  189. $this->imageUrl = $img;
  190. $this->imageThumb = $img;
  191. }
  192. if(empty($this->imageUrl))
  193. $this->imageUrl = RS_PLUGIN_URL.'public/assets/assets/sources/fb.png';
  194. if(is_ssl()){
  195. $this->imageUrl = str_replace("http://", "https://", $this->imageUrl);
  196. }
  197. $this->imageFilename = basename($this->imageUrl);
  198. }
  199. $this->postData = apply_filters('revslider_slide_initByFacebook_post', $this->postData, $sliderID, $additions, $this);
  200. //replace placeholders in layers:
  201. $this->setLayersByStreamData($sliderID, 'facebook', $additions);
  202. }
  203. /**
  204. * init the data for twitter
  205. * @since: 5.0
  206. */
  207. private function initByTwitter($sliderID, $additions){
  208. $this->postData = apply_filters('revslider_slide_initByTwitter_pre', $this->postData, $sliderID, $additions, $this);
  209. //set some slide params
  210. $this->id = RevSliderFunctions::getVal($this->postData, 'id');
  211. $this->params["title"] = RevSliderFunctions::getVal($this->postData, 'title');
  212. if(isset($this->params['enable_link']) && $this->params['enable_link'] == "true" && isset($this->params['link_type']) && $this->params['link_type'] == "regular"){
  213. $link = 'https://twitter.com/'.$additions['twitter_user'].'/status/'.RevSliderFunctions::getVal($this->postData, 'id_str');
  214. $this->params["link"] = str_replace(array("%link%", '{{link}}'), $link, $this->params["link"]);
  215. }
  216. $this->params["state"] = "published";
  217. if($this->params["background_type"] == 'trans' || $this->params["background_type"] == 'image' || $this->params["background_type"] == 'streamtwitter' || $this->params["background_type"] == 'streamtwitterboth'){ //if image is choosen, use featured image as background
  218. $img_sizes = RevSliderBase::get_all_image_sizes('twitter');
  219. $imgResolution = RevSliderFunctions::getVal($this->params, 'image_source_type', reset($img_sizes));
  220. $this->imageID = RevSliderFunctions::getVal($this->postData, 'id');
  221. if(!isset($img_sizes[$imgResolution])) $imgResolution = key($img_sizes);
  222. $image_url_array = RevSliderFunctions::getVal($this->postData, 'media');
  223. $image_url_large = RevSliderFunctions::getVal($image_url_array, 'large');
  224. $img = RevSliderFunctions::getVal($image_url_large, 'media_url', '');
  225. $entities = RevSliderFunctions::getVal($this->postData, 'entities');
  226. if($img == ''){
  227. $image_url_array = RevSliderFunctions::getVal($entities, 'media');
  228. if(is_array($image_url_array) && isset($image_url_array[0])){
  229. if(is_ssl()){
  230. $img = RevSliderFunctions::getVal($image_url_array[0], 'media_url_https');
  231. }else{
  232. $img = RevSliderFunctions::getVal($image_url_array[0], 'media_url');
  233. }
  234. }
  235. }
  236. $urls = RevSliderFunctions::getVal($entities, 'urls');
  237. if(is_array($urls) && isset($urls[0])){
  238. $display_url = RevSliderFunctions::getVal($urls[0], 'display_url');
  239. //check if youtube or vimeo is inside
  240. if(strpos($display_url, 'youtu.be') !== false){
  241. $raw = explode('/', $display_url);
  242. $yturl = $raw[1];
  243. $this->params["slide_bg_youtube"] = $yturl; //set video for background video
  244. }elseif(strpos($display_url, 'vimeo.com') !== false){
  245. $raw = explode('/', $display_url);
  246. $vmurl = $raw[1];
  247. $this->params["slide_bg_vimeo"] = $vmurl; //set video for background video
  248. }
  249. }
  250. $image_url_array = RevSliderFunctions::getVal($entities, 'media');
  251. if(is_array($image_url_array) && isset($image_url_array[0])){
  252. $video_info = RevSliderFunctions::getVal($image_url_array[0], 'video_info');
  253. $variants = RevSliderFunctions::getVal($video_info, 'variants');
  254. if(is_array($variants) && isset($variants[0])){
  255. $mp4 = RevSliderFunctions::getVal($variants[0], 'url');
  256. $this->params["slide_bg_html_mpeg"] = $mp4; //set video for background video
  257. }
  258. }
  259. $entities = RevSliderFunctions::getVal($this->postData, 'extended_entities');
  260. if($img == ''){
  261. $image_url_array = RevSliderFunctions::getVal($entities, 'media');
  262. if(is_array($image_url_array) && isset($image_url_array[0])){
  263. if(is_ssl()){
  264. $img = RevSliderFunctions::getVal($image_url_array[0], 'media_url_https');
  265. }else{
  266. $img = RevSliderFunctions::getVal($image_url_array[0], 'media_url');
  267. }
  268. }
  269. }
  270. $urls = RevSliderFunctions::getVal($entities, 'urls');
  271. if(is_array($urls) && isset($urls[0])){
  272. $display_url = RevSliderFunctions::getVal($urls[0], 'display_url');
  273. //check if youtube or vimeo is inside
  274. if(strpos($display_url, 'youtu.be') !== false){
  275. $raw = explode('/', $display_url);
  276. $yturl = $raw[1];
  277. $this->params["slide_bg_youtube"] = $yturl; //set video for background video
  278. }elseif(strpos($display_url, 'vimeo.com') !== false){
  279. $raw = explode('/', $display_url);
  280. $vmurl = $raw[1];
  281. $this->params["slide_bg_vimeo"] = $vmurl; //set video for background video
  282. }
  283. }
  284. $image_url_array = RevSliderFunctions::getVal($entities, 'media');
  285. if(is_array($image_url_array) && isset($image_url_array[0])){
  286. $video_info = RevSliderFunctions::getVal($image_url_array[0], 'video_info');
  287. $variants = RevSliderFunctions::getVal($video_info, 'variants');
  288. if(is_array($variants) && isset($variants[0])){
  289. $mp4 = RevSliderFunctions::getVal($variants[0], 'url');
  290. $this->params["slide_bg_html_mpeg"] = $mp4; //set video for background video
  291. }
  292. }
  293. if($img !== ''){
  294. $this->imageUrl = $img;
  295. $this->imageThumb = $img;
  296. }
  297. //if(empty($this->imageUrl))
  298. // return(false);
  299. if(empty($this->imageUrl))
  300. $this->imageUrl = RS_PLUGIN_URL.'public/assets/assets/sources/tw.png';
  301. if(is_ssl()){
  302. $this->imageUrl = str_replace("http://", "https://", $this->imageUrl);
  303. }
  304. $this->imageFilename = basename($this->imageUrl);
  305. }
  306. $this->postData = apply_filters('revslider_slide_initByTwitter_post', $this->postData, $sliderID, $additions, $this);
  307. //replace placeholders in layers:
  308. $this->setLayersByStreamData($sliderID, 'twitter', $additions);
  309. }
  310. /**
  311. * init the data for instagram
  312. * @since: 5.0
  313. */
  314. private function initByInstagram($sliderID){
  315. $this->postData = apply_filters('revslider_slide_initByInstagram_pre', $this->postData, $sliderID, $this);
  316. //var_dump($this->params);
  317. //set some slide params
  318. $this->id = $this->postData['node']->id;
  319. $caption = $this->postData['node']->edge_media_to_caption->edges[0]->node->text;
  320. $this->params["title"] = $caption ;
  321. $link = 'https://www.instagram.com/p/' . $this->postData['node']->shortcode;
  322. $this->params["link"] = $link;
  323. if(isset($this->params['enable_link']) && $this->params['enable_link'] == "true" && isset($this->params['link_type']) && $this->params['link_type'] == "regular"){
  324. $this->params["link"] = str_replace(array("%link%", '{{link}}'), $link, $this->params["link"]);
  325. }
  326. $this->params["state"] = "published";
  327. if($this->params["background_type"] == 'trans' || $this->params["background_type"] == 'image' || $this->params["background_type"] == 'streaminstagram' || $this->params["background_type"] == 'streaminstagramboth'){ //if image is choosen, use featured image as background
  328. //$img_sizes = RevSliderBase::get_all_image_sizes('instagram');
  329. //$imgResolution = RevSliderFunctions::getVal($this->params, 'image_source_type', reset($img_sizes));
  330. //if(!isset($img_sizes[$imgResolution])) $imgResolution = key($img_sizes);
  331. /*$this->imageID = RevSliderFunctions::getVal($this->postData['node'], 'id');
  332. $imgs = RevSliderFunctions::getVal($this->postData['node'], 'images', array());
  333. $is = array();
  334. foreach($imgs as $k => $im){
  335. $is[$k] = $im->url;
  336. }
  337. if(isset($is[$imgResolution])){
  338. $this->imageUrl = $is[$imgResolution];
  339. $this->imageThumb = $is['thumbnail'];
  340. }
  341. else {
  342. $this->imageUrl = $this->postData['node']->display_src;
  343. $this->imageThumb = $this->postData['node']->thumbnail_src;
  344. }*/
  345. if(empty($this->postData['node']->display_url)){
  346. $this->imageUrl = RS_PLUGIN_URL.'public/assets/assets/sources/ig.png';
  347. }
  348. else {
  349. $this->imageUrl = $this->postData['node']->display_url;
  350. $this->imageThumb = $this->postData['node']->thumbnail_src;
  351. }
  352. //if(empty($this->imageUrl))
  353. // return(false);
  354. if(empty($this->imageUrl)){
  355. $this->imageUrl = RS_PLUGIN_URL.'public/assets/assets/sources/ig.png';
  356. }
  357. if(is_ssl()){
  358. $this->imageUrl = str_replace("http://", "https://", $this->imageUrl);
  359. }
  360. $this->imageFilename = basename($this->imageUrl);
  361. }
  362. $videos = RevSliderFunctions::getVal($this->postData['node'], 'videos');
  363. if(!empty($videos) && isset($videos->standard_resolution) && isset($videos->standard_resolution->url)){
  364. $this->params["slide_bg_instagram"] = $videos->standard_resolution->url; //set video for background video
  365. $this->params["slide_bg_html_mpeg"] = $videos->standard_resolution->url; //set video for background video
  366. }
  367. $this->postData = apply_filters('revslider_slide_initByInstagram_post', $this->postData['node'], $sliderID, $this);
  368. //replace placeholders in layers:
  369. $this->setLayersByStreamData($sliderID, 'instagram');
  370. }
  371. /**
  372. * init the data for flickr
  373. * @since: 5.0
  374. */
  375. private function initByFlickr($sliderID){
  376. $this->postData = apply_filters('revslider_slide_initByFlickr_pre', $this->postData, $sliderID, $this);
  377. //set some slide params
  378. $this->id = RevSliderFunctions::getVal($this->postData, 'id');
  379. $this->params["title"] = RevSliderFunctions::getVal($this->postData, 'title');
  380. if(isset($this->params['enable_link']) && $this->params['enable_link'] == "true" && isset($this->params['link_type']) && $this->params['link_type'] == "regular"){
  381. $link = 'http://flic.kr/p/'.$this->base_encode(RevSliderFunctions::getVal($this->postData, 'id'));
  382. $this->params["link"] = str_replace(array("%link%", '{{link}}'), $link, $this->params["link"]);
  383. }
  384. $this->params["state"] = "published";
  385. if($this->params["background_type"] == 'image'){ //if image is choosen, use featured image as background
  386. //facebook check which image size is choosen
  387. $img_sizes = RevSliderBase::get_all_image_sizes('flickr');
  388. $imgResolution = RevSliderFunctions::getVal($this->params, 'image_source_type', reset($img_sizes));
  389. $this->imageID = RevSliderFunctions::getVal($this->postData, 'id');
  390. if(!isset($img_sizes[$imgResolution])) $imgResolution = key($img_sizes);
  391. $is = @array(
  392. 'square' => RevSliderFunctions::getVal($this->postData, 'url_sq'),
  393. 'large-square' => RevSliderFunctions::getVal($this->postData, 'url_q'),
  394. 'thumbnail' => RevSliderFunctions::getVal($this->postData, 'url_t'),
  395. 'small' => RevSliderFunctions::getVal($this->postData, 'url_s'),
  396. 'small-320' => RevSliderFunctions::getVal($this->postData, 'url_n'),
  397. 'medium' => RevSliderFunctions::getVal($this->postData, 'url_m'),
  398. 'medium-640' => RevSliderFunctions::getVal($this->postData, 'url_z'),
  399. 'medium-800' => RevSliderFunctions::getVal($this->postData, 'url_c'),
  400. 'large' => RevSliderFunctions::getVal($this->postData, 'url_l'),
  401. 'original' => RevSliderFunctions::getVal($this->postData, 'url_o')
  402. );
  403. $this->imageUrl = (isset($is[$imgResolution])) ? $is[$imgResolution] : '';
  404. $this->imageThumb = (isset($is['thumbnail'])) ? $is['thumbnail'] : '';
  405. //if(empty($this->imageUrl))
  406. // return(false);
  407. if(empty($this->imageUrl))
  408. $this->imageUrl = RS_PLUGIN_URL.'public/assets/assets/sources/fr.png';
  409. if(is_ssl()){
  410. $this->imageUrl = str_replace("http://", "https://", $this->imageUrl);
  411. }
  412. $this->imageFilename = basename($this->imageUrl);
  413. if(!empty($thumbID))
  414. $this->setImageByImageURL($thumbID);
  415. }
  416. $this->postData = apply_filters('revslider_slide_initByFlickr_post', $this->postData, $sliderID, $this);
  417. //replace placeholders in layers:
  418. $this->setLayersByStreamData($sliderID, 'flickr');
  419. }
  420. /**
  421. * init the data for youtube
  422. * @since: 5.0
  423. */
  424. private function initByYoutube($sliderID, $additions){
  425. $this->postData = apply_filters('revslider_slide_initByYoutube_pre', $this->postData, $sliderID, $additions, $this);
  426. //set some slide params
  427. $snippet = RevSliderFunctions::getVal($this->postData, 'snippet');
  428. $resource = RevSliderFunctions::getVal($snippet, 'resourceId');
  429. if($additions['yt_type'] == 'channel'){
  430. $link_raw = RevSliderFunctions::getVal($this->postData, 'id');
  431. $link = RevSliderFunctions::getVal($link_raw, 'videoId');
  432. }else{
  433. $link_raw = RevSliderFunctions::getVal($snippet, 'resourceId');
  434. $link = RevSliderFunctions::getVal($link_raw, 'videoId');
  435. }
  436. if(isset($this->params['enable_link']) && $this->params['enable_link'] == "true" && isset($this->params['link_type']) && $this->params['link_type'] == "regular"){
  437. if($link !== '') $link = '//youtube.com/watch?v='.$link;
  438. $this->params["link"] = str_replace(array("%link%", '{{link}}'), $link, $this->params["link"]);
  439. }
  440. $this->params["slide_bg_youtube"] = $link; //set video for background video
  441. switch($additions['yt_type']){
  442. case 'channel':
  443. $id = RevSliderFunctions::getVal($this->postData, 'id');
  444. $this->id = RevSliderFunctions::getVal($id, 'videoId');
  445. break;
  446. case 'playlist':
  447. $this->id = RevSliderFunctions::getVal($resource, 'videoId');
  448. break;
  449. }
  450. if($this->id == '') $this->id = 'not-found';
  451. $this->params["title"] = RevSliderFunctions::getVal($snippet, 'title');
  452. $this->params["state"] = "published";
  453. if($this->params["background_type"] == 'trans' || $this->params["background_type"] == 'image' || $this->params["background_type"] == 'streamyoutube' || $this->params["background_type"] == 'streamyoutubeboth'){ //if image is choosen, use featured image as background
  454. //facebook check which image size is choosen
  455. $img_sizes = RevSliderBase::get_all_image_sizes('youtube');
  456. $imgResolution = RevSliderFunctions::getVal($this->params, 'image_source_type', reset($img_sizes));
  457. $this->imageID = RevSliderFunctions::getVal($resource, 'videoId');
  458. if(!isset($img_sizes[$imgResolution])) $imgResolution = key($img_sizes);
  459. $thumbs = RevSliderFunctions::getVal($snippet, 'thumbnails');
  460. $is = array();
  461. if(!empty($thumbs)){
  462. foreach($thumbs as $name => $vals){
  463. $is[$name] = RevSliderFunctions::getVal($vals, 'url');
  464. }
  465. }
  466. $this->imageUrl = (isset($is[$imgResolution])) ? $is[$imgResolution] : '';
  467. $this->imageThumb = (isset($is['medium'])) ? $is['medium'] : '';
  468. //if(empty($this->imageUrl))
  469. // return(false);
  470. if(empty($this->imageUrl))
  471. $this->imageUrl = RS_PLUGIN_URL.'public/assets/assets/sources/yt.png';
  472. if(is_ssl()){
  473. $this->imageUrl = str_replace("http://", "https://", $this->imageUrl);
  474. }
  475. $this->imageFilename = basename($this->imageUrl);
  476. if(!empty($thumbID))
  477. $this->setImageByImageURL($thumbID);
  478. }
  479. $this->postData = apply_filters('revslider_slide_initByYoutube_post', $this->postData, $sliderID, $additions, $this);
  480. //replace placeholders in layers:
  481. $this->setLayersByStreamData($sliderID, 'youtube', $additions);
  482. }
  483. /**
  484. * init the data for vimeo
  485. * @since: 5.0
  486. */
  487. private function initByVimeo($sliderID, $additions){
  488. $this->postData = apply_filters('revslider_slide_initByVimeo_pre', $this->postData, $sliderID, $additions, $this);
  489. //set some slide params
  490. $this->id = RevSliderFunctions::getVal($this->postData, 'id');
  491. $this->params["title"] = RevSliderFunctions::getVal($this->postData, 'title');
  492. if(isset($this->params['enable_link']) && $this->params['enable_link'] == "true" && isset($this->params['link_type']) && $this->params['link_type'] == "regular"){
  493. $link = RevSliderFunctions::getVal($this->postData, 'url');
  494. $this->params["link"] = str_replace(array("%link%", '{{link}}'), $link, $this->params["link"]);
  495. }
  496. $this->params["slide_bg_vimeo"] = RevSliderFunctions::getVal($this->postData, 'url');
  497. $this->params["state"] = "published";
  498. if($this->params["background_type"] == 'trans' || $this->params["background_type"] == 'image' || $this->params["background_type"] == 'streamvimeo' || $this->params["background_type"] == 'streamvimeoboth'){ //if image is choosen, use featured image as background
  499. //facebook check which image size is choosen
  500. $img_sizes = RevSliderBase::get_all_image_sizes('vimeo');
  501. $imgResolution = RevSliderFunctions::getVal($this->params, 'image_source_type', reset($img_sizes));
  502. $this->imageID = RevSliderFunctions::getVal($this->postData, 'id');
  503. if(!isset($img_sizes[$imgResolution])) $imgResolution = key($img_sizes);
  504. $is = array();
  505. foreach($img_sizes as $handle => $name){
  506. $is[$handle] = RevSliderFunctions::getVal($this->postData, $handle);
  507. }
  508. $this->imageUrl = (isset($is[$imgResolution])) ? $is[$imgResolution] : '';
  509. $this->imageThumb = (isset($is['thumbnail'])) ? $is['thumbnail'] : '';
  510. //if(empty($this->imageUrl))
  511. // return(false);
  512. if(empty($this->imageUrl))
  513. $this->imageUrl = RS_PLUGIN_URL.'public/assets/assets/sources/vm.png';
  514. if(is_ssl()){
  515. $this->imageUrl = str_replace("http://", "https://", $this->imageUrl);
  516. }
  517. $this->imageFilename = basename($this->imageUrl);
  518. if(!empty($thumbID))
  519. $this->setImageByImageURL($thumbID);
  520. }
  521. $this->postData = apply_filters('revslider_slide_initByVimeo_post', $this->postData, $sliderID, $additions, $this);
  522. //replace placeholders in layers:
  523. $this->setLayersByStreamData($sliderID, 'vimeo', $additions);
  524. }
  525. /**
  526. * replace layer placeholders by stream data
  527. * @since: 5.0
  528. */
  529. private function setLayersByStreamData($sliderID, $stream_type, $additions = array()){
  530. $a = apply_filters('revslider_slide_setLayersByStreamData_pre', array('arrLayers' => $this->arrLayers, 'params' => $this->params), $sliderID, $stream_type, $additions, $this);
  531. $this->params = $a['params'];
  532. $this->arrLayers = $a['arrLayers'];
  533. $attr = $this->return_stream_data($stream_type, $additions);
  534. foreach($this->arrLayers as $key=>$layer){
  535. $text = RevSliderFunctions::getVal($layer, "text");
  536. $text = apply_filters('revslider_mod_stream_meta', $text, $sliderID, $stream_type, $this->postData); //option to add your own filter here to modify meta to your likings
  537. $text = $this->set_stream_data($text, $attr, $stream_type, $additions);
  538. $layer["text"] = $text;
  539. //set link actions to the stream data
  540. $layer['layer_action'] = (array) $layer['layer_action'];
  541. if(isset($layer['layer_action'])){
  542. if(isset($layer['layer_action']['image_link']) && !empty($layer['layer_action']['image_link'])){
  543. foreach($layer['layer_action']['image_link'] as $jtsk => $jtsval){
  544. $layer['layer_action']['image_link'][$jtsk] = $this->set_stream_data($layer['layer_action']['image_link'][$jtsk], $attr, $stream_type, $additions, true);
  545. }
  546. }
  547. }
  548. $this->arrLayers[$key] = $layer;
  549. }
  550. /*$params = $this->getParams();
  551. foreach($params as $key => $param){ //set metas on all params except arrays
  552. if(!is_array($param)){
  553. $pa = $this->set_stream_data($param, $attr, $stream_type, $additions);
  554. $this->setParam($key, $pa);
  555. }
  556. }*/
  557. //set params to the stream data
  558. for($mi=1;$mi<=10;$mi++){
  559. $pa = $this->getParam('params_'.$mi, '');
  560. $pa = $this->set_stream_data($pa, $attr, $stream_type, $additions);
  561. $this->setParam('params_'.$mi, $pa);
  562. }
  563. $param_list = array('id_attr', 'class_attr', 'data_attr');
  564. //set params to the stream data
  565. foreach($param_list as $p){
  566. $pa = $this->getParam($p, '');
  567. $pa = $this->set_stream_data($pa, $attr, $stream_type, $additions);
  568. $this->setParam($p, $pa);
  569. }
  570. $a = apply_filters('revslider_slide_setLayersByStreamData_post', array('arrLayers' => $this->arrLayers, 'params' => $this->params), $sliderID, $stream_type, $additions, $this);
  571. $this->params = $a['params'];
  572. $this->arrLayers = $a['arrLayers'];
  573. }
  574. public function set_stream_data($text, $attr, $stream_type, $additions = array(), $is_action = false){
  575. $img_sizes = RevSliderBase::get_all_image_sizes($stream_type);
  576. $text = apply_filters('revslider_slide_set_stream_data_pre', $text, $attr, $stream_type, $additions, $is_action, $img_sizes);
  577. $title = ($stream_type == 'twitter' && $is_action === false) ? RevSliderBase::add_wrap_around_url($attr['title']) : $attr['title'];
  578. $excerpt = ($stream_type == 'twitter' && $is_action === false) ? RevSliderBase::add_wrap_around_url($attr['excerpt']) : $attr['excerpt'];
  579. $content = ($stream_type == 'twitter' && $is_action === false) ? RevSliderBase::add_wrap_around_url($attr['content']) : $attr['content'];
  580. $text = str_replace(array('%title%', '{{title}}'), $title, $text);
  581. $text = str_replace(array('%excerpt%', '{{excerpt}}'), $excerpt, $text);
  582. $text = str_replace(array('%alias%', '{{alias}}'), $attr['alias'], $text);
  583. $text = str_replace(array('%content%', '{{content}}'), $content, $text);
  584. $text = str_replace(array('%link%', '{{link}}'), $attr['link'], $text);
  585. $text = str_replace(array('%date_published%', '{{date_published}}', '%date%', '{{date}}'), $attr['date'], $text);
  586. $text = str_replace(array('%date_modified%', '{{date_modified}}'), $attr['date_modified'], $text);
  587. $text = str_replace(array('%author_name%', '{{author_name}}'), $attr['author_name'], $text);
  588. $text = str_replace(array('%num_comments%', '{{num_comments}}'), $attr['num_comments'], $text);
  589. $text = str_replace(array('%catlist%', '{{catlist}}'), $attr['catlist'], $text);
  590. $text = str_replace(array('%catlist_raw%', '{{catlist_raw}}'), $attr['catlist_raw'], $text);
  591. $text = str_replace(array('%taglist%', '{{taglist}}'), $attr['taglist'], $text);
  592. $text = str_replace(array('%likes%', '{{likes}}'), $attr['likes'], $text);
  593. $text = str_replace(array('%retweet_count%', '{{retweet_count}}'), $attr['retweet_count'], $text);
  594. $text = str_replace(array('%favorite_count%', '{{favorite_count}}'), $attr['favorite_count'], $text);
  595. $text = str_replace(array('%views%', '{{views}}'), $attr['views'], $text);
  596. $arrMatches = array();
  597. preg_match_all("/{{content:\w+[\:]\w+}}/", $text, $arrMatches);
  598. foreach($arrMatches as $matched){
  599. foreach($matched as $match) {
  600. //now check length and type
  601. $meta = str_replace("{{content:", "", $match);
  602. $meta = str_replace("}}","",$meta);
  603. $meta = str_replace('_REVSLIDER_', '-', $meta);
  604. $vals = explode(':', $meta);
  605. if(count($vals) !== 2) continue; //not correct values
  606. $vals[1] = intval($vals[1]); //get real number
  607. if($vals[1] === 0 || $vals[1] < 0) continue; //needs to be at least 1
  608. if($vals[0] == 'words'){
  609. $metaValue = explode(' ', strip_tags($content), $vals[1]+1);
  610. if(is_array($metaValue) && count($metaValue) > $vals[1]) array_pop($metaValue);
  611. $metaValue = implode(' ', $metaValue);
  612. }elseif($vals[0] == 'chars'){
  613. $metaValue = substr(strip_tags($content), 0, $vals[1]);
  614. }else{
  615. continue;
  616. }
  617. $text = str_replace($match,$metaValue,$text);
  618. }
  619. }
  620. switch($stream_type){
  621. case 'facebook':
  622. foreach($img_sizes as $img_handle => $img_name){
  623. if(!isset($attr['img_urls'])) $attr['img_urls'] = array();
  624. if(!isset($attr['img_urls'][$img_handle])) $attr['img_urls'][$img_handle] = array();
  625. if(!isset($attr['img_urls'][$img_handle]['url'])) $attr['img_urls'][$img_handle]['url'] = '';
  626. if(!isset($attr['img_urls'][$img_handle]['tag'])) $attr['img_urls'][$img_handle]['tag'] = '';
  627. if($additions['fb_type'] == 'album'){
  628. $text = str_replace(array('%image_url_'.$img_handle.'%', '{{image_url_'.$img_handle.'}}'), $attr['img_urls'][$img_handle]['url'], $text);
  629. $text = str_replace(array('%image_'.$img_handle.'%', '{{image_'.$img_handle.'}}'), $attr['img_urls'][$img_handle]['tag'], $text);
  630. }else{
  631. $text = str_replace(array('%image_url_'.$img_handle.'%', '{{image_url_'.$img_handle.'}}'), $attr['img_urls']['url'], $text);
  632. $text = str_replace(array('%image_'.$img_handle.'%', '{{image_'.$img_handle.'}}'), $attr['img_urls']['tag'], $text);
  633. }
  634. }
  635. break;
  636. case 'youtube':
  637. case 'vimeo':
  638. //$text = str_replace(array('%image_url_'.$img_handle.'%', '{{image_url_'.$img_handle.'}}'), @$attr['img_urls'][$img_handle]['url'], $text);
  639. //$text = str_replace(array('%image_'.$img_handle.'%', '{{image_'.$img_handle.'}}'), @$attr['img_urls'][$img_handle]['tag'], $text);
  640. case 'twitter':
  641. case 'instagram':
  642. case 'flickr':
  643. foreach($img_sizes as $img_handle => $img_name){
  644. if(!isset($attr['img_urls'])) $attr['img_urls'] = array();
  645. if(!isset($attr['img_urls'][$img_handle])) $attr['img_urls'][$img_handle] = array();
  646. if(!isset($attr['img_urls'][$img_handle]['url'])) $attr['img_urls'][$img_handle]['url'] = '';
  647. if(!isset($attr['img_urls'][$img_handle]['tag'])) $attr['img_urls'][$img_handle]['tag'] = '';
  648. $text = str_replace(array('%image_url_'.$img_handle.'%', '{{image_url_'.$img_handle.'}}'), $attr['img_urls'][$img_handle]['url'], $text);
  649. $text = str_replace(array('%image_'.$img_handle.'%', '{{image_'.$img_handle.'}}'), $attr['img_urls'][$img_handle]['tag'], $text);
  650. }
  651. break;
  652. }
  653. return apply_filters('revslider_slide_set_stream_data_post', $text, $attr, $stream_type, $additions, $is_action, $img_sizes);
  654. }
  655. public function return_stream_data($stream_type, $additions = array()){
  656. $attr = array();
  657. $attr['title'] = '';
  658. $attr['excerpt'] = '';
  659. $attr['alias'] = '';
  660. $attr['content'] = '';
  661. $attr['link'] = '';
  662. $attr['date'] = '';
  663. $attr['date_modified'] = '';
  664. $attr['author_name'] = '';
  665. $attr['num_comments'] = '';
  666. $attr['catlist'] = '';
  667. $attr['catlist_raw'] = '';
  668. $attr['taglist'] = '';
  669. $attr['likes'] = '';
  670. $attr['retweet_count'] = '';
  671. $attr['favorite_count'] = '';
  672. $attr['views'] = '';
  673. $attr['img_urls'] = array();
  674. $img_sizes = RevSliderBase::get_all_image_sizes($stream_type);
  675. $attr = apply_filters('revslider_slide_return_stream_data_pre', $attr, $stream_type, $additions, $img_sizes);
  676. switch($stream_type){
  677. case 'facebook':
  678. if($additions['fb_type'] == 'album'){
  679. $attr['title'] = RevSliderFunctions::getVal($this->postData, 'name');
  680. $attr['content'] = RevSliderFunctions::getVal($this->postData, 'name');
  681. $attr['link'] = RevSliderFunctions::getVal($this->postData, 'link');
  682. $attr['date'] = RevSliderFunctionsWP::convertPostDate(RevSliderFunctions::getVal($this->postData, 'created_time'), true);
  683. $attr['date_modified'] = RevSliderFunctionsWP::convertPostDate(RevSliderFunctions::getVal($this->postData, 'updated_time'), true);
  684. $author_name_raw = RevSliderFunctions::getVal($this->postData, 'from');
  685. $attr['author_name'] = $author_name_raw->name;
  686. $likes_data = RevSliderFunctions::getVal($this->postData, 'likes');
  687. $attr['likes'] = count(RevSliderFunctions::getVal($likes_data, 'data'));
  688. $fb_img_thumbnail = RevSliderFunctions::getVal($this->postData, 'picture');
  689. $fb_img = 'https://graph.facebook.com/'.RevSliderFunctions::getVal($this->postData, 'id').'/picture';
  690. $attr['img_urls']['full'] = array(
  691. 'url' => $fb_img,
  692. 'tag' => '<img src="'.$fb_img.'" data-no-retina />'
  693. );
  694. $attr['img_urls']['thumbnail'] = array(
  695. 'url' => $fb_img_thumbnail,
  696. 'tag' => '<img src="'.$fb_img_thumbnail.'" data-no-retina />'
  697. );
  698. }else{
  699. $attr['title'] = RevSliderFunctions::getVal($this->postData, 'message');
  700. $attr['content'] = RevSliderFunctions::getVal($this->postData, 'message');
  701. $post_url = explode('_', RevSliderFunctions::getVal($this->postData, 'id'));
  702. $attr['link'] = 'https://www.facebook.com/'.$additions['fb_user_id'].'/posts/'.$post_url[1];
  703. $attr['date'] = RevSliderFunctionsWP::convertPostDate(RevSliderFunctions::getVal($this->postData, 'created_time'), true);
  704. $attr['date_modified'] = RevSliderFunctionsWP::convertPostDate(RevSliderFunctions::getVal($this->postData, 'updated_time'), true);
  705. $author_name_raw = RevSliderFunctions::getVal($this->postData, 'from');
  706. $attr['author_name'] = $author_name_raw->name;
  707. $likes_data = RevSliderFunctions::getVal($this->postData, 'likes');
  708. $likes_data = RevSliderFunctions::getVal($likes_data, 'summary');
  709. $likes_data = RevSliderFunctions::getVal($likes_data, 'total_count');
  710. $attr['likes'] = intval($likes_data);
  711. $img = $this->get_facebook_timeline_image();
  712. $attr['img_urls'] = array(
  713. 'url' => $img,
  714. 'tag' => '<img src="'.$img.'" data-no-retina />'
  715. );
  716. }
  717. break;
  718. case 'twitter':
  719. $user = RevSliderFunctions::getVal($this->postData, 'user');
  720. $attr['title'] = RevSliderFunctions::getVal($this->postData, 'full_text');
  721. $attr['content'] = RevSliderFunctions::getVal($this->postData, 'full_text');
  722. $attr['link'] = 'https://twitter.com/'.$additions['twitter_user'].'/status/'.RevSliderFunctions::getVal($this->postData, 'id_str');
  723. $attr['date'] = RevSliderFunctionsWP::convertPostDate(RevSliderFunctions::getVal($this->postData, 'created_at'), true);
  724. $attr['author_name'] = RevSliderFunctions::getVal($user, 'screen_name');
  725. $attr['retweet_count'] = RevSliderFunctions::getVal($this->postData, 'retweet_count', '0');
  726. $attr['favorite_count'] = RevSliderFunctions::getVal($this->postData, 'favorite_count', '0');
  727. $image_url_array = RevSliderFunctions::getVal($this->postData, 'media');
  728. $image_url_large = RevSliderFunctions::getVal($image_url_array, 'large');
  729. $img = RevSliderFunctions::getVal($image_url_large, 'media_url', '');
  730. if($img == ''){
  731. $entities = RevSliderFunctions::getVal($this->postData, 'entities');
  732. $image_url_array = RevSliderFunctions::getVal($entities, 'media');
  733. if(is_array($image_url_array) && isset($image_url_array[0])){
  734. if(is_ssl()){
  735. $img = RevSliderFunctions::getVal($image_url_array[0], 'media_url_https');
  736. }else{
  737. $img = RevSliderFunctions::getVal($image_url_array[0], 'media_url');
  738. }
  739. $image_url_large = $image_url_array[0];
  740. }
  741. }
  742. if($img == ''){
  743. $entities = RevSliderFunctions::getVal($this->postData, 'extended_entities');
  744. $image_url_array = RevSliderFunctions::getVal($entities, 'media');
  745. if(is_array($image_url_array) && isset($image_url_array[0])){
  746. if(is_ssl()){
  747. $img = RevSliderFunctions::getVal($image_url_array[0], 'media_url_https');
  748. }else{
  749. $img = RevSliderFunctions::getVal($image_url_array[0], 'media_url');
  750. }
  751. $image_url_large = $image_url_array[0];
  752. }
  753. }
  754. if($img !== ''){
  755. $w = RevSliderFunctions::getVal($image_url_large, 'w', '');
  756. $h = RevSliderFunctions::getVal($image_url_large, 'h', '');
  757. $attr['img_urls']['large'] = array(
  758. 'url' => $img,
  759. 'tag' => '<img src="'.$img.'" width="'.$w.'" height="'.$h.'" data-no-retina />'
  760. );
  761. }
  762. break;
  763. case 'instagram':
  764. $caption = $this->postData->edge_media_to_caption->edges[0]->node->text;
  765. $user = isset($this->postData->user_info) ? $this->postData->user_info : '';
  766. $attr['title'] = $caption;
  767. $attr['content'] = $caption;
  768. $attr['link'] = 'https://www.instagram.com/p/' . $this->postData->shortcode;
  769. $attr['date'] = $this->postData->taken_at_timestamp;
  770. $attr['date'] = date_i18n(get_option('date_format').' '.get_option('time_format'), $attr['date']);
  771. $attr['author_name'] = $user;
  772. $attr['author_name'] = empty($attr['author_name']) ? "" : $attr['author_name'];
  773. $attr['likes'] = $this->postData->edge_liked_by->count;
  774. //$attr['likes'] = RevSliderFunctions::getVal($likes_raw, 'count');
  775. $attr['num_comments'] = $this->postData->edge_media_to_comment->count;
  776. //$attr['num_comments'] = RevSliderFunctions::getVal($comments_raw, 'count');
  777. $inst_img = RevSliderFunctions::getVal($this->postData, 'images', array());
  778. foreach($inst_img as $key => $img){
  779. $attr['img_urls'][$key] = array(
  780. 'url' => $img->url,
  781. 'tag' => '<img src="'.$img->url.'" width="'.$img->width.'" height="'.$img->height.'" data-no-retina />'
  782. );
  783. }
  784. break;
  785. case 'flickr':
  786. $attr['title'] = RevSliderFunctions::getVal($this->postData, 'title');
  787. $tc = RevSliderFunctions::getVal($this->postData, 'description');
  788. $attr['content'] = RevSliderFunctions::getVal($tc, '_content');
  789. $attr['date'] = RevSliderFunctionsWP::convertPostDate(RevSliderFunctions::getVal($this->postData, 'datetaken'));
  790. $attr['author_name'] = RevSliderFunctions::getVal($this->postData, 'ownername');
  791. $attr['link'] = 'http://flic.kr/p/'.$this->base_encode(RevSliderFunctions::getVal($this->postData, 'id'));
  792. $attr['views'] = RevSliderFunctions::getVal($this->postData, 'views');
  793. $attr['img_urls'] = @array(
  794. 'square' => array('url' => RevSliderFunctions::getVal($this->postData, 'url_sq'), 'tag' => '<img src="'.RevSliderFunctions::getVal($this->postData, 'url_sq').'" width="'.RevSliderFunctions::getVal($this->postData, 'width_sq').'" height="'.RevSliderFunctions::getVal($this->postData, 'height_sq').'" data-no-retina />'),
  795. 'large-square' => array('url' => RevSliderFunctions::getVal($this->postData, 'url_q'), 'tag' => '<img src="'.RevSliderFunctions::getVal($this->postData, 'url_q').'" width="'.RevSliderFunctions::getVal($this->postData, 'width_q').'" height="'.RevSliderFunctions::getVal($this->postData, 'height_q').'" data-no-retina />'),
  796. 'thumbnail' => array('url' => RevSliderFunctions::getVal($this->postData, 'url_t'), 'tag' => '<img src="'.RevSliderFunctions::getVal($this->postData, 'url_t').'" width="'.RevSliderFunctions::getVal($this->postData, 'width_t').'" height="'.RevSliderFunctions::getVal($this->postData, 'height_t').'" data-no-retina />'),
  797. 'small' => array('url' => RevSliderFunctions::getVal($this->postData, 'url_s'), 'tag' => '<img src="'.RevSliderFunctions::getVal($this->postData, 'url_s').'" width="'.RevSliderFunctions::getVal($this->postData, 'width_s').'" height="'.RevSliderFunctions::getVal($this->postData, 'height_s').'" data-no-retina />'),
  798. 'small-320' => array('url' => RevSliderFunctions::getVal($this->postData, 'url_n'), 'tag' => '<img src="'.RevSliderFunctions::getVal($this->postData, 'url_n').'" width="'.RevSliderFunctions::getVal($this->postData, 'width_n').'" height="'.RevSliderFunctions::getVal($this->postData, 'height_n').'" data-no-retina />'),
  799. 'medium' => array('url' => RevSliderFunctions::getVal($this->postData, 'url_m'), 'tag' => '<img src="'.RevSliderFunctions::getVal($this->postData, 'url_m').'" width="'.RevSliderFunctions::getVal($this->postData, 'width_m').'" height="'.RevSliderFunctions::getVal($this->postData, 'height_m').'" data-no-retina />'),
  800. 'medium-640' => array('url' => RevSliderFunctions::getVal($this->postData, 'url_z'), 'tag' => '<img src="'.RevSliderFunctions::getVal($this->postData, 'url_z').'" width="'.RevSliderFunctions::getVal($this->postData, 'width_z').'" height="'.RevSliderFunctions::getVal($this->postData, 'height_z').'" data-no-retina />'),
  801. 'medium-800' => array('url' => RevSliderFunctions::getVal($this->postData, 'url_c'), 'tag' => '<img src="'.RevSliderFunctions::getVal($this->postData, 'url_c').'" width="'.RevSliderFunctions::getVal($this->postData, 'width_c').'" height="'.RevSliderFunctions::getVal($this->postData, 'height_c').'" data-no-retina />'),
  802. 'large' => array('url' => RevSliderFunctions::getVal($this->postData, 'url_l'), 'tag' => '<img src="'.RevSliderFunctions::getVal($this->postData, 'url_l').'" width="'.RevSliderFunctions::getVal($this->postData, 'width_l').'" height="'.RevSliderFunctions::getVal($this->postData, 'height_l').'" data-no-retina />'),
  803. 'original' => array('url' => RevSliderFunctions::getVal($this->postData, 'url_o'), 'tag' => '<img src="'.RevSliderFunctions::getVal($this->postData, 'url_o').'" width="'.RevSliderFunctions::getVal($this->postData, 'width_o').'" height="'.RevSliderFunctions::getVal($this->postData, 'height_o').'" data-no-retina />')
  804. );
  805. break;
  806. case 'youtube':
  807. $snippet = RevSliderFunctions::getVal($this->postData, 'snippet');
  808. $attr['title'] = RevSliderFunctions::getVal($snippet, 'title');
  809. $attr['excerpt'] = RevSliderFunctions::getVal($snippet, 'description');
  810. $attr['content'] = RevSliderFunctions::getVal($snippet, 'description');
  811. $attr['date'] = RevSliderFunctionsWP::convertPostDate(RevSliderFunctions::getVal($snippet, 'publishedAt'));
  812. if($additions['yt_type'] == 'channel'){
  813. $link_raw = RevSliderFunctions::getVal($this->postData, 'id');
  814. $attr['link'] = RevSliderFunctions::getVal($link_raw, 'videoId');
  815. if($attr['link'] !== '') $attr['link'] = '//youtube.com/watch?v='.$attr['link'];
  816. }else{
  817. $link_raw = RevSliderFunctions::getVal($this->postData, 'resourceId');
  818. $attr['link'] = RevSliderFunctions::getVal($link_raw, 'videoId');
  819. if($attr['link'] !== '') $attr['link'] = '//youtube.com/watch?v='.$attr['link'];
  820. }
  821. $thumbs = RevSliderFunctions::getVal($snippet, 'thumbnails');
  822. $attr['img_urls'] = array();
  823. if(!empty($thumbs)){
  824. foreach($thumbs as $name => $vals){
  825. $attr['img_urls'][$name] = array(
  826. 'url' => RevSliderFunctions::getVal($vals, 'url'),
  827. );
  828. switch($additions['yt_type']){
  829. case 'channel':
  830. $attr['img_urls'][$name]['tag'] = '<img src="'.RevSliderFunctions::getVal($vals, 'url').'" data-no-retina />';
  831. break;
  832. case 'playlist':
  833. $attr['img_urls'][$name]['tag'] = '<img src="'.RevSliderFunctions::getVal($vals, 'url').'" width="'.RevSliderFunctions::getVal($vals, 'width').'" height="'.RevSliderFunctions::getVal($vals, 'height').'" data-no-retina />';
  834. break;
  835. }
  836. }
  837. }
  838. break;
  839. case 'vimeo':
  840. $attr['title'] = RevSliderFunctions::getVal($this->postData, 'title');
  841. $attr['excerpt'] = RevSliderFunctions::getVal($this->postData, 'description');
  842. $attr['content'] = RevSliderFunctions::getVal($this->postData, 'description');
  843. $attr['date'] = RevSliderFunctionsWP::convertPostDate(RevSliderFunctions::getVal($this->postData, 'upload_date'));
  844. $attr['likes'] = RevSliderFunctions::getVal($this->postData, 'stats_number_of_likes');
  845. $attr['views'] = RevSliderFunctions::getVal($this->postData, 'stats_number_of_plays');
  846. $attr['num_comments'] = RevSliderFunctions::getVal($this->postData, 'stats_number_of_comments');
  847. $attr['link'] = RevSliderFunctions::getVal($this->postData, 'url');
  848. $attr['author_name'] = RevSliderFunctions::getVal($this->postData, 'user_name');
  849. $attr['img_urls'] = array();
  850. if(!empty($img_sizes)){
  851. foreach($img_sizes as $name => $vals){
  852. $attr['img_urls'][$name] = array(
  853. 'url' => RevSliderFunctions::getVal($this->postData, $name),
  854. 'tag' => '<img src="'.RevSliderFunctions::getVal($this->postData, $name).'" data-no-retina />'
  855. );
  856. }
  857. }
  858. break;
  859. }
  860. return apply_filters('revslider_slide_return_stream_data_post', $attr, $stream_type, $additions, $img_sizes);
  861. }
  862. public function find_biggest_photo($image_urls, $wanted_size, $avail_sizes){
  863. if(!$this->isEmpty(@$image_urls[$wanted_size])) return $image_urls[$wanted_size];
  864. $wanted_size_pos = array_search($wanted_size, $avail_sizes);
  865. for ($i=$wanted_size_pos; $i < 7; $i++) {
  866. if(!$this->isEmpty(@$image_urls[$avail_sizes[$i]])) return $image_urls[$avail_sizes[$i]];
  867. }
  868. for ($i=$wanted_size_pos; $i >= 0; $i--) {
  869. if(!$this->isEmpty(@$image_urls[$avail_sizes[$i]])) return $image_urls[$avail_sizes[$i]];
  870. }
  871. }
  872. public function isEmpty($stringOrArray) {
  873. if(is_array($stringOrArray)) {
  874. foreach($stringOrArray as $value) {
  875. if(!$this->isEmpty($value)) {
  876. return false;
  877. }
  878. }
  879. return true;
  880. }
  881. return !strlen($stringOrArray); // this properly checks on empty string ('')
  882. }
  883. public function get_facebook_timeline_image(){
  884. $return = '';
  885. $object_id = RevSliderFunctions::getVal($this->postData, 'object_id', '');
  886. $picture = RevSliderFunctions::getVal($this->postData, 'picture', '');
  887. if(!empty($object_id)){
  888. $return = 'https://graph.facebook.com/'.RevSliderFunctions::getVal($this->postData, 'object_id', '').'/picture';//$photo->picture;
  889. }elseif(!empty($picture)) {
  890. $image_url = $this->decode_facebook_url(RevSliderFunctions::getVal($this->postData, 'picture', ''));
  891. $image_url = parse_str(parse_url($image_url, PHP_URL_QUERY), $array);
  892. $image_url = explode('&', $array['url']);
  893. /* patch for when url returned as "fbstaging://" */
  894. if(strpos($image_url[0], 'fbstaging') !== false) {
  895. $new_url = RevSliderFunctions::getVal($this->postData, 'picture', '');
  896. $new_url = explode('&w=', $new_url);
  897. if(count($new_url) > 1) {
  898. $end_url = explode('&url=', $new_url[1]);
  899. if(count($end_url) > 1) $image_url = array($new_url[0] . '&url=' . $end_url[1]);
  900. }
  901. }
  902. /* END patch */
  903. $return = $image_url[0];
  904. }
  905. return apply_filters('revslider_slide_get_facebook_timeline_image', $return, $object_id, $picture, $this);
  906. }
  907. private function decode_facebook_url($url) {
  908. $url = str_replace('u00253A',':',$url);
  909. $url = str_replace('\u00255C\u00252F','/',$url);
  910. $url = str_replace('u00252F','/',$url);
  911. $url = str_replace('u00253F','?',$url);
  912. $url = str_replace('u00253D','=',$url);
  913. $url = str_replace('u002526','&',$url);
  914. return $url;
  915. }
  916. /**
  917. * Encode the flickr ID for URL (base58)
  918. *
  919. * @since 5.0
  920. * @param string $num flickr photo id
  921. */
  922. private function base_encode($num, $alphabet='123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ') {
  923. $base_count = strlen($alphabet);
  924. $encoded = '';
  925. while ($num >= $base_count) {
  926. $div = $num/$base_count;
  927. $mod = ($num-($base_count*intval($div)));
  928. $encoded = $alphabet[$mod] . $encoded;
  929. $num = intval($div);
  930. }
  931. if ($num) $encoded = $alphabet[$num] . $encoded;
  932. return $encoded;
  933. }
  934. /**
  935. *
  936. * init slide by post data
  937. */
  938. public function initByPostData($postData, RevSliderSlide $slideTemplate, $sliderID){
  939. //global $rs_slide_template;
  940. $this->postData = apply_filters('revslider_slide_initByPostData', $postData, $slideTemplate, $sliderID, $this);
  941. $postID = $postData["ID"];
  942. $slideTemplateID = get_post_meta($postID, 'slide_template', true);
  943. if($slideTemplateID == '') $slideTemplateID = 'default';
  944. if(!empty($slideTemplateID) && is_numeric($slideTemplateID)){
  945. //init by local template, if fail, init by global (slider) template
  946. try{
  947. //we have to add this slide for the static slide to be available in certain cases
  948. //check if slide exists
  949. $slideTemplateLocal = new RevSliderSlide();
  950. if($slideTemplateLocal->isSlideByID($slideTemplateID)){
  951. $slideTemplateLocal->initByID($slideTemplateID);
  952. $this->initBySlide($slideTemplateLocal);
  953. }else{
  954. $this->initBySlide($slideTemplate);
  955. }
  956. //$rs_slide_template[$slideTemplateID] = $slideTemplateID;
  957. }
  958. catch(Exception $e){
  959. $this->initBySlide($slideTemplate);
  960. }
  961. }else{
  962. //init by global template
  963. $this->initBySlide($slideTemplate);
  964. //$rs_slide_template[$slideTemplate->id] = $slideTemplate->id;
  965. }
  966. //set some slide params
  967. $this->id = $postID;
  968. $this->params["title"] = RevSliderFunctions::getVal($postData, "post_title");
  969. if(isset($this->params['enable_link']) && $this->params['enable_link'] == "true" && isset($this->params['link_type']) && $this->params['link_type'] == "regular"){
  970. $link = get_permalink($postID);
  971. $this->params["link"] = str_replace(array("%link%", '{{link}}'), $link, $this->params["link"]);
  972. $this->params["link"] = str_replace('-', '_REVSLIDER_', $this->params["link"]);
  973. //process meta tags:
  974. $arrMatches = array();
  975. preg_match('/%meta:\w+%/', $this->params["link"], $arrMatches);
  976. foreach($arrMatches as $match){
  977. $meta = str_replace("%meta:", "", $match);
  978. $meta = str_replace("%","",$meta);
  979. $meta = str_replace('_REVSLIDER_', '-', $meta);
  980. $metaValue = get_post_meta($postID,$meta,true);
  981. $this->params["link"] = str_replace($match,$metaValue,$this->params["link"]);
  982. }
  983. $arrMatches = array();
  984. preg_match('/{{meta:\w+}}/', $this->params["link"], $arrMatches);
  985. foreach($arrMatches as $match){
  986. $meta = str_replace("{{meta:", "", $match);
  987. $meta = str_replace("}}","",$meta);
  988. $meta = str_replace('_REVSLIDER_', '-', $meta);
  989. $metaValue = get_post_meta($postID,$meta,true);
  990. $this->params["link"] = str_replace($match,$metaValue,$this->params["link"]);
  991. }
  992. $this->params["link"] = str_replace('_REVSLIDER_','-',$this->params["link"]);
  993. }
  994. $status = $postData["post_status"];
  995. if($status == "publish")
  996. $this->params["state"] = "published";
  997. else
  998. $this->params["state"] = "unpublished";
  999. if($this->params["background_type"] == 'image'){ //if image is choosen, use featured image as background
  1000. //set image
  1001. $thumbID = RevSliderFunctionsWP::getPostThumbID($postID);
  1002. if(!empty($thumbID))
  1003. $this->setImageByImageID($thumbID);
  1004. }
  1005. //replace placeholders in layers:
  1006. $this->setLayersByPostData($postData, $sliderID);
  1007. }
  1008. /**
  1009. *
  1010. * replace layer placeholders by post data
  1011. */
  1012. private function setLayersByPostData($postData,$sliderID){
  1013. $postData = apply_filters('revslider_slide_setLayersByPostData_pre', $postData, $sliderID, $this);
  1014. $postID = $postData["ID"];
  1015. $attr = array();
  1016. $attr['title'] = RevSliderFunctions::getVal($postData, "post_title");
  1017. //check if we are woocommerce or not
  1018. $st = $this->getSliderParam($sliderID,"source_type",'gallery');
  1019. if($st == 'woocommerce'){
  1020. $excerpt_limit = $this->getSliderParam($sliderID,"excerpt_limit_product",55,RevSlider::VALIDATE_NUMERIC);
  1021. $excerpt_limit = (int)$excerpt_limit;
  1022. }else{
  1023. $excerpt_limit = $this->getSliderParam($sliderID,"excerpt_limit",55,RevSlider::VALIDATE_NUMERIC);
  1024. $excerpt_limit = (int)$excerpt_limit;
  1025. }
  1026. $attr['excerpt'] = RevSliderFunctionsWP::getExcerptById($postID, $excerpt_limit);
  1027. $attr['alias'] = RevSliderFunctions::getVal($postData, "post_name");
  1028. $attr['content'] = RevSliderFunctions::getVal($postData, "post_content");
  1029. $attr['link'] = get_permalink($postID);
  1030. $postDate = RevSliderFunctions::getVal($postData, "post_date_gmt");
  1031. $attr['postDate'] = RevSliderFunctionsWP::convertPostDate($postDate);
  1032. $dateModified = RevSliderFunctions::getVal($postData, "post_modified");
  1033. $attr['dateModified'] = RevSliderFunctionsWP::convertPostDate($dateModified);
  1034. $authorID = RevSliderFunctions::getVal($postData, "post_author");
  1035. $attr['authorName'] = RevSliderFunctionsWP::getUserDisplayName($authorID);
  1036. $attr['authorID'] = $authorID;
  1037. $attr['authorPage'] = RevSliderFunctionsWP::getUserPage($authorID);
  1038. $attr['authorPostsPage'] = RevSliderFunctionsWP::getUserPostsPage($authorID);
  1039. $postCatsIDs = $postData["post_category"];
  1040. $attr['catlist'] = RevSliderFunctionsWP::getCategoriesHtmlList($postCatsIDs);
  1041. $attr['catlist_raw'] = strip_tags(RevSliderFunctionsWP::getCategoriesHtmlList($postCatsIDs));
  1042. $attr['taglist'] = RevSliderFunctionsWP::getTagsHtmlList($postID);
  1043. $ptid = get_post_thumbnail_id($postID);
  1044. $img_sizes = RevSliderBase::get_all_image_sizes();
  1045. $attr['img_urls'] = array();
  1046. foreach($img_sizes as $img_handle => $img_name){
  1047. $featured_image_url = wp_get_attachment_image_src($ptid, $img_handle);
  1048. if($featured_image_url !== false){
  1049. $attr['img_urls'][$img_handle] = array(
  1050. 'url' => $featured_image_url[0],
  1051. 'tag' => '<img src="'.$featured_image_url[0].'" width="'.$featured_image_url[1].'" height="'.$featured_image_url[2].'" data-no-retina />'
  1052. );
  1053. }
  1054. }
  1055. $attr['numComments'] = RevSliderFunctions::getVal($postData, "comment_count");
  1056. $attr = apply_filters('revslider_slide_setLayersByPostData_post', $attr, $postData, $sliderID, $this);
  1057. foreach($this->arrLayers as $key=>$layer){
  1058. $text = RevSliderFunctions::getVal($layer, "text");
  1059. $text = apply_filters('revslider_mod_meta', $text, $postID, $postData); //option to add your own filter here to modify meta to your likings
  1060. $text = $this->set_post_data($text, $attr, $postID);
  1061. $layer["text"] = $text;
  1062. $all_actions = RevSliderFunctions::getVal($layer, 'layer_action', array());
  1063. if(!empty($all_actions)){
  1064. $a_image_link = RevSliderFunctions::cleanStdClassToArray(RevSliderFunctions::getVal($all_actions, 'image_link', array()));
  1065. if(!empty($a_image_link)){
  1066. foreach($a_image_link as $ik => $ilink){
  1067. $ilink = $this->set_post_data($ilink, $attr, $postID);
  1068. $a_image_link[$ik] = $ilink;
  1069. }
  1070. $layer['layer_action']->image_link = $a_image_link;
  1071. }
  1072. }
  1073. $this->arrLayers[$key] = $layer;
  1074. }
  1075. /*$params = $this->getParams();
  1076. foreach($params as $key => $param){ //set metas on all params except arrays
  1077. if(!is_array($param)){
  1078. $pa = $this->set_post_data($param, $attr, $postID);
  1079. $this->setParam($key, $pa);
  1080. }
  1081. }*/
  1082. for($mi=1;$mi<=10;$mi++){ //set params to the post data
  1083. $pa = $this->getParam('params_'.$mi, '');
  1084. $pa = $this->set_post_data($pa, $attr, $postID);
  1085. $this->setParam('params_'.$mi, $pa);
  1086. }
  1087. $param_list = array('id_attr', 'class_attr', 'data_attr');
  1088. //set params to the stream data
  1089. foreach($param_list as $p){
  1090. $pa = $this->getParam($p, '');
  1091. $pa = $this->set_post_data($pa, $attr, $postID);
  1092. $this->setParam($p, $pa);
  1093. }
  1094. }
  1095. public function set_post_data($text, $attr, $post_id){
  1096. $img_sizes = RevSliderBase::get_all_image_sizes();
  1097. $title = (isset($attr['title'])) ? $attr['title'] : '';
  1098. $excerpt = (isset($attr['excerpt'])) ? $attr['excerpt'] : '';
  1099. $alias = (isset($attr['alias'])) ? $attr['alias'] : '';
  1100. $content = (isset($attr['content'])) ? $attr['content'] : '';
  1101. $link = (isset($attr['link'])) ? $attr['link'] : '';
  1102. $postDate = (isset($attr['postDate'])) ? $attr['postDate'] : '';
  1103. $dateModified = (isset($attr['dateModified'])) ? $attr['dateModified'] : '';
  1104. $authorName = (isset($attr['authorName'])) ? $attr['authorName'] : '';
  1105. $authorID = (isset($attr['authorID'])) ? $attr['authorID'] : '';
  1106. $authorPostsPage = (isset($attr['authorPostsPage'])) ? $attr['authorPostsPage'] : '';
  1107. $authorPage = (isset($attr['authorPage'])) ? $attr['authorPage'] : '';
  1108. $numComments = (isset($attr['numComments'])) ? $attr['numComments'] : '';
  1109. $catlist = (isset($attr['catlist'])) ? $attr['catlist'] : '';
  1110. $catlist_raw = (isset($attr['catlist_raw'])) ? $attr['catlist_raw'] : '';
  1111. $taglist = (isset($attr['taglist'])) ? $attr['taglist'] : '';
  1112. //remove rev_slider shortcodes from content ( no inception ;)
  1113. $content = preg_replace('/\\[rev_slider.*?\\]/', '', $content, -1 );
  1114. $content = str_replace("[/rev_slider]", "", $content);
  1115. //add filter for addon metas
  1116. $text = apply_filters( 'rev_slider_insert_meta', $text, $post_id );
  1117. $text = str_replace(array('%title%', '{{title}}'), $title, $text);
  1118. $text = str_replace(array('%excerpt%', '{{excerpt}}'), $excerpt, $text);
  1119. $text = str_replace(array('%alias%', '{{alias}}'), $alias, $text);
  1120. $text = str_replace(array('%content%', '{{content}}'), $content, $text);
  1121. $text = str_replace(array('%link%', '{{link}}'), $link, $text);
  1122. $text = str_replace(array('%date%', '{{date}}'), $postDate, $text);
  1123. $text = str_replace(array('%date_modified%', '{{date_modified}}'), $dateModified, $text);
  1124. $text = str_replace(array('%author_name%', '{{author_name}}'), $authorName, $text);
  1125. $text = str_replace(array('%author_website%', '{{author_website}}'), $authorPage, $text);
  1126. $text = str_replace(array('%author_posts%', '{{author_posts}}'), $authorPostsPage, $text);
  1127. $text = str_replace(array('%num_comments%', '{{num_comments}}'), $numComments, $text);
  1128. $text = str_replace(array('%catlist%', '{{catlist}}'), $catlist, $text);
  1129. $text = str_replace(array('%catlist_raw%', '{{catlist_raw}}'), $catlist_raw, $text);
  1130. $text = str_replace(array('%taglist%', '{{taglist}}'), $taglist, $text);
  1131. $text = str_replace(array('%id%', '{{id}}'), $post_id, $text);
  1132. foreach($img_sizes as $img_handle => $img_name){
  1133. $url = (isset($attr['img_urls']) && isset($attr['img_urls'][$img_handle]) && isset($attr['img_urls'][$img_handle]['url'])) ? $attr['img_urls'][$img_handle]['url'] : '';
  1134. $tag = (isset($attr['img_urls']) && isset($attr['img_urls'][$img_handle]) && isset($attr['img_urls'][$img_handle]['tag'])) ? $attr['img_urls'][$img_handle]['tag'] : '';
  1135. $text = str_replace(array('%featured_image_url_'.$img_handle.'%', '{{featured_image_url_'.$img_handle.'}}'), $url, $text);
  1136. $text = str_replace(array('%featured_image_'.$img_handle.'%', '{{featured_image_'.$img_handle.'}}'), $tag, $text);
  1137. }
  1138. //process meta tags:
  1139. $text = str_replace('-', '_REVSLIDER_', $text);
  1140. $arrMatches = array();
  1141. preg_match_all('/%meta:\w+%/', $text, $arrMatches);
  1142. foreach($arrMatches as $matched){
  1143. foreach($matched as $match) {
  1144. $meta = str_replace("%meta:", "", $match);
  1145. $meta = str_replace("%","",$meta);
  1146. $meta = str_replace('_REVSLIDER_', '-', $meta);
  1147. $metaValue = get_post_meta($post_id,$meta,true);
  1148. $text = str_replace($match,$metaValue,$text);
  1149. }
  1150. }
  1151. $arrMatches = array();
  1152. preg_match_all('/{{meta:\w+}}/', $text, $arrMatches);
  1153. foreach($arrMatches as $matched){
  1154. foreach($matched as $match) {
  1155. $meta = str_replace("{{meta:", "", $match);
  1156. $meta = str_replace("}}","",$meta);
  1157. $meta = str_replace('_REVSLIDER_', '-', $meta);
  1158. $metaValue = get_post_meta($post_id,$meta,true);
  1159. $text = str_replace($match,$metaValue,$text);
  1160. }
  1161. }
  1162. $arrMatches = array();
  1163. preg_match_all("/{{content:\w+[\:]\w+}}/", $text, $arrMatches);
  1164. foreach($arrMatches as $matched){
  1165. foreach($matched as $match) {
  1166. //now check length and type
  1167. $meta = str_replace("{{content:", "", $match);
  1168. $meta = str_replace("}}","",$meta);
  1169. $meta = str_replace('_REVSLIDER_', '-', $meta);
  1170. $vals = explode(':', $meta);
  1171. if(count($vals) !== 2) continue; //not correct values
  1172. $vals[1] = intval($vals[1]); //get real number
  1173. if($vals[1] === 0 || $vals[1] < 0) continue; //needs to be at least 1
  1174. if($vals[0] == 'words'){
  1175. $metaValue = explode(' ', strip_tags($content), $vals[1]+1);
  1176. if(is_array($metaValue) && count($metaValue) > $vals[1]) array_pop($metaValue);
  1177. $metaValue = implode(' ', $metaValue);
  1178. }elseif($vals[0] == 'chars'){
  1179. $metaValue = substr(strip_tags($content), 0, $vals[1]);
  1180. }else{
  1181. continue;
  1182. }
  1183. $text = str_replace($match,$metaValue,$text);
  1184. }
  1185. }
  1186. $arrMatches = array();
  1187. preg_match_all("/{{author_avatar:\w+}}/", $text, $arrMatches);
  1188. foreach($arrMatches as $matched){
  1189. foreach($matched as $match) {
  1190. //now check length and type
  1191. $meta = str_replace("{{author_avatar:", "", $match);
  1192. $meta = str_replace("}}","",$meta);
  1193. $meta = str_replace('_REVSLIDER_', '-', $meta);
  1194. $vals = explode(':', $meta);
  1195. if(count($vals) !== 1) continue; //not correct values
  1196. $vals[0] = intval($vals[0]); //get real number
  1197. if($vals[0] === 0 || $vals[0] < 0) continue; //needs to be at least 1
  1198. $avatar = get_avatar_url($authorID,array("size"=>$vals[0]));
  1199. $text = str_replace($match,$avatar,$text);
  1200. }
  1201. }
  1202. $text = str_replace('_REVSLIDER_','-',$text);
  1203. //replace event's template
  1204. if(RevSliderEventsManager::isEventsExists()){
  1205. $eventData = RevSliderEventsManager::getEventPostData($post_id);
  1206. if(!empty($eventData)){
  1207. foreach($eventData as $eventKey=>$eventValue){
  1208. $eventPlaceholder = "%event_".$eventKey."%";
  1209. $eventPlaceholderNew = "{{event_".$eventKey."}}";
  1210. if($eventKey == 'start_date' || $eventKey == 'end_date') $eventValue = RevSliderFunctionsWP::convertPostDate($eventValue);
  1211. $text = str_replace(array($eventPlaceholder, $eventPlaceholderNew), $eventValue , $text);
  1212. }
  1213. }
  1214. }
  1215. if(RevSliderWooCommerce::isWooCommerceExists()){
  1216. $is_30 = RevSliderWooCommerce::version_check('3.0');
  1217. $product = ($is_30) ? wc_get_product($post_id) : get_product($post_id);
  1218. if($product !== false){
  1219. $wc_full_price = $product->get_price_html();
  1220. $wc_price = wc_price($product->get_price());
  1221. $wc_price_no_cur = $product->get_price();
  1222. $wc_stock = ($is_30) ? $product->get_stock_quantity() : $product->get_total_stock();
  1223. $wc_rating = ($is_30) ? wc_get_rating_html($product->get_average_rating()) : $product->get_rating_html();
  1224. $wc_star_rating = '<div class="rs-starring">';
  1225. preg_match_all('#<strong class="rating">.*?</span>#', $wc_rating, $match);
  1226. if(!empty($match) && isset($match[0]) && isset($match[0][0])){
  1227. $wc_star_rating .= str_replace($match[0][0], '', $wc_rating);
  1228. }
  1229. $wc_star_rating .= '</div>';
  1230. $wc_categories = ($is_30) ? wc_get_product_category_list($product->get_id(), ',') : $product->get_categories(',');
  1231. $wc_add_to_cart = $product->add_to_cart_url();
  1232. $wc_add_to_cart_button = '';
  1233. $wc_sku = $product->get_sku();
  1234. $wc_stock_quantity = $product->get_stock_quantity();
  1235. $wc_rating_count = $product->get_rating_count();
  1236. $wc_review_count = $product->get_review_count();
  1237. $wc_tags = ($is_30) ? wc_get_product_tag_list($product->get_id()) : $product->get_tags();
  1238. $pr_id = ($is_30) ? $product->get_id() : $product->id;
  1239. $pr_type = ($is_30) ? $product->get_type() : $product->product_type;
  1240. if(strpos($text, 'wc_add_to_cart_button') !== false){
  1241. $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
  1242. $ajax_cart_en = get_option( 'woocommerce_enable_ajax_add_to_cart' ) == 'yes' ? true : false;
  1243. $assets_path = str_replace( array( 'http:', 'https:' ), '', WC()->plugin_url() ) . '/assets/';
  1244. $frontend_script_path = $assets_path . 'js/frontend/';
  1245. if ( $ajax_cart_en ){
  1246. wp_enqueue_script( 'wc-add-to-cart', $frontend_script_path . 'add-to-cart' . $suffix . '.js', array( 'jquery' ), WC_VERSION, true );
  1247. global $wc_is_localized;
  1248. if($wc_is_localized === false){ //load it only one time
  1249. wp_localize_script( 'wc-add-to-cart', 'wc_add_to_cart_params', apply_filters( 'wc_add_to_cart_params', array(
  1250. 'ajax_url' => WC()->ajax_url(),
  1251. 'ajax_loader_url' => apply_filters( 'woocommerce_ajax_loader_url', $assets_path . 'images/ajax-loader@2x.gif' ),
  1252. 'i18n_view_cart' => esc_attr__( 'View Cart', 'woocommerce' ),
  1253. 'cart_url' => get_permalink( wc_get_page_id( 'cart' ) ),
  1254. 'is_cart' => is_cart(),
  1255. 'cart_redirect_after_add' => get_option( 'woocommerce_cart_redirect_after_add' )
  1256. ) ) );
  1257. $wc_is_localized = true;
  1258. }
  1259. }
  1260. $wc_add_to_cart_button = apply_filters( 'woocommerce_loop_add_to_cart_link',
  1261. sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="button %s product_type_%s">%s</a>',
  1262. esc_url( $product->add_to_cart_url() ),
  1263. esc_attr( $pr_id ),
  1264. esc_attr( $product->get_sku() ),
  1265. $product->is_purchasable() ? 'add_to_cart_button' : '',
  1266. esc_attr( $pr_type ),
  1267. esc_html( $product->add_to_cart_text() )
  1268. ),
  1269. $product );
  1270. }
  1271. $text = str_replace(array('%wc_full_price%', '{{wc_full_price}}'), $wc_full_price, $text);
  1272. $text = str_replace(array('%wc_price%', '{{wc_price}}'), $wc_price, $text);
  1273. $text = str_replace(array('%wc_price_no_cur%', '{{wc_price_no_cur}}'), $wc_price_no_cur, $text);
  1274. $text = str_replace(array('%wc_stock%', '{{wc_stock}}'), $wc_stock, $text);
  1275. $text = str_replace(array('%wc_rating%', '{{wc_rating}}'), $wc_rating, $text);
  1276. $text = str_replace(array('%wc_star_rating%', '{{wc_star_rating}}'), $wc_star_rating, $text);
  1277. $text = str_replace(array('%wc_categories%', '{{wc_categories}}'), $wc_categories, $text);
  1278. $text = str_replace(array('%wc_add_to_cart%', '{{wc_add_to_cart}}'), $wc_add_to_cart, $text);
  1279. $text = str_replace(array('%wc_add_to_cart_button%', '{{wc_add_to_cart_button}}'), $wc_add_to_cart_button, $text);
  1280. $text = str_replace(array('%wc_sku%', '{{wc_sku}}'), $wc_sku, $text);
  1281. $text = str_replace(array('%wc_stock_quantity%', '{{wc_stock_quantity}}'), $wc_stock_quantity, $text);
  1282. $text = str_replace(array('%wc_rating_count%', '{{wc_rating_count}}'), $wc_rating_count, $text);
  1283. $text = str_replace(array('%wc_review_count%', '{{wc_review_count}}'), $wc_review_count, $text);
  1284. $text = str_replace(array('%wc_tags%', '{{wc_tags}}'), $wc_tags, $text);
  1285. }
  1286. }
  1287. return $text;
  1288. }
  1289. /**
  1290. * get slide data by id
  1291. * @since: 5.2.0
  1292. */
  1293. public function getDataByID($slideid){
  1294. $return = false;
  1295. if(strpos($slideid, 'static_') !== false){
  1296. $sliderID = str_replace('static_', '', $slideid);
  1297. $record = $this->db->fetch(RevSliderGlobals::$table_static_slides, $this->db->prepare("slider_id = %s", array($sliderID)));
  1298. if(!empty($record)){
  1299. $return = $record[0];
  1300. }
  1301. //$return = false;
  1302. }else{
  1303. $record = $this->db->fetchSingle(RevSliderGlobals::$table_slides, $this->db->prepare("id = %d", array($slideid)));
  1304. $return = $record;
  1305. }
  1306. return apply_filters('revslider_slide_getDataByID', $return, $slideid, $this);
  1307. }
  1308. /**
  1309. * init the slider by id
  1310. */
  1311. public function initByID($slideid){
  1312. try{
  1313. if(strpos($slideid, 'static_') !== false){
  1314. $this->static_slide = true;
  1315. $sliderID = str_replace('static_', '', $slideid);
  1316. RevSliderFunctions::validateNumeric($sliderID,"Slider ID");
  1317. $record = $this->db->fetch(RevSliderGlobals::$table_static_slides, $this->db->prepare("slider_id = %s", array($sliderID)));
  1318. if(empty($record)){
  1319. try{
  1320. //create a new static slide for the Slider and then use it
  1321. $slide_id = $this->createSlide($sliderID,"",true);
  1322. $record = $this->db->fetch(RevSliderGlobals::$table_static_slides, $this->db->prepare("slider_id = %s", array($sliderID)));
  1323. $this->initByData($record[0]);
  1324. }catch(Exception $e){}
  1325. }else{
  1326. $this->initByData($record[0]);
  1327. }
  1328. }else{
  1329. RevSliderFunctions::validateNumeric($slideid,"Slide ID");
  1330. $record = $this->db->fetchSingle(RevSliderGlobals::$table_slides, $this->db->prepare("id = %d", array($slideid)));
  1331. $this->initByData($record);
  1332. }
  1333. }catch(Exception $e){
  1334. $message = $e->getMessage();
  1335. echo $message;
  1336. exit;
  1337. }
  1338. }
  1339. /**
  1340. * Check if Slide Exists with given ID
  1341. * @since: 5.0
  1342. */
  1343. public static function isSlideByID($slideid){
  1344. $db = new RevSliderDB();
  1345. try{
  1346. if(strpos($slideid, 'static_') !== false){
  1347. $sliderID = str_replace('static_', '', $slideid);
  1348. RevSliderFunctions::validateNumeric($sliderID,"Slider ID");
  1349. $record = $db->fetch(RevSliderGlobals::$table_static_slides, $db->prepare("slider_id = %s", array($sliderID)));
  1350. if(empty($record)) return false;
  1351. return true;
  1352. }else{
  1353. $record = $db->fetchSingle(RevSliderGlobals::$table_slides, $db->prepare("id = %s", array($slideid)));
  1354. if(empty($record)) return false;
  1355. return true;
  1356. }
  1357. }catch(Exception $e){
  1358. return false;
  1359. }
  1360. }
  1361. /**
  1362. *
  1363. * init the slider by id
  1364. */
  1365. public function initByStaticID($slideid){
  1366. RevSliderFunctions::validateNumeric($slideid,"Slide ID");
  1367. $record = $this->db->fetchSingle(RevSliderGlobals::$table_static_slides, $this->db->prepare("id = %s", array($slideid)));
  1368. $this->initByData($record);
  1369. }
  1370. /**
  1371. *
  1372. * getStaticSlide
  1373. */
  1374. public function getStaticSlideID($sliderID){
  1375. RevSliderFunctions::validateNumeric($sliderID,"Slider ID");
  1376. $record = $this->db->fetch(RevSliderGlobals::$table_static_slides, $this->db->prepare("slider_id = %s", array($sliderID)));
  1377. if(empty($record)){
  1378. return false;
  1379. }else{
  1380. return $record[0]['id'];
  1381. }
  1382. }
  1383. /**
  1384. *
  1385. * set slide image by image id
  1386. */
  1387. private function setImageByImageID($imageID){
  1388. $imageID = apply_filters('revslider_slide_setImageByImageID', $imageID, $this);
  1389. $imgResolution = RevSliderFunctions::getVal($this->params, 'image_source_type', 'full');
  1390. $this->imageID = $imageID;
  1391. $this->imageUrl = RevSliderFunctionsWP::getUrlAttachmentImage($imageID, $imgResolution);
  1392. $this->imageThumb = RevSliderFunctionsWP::getUrlAttachmentImage($imageID,RevSliderFunctionsWP::THUMB_MEDIUM);
  1393. if(empty($this->imageUrl))
  1394. return(false);
  1395. $this->params["background_type"] = "image";
  1396. if(is_ssl()){
  1397. $this->imageUrl = str_replace("http://", "https://", $this->imageUrl);
  1398. }
  1399. $this->imageFilepath = RevSliderFunctionsWP::getImagePathFromURL($this->imageUrl);
  1400. $realPath = RevSliderFunctionsWP::getPathContent().$this->imageFilepath;
  1401. if(file_exists($realPath) == false || is_file($realPath) == false)
  1402. $this->imageFilepath = "";
  1403. $this->imageFilename = basename($this->imageUrl);
  1404. }
  1405. /**
  1406. *
  1407. * set children array
  1408. */
  1409. public function setArrChildren($arrChildren){
  1410. $this->arrChildren = $arrChildren;
  1411. }
  1412. /**
  1413. *
  1414. * get children array
  1415. */
  1416. public function getArrChildren(){
  1417. $this->validateInited();
  1418. if($this->arrChildren === null){
  1419. $slider = new RevSlider();
  1420. $slider->initByID($this->sliderID);
  1421. $this->arrChildren = $slider->getArrSlideChildren($this->id);
  1422. }
  1423. return apply_filters('revslider_slide_getArrChildren', $this->arrChildren, $this);
  1424. }
  1425. /**
  1426. *
  1427. * return if the slide from post
  1428. */
  1429. public function isFromPost(){
  1430. return !empty($this->postData);
  1431. }
  1432. /**
  1433. *
  1434. * get post data
  1435. */
  1436. public function getPostData(){
  1437. return($this->postData);
  1438. }
  1439. /**
  1440. *
  1441. * get children array as is
  1442. */
  1443. public function getArrChildrenPure(){
  1444. return($this->arrChildren);
  1445. }
  1446. /**
  1447. *
  1448. * return if the slide is parent slide
  1449. */
  1450. public function isParent(){
  1451. $parentID = $this->getParam("parentid","");
  1452. return(!empty($parentID));
  1453. }
  1454. /**
  1455. *
  1456. * get slide language
  1457. */
  1458. public function getLang(){
  1459. $lang = $this->getParam("lang","all");
  1460. return($lang);
  1461. }
  1462. /**
  1463. *
  1464. * return parent slide. If the slide is parent, return this slide.
  1465. */
  1466. public function getParentSlide(){
  1467. $parentID = $this->getParam("parentid","");
  1468. if(empty($parentID))
  1469. return($this);
  1470. $parentSlide = new RevSlide();
  1471. $parentSlide->initByID($parentID);
  1472. return($parentSlide);
  1473. }
  1474. /**
  1475. * return parent slide id
  1476. * @since: 5.0
  1477. */
  1478. public function getParentSlideID(){
  1479. $parentID = $this->getParam("parentid","");
  1480. return $parentID;
  1481. }
  1482. /**
  1483. *
  1484. * get array of children id's
  1485. */
  1486. public function getArrChildrenIDs(){
  1487. $arrChildren = $this->getArrChildren();
  1488. $arrChildrenIDs = array();
  1489. foreach($arrChildren as $child){
  1490. $childID = $child->getID();
  1491. $arrChildrenIDs[] = $childID;
  1492. }
  1493. return($arrChildrenIDs);
  1494. }
  1495. /**
  1496. *
  1497. * get array of children array and languages, the first is current language.
  1498. */
  1499. public function getArrChildrenLangs($includeParent = true){
  1500. $this->validateInited();
  1501. $slideID = $this->id;
  1502. if($includeParent == true){
  1503. $lang = $this->getParam("lang","all");
  1504. $arrOutput = array();
  1505. $arrOutput[] = array("slideid"=>$slideID,"lang"=>$lang,"isparent"=>true);
  1506. }
  1507. $arrChildren = $this->getArrChildren();
  1508. foreach($arrChildren as $child){
  1509. $childID = $child->getID();
  1510. $childLang = $child->getParam("lang","all");
  1511. $arrOutput[] = array("slideid"=>$childID,"lang"=>$childLang,"isparent"=>false);
  1512. }
  1513. return($arrOutput);
  1514. }
  1515. /**
  1516. *
  1517. * get children language codes (including current slide lang code)
  1518. */
  1519. public function getArrChildLangCodes($includeParent = true){
  1520. $arrLangsWithSlideID = $this->getArrChildrenLangs($includeParent);
  1521. $arrLangCodes = array();
  1522. foreach($arrLangsWithSlideID as $item){
  1523. $lang = $item["lang"];
  1524. $arrLangCodes[$lang] = $lang;
  1525. }
  1526. return($arrLangCodes);
  1527. }
  1528. /**
  1529. * get slide ID
  1530. */
  1531. public function getID(){
  1532. return($this->id);
  1533. }
  1534. /**
  1535. * set slide ID
  1536. */
  1537. public function setID($id){
  1538. $this->id = $id;
  1539. }
  1540. /**
  1541. * get slide title
  1542. */
  1543. public function getTitle(){
  1544. return $this->getParam("title","Slide");
  1545. }
  1546. /**
  1547. * get slide order
  1548. */
  1549. public function getOrder(){
  1550. $this->validateInited();
  1551. return $this->slideOrder;
  1552. }
  1553. /**
  1554. * get layers in json format
  1555. */
  1556. public function getLayers(){
  1557. $this->validateInited();
  1558. return apply_filters('revslider_getLayers', $this->arrLayers, $this);
  1559. }
  1560. /**
  1561. * get layers in json format
  1562. * since: 5.0
  1563. */
  1564. public function getLayerID_by_unique_id($unique_id, $static_slide){
  1565. $this->validateInited();
  1566. if(strpos($unique_id, 'static-') !== false){
  1567. $unique_id = str_replace('static-', '', $unique_id);
  1568. $layers = $static_slide->getLayers();
  1569. if(!empty($layers)){
  1570. foreach($layers as $l){
  1571. $uid = RevSliderFunctions::getVal($l, 'unique_id');
  1572. if($uid == $unique_id){
  1573. return RevSliderFunctions::getVal($l, 'attrID');
  1574. }
  1575. }
  1576. }
  1577. }else{
  1578. foreach($this->arrLayers as $l){
  1579. $uid = RevSliderFunctions::getVal($l, 'unique_id');
  1580. if($uid == $unique_id){
  1581. return RevSliderFunctions::getVal($l, 'attrID');
  1582. }
  1583. }
  1584. }
  1585. return '';
  1586. }
  1587. /**
  1588. * save layers to the database
  1589. * @since: 5.0
  1590. */
  1591. public function saveLayers(){
  1592. $this->validateInited();
  1593. $table = ($this->static_slide) ? RevSliderGlobals::$table_static_slides : RevSliderGlobals::$table_slides;
  1594. $this->arrLayers = apply_filters('revslider_slide_saveLayers', $this->arrLayers, $this->static_slide, $this);
  1595. $this->db->update($table, array('layers' => json_encode($this->arrLayers)),array('id'=>$this->id));
  1596. }
  1597. /**
  1598. * save params to the database
  1599. * @since: 5.0
  1600. */
  1601. public function saveParams(){
  1602. $this->validateInited();
  1603. $table = ($this->static_slide) ? RevSliderGlobals::$table_static_slides : RevSliderGlobals::$table_slides;
  1604. $this->params = apply_filters('revslider_slide_saveParams', $this->params, $this->static_slide, $this);
  1605. $this->db->update($table, array('params' => json_encode($this->params)),array('id'=>$this->id));
  1606. }
  1607. /**
  1608. * modify layer links for export
  1609. */
  1610. public function getLayersForExport($useDummy = false){
  1611. $this->validateInited();
  1612. $arrLayersNew = array();
  1613. foreach($this->arrLayers as $key=>$layer){
  1614. $imageUrl = RevSliderFunctions::getVal($layer, "image_url");
  1615. if(!empty($imageUrl))
  1616. $layer["image_url"] = RevSliderFunctionsWP::getImagePathFromURL($layer["image_url"]);
  1617. $arrLayersNew[] = $layer;
  1618. }
  1619. return apply_filters('revslider_slide_getLayersForExport', $arrLayersNew, $this);
  1620. }
  1621. /**
  1622. * get params for export
  1623. */
  1624. public function getParamsForExport(){
  1625. $arrParams = $this->getParams();
  1626. $urlImage = RevSliderFunctions::getVal($arrParams, "image");
  1627. if(!empty($urlImage))
  1628. $arrParams["image"] = RevSliderFunctionsWP::getImagePathFromURL($urlImage);
  1629. //check if we are transparent or solid and remove unneeded image
  1630. $bgtype = RevSliderFunctions::getVal($arrParams, "background_type", 'transparent');
  1631. switch($bgtype){
  1632. case 'transparent':
  1633. case 'trans':
  1634. case 'solid':
  1635. $arrParams["image"] = '';
  1636. break;
  1637. }
  1638. return apply_filters('revslider_slide_getParamsForExport', $arrParams, $this);
  1639. }
  1640. /**
  1641. * normalize layers text, and get layers
  1642. */
  1643. public function getLayersNormalizeText(){
  1644. $arrLayersNew = array();
  1645. foreach ($this->arrLayers as $key=>$layer){
  1646. $text = $layer["text"];
  1647. $text = addslashes($text);
  1648. $layer["text"] = $text;
  1649. $arrLayersNew[] = $layer;
  1650. }
  1651. return apply_filters('revslider_slide_getLayersNormalizeText', $arrLayersNew, $this);
  1652. }
  1653. /**
  1654. * get slide params
  1655. */
  1656. public function getParams(){
  1657. $this->validateInited();
  1658. return apply_filters('revslider_slide_getParams', $this->params, $this);
  1659. }
  1660. /**
  1661. * get slide settings
  1662. * @since: 5.0
  1663. */
  1664. public function getSettings(){
  1665. $this->validateInited();
  1666. return apply_filters('revslider_slide_getSettings', $this->settings, $this);
  1667. }
  1668. /**
  1669. * get parameter from params array. if no default, then the param is a must!
  1670. */
  1671. function getParam($name,$default=null){
  1672. if($default === null){
  1673. //if(!array_key_exists($name, $this->params))
  1674. $default = '';
  1675. }
  1676. return RevSliderFunctions::getVal($this->params, $name, $default);
  1677. }
  1678. /**
  1679. * set parameter
  1680. * @since: 5.0
  1681. */
  1682. public function setParam($name, $value){
  1683. $this->params[$name] = $value;
  1684. }
  1685. /**
  1686. * get image filename
  1687. */
  1688. public function getImageFilename(){
  1689. return($this->imageFilename);
  1690. }
  1691. /**
  1692. * get image filepath
  1693. */
  1694. public function getImageFilepath(){
  1695. return($this->imageFilepath);
  1696. }
  1697. /**
  1698. * get image url
  1699. */
  1700. public function getImageUrl(){
  1701. return($this->imageUrl);
  1702. }
  1703. /**
  1704. * get image id
  1705. */
  1706. public function getImageID(){
  1707. return($this->imageID);
  1708. }
  1709. /**
  1710. * get thumb url
  1711. */
  1712. public function getThumbUrl(){
  1713. $thumbUrl = $this->imageUrl;
  1714. if(!empty($this->imageThumb))
  1715. $thumbUrl = $this->imageThumb;
  1716. return($thumbUrl);
  1717. }
  1718. /**
  1719. * get the slider id
  1720. */
  1721. public function getSliderID(){
  1722. return($this->sliderID);
  1723. }
  1724. /**
  1725. * get slider param
  1726. */
  1727. private function getSliderParam($sliderID,$name,$default,$validate=null){
  1728. if(empty($this->slider)){
  1729. $this->slider = new RevSlider();
  1730. $this->slider->initByID($sliderID);
  1731. }
  1732. $param = $this->slider->getParam($name,$default,$validate);
  1733. return($param);
  1734. }
  1735. /**
  1736. * validate that the slider exists
  1737. */
  1738. private function validateSliderExists($sliderID){
  1739. $slider = new RevSlider();
  1740. $slider->initByID($sliderID);
  1741. }
  1742. /**
  1743. * validate that the slide is inited and the id exists.
  1744. */
  1745. private function validateInited(){
  1746. if(empty($this->id))
  1747. RevSliderFunctions::throwError("The slide is not initialized!!!");
  1748. }
  1749. /**
  1750. * create the slide (from image)
  1751. */
  1752. public function createSlide($sliderID,$obj="",$static = false){
  1753. $imageID = null;
  1754. if(is_array($obj)){
  1755. $urlImage = RevSliderFunctions::getVal($obj, "url");
  1756. $imageID = RevSliderFunctions::getVal($obj, "id");
  1757. }else{
  1758. $urlImage = $obj;
  1759. }
  1760. //get max order
  1761. $slider = new RevSlider();
  1762. $slider->initByID($sliderID);
  1763. $maxOrder = $slider->getMaxOrder();
  1764. $order = $maxOrder+1;
  1765. $params = array();
  1766. if(!empty($urlImage)){
  1767. $params["background_type"] = "image";
  1768. $params["image"] = $urlImage;
  1769. if(!empty($imageID))
  1770. $params["image_id"] = $imageID;
  1771. }else{ //create transparent slide
  1772. $params["background_type"] = "trans";
  1773. }
  1774. $jsonParams = json_encode($params);
  1775. $arrInsert = array(
  1776. "params"=>$jsonParams,
  1777. "slider_id"=>$sliderID,
  1778. "layers"=>""
  1779. );
  1780. if(!$static)
  1781. $arrInsert["slide_order"] = $order;
  1782. $arrInsert = apply_filters('revslider_slide_createSlide', $arrInsert, $sliderID, $static, $this);
  1783. if(!$static)
  1784. $slideID = $this->db->insert(RevSliderGlobals::$table_slides, $arrInsert);
  1785. else
  1786. $slideID = $this->db->insert(RevSliderGlobals::$table_static_slides, $arrInsert);
  1787. return $slideID;
  1788. }
  1789. /**
  1790. *
  1791. * update slide image from data
  1792. */
  1793. public function updateSlideImageFromData($data){
  1794. $sliderID = RevSliderFunctions::getVal($data, "slider_id");
  1795. $slider = new RevSlider();
  1796. $slider->initByID($sliderID);
  1797. $slideID = RevSliderFunctions::getVal($data, "slide_id");
  1798. $urlImage = RevSliderFunctions::getVal($data, "url_image");
  1799. RevSliderFunctions::validateNotEmpty($urlImage);
  1800. $imageID = RevSliderFunctions::getVal($data, "image_id");
  1801. if($slider->isSlidesFromPosts()){
  1802. if(!empty($imageID))
  1803. RevSliderFunctionsWP::updatePostThumbnail($slideID, $imageID);
  1804. }elseif($slider->isSlidesFromStream() !== false){
  1805. //do nothing
  1806. }else{
  1807. $this->initByID($slideID);
  1808. $arrUpdate = array();
  1809. $arrUpdate["image"] = $urlImage;
  1810. $arrUpdate["image_id"] = $imageID;
  1811. $this->updateParamsInDB($arrUpdate);
  1812. }
  1813. return $urlImage;
  1814. }
  1815. /**
  1816. *
  1817. * update slide parameters in db
  1818. */
  1819. protected function updateParamsInDB($arrUpdate = array(), $static = false){
  1820. $this->validateInited();
  1821. $this->params = apply_filters('revslider_slide_updateParamsInDB', array_merge($this->params,$arrUpdate), $this);
  1822. $jsonParams = json_encode($this->params);
  1823. $arrDBUpdate = array("params"=>$jsonParams);
  1824. if($static === false){
  1825. $this->db->update(RevSliderGlobals::$table_slides,$arrDBUpdate,array("id"=>$this->id));
  1826. }else{
  1827. $this->db->update(RevSliderGlobals::$table_static_slides,$arrDBUpdate,array("id"=>$static));
  1828. }
  1829. }
  1830. /**
  1831. *
  1832. * update current layers in db
  1833. */
  1834. protected function updateLayersInDB($arrLayers = null, $static = false){
  1835. $this->validateInited();
  1836. if($arrLayers === null)
  1837. $arrLayers = $this->arrLayers;
  1838. $arrLayers = apply_filters('revslider_slide_updateLayersInDB', $arrLayers, $this);
  1839. $jsonLayers = json_encode($arrLayers);
  1840. $arrDBUpdate = array("layers"=>$jsonLayers);
  1841. if($static === false){
  1842. $this->db->update(RevSliderGlobals::$table_slides,$arrDBUpdate,array("id"=>$this->id));
  1843. }else{
  1844. $this->db->update(RevSliderGlobals::$table_static_slides,$arrDBUpdate,array("id"=>$static));
  1845. }
  1846. }
  1847. /**
  1848. *
  1849. * update parent slideID
  1850. */
  1851. public function updateParentSlideID($parentID){
  1852. $arrUpdate = array();
  1853. $arrUpdate["parentid"] = $parentID;
  1854. $this->updateParamsInDB($arrUpdate);
  1855. }
  1856. /**
  1857. *
  1858. * sort layers by order
  1859. */
  1860. private function sortLayersByOrder($layer1,$layer2){
  1861. $layer1 = (array)$layer1;
  1862. $layer2 = (array)$layer2;
  1863. $order1 = RevSliderFunctions::getVal($layer1, "order",1);
  1864. $order2 = RevSliderFunctions::getVal($layer2, "order",2);
  1865. if($order1 == $order2)
  1866. return(0);
  1867. return($order1 > $order2);
  1868. }
  1869. /**
  1870. *
  1871. * go through the layers and fix small bugs if exists
  1872. */
  1873. private function normalizeLayers($arrLayers){
  1874. usort($arrLayers,array($this,"sortLayersByOrder"));
  1875. $arrLayersNew = array();
  1876. foreach ($arrLayers as $key=>$layer){
  1877. $layer = (array)$layer;
  1878. //set type
  1879. $type = RevSliderFunctions::getVal($layer, "type","text");
  1880. $layer["type"] = $type;
  1881. //normalize position:
  1882. if(is_object($layer["left"])){
  1883. foreach($layer["left"] as $key => $val){
  1884. $layer["left"]->$key = round($val);
  1885. }
  1886. }else{
  1887. $layer["left"] = round($layer["left"]);
  1888. }
  1889. if(is_object($layer["top"])){
  1890. foreach($layer["top"] as $key => $val){
  1891. $layer["top"]->$key = round($val);
  1892. }
  1893. }else{
  1894. $layer["top"] = round($layer["top"]);
  1895. }
  1896. //unset order
  1897. unset($layer["order"]);
  1898. //modify text
  1899. $layer["text"] = stripcslashes($layer["text"]);
  1900. $arrLayersNew[] = $layer;
  1901. }
  1902. return $arrLayersNew;
  1903. }
  1904. /**
  1905. *
  1906. * normalize params
  1907. */
  1908. private function normalizeParams($params){
  1909. $urlImage = RevSliderFunctions::getVal($params, "image_url");
  1910. //init the id if absent
  1911. $params["image_id"] = RevSliderFunctions::getVal($params, "image_id");
  1912. $params["image"] = $urlImage;
  1913. unset($params["image_url"]);
  1914. if(isset($params["video_description"]))
  1915. $params["video_description"] = RevSliderFunctions::normalizeTextareaContent($params["video_description"]);
  1916. return $params;
  1917. }
  1918. /**
  1919. *
  1920. * update slide from data
  1921. * @param $data
  1922. */
  1923. public function updateSlideFromData($data){
  1924. $slideID = RevSliderFunctions::getVal($data, "slideid");
  1925. $this->initByID($slideID);
  1926. //treat params
  1927. $params = RevSliderFunctions::getVal($data, "params");
  1928. $params = $this->normalizeParams($params);
  1929. //preserve old data that not included in the given data
  1930. $params = array_merge($this->params,$params);
  1931. //treat layers
  1932. $layers = RevSliderFunctions::getVal($data, "layers");
  1933. if(gettype($layers) == "string"){
  1934. $layersStrip = stripslashes($layers);
  1935. $layersDecoded = json_decode($layersStrip);
  1936. if(empty($layersDecoded))
  1937. $layersDecoded = json_decode($layers);
  1938. $layers = RevSliderFunctions::convertStdClassToArray($layersDecoded);
  1939. }
  1940. if(empty($layers) || gettype($layers) != "array")
  1941. $layers = array();
  1942. $layers = $this->normalizeLayers($layers);
  1943. $settings = RevSliderFunctions::getVal($data, "settings");
  1944. $arrUpdate = array();
  1945. $arrUpdate["layers"] = json_encode($layers);
  1946. $arrUpdate["params"] = json_encode($params);
  1947. $arrUpdate["settings"] = json_encode($settings);
  1948. $arrUpdate = apply_filters('revslider_slide_updateSlideFromData_pre', $arrUpdate, $data, $this);
  1949. $this->db->update(RevSliderGlobals::$table_slides,$arrUpdate,array("id"=>$this->id));
  1950. do_action('revslider_slide_updateSlideFromData_post', $arrUpdate, $data, $this);
  1951. //RevSliderOperations::updateDynamicCaptions();
  1952. }
  1953. /**
  1954. *
  1955. * update slide from data
  1956. * @param $data
  1957. */
  1958. public function updateStaticSlideFromData($data){
  1959. $slideID = RevSliderFunctions::getVal($data, "slideid");
  1960. $this->initByStaticID($slideID);
  1961. $params = RevSliderFunctions::getVal($data, "params");
  1962. $params = $this->normalizeParams($params);
  1963. //treat layers
  1964. $layers = RevSliderFunctions::getVal($data, "layers");
  1965. if(gettype($layers) == "string"){
  1966. $layersStrip = stripslashes($layers);
  1967. $layersDecoded = json_decode($layersStrip);
  1968. if(empty($layersDecoded))
  1969. $layersDecoded = json_decode($layers);
  1970. $layers = RevSliderFunctions::convertStdClassToArray($layersDecoded);
  1971. }
  1972. if(empty($layers) || gettype($layers) != "array")
  1973. $layers = array();
  1974. $layers = $this->normalizeLayers($layers);
  1975. $settings = RevSliderFunctions::getVal($data, "settings");
  1976. $arrUpdate = array();
  1977. $arrUpdate["layers"] = json_encode($layers);
  1978. $arrUpdate["params"] = json_encode($params);
  1979. $arrUpdate["settings"] = json_encode($settings);
  1980. $arrUpdate = apply_filters('revslider_slide_updateStaticSlideFromData', $arrUpdate, $data, $this);
  1981. $this->db->update(RevSliderGlobals::$table_static_slides,$arrUpdate,array("id"=>$this->id));
  1982. do_action('revslider_slide_updateStaticSlideFromData_post', $arrUpdate, $data, $this);
  1983. //RevSliderOperations::updateDynamicCaptions();
  1984. }
  1985. /**
  1986. *
  1987. * delete slide by slideid
  1988. */
  1989. public function deleteSlide(){
  1990. $this->validateInited();
  1991. $this->db->delete(RevSliderGlobals::$table_slides, $this->db->prepare("id = %s", array($this->id)));
  1992. do_action('revslider_slide_deleteSlide', $this->id);
  1993. }
  1994. /**
  1995. *
  1996. * delete slide children
  1997. */
  1998. public function deleteChildren(){
  1999. $this->validateInited();
  2000. $arrChildren = $this->getArrChildren();
  2001. foreach($arrChildren as $child)
  2002. $child->deleteSlide();
  2003. }
  2004. /**
  2005. *
  2006. * delete slide from data
  2007. */
  2008. public function deleteSlideFromData($data){
  2009. $sliderID = RevSliderFunctions::getVal($data, "sliderID");
  2010. $slider = new RevSlider();
  2011. $slider->initByID($sliderID);
  2012. //delete slide
  2013. $slideID = RevSliderFunctions::getVal($data, "slideID");
  2014. $this->initByID($slideID);
  2015. $this->deleteChildren();
  2016. $this->deleteSlide();
  2017. }
  2018. /**
  2019. * set params from client
  2020. */
  2021. public function setParams($params){
  2022. $params = $this->normalizeParams($params);
  2023. $this->params = $params;
  2024. }
  2025. /**
  2026. *
  2027. * set layers from client
  2028. */
  2029. public function setLayers($layers){
  2030. $layers = $this->normalizeLayers($layers);
  2031. $this->arrLayers = $layers;
  2032. }
  2033. /**
  2034. * set layers from client, do not normalize as this results in loosing the order
  2035. * @since: 5.0
  2036. */
  2037. public function setLayersRaw($layers){
  2038. $this->arrLayers = $layers;
  2039. }
  2040. /**
  2041. * update the title of a Slide by Slide ID
  2042. * @since: 5.0
  2043. **/
  2044. public function updateTitleByID($data){
  2045. if(!isset($data['slideID']) || !isset($data['slideTitle'])) return false;
  2046. $this->initByID($data['slideID']);
  2047. $arrUpdate = array();
  2048. $arrUpdate['title'] = $data['slideTitle'];
  2049. $arrUpdate = apply_filters('revslider_slide_updateTitleByID', $arrUpdate, $data, $this);
  2050. $this->updateParamsInDB($arrUpdate);
  2051. }
  2052. /**
  2053. * toggle slide state from data
  2054. **/
  2055. public function toggleSlideStatFromData($data){
  2056. $sliderID = RevSliderFunctions::getVal($data, "slider_id");
  2057. $slider = new RevSlider();
  2058. $slider->initByID($sliderID);
  2059. $slideID = RevSliderFunctions::getVal($data, "slide_id");
  2060. $this->initByID($slideID);
  2061. $state = $this->getParam("state","published");
  2062. $newState = ($state == "published")?"unpublished":"published";
  2063. $arrUpdate = array();
  2064. $arrUpdate["state"] = $newState;
  2065. $arrUpdate = apply_filters('revslider_slide_toggleSlideStatFromData', $arrUpdate, $data, $this);
  2066. $this->updateParamsInDB($arrUpdate);
  2067. return $newState;
  2068. }
  2069. /**
  2070. *
  2071. * updatye slide language from data
  2072. */
  2073. private function updateLangFromData($data){
  2074. $slideID = RevSliderFunctions::getVal($data, "slideid");
  2075. $this->initByID($slideID);
  2076. $lang = RevSliderFunctions::getVal($data, "lang");
  2077. $arrUpdate = array();
  2078. $arrUpdate["lang"] = $lang;
  2079. $this->updateParamsInDB($arrUpdate);
  2080. $response = array();
  2081. $response["url_icon"] = RevSliderWpml::getFlagUrl($lang);
  2082. $response["title"] = RevSliderWpml::getLangTitle($lang);
  2083. $response["operation"] = "update";
  2084. return($response);
  2085. }
  2086. /**
  2087. *
  2088. * add language (add slide that connected to current slide) from data
  2089. */
  2090. private function addLangFromData($data){
  2091. $sliderID = RevSliderFunctions::getVal($data, "sliderid");
  2092. $slideID = RevSliderFunctions::getVal($data, "slideid");
  2093. $lang = RevSliderFunctions::getVal($data, "lang");
  2094. //duplicate slide
  2095. $slider = new RevSlider();
  2096. $slider->initByID($sliderID);
  2097. $newSlideID = $slider->duplicateSlide($slideID);
  2098. //update new slide
  2099. $this->initByID($newSlideID);
  2100. $arrUpdate = array();
  2101. $arrUpdate["lang"] = $lang;
  2102. $arrUpdate["parentid"] = $slideID;
  2103. $this->updateParamsInDB($arrUpdate);
  2104. $urlIcon = RevSliderWpml::getFlagUrl($lang);
  2105. $title = RevSliderWpml::getLangTitle($lang);
  2106. $newSlide = new RevSlide();
  2107. $newSlide->initByID($slideID);
  2108. $arrLangCodes = $newSlide->getArrChildLangCodes();
  2109. $isAll = RevSliderWpml::isAllLangsInArray($arrLangCodes);
  2110. $html = "<li>
  2111. <img id=\"icon_lang_".$newSlideID."\" class=\"icon_slide_lang\" src=\"".$urlIcon."\" title=\"".$title."\" data-slideid=\"".$newSlideID."\" data-lang=\"".$lang."\">
  2112. <div class=\"icon_lang_loader loader_round\" style=\"display:none\"></div>
  2113. </li>";
  2114. $response = array();
  2115. $response["operation"] = "add";
  2116. $response["isAll"] = $isAll;
  2117. $response["html"] = $html;
  2118. return($response);
  2119. }
  2120. /**
  2121. *
  2122. * delete slide from language menu data
  2123. */
  2124. private function deleteSlideFromLangData($data){
  2125. $slideID = RevSliderFunctions::getVal($data, "slideid");
  2126. $this->initByID($slideID);
  2127. $this->deleteSlide();
  2128. $response = array();
  2129. $response["operation"] = "delete";
  2130. return($response);
  2131. }
  2132. /**
  2133. *
  2134. * add or update language from data
  2135. */
  2136. public function doSlideLangOperation($data){
  2137. $operation = RevSliderFunctions::getVal($data, "operation");
  2138. switch($operation){
  2139. case "add":
  2140. $response = $this->addLangFromData($data);
  2141. break;
  2142. case "delete":
  2143. $response = $this->deleteSlideFromLangData($data);
  2144. break;
  2145. case "update":
  2146. default:
  2147. $response = $this->updateLangFromData($data);
  2148. break;
  2149. }
  2150. return($response);
  2151. }
  2152. /**
  2153. *
  2154. * get thumb url
  2155. */
  2156. public function getUrlImageThumb(){
  2157. //get image url by thumb
  2158. if(!empty($this->imageID)){
  2159. $urlImage = RevSliderFunctionsWP::getUrlAttachmentImage($this->imageID, RevSliderFunctionsWP::THUMB_MEDIUM);
  2160. }else{
  2161. //get from cache
  2162. if(!empty($this->imageFilepath)){
  2163. $urlImage = RevSliderBase::getImageUrl($this->imageFilepath,200,100,true);
  2164. }
  2165. else
  2166. $urlImage = $this->imageUrl;
  2167. }
  2168. if(empty($urlImage))
  2169. $urlImage = $this->imageUrl;
  2170. $urlImage = apply_filters('revslider_slide_getUrlImageThumb', $urlImage, $this);
  2171. return $urlImage;
  2172. }
  2173. public function get_image_attributes($slider_type){
  2174. $params = $this->params;
  2175. $bgType = RevSliderBase::getVar($params, "background_type","transparent");
  2176. $bgColor = RevSliderBase::getVar($params, "slide_bg_color","transparent");
  2177. $bgFit = RevSliderBase::getVar($params, "bg_fit","cover");
  2178. $bgFitX = intval(RevSliderBase::getVar($params, "bg_fit_x","100"));
  2179. $bgFitY = intval(RevSliderBase::getVar($params, "bg_fit_y","100"));
  2180. $bgPosition = RevSliderBase::getVar($params, "bg_position","center top");
  2181. $bgPositionX = intval(RevSliderBase::getVar($params, "bg_position_x","0"));
  2182. $bgPositionY = intval(RevSliderBase::getVar($params, "bg_position_y","0"));
  2183. $bgRepeat = RevSliderBase::getVar($params, "bg_repeat","no-repeat");
  2184. $bgStyle = ' ';
  2185. if($bgFit == 'percentage'){
  2186. $bgStyle .= "background-size: ".$bgFitX.'% '.$bgFitY.'%;';
  2187. }else{
  2188. $bgStyle .= "background-size: ".$bgFit.";";
  2189. }
  2190. if($bgPosition == 'percentage'){
  2191. $bgStyle .= "background-position: ".$bgPositionX.'% '.$bgPositionY.'%;';
  2192. }else{
  2193. $bgStyle .= "background-position: ".$bgPosition.";";
  2194. }
  2195. $bgStyle .= "background-repeat: ".$bgRepeat.";";
  2196. $thumb = '';
  2197. $thumb_on = RevSliderBase::getVar($params, "thumb_for_admin", 'off');
  2198. switch($slider_type){
  2199. case 'gallery':
  2200. $imageID = RevSliderBase::getVar($params, "image_id");
  2201. if(empty($imageID)){
  2202. $thumb = RevSliderBase::getVar($params, "image");
  2203. $imgID = RevSliderBase::get_image_id_by_url($thumb);
  2204. if($imgID !== false){
  2205. $thumb = RevSliderFunctionsWP::getUrlAttachmentImage($imgID, RevSliderFunctionsWP::THUMB_MEDIUM);
  2206. }
  2207. }else{
  2208. $thumb = RevSliderFunctionsWP::getUrlAttachmentImage($imageID,RevSliderFunctionsWP::THUMB_MEDIUM);
  2209. }
  2210. if($thumb_on == 'on'){
  2211. $thumb = RevSliderBase::getVar($params, "slide_thumb", '');
  2212. }
  2213. break;
  2214. case 'posts':
  2215. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/post.png';
  2216. $bgStyle = 'background-size: cover;';
  2217. break;
  2218. case 'woocommerce':
  2219. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/wc.png';
  2220. $bgStyle = 'background-size: cover;';
  2221. break;
  2222. case 'facebook':
  2223. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/fb.png';
  2224. $bgStyle = 'background-size: cover;';
  2225. break;
  2226. case 'twitter':
  2227. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/tw.png';
  2228. $bgStyle = 'background-size: cover;';
  2229. break;
  2230. case 'instagram':
  2231. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/ig.png';
  2232. $bgStyle = 'background-size: cover;';
  2233. break;
  2234. case 'flickr':
  2235. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/fr.png';
  2236. $bgStyle = 'background-size: cover;';
  2237. break;
  2238. case 'youtube':
  2239. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/yt.png';
  2240. $bgStyle = 'background-size: cover;';
  2241. break;
  2242. case 'vimeo':
  2243. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/vm.png';
  2244. $bgStyle = 'background-size: cover;';
  2245. break;
  2246. }
  2247. if($thumb == '') $thumb = RevSliderBase::getVar($params, "image");
  2248. $bg_fullstyle ='';
  2249. $bg_extraClass='';
  2250. $data_urlImageForView='';
  2251. //if($bgType=="image" || $bgType=="streamvimeo" || $bgType=="streamyoutube" || $bgType=="streaminstagram" || $bgType=="html5") {
  2252. $data_urlImageForView = $thumb;
  2253. $bg_fullstyle = $bgStyle;
  2254. //}
  2255. if($bgType=="solid"){
  2256. if($thumb_on == 'off'){
  2257. $bg_fullstyle ='background-color:'.$bgColor.';';
  2258. $data_urlImageForView = '';
  2259. }else{
  2260. $bg_fullstyle = 'background-size: cover;';
  2261. }
  2262. }
  2263. if($bgType=="trans" || $bgType=="transparent"){
  2264. $data_urlImageForView = '';
  2265. $bg_extraClass = 'mini-transparent';
  2266. $bg_fullstyle = 'background-size: inherit; background-repeat: repeat;';
  2267. }
  2268. return apply_filters('revslider_slide_get_image_attributes', array(
  2269. 'url' => $data_urlImageForView,
  2270. 'class' => $bg_extraClass,
  2271. 'style' => $bg_fullstyle
  2272. ), $this);
  2273. }
  2274. /**
  2275. *
  2276. * replace image url's among slide image and layer images
  2277. */
  2278. public function replaceImageUrls($urlFrom, $urlTo, $static = false){
  2279. $this->validateInited();
  2280. $isUpdated = false;
  2281. $check = array('image', 'image_url', 'background_image', 'slide_thumb', 'show_alternate_image');
  2282. if(isset($this->params['background_type']) && $this->params['background_type'] == 'html5'){
  2283. $check[] = 'slide_bg_html_mpeg';
  2284. $check[] = 'slide_bg_html_webm';
  2285. $check[] = 'slide_bg_html_ogv';
  2286. }
  2287. foreach($check as $param){
  2288. $urlImage = RevSliderFunctions::getVal($this->params, $param, '');
  2289. if(strpos($urlImage, $urlFrom) !== false){
  2290. $imageNew = str_replace($urlFrom, $urlTo, $urlImage);
  2291. $this->params[$param] = $imageNew;
  2292. $isUpdated = true;
  2293. }
  2294. }
  2295. if($isUpdated == true){
  2296. $this->updateParamsInDB(array(), $static);
  2297. }
  2298. // update image url in layers
  2299. $isUpdated = false;
  2300. foreach($this->arrLayers as $key=>$layer){
  2301. $type = RevSliderFunctions::getVal($layer, "type");
  2302. $urlImage = RevSliderFunctions::getVal($layer, "image_url");
  2303. if(strpos($urlImage, $urlFrom) !== false){
  2304. $newUrlImage = str_replace($urlFrom, $urlTo, $urlImage);
  2305. $this->arrLayers[$key]["image_url"] = $newUrlImage;
  2306. $isUpdated = true;
  2307. }
  2308. if(isset($type) && ($type == 'video' || $type == 'audio')){
  2309. $video_data = (isset($layer['video_data'])) ? (array) $layer['video_data'] : array();
  2310. $check = array();
  2311. if(!empty($video_data) && isset($video_data['video_type']) && $video_data['video_type'] == 'html5'){
  2312. $check[] = 'urlPoster';
  2313. $check[] = 'urlMp4';
  2314. $check[] = 'urlWebm';
  2315. $check[] = 'urlOgv';
  2316. }elseif(!empty($video_data) && isset($video_data['video_type']) && $video_data['video_type'] != 'html5'){ //video cover image
  2317. if($video_data['video_type'] == 'audio'){
  2318. $check[] = 'urlAudio';
  2319. }else{
  2320. $check[] = 'previewimage';
  2321. }
  2322. }
  2323. if(!empty($check)){
  2324. foreach($check as $param){
  2325. $url = RevSliderFunctions::getVal($video_data, $param);
  2326. if(strpos($url, $urlFrom) !== false){
  2327. $newUrl = str_replace($urlFrom, $urlTo, $url);
  2328. $video_data[$param] = $newUrl;
  2329. $isUpdated = true;
  2330. }
  2331. }
  2332. }
  2333. $this->arrLayers[$key]['video_data'] = $video_data;
  2334. }elseif(isset($type) && $type == 'svg'){
  2335. $svg_val = RevSliderFunctions::getVal($layer, 'svg', false);
  2336. if (!empty($svg_val) && sizeof($svg_val)>0) {
  2337. $svg_val->{'src'} = str_replace($urlFrom, $urlTo, $svg_val->{'src'});
  2338. $this->arrLayers[$key]['svg'] = $svg_val;
  2339. $isUpdated = true;
  2340. }
  2341. }
  2342. if(isset($layer['layer_action'])){
  2343. if(isset($layer['layer_action']->image_link) && !empty($layer['layer_action']->image_link)){
  2344. $layer['layer_action']->image_link = (array)$layer['layer_action']->image_link;
  2345. foreach($layer['layer_action']->image_link as $jtsk => $jtsval){
  2346. if(strpos($jtsval, $urlFrom) !== false){
  2347. $this->arrLayers[$key]['layer_action']->image_link[$jtsk] = str_replace($urlFrom, $urlTo, $jtsval);
  2348. $isUpdated = true;
  2349. }
  2350. }
  2351. }
  2352. }
  2353. }
  2354. if($isUpdated == true){
  2355. $this->updateLayersInDB(null, $static);
  2356. }
  2357. do_action('revslider_slide_replaceImageUrls', $this);
  2358. }
  2359. /**
  2360. * get all used fonts in the current Slide
  2361. * @since: 5.1.0
  2362. */
  2363. public function getUsedFonts($full = false){
  2364. $this->validateInited();
  2365. $op = new RevSliderOperations();
  2366. $fonts = array();
  2367. $all_fonts = $op->getArrFontFamilys();
  2368. if(!empty($this->arrLayers)){
  2369. foreach($this->arrLayers as $key=>$layer){
  2370. $def = (array) RevSliderFunctions::getVal($layer, 'deformation', array());
  2371. $font = RevSliderFunctions::getVal($def, 'font-family', '');
  2372. $static = (array) RevSliderFunctions::getVal($layer, 'static_styles', array());
  2373. foreach($all_fonts as $f){
  2374. if(strtolower(str_replace(array('"', "'", ' '), '', $f['label'])) == strtolower(str_replace(array('"', "'", ' '), '', $font)) && $f['type'] == 'googlefont'){
  2375. if(!isset($fonts[$f['label']])){
  2376. $fonts[$f['label']] = array('variants' => array(), 'subsets' => array());
  2377. }
  2378. if($full){ //if full, add all.
  2379. //switch the variants around here!
  2380. $mv = array();
  2381. if(!empty($f['variants'])){
  2382. foreach($f['variants'] as $fvk => $fvv){
  2383. $mv[$fvv] = $fvv;
  2384. }
  2385. }
  2386. $fonts[$f['label']] = array('variants' => $mv, 'subsets' => $f['subsets']);
  2387. }else{ //Otherwise add only current font-weight plus italic or not
  2388. $fw = (array) RevSliderFunctions::getVal($static, 'font-weight', '400');
  2389. $fs = RevSliderFunctions::getVal($def, 'font-style', '');
  2390. if($fs == 'italic'){
  2391. foreach($fw as $mf => $w){
  2392. //we check if italic is available at all for the font!
  2393. if($w == '400'){
  2394. if(array_search('italic', $f['variants']) !== false)
  2395. $fw[$mf] = 'italic';
  2396. }else{
  2397. if(array_search($w.'italic', $f['variants']) !== false)
  2398. $fw[$mf] = $w.'italic';
  2399. }
  2400. }
  2401. }
  2402. foreach($fw as $mf => $w){
  2403. $fonts[$f['label']]['variants'][$w] = true;
  2404. }
  2405. $fonts[$f['label']]['subsets'] = $f['subsets']; //subsets always get added, needs to be done then by the Slider Settings
  2406. }
  2407. break;
  2408. }
  2409. }
  2410. }
  2411. }
  2412. return apply_filters('revslider_slide_getUsedFonts', $fonts, $this);
  2413. }
  2414. /**
  2415. * replace all css classes in all layers
  2416. * @since: 5.0
  2417. */
  2418. public function replaceCssClass($css_from, $css_to){
  2419. $this->validateInited();
  2420. $isUpdated = false;
  2421. if(!empty($this->arrLayers)){
  2422. foreach($this->arrLayers as $key=>$layer){
  2423. $caption = RevSliderFunctions::getVal($layer, 'style');
  2424. if($caption == $css_from){
  2425. $this->arrLayers[$key]['style'] = $css_to;
  2426. $isUpdated = true;
  2427. }
  2428. }
  2429. }
  2430. if($isUpdated == true)
  2431. $this->updateLayersInDB();
  2432. do_action('revslider_slide_replaceCssClass', $css_from, $css_to, $this);
  2433. }
  2434. /**
  2435. * reset Slide to certain values
  2436. * @since: 5.0
  2437. */
  2438. public function reset_slide_values($values){
  2439. $this->validateInited();
  2440. foreach($values as $key => $val){
  2441. if($key !== 'sliderid'){
  2442. $this->params[esc_attr($key)] = esc_attr($val);
  2443. }
  2444. }
  2445. $this->updateParamsInDB();
  2446. }
  2447. /**
  2448. * return if current Slide is static Slide
  2449. */
  2450. public function isStaticSlide(){
  2451. return $this->static_slide;
  2452. }
  2453. /**
  2454. * Returns all layer attributes that can have more than one setting due to desktop, tablet, mobile sizes
  2455. * @since: 5.0
  2456. */
  2457. public static function translateIntoSizes(){
  2458. return apply_filters('revslider_slide_translateIntoSizes', array(
  2459. 'align_hor',
  2460. 'align_vert',
  2461. 'top',
  2462. 'left',
  2463. 'font-size',
  2464. 'line-height',
  2465. 'font-weight',
  2466. 'color',
  2467. 'max_width',
  2468. 'max_height',
  2469. 'whitespace',
  2470. 'video_height',
  2471. 'video_width',
  2472. 'scaleX',
  2473. 'scaleY',
  2474. 'margin',
  2475. 'padding',
  2476. 'text-align',
  2477. 'letter-spacing'
  2478. ));
  2479. }
  2480. /**
  2481. * Translates all values that need more than one setting
  2482. * @since: 5.0
  2483. */
  2484. public function translateLayerSizes($layers){
  2485. $translation = self::translateIntoSizes();
  2486. if(!empty($layers)){
  2487. foreach($layers as $l => $layer){
  2488. foreach($translation as $trans){
  2489. if(isset($layers[$l][$trans])){
  2490. if(!is_array($layers[$l][$trans])){
  2491. $layers[$l][$trans] = array('desktop' => $layers[$l][$trans]);
  2492. }
  2493. }
  2494. }
  2495. }
  2496. }
  2497. return $layers;
  2498. }
  2499. }
  2500. /**
  2501. * old classname extends new one (old classnames will be obsolete soon)
  2502. * @since: 5.0
  2503. **/
  2504. class RevSlide extends RevSliderSlide {}
  2505. ?>