amb una imatge dins per què el plugin jQuery "rimg" ho transformi amb una imatge de la mida adient segons el contenidor. * * @param string $src URL de la imatge * @param int $width Amplada de la imatge (Petita, només servirà pq els crawlers en carreguin una de petita i per teure'n l'aspect ratio) * @param int $height Alçada de la imatge (Petita, només servirà pq els crawlers en carreguin una de petita i per teure'n l'aspect ratio) * @param string $alt Text alternatiu * @param string $class Classe css a posar al noscript * @return string */ function rimg($src, $width = 0, $height = 0, $alt = '', $class = 'rimg') { $alt = htmlspecialchars($alt); return ''; } function any_anterior($var) { $arr = array(); foreach ($var as $id => $val) { foreach ($val as $not) { if (date('Y', strtotime($not["data"])) != (date('Y'))) { $arr[] = $val; } } } return $arr; } function printr($var) { echo '
'.print_r($var, 1).'
'; } /** * Converteix una cadena a majuscules * * L'strtoupper de vegades dona problemes si no tens els * locals correctes, aquesta no. * * @param String $str La cadena amb minuscules a convertir * @return String amb la cadena en majuscules */ function fullUpper($str) { $var = strtoupper($str); $old = array('ó', 'ò', 'í', 'ì', 'é', 'è', 'à', 'á', 'ú', 'ù', 'ï', 'ñ', 'ç', 'ü'); $new = array('Ó', 'Ò', 'Í', 'Ì', 'É', 'È', 'À', 'Á', 'Ú', 'Ù', 'Ï', 'Ñ', 'Ç', 'Ü'); $var = str_replace($old, $new, $var); return ($var); } /** * Converteix una cadena a minuscules * * L'strtolower de vegades dona problemes si no tens els * locals correctes, aquesta no. * * @param String $str La cadena amb majuscules a convertir * @return String amb la cadena en minuscules */ function fullLower($str) { $var = strtolower($str); $old = array('ó', 'ò', 'í', 'ì', 'é', 'è', 'à', 'á', 'ú', 'ù', 'ñ', 'ç'); $new = array('Ó', 'Ò', 'Í', 'Ì', 'É', 'È', 'À', 'Á', 'Ú', 'Ù', 'Ñ', 'Ç'); $var = str_replace($new, $old, $var); return ($var); } /** * URL's Amigables * * Transforma una cadena a: * - Minuscules * - Sense caràcters llatins * - En lloc d'espais guions * - La resta de caràcters especials eliminats * * @param String $url * @return Una cadena amb la url amigable */ function urls_amigables($url) { $url = fullLower($url); $url = trim($url); $find = array('á', 'à', 'é', 'è', 'í', 'ì', 'ó', 'ò', 'ú', 'ù', 'ü', 'ñ', 'ç'); $repl = array('a', 'a', 'e', 'e', 'i', 'i', 'o', 'o', 'u', 'u', 'u', 'n', 'c'); $url = str_replace($find, $repl, $url); $find = array(' ', '&', '\r\n', '\n', '+'); $url = str_replace($find, '-', $url); $find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/'); $repl = array('', '-', ''); $url = preg_replace($find, $repl, $url); return $url; unset($url); unset($find); unset($repl); } /** * Obfusca una cadena de text (normalment un e-mail) * * @param String text a obfuscar * @return String Text obfuscat */ function obfuscate($text) { //si hi ha subject eamb espais escapo l'espai $text = str_replace(' ', '%20', $text); $result = ''; for ($i = 0; $i < strlen($text); $i++) { $j = mt_rand(0, 1); if ($j) { $result .= substr($text, $i, 1); } else { $k = mt_rand(0, 1); if ($k) { $result .= '&#'.ord(substr($text, $i, 1)).';'; } else { $result .= '&#x'.sprintf("%x", ord(substr($text, $i, 1))).';'; } } } $k = mt_rand(0, 1); if ($k) { return str_replace('@', '@', $result); } else { return str_replace('@', '@', $result); } } /** * Retorna la mida d'un fitxer en la unitat adient donada la mida en bytes * * @param Integer $size Mida en bytes * @return String Mida en la unitat adient */ function getSize($size = '') { $unitats = array('bytes', 'Kb', 'Mb', 'Gb', 'Tb'); if ($size <= 1024) { return $size.' '.$unitats[0]; } else { if ($size >= pow(1024, 4)) { return round($size / pow(1024, 4), 1).$unitats[4]; } elseif ($size >= pow(1024, 3)) { return round($size / pow(1024, 3), 1).$unitats[3]; } elseif ($size >= pow(1024, 2)) { return round($size / pow(1024, 2), 1).$unitats[2]; } else { return round($size / 1024, 1).$unitats[1]; } } } /** * Afegeix http:// a les urls que no tenen un protocol acceptat * * @param string $url La URL a comprovar * @param array $protocols Array d'expresions regulars de protocols acceptats (Per defecte: "https?") * * @return string Url amb protocol */ function trueUrl($url, array $protocols = array('https?')) { return !preg_match('@^('.implode('|', $protocols).')://@i', $url) ? 'http://'.$url : $url; } function prettyUrl($url) { return str_replace(['http://', 'https://', 'www.'], '', $url); } function noaccents($cadena) { $find = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'à', 'á', 'â', 'ã', 'ä', 'å', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'È', 'É', 'Ê', 'Ë', 'è', 'é', 'ê', 'ë', 'Ç', 'ç', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'Ù', 'Ú', 'Û', 'Ü', 'ù', 'ú', 'û', 'ü', 'ÿ', 'Ñ', 'ñ'); $repl = array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'C', 'C', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'Y', 'N', 'N'); $mayus = str_replace($find, $repl, $cadena); echo strtoupper($mayus); } /** * Talla un text a partir d'una mida i afegeix ... al final * * @param String $str Text a tallar * @return String text retallat */ function tallaString($str = '', $len = 255) { if (strlen($str) > $len) { return substr($str, 0, $len).'...'; } else { return $str; } } function retallText($string, $mida) { $Texto = $string; $MaxLENGTH = $mida; if (strlen($Texto) > $mida) { $TextoResumen = substr($Texto, 0, strrpos(substr($Texto, 0, $MaxLENGTH), " ")); return $TextoResumen."... "; } else { return $Texto; } } /** * Retorna la ID d'un video donada la URL * * @param String $str URL del video * @param String $tipus El tipus de video segons proveidor * @return String Id del video */ function getVideoId($str, $tipus = 'youtube') { if ($tipus == 'youtube') { if (strpos($str, 'watch?v=') !== false) {//Full URL: http://www.youtube.com/watch?v=ZhritBqvNr8&..... parse_str(parse_url($str, PHP_URL_QUERY), $url); return trim($url['v']); } elseif (strpos($str, 'youtu.be/') !== false) {//Share URL: http://www.youtu.be/ZhritBqvNr8 return trim(substr($str, strpos($str, 'youtu.be/') + 9)); } else {//Video Id: ZhritBqvNr8 return $str; } } elseif ($tipus == 'vimeo') { if (preg_match( '/vimeo.com\/(?:channels\/|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|)(\d+)(?:$|\/|\?)/', $str, $matches )) { return $matches[3]; } else {//Video Id return $str; } } elseif ($tipus == 'tv3') { if (strpos($str, "tv3.cat") !== false) {//Full URL return substr($str, strpos($str, "videos/") + 7); } else {//Video Id return $str; } } return $str; } /** * Retorna un camp de la informació de un video Vimeo utilitzant la seva API (normalment el thumbnail) * * @param string $id ID del video * @param string $info El nom de la info que volem * @return string La info que hem demanat */ function getVimeoInfo($id, $info = 'thumbnail_large') { if (!function_exists('curl_init')) { return ''; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://vimeo.com/api/v2/video/'.$id.'.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $file = curl_exec($ch); curl_close($ch); //$file = file_get_contents("http://vimeo.com/api/v2/video/$id.php"); if ($file) { $output = unserialize($file); return $output[0][$info]; } return ''; } /** * Formateja una data/datetime de la BD (xxxx-xx-xx) * * @param string $datadb La data en format db * @return string La data correctament formatada */ function getdbdate($datadb) { if ($datadb != '0000-00-00' && $datadb != '0000-00-00 00:00:00' && !empty($datadb)) { $datetime = explode(' ', $datadb); $data = explode('-', $datetime[0]); return $data[2].'/'.$data[1].'/'.$data[0]; } return ''; } /** * Formateja una data o un interval de dates, i una hora amb el nom del dia/mes * * @param string $data1 La data inicial (o unica) * @param string $data1 La data final * @param string $hora La hora * @return string La data correctament formatada */ function prettyDates($datedb1, $datedb2 = '', $time = '', $show_day_name = false) { $months = array( '1' => __('de Gener'), '2' => __('de Febrer'), '3' => __('de Març'), '4' => __('d\'Abril'), '5' => __('de Maig'), '6' => __('de Juny'), '7' => __('de Juliol'), '8' => __('d\'Agost'), '9' => __('de Setembre'), '10' => __('d\'Octubre'), '11' => __('de Novembre'), '12' => __('de Desembre'), ); $days = array( '1' => __('Dilluns'), '2' => __('Dimarts'), '3' => __('Dimecres'), '4' => __('Dijous'), '5' => __('Divendres'), '6' => __('Dissabte'), '0' => __('Diumenge'), ); $return = ''; $datedb1 = substr($datedb1, 0, 10); $datedb2 = substr($datedb2, 0, 10); if (!empty($datedb1) && $datedb1 != '0000-00-00') { $date1 = getdate(strtotime($datedb1)); //Data simple if (empty($datedb2) || $datedb2 == '0000-00-00' || $datedb1 == $datedb2) { if ($show_day_name) { $return .= $days[$date1['wday']].', '; } else { if ($date1['mday'] == 1 || $date1['mday'] == 11) { $return .= __("L'"); } else { $return .= __('El').' '; } } $return .= $date1['mday'].' '.$months[$date1['mon']].' '.__('del').' '.$date1['year']; } //Interval de dates else { $date2 = getdate(strtotime($datedb2)); if ($date1['mday'] == 1 || $date1['mday'] == 11) { $return .= __("De l'"); } else { $return .= __('Del').' '; } $return .= $date1['mday'].' '; //Diferents mesos per tant printo el mes de cada data if ($date1['mon'] != $date2['mon'] || $date1['year'] != $date2['year']) { $return .= $months[$date1['mon']].' '; } //Diferents anys per tant printo l'any de cada data if ($date1['year'] != $date2['year']) { $return .= __('del').' '.$date1['year'].' '; } if ($date2['mday'] == 1 || $date2['mday'] == 11) { $return .= __("a l'"); } else { $return .= __('al').' '; } $return .= $date2['mday'].' '; //Diferents mesos per tant printo el mes de cada data $return .= $months[$date2['mon']].' '; //Diferents anys per tant printo l'any de cada data $return .= __('del').' '.$date2['year']; } if (!empty($time)) { $return .= ', '.__('a les').' '.$time; } } return $return; } /** * Converteix un color en format hexadecimal HTML (#00AAC4) en format RGB (0-255) * * @param String $color Color en format HTML * @param String $print Manera com retornar el resultat (array, string) * @return String Color en format RGB */ function html2rgb($color, $print = 'array') { if ($color[0] == '#') { $color = substr($color, 1); } if (strlen($color) == 3) { $color = $color[0].$color[0].$color[1].$color[1].$color[2].$color[2]; } $r = hexdec(substr($color, 0, 2)); $g = hexdec(substr($color, 2, 2)); $b = hexdec(substr($color, 4, 2)); if ($print == 'array') { return array($r, $g, $b); } elseif ($print == 'string') { return $r.','.$g.','.$b; } } /** * Crea el link d'un apartat de la base de dades * * @param Integer $id El número de l'apartat * @param String $lang L'identificador d'idioma * @param Stringr $text El text del link si n'hi ha * @param Integer $print Si volem escriurel o no * @return Mixed */ function apartat($id, $print = 1, $text = '', $target = '', $class = '', $where = '') { global $db, $lang, $conex; $ret = false; $sql = 'SELECT a1.apartat_id AS id, a1.apartat_apartat_fk AS fk, CONCAT_WS("/",al3.apartat_mr,al2.apartat_mr,al1.apartat_mr) AS mr, al1.apartat_nom AS nom, al1.apartat_url AS url FROM apartat AS a1 LEFT JOIN apartat_lang AS al1 ON al1.apartat_fk=a1.apartat_id AND al1.apartat_lang_fk="'.$lang.'" LEFT JOIN apartat AS a2 ON a2.apartat_id=a1.apartat_apartat_fk LEFT JOIN apartat_lang AS al2 ON al2.apartat_fk=a2.apartat_id AND al2.apartat_lang_fk="'.$lang.'" LEFT JOIN apartat AS a3 ON a3.apartat_id=a2.apartat_apartat_fk LEFT JOIN apartat_lang AS al3 ON al3.apartat_fk=a3.apartat_id AND al3.apartat_lang_fk="'.$lang.'" WHERE a1.apartat_id="'.$id.'" OR a1.apartat_fitxer="'.$id.'" OR a1.apartat_mod="'.$id.'" AND al1.apartat_actiu=1 AND ( a2.apartat_id IS NULL || al2.apartat_actiu=1 ) AND ( a3.apartat_id IS NULL || al3.apartat_actiu=1 )'.$where; $db->ExecQuery($sql); if ($apt = $db->Fetch()) { if ($print == 0) { return $apt; } if ($print == 1) { return $apt->mr.'/'; } if ($print == 2) { return SCHEME.'://'.$_SERVER['HTTP_HOST'].'/'.$apt->mr.'/'; } if (empty($text)) { $text = $apt->nom; } if (!empty($target)) { $target = 'target="'.$target.'"'; } if (!empty($class)) { $class = 'class="'.$class.'"'; } if ($print == 3) { return ''.$text.''; } if ($print == 4) { return ''.$text.''; } } return false; } /** * Retorna l'apartat corresponent sempre hi quan estigui actiu per idioma * * @param Integer id de l'apartat * * @return apartat segons idioma */ function getApartatIdiomaByIdApartat($id_apartat) { global $db, $lang, $conex; $sql = "SELECT apartat.apartat_id, apartat_lang.apartat_nom, apartat_lang.apartat_mr FROM apartat LEFT JOIN apartat_lang ON apartat_lang.apartat_fk = apartat.apartat_id WHERE apartat.apartat_id = ".$id_apartat." AND apartat_lang.apartat_lang_fk = '".$lang."' AND apartat_lang.apartat_actiu = 1"; $db->ExecQuery($sql); if ($apt = $db->Fetch()) { return $apt; } return array(); } /** * Enviar un email a un/varis recipients * * @param array|string Array amb nom/email del reply_to o simplement l'email en forma de string * @param array|string Array amb totes les adreces de destí o un String amb l'adreça de destí * @param string Assumpte de l'email * @param string Text de l'email * @param array MultiArray amb el nom original i camí al fitxer temporal array('path'=>'/tmp/y7tml0de','nom'=>'prova.pdf'); * * @return Bool mail enviat correctament */ function enviarMail($replyTo, $to, $subject, $msg, $fitxers = []) { global $correu; $transport = (new Swift_SmtpTransport($correu['server'], $correu['port'], $correu['secure'] ?? null)) ->setUsername($correu['user']) ->setPassword($correu['password']); $swiftMailer = new Swift_Mailer($transport); $message = new Swift_Message(); $message->setFrom($correu['from'], $correu['fromname']); // Reply to (amb nom o sense) if (is_array($replyTo)) { $message->setReplyTo($replyTo[0], $replyTo[1]); } else { $message->setReplyTo($replyTo); } if (is_array($to)) { foreach ($to as $mode => $addrs) { foreach ($addrs as $addr) { if ($mode == 'TO') { $message->addTo($addr); } elseif ($mode == 'CC') { $message->addCc($addr); } elseif ($mode == 'CCO') { $message->addBcc($addr); } } } } else { $message->addTo($to); } if (is_array($fitxers)) { foreach ($fitxers as $fitxer) { $message->attach(Swift_Attachment::fromPath($fitxer['path'])->setFilename($fitxer['nom'])); } } $message->setSubject($subject); $message->setBody($msg, 'text/html'); return $swiftMailer->send($message) > 0; } /** * Crear html paginació * * @param Integer Pàgina actual * @param Integer Total d'elements * @param Integer Elements per pàgina * @param String Com fer el link de les pàgines * @param String Text botó * @param String Text botó * @param String Icona del botó * @param String Icona del botó * @param Bool Retorna el contingut o el printa per pantalla * * @return Mixed La paginació o res depenent del paràmetre $return */ function mostrarPaginacio( $pagina, $total, $limit, $target, $seguent, $anterior, $seg_ico = '»', $ant_ico = '«', $return = 0 ) { if ($total > $limit) { // Crear i dibuixar la paginacio de la llista de noticies include_once 'lib/pagination.class.php'; $p = new pagination(); $p->items($total); $p->limit($limit); $p->currentPage($pagina); $p->nextLabel($seguent); $p->prevLabel($anterior); $p->nextIcon($seg_ico); $p->prevIcon($ant_ico); $p->urlFriendly(); $p->target($target); if (!$return) { $p->show(); } else { return $p->getOutput(); } } } function get_string_between($string, $start, $end) { $string = " ".$string; $ini = strpos($string, $start); if ($ini == 0) { return ""; } $ini += strlen($start); $len = strpos($string, $end, $ini) - $ini; return substr($string, $ini, $len); } function canviarHtmlUrlsRelativesPerAbsolutes($text, $baseUrl) { return preg_replace('/(href|src)="((\.\.\/)+|\/)/', '$1="'.$baseUrl.'/', $text); }