slide.class.php 110 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264
  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. //do the same to the children + layer
  1095. if(!empty($this->arrChildren)){
  1096. foreach($this->arrChildren as $k => $child){
  1097. if(isset($child->arrLayers) && !empty($child->arrLayers)){
  1098. foreach($child->arrLayers as $key=>$layer){
  1099. $text = RevSliderFunctions::getVal($layer, "text");
  1100. $text = apply_filters('revslider_mod_meta', $text, $postID, $postData); //option to add your own filter here to modify meta to your likings
  1101. $text = $this->set_post_data($text, $attr, $postID);
  1102. $layer["text"] = $text;
  1103. $all_actions = RevSliderFunctions::getVal($layer, 'layer_action', array());
  1104. if(!empty($all_actions)){
  1105. $a_image_link = RevSliderFunctions::cleanStdClassToArray(RevSliderFunctions::getVal($all_actions, 'image_link', array()));
  1106. if(!empty($a_image_link)){
  1107. foreach($a_image_link as $ik => $ilink){
  1108. $ilink = $this->set_post_data($ilink, $attr, $postID);
  1109. $a_image_link[$ik] = $ilink;
  1110. }
  1111. $layer['layer_action']->image_link = $a_image_link;
  1112. }
  1113. }
  1114. $child->arrLayers[$key] = $layer;
  1115. }
  1116. $this->arrChildren[$k]->arrLayers = $child->arrLayers;
  1117. }
  1118. for($mi=1;$mi<=10;$mi++){ //set params to the post data
  1119. $pa = $this->arrChildren[$k]->getParam('params_'.$mi, '');
  1120. $pa = $this->arrChildren[$k]->set_post_data($pa, $attr, $postID);
  1121. $this->arrChildren[$k]->setParam('params_'.$mi, $pa);
  1122. }
  1123. $param_list = array('id_attr', 'class_attr', 'data_attr');
  1124. //set params to the stream data
  1125. foreach($param_list as $p){
  1126. $pa = $this->arrChildren[$k]->getParam($p, '');
  1127. $pa = $this->arrChildren[$k]->set_post_data($pa, $attr, $postID);
  1128. $this->arrChildren[$k]->setParam($p, $pa);
  1129. }
  1130. }
  1131. }
  1132. }
  1133. public function set_post_data($text, $attr, $post_id){
  1134. $img_sizes = RevSliderBase::get_all_image_sizes();
  1135. $title = (isset($attr['title'])) ? $attr['title'] : '';
  1136. $excerpt = (isset($attr['excerpt'])) ? $attr['excerpt'] : '';
  1137. $alias = (isset($attr['alias'])) ? $attr['alias'] : '';
  1138. $content = (isset($attr['content'])) ? $attr['content'] : '';
  1139. $link = (isset($attr['link'])) ? $attr['link'] : '';
  1140. $postDate = (isset($attr['postDate'])) ? $attr['postDate'] : '';
  1141. $dateModified = (isset($attr['dateModified'])) ? $attr['dateModified'] : '';
  1142. $authorName = (isset($attr['authorName'])) ? $attr['authorName'] : '';
  1143. $authorID = (isset($attr['authorID'])) ? $attr['authorID'] : '';
  1144. $authorPostsPage = (isset($attr['authorPostsPage'])) ? $attr['authorPostsPage'] : '';
  1145. $authorPage = (isset($attr['authorPage'])) ? $attr['authorPage'] : '';
  1146. $numComments = (isset($attr['numComments'])) ? $attr['numComments'] : '';
  1147. $catlist = (isset($attr['catlist'])) ? $attr['catlist'] : '';
  1148. $catlist_raw = (isset($attr['catlist_raw'])) ? $attr['catlist_raw'] : '';
  1149. $taglist = (isset($attr['taglist'])) ? $attr['taglist'] : '';
  1150. //remove rev_slider shortcodes from content ( no inception ;)
  1151. $content = preg_replace('/\\[rev_slider.*?\\]/', '', $content, -1 );
  1152. $content = str_replace("[/rev_slider]", "", $content);
  1153. //add filter for addon metas
  1154. $text = apply_filters( 'rev_slider_insert_meta', $text, $post_id );
  1155. $text = str_replace(array('%title%', '{{title}}'), $title, $text);
  1156. $text = str_replace(array('%excerpt%', '{{excerpt}}'), $excerpt, $text);
  1157. $text = str_replace(array('%alias%', '{{alias}}'), $alias, $text);
  1158. $text = str_replace(array('%content%', '{{content}}'), $content, $text);
  1159. $text = str_replace(array('%link%', '{{link}}'), $link, $text);
  1160. $text = str_replace(array('%date%', '{{date}}'), $postDate, $text);
  1161. $text = str_replace(array('%date_modified%', '{{date_modified}}'), $dateModified, $text);
  1162. $text = str_replace(array('%author_name%', '{{author_name}}'), $authorName, $text);
  1163. $text = str_replace(array('%author_website%', '{{author_website}}'), $authorPage, $text);
  1164. $text = str_replace(array('%author_posts%', '{{author_posts}}'), $authorPostsPage, $text);
  1165. $text = str_replace(array('%num_comments%', '{{num_comments}}'), $numComments, $text);
  1166. $text = str_replace(array('%catlist%', '{{catlist}}'), $catlist, $text);
  1167. $text = str_replace(array('%catlist_raw%', '{{catlist_raw}}'), $catlist_raw, $text);
  1168. $text = str_replace(array('%taglist%', '{{taglist}}'), $taglist, $text);
  1169. $text = str_replace(array('%id%', '{{id}}'), $post_id, $text);
  1170. foreach($img_sizes as $img_handle => $img_name){
  1171. $url = (isset($attr['img_urls']) && isset($attr['img_urls'][$img_handle]) && isset($attr['img_urls'][$img_handle]['url'])) ? $attr['img_urls'][$img_handle]['url'] : '';
  1172. $tag = (isset($attr['img_urls']) && isset($attr['img_urls'][$img_handle]) && isset($attr['img_urls'][$img_handle]['tag'])) ? $attr['img_urls'][$img_handle]['tag'] : '';
  1173. $text = str_replace(array('%featured_image_url_'.$img_handle.'%', '{{featured_image_url_'.$img_handle.'}}'), $url, $text);
  1174. $text = str_replace(array('%featured_image_'.$img_handle.'%', '{{featured_image_'.$img_handle.'}}'), $tag, $text);
  1175. }
  1176. //process meta tags:
  1177. $text = str_replace('-', '_REVSLIDER_', $text);
  1178. $arrMatches = array();
  1179. preg_match_all('/%meta:\w+%/', $text, $arrMatches);
  1180. foreach($arrMatches as $matched){
  1181. foreach($matched as $match) {
  1182. $meta = str_replace("%meta:", "", $match);
  1183. $meta = str_replace("%","",$meta);
  1184. $meta = str_replace('_REVSLIDER_', '-', $meta);
  1185. $metaValue = get_post_meta($post_id,$meta,true);
  1186. $text = str_replace($match,$metaValue,$text);
  1187. }
  1188. }
  1189. $arrMatches = array();
  1190. preg_match_all('/{{meta:\w+}}/', $text, $arrMatches);
  1191. foreach($arrMatches as $matched){
  1192. foreach($matched as $match) {
  1193. $meta = str_replace("{{meta:", "", $match);
  1194. $meta = str_replace("}}","",$meta);
  1195. $meta = str_replace('_REVSLIDER_', '-', $meta);
  1196. $metaValue = get_post_meta($post_id,$meta,true);
  1197. $text = str_replace($match,$metaValue,$text);
  1198. }
  1199. }
  1200. $arrMatches = array();
  1201. preg_match_all("/{{content:\w+[\:]\w+}}/", $text, $arrMatches);
  1202. foreach($arrMatches as $matched){
  1203. foreach($matched as $match) {
  1204. //now check length and type
  1205. $meta = str_replace("{{content:", "", $match);
  1206. $meta = str_replace("}}","",$meta);
  1207. $meta = str_replace('_REVSLIDER_', '-', $meta);
  1208. $vals = explode(':', $meta);
  1209. if(count($vals) !== 2) continue; //not correct values
  1210. $vals[1] = intval($vals[1]); //get real number
  1211. if($vals[1] === 0 || $vals[1] < 0) continue; //needs to be at least 1
  1212. if($vals[0] == 'words'){
  1213. $metaValue = explode(' ', strip_tags($content), $vals[1]+1);
  1214. if(is_array($metaValue) && count($metaValue) > $vals[1]) array_pop($metaValue);
  1215. $metaValue = implode(' ', $metaValue);
  1216. }elseif($vals[0] == 'chars'){
  1217. $metaValue = substr(strip_tags($content), 0, $vals[1]);
  1218. }else{
  1219. continue;
  1220. }
  1221. $text = str_replace($match,$metaValue,$text);
  1222. }
  1223. }
  1224. $arrMatches = array();
  1225. preg_match_all("/{{author_avatar:\w+}}/", $text, $arrMatches);
  1226. foreach($arrMatches as $matched){
  1227. foreach($matched as $match) {
  1228. //now check length and type
  1229. $meta = str_replace("{{author_avatar:", "", $match);
  1230. $meta = str_replace("}}","",$meta);
  1231. $meta = str_replace('_REVSLIDER_', '-', $meta);
  1232. $vals = explode(':', $meta);
  1233. if(count($vals) !== 1) continue; //not correct values
  1234. $vals[0] = intval($vals[0]); //get real number
  1235. if($vals[0] === 0 || $vals[0] < 0) continue; //needs to be at least 1
  1236. $avatar = get_avatar_url($authorID,array("size"=>$vals[0]));
  1237. $text = str_replace($match,$avatar,$text);
  1238. }
  1239. }
  1240. $text = str_replace('_REVSLIDER_','-',$text);
  1241. //replace event's template
  1242. if(RevSliderEventsManager::isEventsExists()){
  1243. $eventData = RevSliderEventsManager::getEventPostData($post_id);
  1244. if(!empty($eventData)){
  1245. foreach($eventData as $eventKey=>$eventValue){
  1246. $eventPlaceholder = "%event_".$eventKey."%";
  1247. $eventPlaceholderNew = "{{event_".$eventKey."}}";
  1248. if($eventKey == 'start_date' || $eventKey == 'end_date') $eventValue = RevSliderFunctionsWP::convertPostDate($eventValue);
  1249. $text = str_replace(array($eventPlaceholder, $eventPlaceholderNew), $eventValue , $text);
  1250. }
  1251. }
  1252. }
  1253. if(RevSliderWooCommerce::isWooCommerceExists()){
  1254. $is_30 = RevSliderWooCommerce::version_check('3.0');
  1255. $product = ($is_30) ? wc_get_product($post_id) : get_product($post_id);
  1256. if($product !== false){
  1257. $wc_full_price = $product->get_price_html();
  1258. $wc_price = wc_price($product->get_price());
  1259. $wc_price_no_cur = $product->get_price();
  1260. $wc_stock = ($is_30) ? $product->get_stock_quantity() : $product->get_total_stock();
  1261. $wc_rating = ($is_30) ? wc_get_rating_html($product->get_average_rating()) : $product->get_rating_html();
  1262. $wc_star_rating = '<div class="rs-starring">';
  1263. preg_match_all('#<strong class="rating">.*?</span>#', $wc_rating, $match);
  1264. if(!empty($match) && isset($match[0]) && isset($match[0][0])){
  1265. $wc_star_rating .= str_replace($match[0][0], '', $wc_rating);
  1266. }
  1267. $wc_star_rating .= '</div>';
  1268. $wc_categories = ($is_30) ? wc_get_product_category_list($product->get_id(), ',') : $product->get_categories(',');
  1269. $wc_add_to_cart = $product->add_to_cart_url();
  1270. $wc_add_to_cart_button = '';
  1271. $wc_sku = $product->get_sku();
  1272. $wc_stock_quantity = $product->get_stock_quantity();
  1273. $wc_rating_count = $product->get_rating_count();
  1274. $wc_review_count = $product->get_review_count();
  1275. $wc_tags = ($is_30) ? wc_get_product_tag_list($product->get_id()) : $product->get_tags();
  1276. $pr_id = ($is_30) ? $product->get_id() : $product->id;
  1277. $pr_type = ($is_30) ? $product->get_type() : $product->product_type;
  1278. if(strpos($text, 'wc_add_to_cart_button') !== false){
  1279. $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
  1280. $ajax_cart_en = get_option( 'woocommerce_enable_ajax_add_to_cart' ) == 'yes' ? true : false;
  1281. $assets_path = str_replace( array( 'http:', 'https:' ), '', WC()->plugin_url() ) . '/assets/';
  1282. $frontend_script_path = $assets_path . 'js/frontend/';
  1283. if ( $ajax_cart_en ){
  1284. wp_enqueue_script( 'wc-add-to-cart', $frontend_script_path . 'add-to-cart' . $suffix . '.js', array( 'jquery' ), WC_VERSION, true );
  1285. global $wc_is_localized;
  1286. if($wc_is_localized === false){ //load it only one time
  1287. wp_localize_script( 'wc-add-to-cart', 'wc_add_to_cart_params', apply_filters( 'wc_add_to_cart_params', array(
  1288. 'ajax_url' => WC()->ajax_url(),
  1289. 'ajax_loader_url' => apply_filters( 'woocommerce_ajax_loader_url', $assets_path . 'images/ajax-loader@2x.gif' ),
  1290. 'i18n_view_cart' => esc_attr__( 'View Cart', 'woocommerce' ),
  1291. 'cart_url' => get_permalink( wc_get_page_id( 'cart' ) ),
  1292. 'is_cart' => is_cart(),
  1293. 'cart_redirect_after_add' => get_option( 'woocommerce_cart_redirect_after_add' )
  1294. ) ) );
  1295. $wc_is_localized = true;
  1296. }
  1297. }
  1298. $wc_add_to_cart_button = apply_filters( 'woocommerce_loop_add_to_cart_link',
  1299. sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="button %s product_type_%s">%s</a>',
  1300. esc_url( $product->add_to_cart_url() ),
  1301. esc_attr( $pr_id ),
  1302. esc_attr( $product->get_sku() ),
  1303. $product->is_purchasable() ? 'add_to_cart_button' : '',
  1304. esc_attr( $pr_type ),
  1305. esc_html( $product->add_to_cart_text() )
  1306. ),
  1307. $product );
  1308. }
  1309. $text = str_replace(array('%wc_full_price%', '{{wc_full_price}}'), $wc_full_price, $text);
  1310. $text = str_replace(array('%wc_price%', '{{wc_price}}'), $wc_price, $text);
  1311. $text = str_replace(array('%wc_price_no_cur%', '{{wc_price_no_cur}}'), $wc_price_no_cur, $text);
  1312. $text = str_replace(array('%wc_stock%', '{{wc_stock}}'), $wc_stock, $text);
  1313. $text = str_replace(array('%wc_rating%', '{{wc_rating}}'), $wc_rating, $text);
  1314. $text = str_replace(array('%wc_star_rating%', '{{wc_star_rating}}'), $wc_star_rating, $text);
  1315. $text = str_replace(array('%wc_categories%', '{{wc_categories}}'), $wc_categories, $text);
  1316. $text = str_replace(array('%wc_add_to_cart%', '{{wc_add_to_cart}}'), $wc_add_to_cart, $text);
  1317. $text = str_replace(array('%wc_add_to_cart_button%', '{{wc_add_to_cart_button}}'), $wc_add_to_cart_button, $text);
  1318. $text = str_replace(array('%wc_sku%', '{{wc_sku}}'), $wc_sku, $text);
  1319. $text = str_replace(array('%wc_stock_quantity%', '{{wc_stock_quantity}}'), $wc_stock_quantity, $text);
  1320. $text = str_replace(array('%wc_rating_count%', '{{wc_rating_count}}'), $wc_rating_count, $text);
  1321. $text = str_replace(array('%wc_review_count%', '{{wc_review_count}}'), $wc_review_count, $text);
  1322. $text = str_replace(array('%wc_tags%', '{{wc_tags}}'), $wc_tags, $text);
  1323. }
  1324. }
  1325. return $text;
  1326. }
  1327. /**
  1328. * get slide data by id
  1329. * @since: 5.2.0
  1330. */
  1331. public function getDataByID($slideid){
  1332. $return = false;
  1333. if(strpos($slideid, 'static_') !== false){
  1334. $sliderID = str_replace('static_', '', $slideid);
  1335. $record = $this->db->fetch(RevSliderGlobals::$table_static_slides, $this->db->prepare("slider_id = %s", array($sliderID)));
  1336. if(!empty($record)){
  1337. $return = $record[0];
  1338. }
  1339. //$return = false;
  1340. }else{
  1341. $record = $this->db->fetchSingle(RevSliderGlobals::$table_slides, $this->db->prepare("id = %d", array($slideid)));
  1342. $return = $record;
  1343. }
  1344. return apply_filters('revslider_slide_getDataByID', $return, $slideid, $this);
  1345. }
  1346. /**
  1347. * init the slider by id
  1348. */
  1349. public function initByID($slideid){
  1350. try{
  1351. if(strpos($slideid, 'static_') !== false){
  1352. $this->static_slide = true;
  1353. $sliderID = str_replace('static_', '', $slideid);
  1354. RevSliderFunctions::validateNumeric($sliderID,"Slider ID");
  1355. $record = $this->db->fetch(RevSliderGlobals::$table_static_slides, $this->db->prepare("slider_id = %s", array($sliderID)));
  1356. if(empty($record)){
  1357. try{
  1358. //create a new static slide for the Slider and then use it
  1359. $slide_id = $this->createSlide($sliderID,"",true);
  1360. $record = $this->db->fetch(RevSliderGlobals::$table_static_slides, $this->db->prepare("slider_id = %s", array($sliderID)));
  1361. $this->initByData($record[0]);
  1362. }catch(Exception $e){}
  1363. }else{
  1364. $this->initByData($record[0]);
  1365. }
  1366. }else{
  1367. RevSliderFunctions::validateNumeric($slideid,"Slide ID");
  1368. $record = $this->db->fetchSingle(RevSliderGlobals::$table_slides, $this->db->prepare("id = %d", array($slideid)));
  1369. $this->initByData($record);
  1370. }
  1371. }catch(Exception $e){
  1372. $message = $e->getMessage();
  1373. echo $message;
  1374. exit;
  1375. }
  1376. }
  1377. /**
  1378. * Check if Slide Exists with given ID
  1379. * @since: 5.0
  1380. */
  1381. public static function isSlideByID($slideid){
  1382. $db = new RevSliderDB();
  1383. try{
  1384. if(strpos($slideid, 'static_') !== false){
  1385. $sliderID = str_replace('static_', '', $slideid);
  1386. RevSliderFunctions::validateNumeric($sliderID,"Slider ID");
  1387. $record = $db->fetch(RevSliderGlobals::$table_static_slides, $db->prepare("slider_id = %s", array($sliderID)));
  1388. if(empty($record)) return false;
  1389. return true;
  1390. }else{
  1391. $record = $db->fetchSingle(RevSliderGlobals::$table_slides, $db->prepare("id = %s", array($slideid)));
  1392. if(empty($record)) return false;
  1393. return true;
  1394. }
  1395. }catch(Exception $e){
  1396. return false;
  1397. }
  1398. }
  1399. /**
  1400. *
  1401. * init the slider by id
  1402. */
  1403. public function initByStaticID($slideid){
  1404. RevSliderFunctions::validateNumeric($slideid,"Slide ID");
  1405. $record = $this->db->fetchSingle(RevSliderGlobals::$table_static_slides, $this->db->prepare("id = %s", array($slideid)));
  1406. $this->initByData($record);
  1407. }
  1408. /**
  1409. *
  1410. * getStaticSlide
  1411. */
  1412. public function getStaticSlideID($sliderID){
  1413. RevSliderFunctions::validateNumeric($sliderID,"Slider ID");
  1414. $record = $this->db->fetch(RevSliderGlobals::$table_static_slides, $this->db->prepare("slider_id = %s", array($sliderID)));
  1415. if(empty($record)){
  1416. return false;
  1417. }else{
  1418. return $record[0]['id'];
  1419. }
  1420. }
  1421. /**
  1422. *
  1423. * set slide image by image id
  1424. */
  1425. private function setImageByImageID($imageID){
  1426. $imageID = apply_filters('revslider_slide_setImageByImageID', $imageID, $this);
  1427. $imgResolution = RevSliderFunctions::getVal($this->params, 'image_source_type', 'full');
  1428. $this->imageID = $imageID;
  1429. $this->imageUrl = RevSliderFunctionsWP::getUrlAttachmentImage($imageID, $imgResolution);
  1430. $this->imageThumb = RevSliderFunctionsWP::getUrlAttachmentImage($imageID,RevSliderFunctionsWP::THUMB_MEDIUM);
  1431. if(empty($this->imageUrl))
  1432. return(false);
  1433. $this->params["background_type"] = "image";
  1434. if(is_ssl()){
  1435. $this->imageUrl = str_replace("http://", "https://", $this->imageUrl);
  1436. }
  1437. $this->imageFilepath = RevSliderFunctionsWP::getImagePathFromURL($this->imageUrl);
  1438. $realPath = RevSliderFunctionsWP::getPathContent().$this->imageFilepath;
  1439. if(file_exists($realPath) == false || is_file($realPath) == false)
  1440. $this->imageFilepath = "";
  1441. $this->imageFilename = basename($this->imageUrl);
  1442. }
  1443. /**
  1444. *
  1445. * set children array
  1446. */
  1447. public function setArrChildren($arrChildren){
  1448. $this->arrChildren = $arrChildren;
  1449. }
  1450. /**
  1451. *
  1452. * get children array
  1453. */
  1454. public function getArrChildren(){
  1455. $this->validateInited();
  1456. if($this->arrChildren === null){
  1457. $slider = new RevSlider();
  1458. $slider->initByID($this->sliderID);
  1459. $this->arrChildren = $slider->getArrSlideChildren($this->id);
  1460. }
  1461. return apply_filters('revslider_slide_getArrChildren', $this->arrChildren, $this);
  1462. }
  1463. /**
  1464. *
  1465. * return if the slide from post
  1466. */
  1467. public function isFromPost(){
  1468. return !empty($this->postData);
  1469. }
  1470. /**
  1471. *
  1472. * get post data
  1473. */
  1474. public function getPostData(){
  1475. return($this->postData);
  1476. }
  1477. /**
  1478. *
  1479. * get children array as is
  1480. */
  1481. public function getArrChildrenPure(){
  1482. return($this->arrChildren);
  1483. }
  1484. /**
  1485. *
  1486. * return if the slide is parent slide
  1487. */
  1488. public function isParent(){
  1489. $parentID = $this->getParam("parentid","");
  1490. return(!empty($parentID));
  1491. }
  1492. /**
  1493. *
  1494. * get slide language
  1495. */
  1496. public function getLang(){
  1497. $lang = $this->getParam("lang","all");
  1498. return($lang);
  1499. }
  1500. /**
  1501. *
  1502. * return parent slide. If the slide is parent, return this slide.
  1503. */
  1504. public function getParentSlide(){
  1505. $parentID = $this->getParam("parentid","");
  1506. if(empty($parentID))
  1507. return($this);
  1508. $parentSlide = new RevSlide();
  1509. $parentSlide->initByID($parentID);
  1510. return($parentSlide);
  1511. }
  1512. /**
  1513. * return parent slide id
  1514. * @since: 5.0
  1515. */
  1516. public function getParentSlideID(){
  1517. $parentID = $this->getParam("parentid","");
  1518. return $parentID;
  1519. }
  1520. /**
  1521. *
  1522. * get array of children id's
  1523. */
  1524. public function getArrChildrenIDs(){
  1525. $arrChildren = $this->getArrChildren();
  1526. $arrChildrenIDs = array();
  1527. foreach($arrChildren as $child){
  1528. $childID = $child->getID();
  1529. $arrChildrenIDs[] = $childID;
  1530. }
  1531. return($arrChildrenIDs);
  1532. }
  1533. /**
  1534. *
  1535. * get array of children array and languages, the first is current language.
  1536. */
  1537. public function getArrChildrenLangs($includeParent = true){
  1538. $this->validateInited();
  1539. $slideID = $this->id;
  1540. if($includeParent == true){
  1541. $lang = $this->getParam("lang","all");
  1542. $arrOutput = array();
  1543. $arrOutput[] = array("slideid"=>$slideID,"lang"=>$lang,"isparent"=>true);
  1544. }
  1545. $arrChildren = $this->getArrChildren();
  1546. foreach($arrChildren as $child){
  1547. $childID = $child->getID();
  1548. $childLang = $child->getParam("lang","all");
  1549. $arrOutput[] = array("slideid"=>$childID,"lang"=>$childLang,"isparent"=>false);
  1550. }
  1551. return($arrOutput);
  1552. }
  1553. /**
  1554. *
  1555. * get children language codes (including current slide lang code)
  1556. */
  1557. public function getArrChildLangCodes($includeParent = true){
  1558. $arrLangsWithSlideID = $this->getArrChildrenLangs($includeParent);
  1559. $arrLangCodes = array();
  1560. foreach($arrLangsWithSlideID as $item){
  1561. $lang = $item["lang"];
  1562. $arrLangCodes[$lang] = $lang;
  1563. }
  1564. return($arrLangCodes);
  1565. }
  1566. /**
  1567. * get slide ID
  1568. */
  1569. public function getID(){
  1570. return($this->id);
  1571. }
  1572. /**
  1573. * set slide ID
  1574. */
  1575. public function setID($id){
  1576. $this->id = $id;
  1577. }
  1578. /**
  1579. * get slide title
  1580. */
  1581. public function getTitle(){
  1582. return $this->getParam("title","Slide");
  1583. }
  1584. /**
  1585. * get slide order
  1586. */
  1587. public function getOrder(){
  1588. $this->validateInited();
  1589. return $this->slideOrder;
  1590. }
  1591. /**
  1592. * get layers in json format
  1593. */
  1594. public function getLayers(){
  1595. $this->validateInited();
  1596. return apply_filters('revslider_getLayers', $this->arrLayers, $this);
  1597. }
  1598. /**
  1599. * get layers in json format
  1600. * since: 5.0
  1601. */
  1602. public function getLayerID_by_unique_id($unique_id, $static_slide){
  1603. $this->validateInited();
  1604. if(strpos($unique_id, 'static-') !== false){
  1605. $unique_id = str_replace('static-', '', $unique_id);
  1606. $layers = $static_slide->getLayers();
  1607. if(!empty($layers)){
  1608. foreach($layers as $l){
  1609. $uid = RevSliderFunctions::getVal($l, 'unique_id');
  1610. if($uid == $unique_id){
  1611. return RevSliderFunctions::getVal($l, 'attrID');
  1612. }
  1613. }
  1614. }
  1615. }else{
  1616. foreach($this->arrLayers as $l){
  1617. $uid = RevSliderFunctions::getVal($l, 'unique_id');
  1618. if($uid == $unique_id){
  1619. return RevSliderFunctions::getVal($l, 'attrID');
  1620. }
  1621. }
  1622. }
  1623. return '';
  1624. }
  1625. /**
  1626. * save layers to the database
  1627. * @since: 5.0
  1628. */
  1629. public function saveLayers(){
  1630. $this->validateInited();
  1631. $table = ($this->static_slide) ? RevSliderGlobals::$table_static_slides : RevSliderGlobals::$table_slides;
  1632. $this->arrLayers = apply_filters('revslider_slide_saveLayers', $this->arrLayers, $this->static_slide, $this);
  1633. $this->db->update($table, array('layers' => json_encode($this->arrLayers)),array('id'=>$this->id));
  1634. }
  1635. /**
  1636. * save params to the database
  1637. * @since: 5.0
  1638. */
  1639. public function saveParams(){
  1640. $this->validateInited();
  1641. $table = ($this->static_slide) ? RevSliderGlobals::$table_static_slides : RevSliderGlobals::$table_slides;
  1642. $this->params = apply_filters('revslider_slide_saveParams', $this->params, $this->static_slide, $this);
  1643. $this->db->update($table, array('params' => json_encode($this->params)),array('id'=>$this->id));
  1644. }
  1645. /**
  1646. * modify layer links for export
  1647. */
  1648. public function getLayersForExport($useDummy = false){
  1649. $this->validateInited();
  1650. $arrLayersNew = array();
  1651. foreach($this->arrLayers as $key=>$layer){
  1652. $imageUrl = RevSliderFunctions::getVal($layer, "image_url");
  1653. if(!empty($imageUrl))
  1654. $layer["image_url"] = RevSliderFunctionsWP::getImagePathFromURL($layer["image_url"]);
  1655. $arrLayersNew[] = $layer;
  1656. }
  1657. return apply_filters('revslider_slide_getLayersForExport', $arrLayersNew, $this);
  1658. }
  1659. /**
  1660. * get params for export
  1661. */
  1662. public function getParamsForExport(){
  1663. $arrParams = $this->getParams();
  1664. $urlImage = RevSliderFunctions::getVal($arrParams, "image");
  1665. if(!empty($urlImage))
  1666. $arrParams["image"] = RevSliderFunctionsWP::getImagePathFromURL($urlImage);
  1667. //check if we are transparent or solid and remove unneeded image
  1668. $bgtype = RevSliderFunctions::getVal($arrParams, "background_type", 'transparent');
  1669. switch($bgtype){
  1670. case 'transparent':
  1671. case 'trans':
  1672. case 'solid':
  1673. $arrParams["image"] = '';
  1674. break;
  1675. }
  1676. return apply_filters('revslider_slide_getParamsForExport', $arrParams, $this);
  1677. }
  1678. /**
  1679. * normalize layers text, and get layers
  1680. */
  1681. public function getLayersNormalizeText(){
  1682. $arrLayersNew = array();
  1683. foreach ($this->arrLayers as $key=>$layer){
  1684. $text = $layer["text"];
  1685. $text = addslashes($text);
  1686. $layer["text"] = $text;
  1687. $arrLayersNew[] = $layer;
  1688. }
  1689. return apply_filters('revslider_slide_getLayersNormalizeText', $arrLayersNew, $this);
  1690. }
  1691. /**
  1692. * get slide params
  1693. */
  1694. public function getParams(){
  1695. $this->validateInited();
  1696. return apply_filters('revslider_slide_getParams', $this->params, $this);
  1697. }
  1698. /**
  1699. * get slide settings
  1700. * @since: 5.0
  1701. */
  1702. public function getSettings(){
  1703. $this->validateInited();
  1704. return apply_filters('revslider_slide_getSettings', $this->settings, $this);
  1705. }
  1706. /**
  1707. * get parameter from params array. if no default, then the param is a must!
  1708. */
  1709. function getParam($name,$default=null){
  1710. if($default === null){
  1711. //if(!array_key_exists($name, $this->params))
  1712. $default = '';
  1713. }
  1714. return RevSliderFunctions::getVal($this->params, $name, $default);
  1715. }
  1716. /**
  1717. * set parameter
  1718. * @since: 5.0
  1719. */
  1720. public function setParam($name, $value){
  1721. $this->params[$name] = $value;
  1722. }
  1723. /**
  1724. * get image filename
  1725. */
  1726. public function getImageFilename(){
  1727. return($this->imageFilename);
  1728. }
  1729. /**
  1730. * get image filepath
  1731. */
  1732. public function getImageFilepath(){
  1733. return($this->imageFilepath);
  1734. }
  1735. /**
  1736. * get image url
  1737. */
  1738. public function getImageUrl(){
  1739. return($this->imageUrl);
  1740. }
  1741. /**
  1742. * get image id
  1743. */
  1744. public function getImageID(){
  1745. return($this->imageID);
  1746. }
  1747. /**
  1748. * get thumb url
  1749. */
  1750. public function getThumbUrl(){
  1751. $thumbUrl = $this->imageUrl;
  1752. if(!empty($this->imageThumb))
  1753. $thumbUrl = $this->imageThumb;
  1754. return($thumbUrl);
  1755. }
  1756. /**
  1757. * get the slider id
  1758. */
  1759. public function getSliderID(){
  1760. return($this->sliderID);
  1761. }
  1762. /**
  1763. * get slider param
  1764. */
  1765. private function getSliderParam($sliderID,$name,$default,$validate=null){
  1766. if(empty($this->slider)){
  1767. $this->slider = new RevSlider();
  1768. $this->slider->initByID($sliderID);
  1769. }
  1770. $param = $this->slider->getParam($name,$default,$validate);
  1771. return($param);
  1772. }
  1773. /**
  1774. * validate that the slider exists
  1775. */
  1776. private function validateSliderExists($sliderID){
  1777. $slider = new RevSlider();
  1778. $slider->initByID($sliderID);
  1779. }
  1780. /**
  1781. * validate that the slide is inited and the id exists.
  1782. */
  1783. private function validateInited(){
  1784. if(empty($this->id))
  1785. RevSliderFunctions::throwError("The slide is not initialized!!!");
  1786. }
  1787. /**
  1788. * create the slide (from image)
  1789. */
  1790. public function createSlide($sliderID,$obj="",$static = false){
  1791. $imageID = null;
  1792. if(is_array($obj)){
  1793. $urlImage = RevSliderFunctions::getVal($obj, "url");
  1794. $imageID = RevSliderFunctions::getVal($obj, "id");
  1795. }else{
  1796. $urlImage = $obj;
  1797. }
  1798. //get max order
  1799. $slider = new RevSlider();
  1800. $slider->initByID($sliderID);
  1801. $maxOrder = $slider->getMaxOrder();
  1802. $order = $maxOrder+1;
  1803. $params = array();
  1804. if(!empty($urlImage)){
  1805. $params["background_type"] = "image";
  1806. $params["image"] = $urlImage;
  1807. if(!empty($imageID))
  1808. $params["image_id"] = $imageID;
  1809. }else{ //create transparent slide
  1810. $params["background_type"] = "trans";
  1811. }
  1812. $jsonParams = json_encode($params);
  1813. $arrInsert = array(
  1814. "params"=>$jsonParams,
  1815. "slider_id"=>$sliderID,
  1816. "layers"=>""
  1817. );
  1818. if(!$static)
  1819. $arrInsert["slide_order"] = $order;
  1820. $arrInsert = apply_filters('revslider_slide_createSlide', $arrInsert, $sliderID, $static, $this);
  1821. if(!$static)
  1822. $slideID = $this->db->insert(RevSliderGlobals::$table_slides, $arrInsert);
  1823. else
  1824. $slideID = $this->db->insert(RevSliderGlobals::$table_static_slides, $arrInsert);
  1825. return $slideID;
  1826. }
  1827. /**
  1828. *
  1829. * update slide image from data
  1830. */
  1831. public function updateSlideImageFromData($data){
  1832. $sliderID = RevSliderFunctions::getVal($data, "slider_id");
  1833. $slider = new RevSlider();
  1834. $slider->initByID($sliderID);
  1835. $slideID = RevSliderFunctions::getVal($data, "slide_id");
  1836. $urlImage = RevSliderFunctions::getVal($data, "url_image");
  1837. RevSliderFunctions::validateNotEmpty($urlImage);
  1838. $imageID = RevSliderFunctions::getVal($data, "image_id");
  1839. if($slider->isSlidesFromPosts()){
  1840. if(!empty($imageID))
  1841. RevSliderFunctionsWP::updatePostThumbnail($slideID, $imageID);
  1842. }elseif($slider->isSlidesFromStream() !== false){
  1843. //do nothing
  1844. }else{
  1845. $this->initByID($slideID);
  1846. $arrUpdate = array();
  1847. $arrUpdate["image"] = $urlImage;
  1848. $arrUpdate["image_id"] = $imageID;
  1849. $this->updateParamsInDB($arrUpdate);
  1850. }
  1851. return $urlImage;
  1852. }
  1853. /**
  1854. *
  1855. * update slide parameters in db
  1856. */
  1857. protected function updateParamsInDB($arrUpdate = array(), $static = false){
  1858. $this->validateInited();
  1859. $this->params = apply_filters('revslider_slide_updateParamsInDB', array_merge($this->params,$arrUpdate), $this);
  1860. $jsonParams = json_encode($this->params);
  1861. $arrDBUpdate = array("params"=>$jsonParams);
  1862. if($static === false){
  1863. $this->db->update(RevSliderGlobals::$table_slides,$arrDBUpdate,array("id"=>$this->id));
  1864. }else{
  1865. $this->db->update(RevSliderGlobals::$table_static_slides,$arrDBUpdate,array("id"=>$static));
  1866. }
  1867. }
  1868. /**
  1869. *
  1870. * update current layers in db
  1871. */
  1872. protected function updateLayersInDB($arrLayers = null, $static = false){
  1873. $this->validateInited();
  1874. if($arrLayers === null)
  1875. $arrLayers = $this->arrLayers;
  1876. $arrLayers = apply_filters('revslider_slide_updateLayersInDB', $arrLayers, $this);
  1877. $jsonLayers = json_encode($arrLayers);
  1878. $arrDBUpdate = array("layers"=>$jsonLayers);
  1879. if($static === false){
  1880. $this->db->update(RevSliderGlobals::$table_slides,$arrDBUpdate,array("id"=>$this->id));
  1881. }else{
  1882. $this->db->update(RevSliderGlobals::$table_static_slides,$arrDBUpdate,array("id"=>$static));
  1883. }
  1884. }
  1885. /**
  1886. *
  1887. * update parent slideID
  1888. */
  1889. public function updateParentSlideID($parentID){
  1890. $arrUpdate = array();
  1891. $arrUpdate["parentid"] = $parentID;
  1892. $this->updateParamsInDB($arrUpdate);
  1893. }
  1894. /**
  1895. *
  1896. * sort layers by order
  1897. */
  1898. private function sortLayersByOrder($layer1,$layer2){
  1899. $layer1 = (array)$layer1;
  1900. $layer2 = (array)$layer2;
  1901. $order1 = RevSliderFunctions::getVal($layer1, "order",1);
  1902. $order2 = RevSliderFunctions::getVal($layer2, "order",2);
  1903. if($order1 == $order2)
  1904. return(0);
  1905. return($order1 > $order2);
  1906. }
  1907. /**
  1908. *
  1909. * go through the layers and fix small bugs if exists
  1910. */
  1911. private function normalizeLayers($arrLayers){
  1912. usort($arrLayers,array($this,"sortLayersByOrder"));
  1913. $arrLayersNew = array();
  1914. foreach ($arrLayers as $key=>$layer){
  1915. $layer = (array)$layer;
  1916. //set type
  1917. $type = RevSliderFunctions::getVal($layer, "type","text");
  1918. $layer["type"] = $type;
  1919. //normalize position:
  1920. if(is_object($layer["left"])){
  1921. foreach($layer["left"] as $key => $val){
  1922. $layer["left"]->$key = round($val);
  1923. }
  1924. }else{
  1925. $layer["left"] = round($layer["left"]);
  1926. }
  1927. if(is_object($layer["top"])){
  1928. foreach($layer["top"] as $key => $val){
  1929. $layer["top"]->$key = round($val);
  1930. }
  1931. }else{
  1932. $layer["top"] = round($layer["top"]);
  1933. }
  1934. //unset order
  1935. unset($layer["order"]);
  1936. //modify text
  1937. $layer["text"] = stripcslashes($layer["text"]);
  1938. $arrLayersNew[] = $layer;
  1939. }
  1940. return $arrLayersNew;
  1941. }
  1942. /**
  1943. *
  1944. * normalize params
  1945. */
  1946. private function normalizeParams($params){
  1947. $urlImage = RevSliderFunctions::getVal($params, "image_url");
  1948. //init the id if absent
  1949. $params["image_id"] = RevSliderFunctions::getVal($params, "image_id");
  1950. $params["image"] = $urlImage;
  1951. unset($params["image_url"]);
  1952. if(isset($params["video_description"]))
  1953. $params["video_description"] = RevSliderFunctions::normalizeTextareaContent($params["video_description"]);
  1954. return $params;
  1955. }
  1956. /**
  1957. *
  1958. * update slide from data
  1959. * @param $data
  1960. */
  1961. public function updateSlideFromData($data){
  1962. $slideID = RevSliderFunctions::getVal($data, "slideid");
  1963. $this->initByID($slideID);
  1964. //treat params
  1965. $params = RevSliderFunctions::getVal($data, "params");
  1966. $params = $this->normalizeParams($params);
  1967. //preserve old data that not included in the given data
  1968. $params = array_merge($this->params,$params);
  1969. //treat layers
  1970. $layers = RevSliderFunctions::getVal($data, "layers");
  1971. if(gettype($layers) == "string"){
  1972. $layersStrip = stripslashes($layers);
  1973. $layersDecoded = json_decode($layersStrip);
  1974. if(empty($layersDecoded))
  1975. $layersDecoded = json_decode($layers);
  1976. $layers = RevSliderFunctions::convertStdClassToArray($layersDecoded);
  1977. }
  1978. if(empty($layers) || gettype($layers) != "array")
  1979. $layers = array();
  1980. $layers = $this->normalizeLayers($layers);
  1981. $settings = RevSliderFunctions::getVal($data, "settings");
  1982. $arrUpdate = array();
  1983. $arrUpdate["layers"] = json_encode($layers);
  1984. $arrUpdate["params"] = json_encode($params);
  1985. $arrUpdate["settings"] = json_encode($settings);
  1986. $arrUpdate = apply_filters('revslider_slide_updateSlideFromData_pre', $arrUpdate, $data, $this);
  1987. $this->db->update(RevSliderGlobals::$table_slides,$arrUpdate,array("id"=>$this->id));
  1988. do_action('revslider_slide_updateSlideFromData_post', $arrUpdate, $data, $this);
  1989. //RevSliderOperations::updateDynamicCaptions();
  1990. }
  1991. /**
  1992. *
  1993. * update slide from data
  1994. * @param $data
  1995. */
  1996. public function updateStaticSlideFromData($data){
  1997. $slideID = RevSliderFunctions::getVal($data, "slideid");
  1998. $this->initByStaticID($slideID);
  1999. $params = RevSliderFunctions::getVal($data, "params");
  2000. $params = $this->normalizeParams($params);
  2001. //treat layers
  2002. $layers = RevSliderFunctions::getVal($data, "layers");
  2003. if(gettype($layers) == "string"){
  2004. $layersStrip = stripslashes($layers);
  2005. $layersDecoded = json_decode($layersStrip);
  2006. if(empty($layersDecoded))
  2007. $layersDecoded = json_decode($layers);
  2008. $layers = RevSliderFunctions::convertStdClassToArray($layersDecoded);
  2009. }
  2010. if(empty($layers) || gettype($layers) != "array")
  2011. $layers = array();
  2012. $layers = $this->normalizeLayers($layers);
  2013. $settings = RevSliderFunctions::getVal($data, "settings");
  2014. $arrUpdate = array();
  2015. $arrUpdate["layers"] = json_encode($layers);
  2016. $arrUpdate["params"] = json_encode($params);
  2017. $arrUpdate["settings"] = json_encode($settings);
  2018. $arrUpdate = apply_filters('revslider_slide_updateStaticSlideFromData', $arrUpdate, $data, $this);
  2019. $this->db->update(RevSliderGlobals::$table_static_slides,$arrUpdate,array("id"=>$this->id));
  2020. do_action('revslider_slide_updateStaticSlideFromData_post', $arrUpdate, $data, $this);
  2021. //RevSliderOperations::updateDynamicCaptions();
  2022. }
  2023. /**
  2024. *
  2025. * delete slide by slideid
  2026. */
  2027. public function deleteSlide(){
  2028. $this->validateInited();
  2029. $this->db->delete(RevSliderGlobals::$table_slides, $this->db->prepare("id = %s", array($this->id)));
  2030. do_action('revslider_slide_deleteSlide', $this->id);
  2031. }
  2032. /**
  2033. *
  2034. * delete slide children
  2035. */
  2036. public function deleteChildren(){
  2037. $this->validateInited();
  2038. $arrChildren = $this->getArrChildren();
  2039. foreach($arrChildren as $child)
  2040. $child->deleteSlide();
  2041. }
  2042. /**
  2043. *
  2044. * delete slide from data
  2045. */
  2046. public function deleteSlideFromData($data){
  2047. $sliderID = RevSliderFunctions::getVal($data, "sliderID");
  2048. $slider = new RevSlider();
  2049. $slider->initByID($sliderID);
  2050. //delete slide
  2051. $slideID = RevSliderFunctions::getVal($data, "slideID");
  2052. $this->initByID($slideID);
  2053. $this->deleteChildren();
  2054. $this->deleteSlide();
  2055. }
  2056. /**
  2057. * set params from client
  2058. */
  2059. public function setParams($params){
  2060. $params = $this->normalizeParams($params);
  2061. $this->params = $params;
  2062. }
  2063. /**
  2064. *
  2065. * set layers from client
  2066. */
  2067. public function setLayers($layers){
  2068. $layers = $this->normalizeLayers($layers);
  2069. $this->arrLayers = $layers;
  2070. }
  2071. /**
  2072. * set layers from client, do not normalize as this results in loosing the order
  2073. * @since: 5.0
  2074. */
  2075. public function setLayersRaw($layers){
  2076. $this->arrLayers = $layers;
  2077. }
  2078. /**
  2079. * update the title of a Slide by Slide ID
  2080. * @since: 5.0
  2081. **/
  2082. public function updateTitleByID($data){
  2083. if(!isset($data['slideID']) || !isset($data['slideTitle'])) return false;
  2084. $this->initByID($data['slideID']);
  2085. $arrUpdate = array();
  2086. $arrUpdate['title'] = $data['slideTitle'];
  2087. $arrUpdate = apply_filters('revslider_slide_updateTitleByID', $arrUpdate, $data, $this);
  2088. $this->updateParamsInDB($arrUpdate);
  2089. }
  2090. /**
  2091. * toggle slide state from data
  2092. **/
  2093. public function toggleSlideStatFromData($data){
  2094. $sliderID = RevSliderFunctions::getVal($data, "slider_id");
  2095. $slider = new RevSlider();
  2096. $slider->initByID($sliderID);
  2097. $slideID = RevSliderFunctions::getVal($data, "slide_id");
  2098. $this->initByID($slideID);
  2099. $state = $this->getParam("state","published");
  2100. $newState = ($state == "published")?"unpublished":"published";
  2101. $arrUpdate = array();
  2102. $arrUpdate["state"] = $newState;
  2103. $arrUpdate = apply_filters('revslider_slide_toggleSlideStatFromData', $arrUpdate, $data, $this);
  2104. $this->updateParamsInDB($arrUpdate);
  2105. return $newState;
  2106. }
  2107. /**
  2108. *
  2109. * updatye slide language from data
  2110. */
  2111. private function updateLangFromData($data){
  2112. $slideID = RevSliderFunctions::getVal($data, "slideid");
  2113. $this->initByID($slideID);
  2114. $lang = RevSliderFunctions::getVal($data, "lang");
  2115. $arrUpdate = array();
  2116. $arrUpdate["lang"] = $lang;
  2117. $this->updateParamsInDB($arrUpdate);
  2118. $response = array();
  2119. $response["url_icon"] = RevSliderWpml::getFlagUrl($lang);
  2120. $response["title"] = RevSliderWpml::getLangTitle($lang);
  2121. $response["operation"] = "update";
  2122. return($response);
  2123. }
  2124. /**
  2125. *
  2126. * add language (add slide that connected to current slide) from data
  2127. */
  2128. private function addLangFromData($data){
  2129. $sliderID = RevSliderFunctions::getVal($data, "sliderid");
  2130. $slideID = RevSliderFunctions::getVal($data, "slideid");
  2131. $lang = RevSliderFunctions::getVal($data, "lang");
  2132. //duplicate slide
  2133. $slider = new RevSlider();
  2134. $slider->initByID($sliderID);
  2135. $newSlideID = $slider->duplicateSlide($slideID);
  2136. //update new slide
  2137. $this->initByID($newSlideID);
  2138. $arrUpdate = array();
  2139. $arrUpdate["lang"] = $lang;
  2140. $arrUpdate["parentid"] = $slideID;
  2141. $this->updateParamsInDB($arrUpdate);
  2142. $urlIcon = RevSliderWpml::getFlagUrl($lang);
  2143. $title = RevSliderWpml::getLangTitle($lang);
  2144. $newSlide = new RevSlide();
  2145. $newSlide->initByID($slideID);
  2146. $arrLangCodes = $newSlide->getArrChildLangCodes();
  2147. $isAll = RevSliderWpml::isAllLangsInArray($arrLangCodes);
  2148. $html = "<li>
  2149. <img id=\"icon_lang_".$newSlideID."\" class=\"icon_slide_lang\" src=\"".$urlIcon."\" title=\"".$title."\" data-slideid=\"".$newSlideID."\" data-lang=\"".$lang."\">
  2150. <div class=\"icon_lang_loader loader_round\" style=\"display:none\"></div>
  2151. </li>";
  2152. $response = array();
  2153. $response["operation"] = "add";
  2154. $response["isAll"] = $isAll;
  2155. $response["html"] = $html;
  2156. return($response);
  2157. }
  2158. /**
  2159. *
  2160. * delete slide from language menu data
  2161. */
  2162. private function deleteSlideFromLangData($data){
  2163. $slideID = RevSliderFunctions::getVal($data, "slideid");
  2164. $this->initByID($slideID);
  2165. $this->deleteSlide();
  2166. $response = array();
  2167. $response["operation"] = "delete";
  2168. return($response);
  2169. }
  2170. /**
  2171. *
  2172. * add or update language from data
  2173. */
  2174. public function doSlideLangOperation($data){
  2175. $operation = RevSliderFunctions::getVal($data, "operation");
  2176. switch($operation){
  2177. case "add":
  2178. $response = $this->addLangFromData($data);
  2179. break;
  2180. case "delete":
  2181. $response = $this->deleteSlideFromLangData($data);
  2182. break;
  2183. case "update":
  2184. default:
  2185. $response = $this->updateLangFromData($data);
  2186. break;
  2187. }
  2188. return($response);
  2189. }
  2190. /**
  2191. *
  2192. * get thumb url
  2193. */
  2194. public function getUrlImageThumb(){
  2195. //get image url by thumb
  2196. if(!empty($this->imageID)){
  2197. $urlImage = RevSliderFunctionsWP::getUrlAttachmentImage($this->imageID, RevSliderFunctionsWP::THUMB_MEDIUM);
  2198. }else{
  2199. //get from cache
  2200. if(!empty($this->imageFilepath)){
  2201. $urlImage = RevSliderBase::getImageUrl($this->imageFilepath,200,100,true);
  2202. }
  2203. else
  2204. $urlImage = $this->imageUrl;
  2205. }
  2206. if(empty($urlImage))
  2207. $urlImage = $this->imageUrl;
  2208. $urlImage = apply_filters('revslider_slide_getUrlImageThumb', $urlImage, $this);
  2209. return $urlImage;
  2210. }
  2211. public function get_image_attributes($slider_type){
  2212. $params = $this->params;
  2213. $bgType = RevSliderBase::getVar($params, "background_type","transparent");
  2214. $bgColor = RevSliderBase::getVar($params, "slide_bg_color","transparent");
  2215. $bgFit = RevSliderBase::getVar($params, "bg_fit","cover");
  2216. $bgFitX = intval(RevSliderBase::getVar($params, "bg_fit_x","100"));
  2217. $bgFitY = intval(RevSliderBase::getVar($params, "bg_fit_y","100"));
  2218. $bgPosition = RevSliderBase::getVar($params, "bg_position","center top");
  2219. $bgPositionX = intval(RevSliderBase::getVar($params, "bg_position_x","0"));
  2220. $bgPositionY = intval(RevSliderBase::getVar($params, "bg_position_y","0"));
  2221. $bgRepeat = RevSliderBase::getVar($params, "bg_repeat","no-repeat");
  2222. $bgStyle = ' ';
  2223. if($bgFit == 'percentage'){
  2224. $bgStyle .= "background-size: ".$bgFitX.'% '.$bgFitY.'%;';
  2225. }else{
  2226. $bgStyle .= "background-size: ".$bgFit.";";
  2227. }
  2228. if($bgPosition == 'percentage'){
  2229. $bgStyle .= "background-position: ".$bgPositionX.'% '.$bgPositionY.'%;';
  2230. }else{
  2231. $bgStyle .= "background-position: ".$bgPosition.";";
  2232. }
  2233. $bgStyle .= "background-repeat: ".$bgRepeat.";";
  2234. $thumb = '';
  2235. $thumb_on = RevSliderBase::getVar($params, "thumb_for_admin", 'off');
  2236. switch($slider_type){
  2237. case 'gallery':
  2238. $imageID = RevSliderBase::getVar($params, "image_id");
  2239. if(empty($imageID)){
  2240. $thumb = RevSliderBase::getVar($params, "image");
  2241. $imgID = RevSliderBase::get_image_id_by_url($thumb);
  2242. if($imgID !== false){
  2243. $thumb = RevSliderFunctionsWP::getUrlAttachmentImage($imgID, RevSliderFunctionsWP::THUMB_MEDIUM);
  2244. }
  2245. }else{
  2246. $thumb = RevSliderFunctionsWP::getUrlAttachmentImage($imageID,RevSliderFunctionsWP::THUMB_MEDIUM);
  2247. }
  2248. if($thumb_on == 'on'){
  2249. $thumb = RevSliderBase::getVar($params, "slide_thumb", '');
  2250. }
  2251. break;
  2252. case 'posts':
  2253. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/post.png';
  2254. $bgStyle = 'background-size: cover;';
  2255. break;
  2256. case 'woocommerce':
  2257. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/wc.png';
  2258. $bgStyle = 'background-size: cover;';
  2259. break;
  2260. case 'facebook':
  2261. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/fb.png';
  2262. $bgStyle = 'background-size: cover;';
  2263. break;
  2264. case 'twitter':
  2265. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/tw.png';
  2266. $bgStyle = 'background-size: cover;';
  2267. break;
  2268. case 'instagram':
  2269. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/ig.png';
  2270. $bgStyle = 'background-size: cover;';
  2271. break;
  2272. case 'flickr':
  2273. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/fr.png';
  2274. $bgStyle = 'background-size: cover;';
  2275. break;
  2276. case 'youtube':
  2277. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/yt.png';
  2278. $bgStyle = 'background-size: cover;';
  2279. break;
  2280. case 'vimeo':
  2281. $thumb = RS_PLUGIN_URL.'public/assets/assets/sources/vm.png';
  2282. $bgStyle = 'background-size: cover;';
  2283. break;
  2284. }
  2285. if($thumb == '') $thumb = RevSliderBase::getVar($params, "image");
  2286. $bg_fullstyle ='';
  2287. $bg_extraClass='';
  2288. $data_urlImageForView='';
  2289. //if($bgType=="image" || $bgType=="streamvimeo" || $bgType=="streamyoutube" || $bgType=="streaminstagram" || $bgType=="html5") {
  2290. $data_urlImageForView = $thumb;
  2291. $bg_fullstyle = $bgStyle;
  2292. //}
  2293. if($bgType=="solid"){
  2294. if($thumb_on == 'off'){
  2295. $bg_fullstyle ='background-color:'.$bgColor.';';
  2296. $data_urlImageForView = '';
  2297. }else{
  2298. $bg_fullstyle = 'background-size: cover;';
  2299. }
  2300. }
  2301. if($bgType=="trans" || $bgType=="transparent"){
  2302. $data_urlImageForView = '';
  2303. $bg_extraClass = 'mini-transparent';
  2304. $bg_fullstyle = 'background-size: inherit; background-repeat: repeat;';
  2305. }
  2306. return apply_filters('revslider_slide_get_image_attributes', array(
  2307. 'url' => $data_urlImageForView,
  2308. 'class' => $bg_extraClass,
  2309. 'style' => $bg_fullstyle
  2310. ), $this);
  2311. }
  2312. /**
  2313. *
  2314. * replace image url's among slide image and layer images
  2315. */
  2316. public function replaceImageUrls($urlFrom, $urlTo, $static = false){
  2317. $this->validateInited();
  2318. $isUpdated = false;
  2319. $check = array('image', 'image_url', 'background_image', 'slide_thumb', 'show_alternate_image');
  2320. if(isset($this->params['background_type']) && $this->params['background_type'] == 'html5'){
  2321. $check[] = 'slide_bg_html_mpeg';
  2322. $check[] = 'slide_bg_html_webm';
  2323. $check[] = 'slide_bg_html_ogv';
  2324. }
  2325. foreach($check as $param){
  2326. $urlImage = RevSliderFunctions::getVal($this->params, $param, '');
  2327. if(strpos($urlImage, $urlFrom) !== false){
  2328. $imageNew = str_replace($urlFrom, $urlTo, $urlImage);
  2329. $this->params[$param] = $imageNew;
  2330. $isUpdated = true;
  2331. }
  2332. }
  2333. if($isUpdated == true){
  2334. $this->updateParamsInDB(array(), $static);
  2335. }
  2336. // update image url in layers
  2337. $isUpdated = false;
  2338. foreach($this->arrLayers as $key=>$layer){
  2339. $type = RevSliderFunctions::getVal($layer, "type");
  2340. $urlImage = RevSliderFunctions::getVal($layer, "image_url");
  2341. if(strpos($urlImage, $urlFrom) !== false){
  2342. $newUrlImage = str_replace($urlFrom, $urlTo, $urlImage);
  2343. $this->arrLayers[$key]["image_url"] = $newUrlImage;
  2344. $isUpdated = true;
  2345. }
  2346. if(isset($type) && ($type == 'video' || $type == 'audio')){
  2347. $video_data = (isset($layer['video_data'])) ? (array) $layer['video_data'] : array();
  2348. $check = array();
  2349. if(!empty($video_data) && isset($video_data['video_type']) && $video_data['video_type'] == 'html5'){
  2350. $check[] = 'urlPoster';
  2351. $check[] = 'urlMp4';
  2352. $check[] = 'urlWebm';
  2353. $check[] = 'urlOgv';
  2354. }elseif(!empty($video_data) && isset($video_data['video_type']) && $video_data['video_type'] != 'html5'){ //video cover image
  2355. if($video_data['video_type'] == 'audio'){
  2356. $check[] = 'urlAudio';
  2357. }else{
  2358. $check[] = 'previewimage';
  2359. }
  2360. }
  2361. if(!empty($check)){
  2362. foreach($check as $param){
  2363. $url = RevSliderFunctions::getVal($video_data, $param);
  2364. if(strpos($url, $urlFrom) !== false){
  2365. $newUrl = str_replace($urlFrom, $urlTo, $url);
  2366. $video_data[$param] = $newUrl;
  2367. $isUpdated = true;
  2368. }
  2369. }
  2370. }
  2371. $this->arrLayers[$key]['video_data'] = $video_data;
  2372. }elseif(isset($type) && $type == 'svg'){
  2373. $svg_val = RevSliderFunctions::getVal($layer, 'svg', false);
  2374. $svg_val_arr = (array)$svg_val;
  2375. if (!empty($svg_val_arr) && is_array($svg_val_arr) && sizeof($svg_val_arr)>0) {
  2376. $svg_val->{'src'} = str_replace($urlFrom, $urlTo, $svg_val->{'src'});
  2377. $this->arrLayers[$key]['svg'] = $svg_val;
  2378. $isUpdated = true;
  2379. }
  2380. }
  2381. if(isset($layer['layer_action'])){
  2382. if(isset($layer['layer_action']->image_link) && !empty($layer['layer_action']->image_link)){
  2383. $layer['layer_action']->image_link = (array)$layer['layer_action']->image_link;
  2384. foreach($layer['layer_action']->image_link as $jtsk => $jtsval){
  2385. if(strpos($jtsval, $urlFrom) !== false){
  2386. $this->arrLayers[$key]['layer_action']->image_link[$jtsk] = str_replace($urlFrom, $urlTo, $jtsval);
  2387. $isUpdated = true;
  2388. }
  2389. }
  2390. }
  2391. }
  2392. }
  2393. if($isUpdated == true){
  2394. $this->updateLayersInDB(null, $static);
  2395. }
  2396. do_action('revslider_slide_replaceImageUrls', $this);
  2397. }
  2398. /**
  2399. * get all used fonts in the current Slide
  2400. * @since: 5.1.0
  2401. */
  2402. public function getUsedFonts($full = false){
  2403. $this->validateInited();
  2404. $op = new RevSliderOperations();
  2405. $fonts = array();
  2406. $all_fonts = $op->getArrFontFamilys();
  2407. if(!empty($this->arrLayers)){
  2408. foreach($this->arrLayers as $key=>$layer){
  2409. $def = (array) RevSliderFunctions::getVal($layer, 'deformation', array());
  2410. $font = RevSliderFunctions::getVal($def, 'font-family', '');
  2411. $static = (array) RevSliderFunctions::getVal($layer, 'static_styles', array());
  2412. foreach($all_fonts as $f){
  2413. if(strtolower(str_replace(array('"', "'", ' '), '', $f['label'])) == strtolower(str_replace(array('"', "'", ' '), '', $font)) && $f['type'] == 'googlefont'){
  2414. if(!isset($fonts[$f['label']])){
  2415. $fonts[$f['label']] = array('variants' => array(), 'subsets' => array());
  2416. }
  2417. if($full){ //if full, add all.
  2418. //switch the variants around here!
  2419. $mv = array();
  2420. if(!empty($f['variants'])){
  2421. foreach($f['variants'] as $fvk => $fvv){
  2422. $mv[$fvv] = $fvv;
  2423. }
  2424. }
  2425. $fonts[$f['label']] = array('variants' => $mv, 'subsets' => $f['subsets']);
  2426. }else{ //Otherwise add only current font-weight plus italic or not
  2427. $fw = (array) RevSliderFunctions::getVal($static, 'font-weight', '400');
  2428. $fs = RevSliderFunctions::getVal($def, 'font-style', '');
  2429. if($fs == 'italic'){
  2430. foreach($fw as $mf => $w){
  2431. //we check if italic is available at all for the font!
  2432. if($w == '400'){
  2433. if(array_search('italic', $f['variants']) !== false)
  2434. $fw[$mf] = 'italic';
  2435. }else{
  2436. if(array_search($w.'italic', $f['variants']) !== false)
  2437. $fw[$mf] = $w.'italic';
  2438. }
  2439. }
  2440. }
  2441. foreach($fw as $mf => $w){
  2442. $fonts[$f['label']]['variants'][$w] = true;
  2443. }
  2444. $fonts[$f['label']]['subsets'] = $f['subsets']; //subsets always get added, needs to be done then by the Slider Settings
  2445. }
  2446. break;
  2447. }
  2448. }
  2449. }
  2450. }
  2451. return apply_filters('revslider_slide_getUsedFonts', $fonts, $this);
  2452. }
  2453. /**
  2454. * replace all css classes in all layers
  2455. * @since: 5.0
  2456. */
  2457. public function replaceCssClass($css_from, $css_to){
  2458. $this->validateInited();
  2459. $isUpdated = false;
  2460. if(!empty($this->arrLayers)){
  2461. foreach($this->arrLayers as $key=>$layer){
  2462. $caption = RevSliderFunctions::getVal($layer, 'style');
  2463. if($caption == $css_from){
  2464. $this->arrLayers[$key]['style'] = $css_to;
  2465. $isUpdated = true;
  2466. }
  2467. }
  2468. }
  2469. if($isUpdated == true)
  2470. $this->updateLayersInDB();
  2471. do_action('revslider_slide_replaceCssClass', $css_from, $css_to, $this);
  2472. }
  2473. /**
  2474. * reset Slide to certain values
  2475. * @since: 5.0
  2476. */
  2477. public function reset_slide_values($values){
  2478. $this->validateInited();
  2479. foreach($values as $key => $val){
  2480. if($key !== 'sliderid'){
  2481. $this->params[esc_attr($key)] = esc_attr($val);
  2482. }
  2483. }
  2484. $this->updateParamsInDB();
  2485. }
  2486. /**
  2487. * return if current Slide is static Slide
  2488. */
  2489. public function isStaticSlide(){
  2490. return $this->static_slide;
  2491. }
  2492. /**
  2493. * Returns all layer attributes that can have more than one setting due to desktop, tablet, mobile sizes
  2494. * @since: 5.0
  2495. */
  2496. public static function translateIntoSizes(){
  2497. return apply_filters('revslider_slide_translateIntoSizes', array(
  2498. 'align_hor',
  2499. 'align_vert',
  2500. 'top',
  2501. 'left',
  2502. 'font-size',
  2503. 'line-height',
  2504. 'font-weight',
  2505. 'color',
  2506. 'max_width',
  2507. 'max_height',
  2508. 'whitespace',
  2509. 'video_height',
  2510. 'video_width',
  2511. 'scaleX',
  2512. 'scaleY',
  2513. 'margin',
  2514. 'padding',
  2515. 'text-align',
  2516. 'letter-spacing'
  2517. ));
  2518. }
  2519. /**
  2520. * Translates all values that need more than one setting
  2521. * @since: 5.0
  2522. */
  2523. public function translateLayerSizes($layers){
  2524. $translation = self::translateIntoSizes();
  2525. if(!empty($layers)){
  2526. foreach($layers as $l => $layer){
  2527. foreach($translation as $trans){
  2528. if(isset($layers[$l][$trans])){
  2529. if(!is_array($layers[$l][$trans])){
  2530. $layers[$l][$trans] = array('desktop' => $layers[$l][$trans]);
  2531. }
  2532. }
  2533. }
  2534. }
  2535. }
  2536. return $layers;
  2537. }
  2538. }
  2539. /**
  2540. * old classname extends new one (old classnames will be obsolete soon)
  2541. * @since: 5.0
  2542. **/
  2543. class RevSlide extends RevSliderSlide {}
  2544. ?>