Antonio_Alexandre

Código Aula 2 curso PHP Básico

Jan 24th, 2017
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 16.15 KB | None | 0 0
  1. <?php
  2.  
  3. #Aula 2 curso PHP Básico
  4.  
  5.  
  6. // OPERADORES  MATEMÁTICOS
  7. // http://php.net/manual/pt_BR/language.operators.arithmetic.php
  8.  
  9. $a = 5;
  10.  
  11. $b = 3;
  12.  
  13. $c = $a * $b;
  14.  
  15. echo $c;
  16.  
  17. // ========================
  18.  
  19. $a = 10;
  20.  
  21. $b = 6;
  22.  
  23. $c = $a - $b;
  24.  
  25. echo $c;
  26.  
  27. // ========================
  28.  
  29. $a = 12;
  30.  
  31. $b = 2;
  32.  
  33. $c = $a / $b;
  34.  
  35. echo $c;
  36.  
  37. // ========================
  38.  
  39. $a = 1;
  40.  
  41. $a++;   // $a = $a + 1;
  42.  
  43. echo $a;
  44.  
  45. // ========================
  46.  
  47.  
  48. $b = 7;
  49.  
  50. $b--;   // $b = $b - 1;
  51.  
  52. echo $b;
  53.  
  54. // ========================
  55.  
  56.  
  57. $a = 75;
  58.  
  59. $b = 5;
  60.  
  61. $c = $a % $b;   // Resto da divisão de $a por $b
  62.  
  63. echo $c;
  64.  
  65. // ========================
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72. // OPERADORES  LÓGICOS
  73.  
  74. // Operador "E":   &&
  75. // CONDICAO1 && CONDICAO2   -> As duas condições precisam ser verdadeiras
  76.  
  77. // Operador "OU":  ||
  78. // CONDICAO1 || CONDICAO2   -> Uma das condições precisa ser verdadeira
  79.  
  80.  
  81. $idade_joao = 2;
  82.  
  83. $idade_ana = 5;
  84.  
  85. $idade_pedro = 10;
  86.  
  87. //             TRUE                         TRUE
  88. if( ($idade_pedro > $idade_ana)  &&  ($idade_pedro > $idade_joao) )
  89. {
  90.     echo 'Pedro é mais velho que João e Ana.';
  91. }
  92.  
  93. echo '<hr>';
  94.  
  95. //              FALSE                               TRUE
  96. if( ($idade_joao + $idade_ana > 10)  ||   ( $idade_ana - $idade_joao < 5)  )
  97. {
  98.     echo 'Joaõ e Ana juntos são mais velhos que Pedro  OU  a idade de Ana menos a de João é menor que cinco.';
  99. }
  100. else
  101. {
  102.     echo 'Caiu no else pq as duas condições deram false';
  103. }
  104.  
  105.  
  106. // OPERADORES DE COMPARAÇÃO
  107. //http://php.net/manual/pt_BR/language.operators.comparison.php
  108.  
  109. $a = 1;
  110. $b = '1';
  111.  
  112. if($a == $b)
  113.     echo ' $a e $b tem mesmo valor, ou seja são "iguais" ';
  114.  
  115. echo '<br>';
  116.  
  117. if($a === $b)
  118.     echo 'Idêntico $a e $b, de mesmo valor e tipo';
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127. // Revisão de IF / ELSE
  128.    
  129. $estaChovendo = true;
  130.  
  131. if($estaChovendo)
  132.     echo 'Vou levar meu guarda-chuva';
  133. else
  134.     echo 'Está sol, vou deixar o guarda-chuva em casa';
  135.  
  136. // ===========================
  137.  
  138. // SWITCH - como se fosse um monte if else
  139.    
  140.  
  141. $valor = 'a';
  142.  
  143. switch($valor)
  144. {
  145.     case 'a':
  146.         echo 'O valor é A';
  147.         break;
  148.        
  149.     case 'b':
  150.         echo 'O valor é B';
  151.         break;
  152.  
  153.     case 'c':
  154.         echo 'O valor é C';
  155.         break; 
  156.        
  157.     default:
  158.         echo 'Valor não é A nem B nem C';
  159.         break;
  160. }
  161.  
  162.  
  163.  
  164. // WHILE
  165. //inicializando variável que será utilizada na condição
  166. $i=0;
  167.  
  168. // enquanto condição é verdadeira executa o código entre chaves
  169. while($i<10)
  170. {
  171.     echo $i . ' é menor do que 10<br>';
  172.    
  173.     //incrementa a variável -> isso é importante, caso contrário iria ficar preso no loop infinitamente
  174.     $i++;
  175. }
  176.  
  177. // ============================================
  178.  
  179.  
  180.  
  181. // mesmo exemplo acima com FOR
  182. //   A  ;   B  ;  C  
  183. for($i=0; $i<10; $i++)
  184. {
  185.     echo $i . ' é menor do que 10<br>';
  186. }
  187.  
  188. // A é a inicialização
  189. // B é a condição, o loop funciona enquanto o resultado da comparação retornar true
  190. // C é o incremento
  191.  
  192.  
  193. // =============================================
  194.  
  195.  
  196. // DO ... WHILE
  197. $i=100;
  198.  
  199. do
  200. {
  201.     echo $i . ' ';
  202.    
  203.     //if($i%20==0) echo '<br>';
  204.  
  205.     $i--;
  206. }
  207. while($i>0);
  208.  
  209.  
  210. // =============================================
  211.  
  212.  
  213. // Revisão de array
  214.  
  215. $meuarray = array(); // Array vazio
  216.  
  217. // Documentação e funções de array:
  218. //http://php.net/manual/pt_BR/language.types.array.php
  219. //http://php.net/manual/pt_BR/ref.array.php
  220.  
  221.  
  222. //Adicionando elementos no array
  223. $meuarray[]='[email protected]';
  224. $meuarray[]='[email protected]';
  225. $meuarray[]='[email protected]';
  226. $meuarray[]='[email protected]';
  227.  
  228. //Debug da variável
  229.  
  230. var_dump($meuarray);
  231.  
  232. // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  233.  
  234.  
  235. //echo implode(", ",$meuarray);
  236.  
  237. $qtd_items_array = count($meuarray);
  238.  
  239. $output='';
  240.  
  241. $i = 0;
  242. while( $i < $qtd_items_array)
  243. {
  244.     // Gera um array quebrando a string no caractere @ do elemento que está na posição $i do array $meuarray
  245.     $tmp_arr = explode("@",$meuarray[$i]);
  246.    
  247.     // Adiciona texto na variável $output concatenando elementos do array gerado acima com strings literais
  248.     $output.= 'Usuário: ' . $tmp_arr[0] . ' <br> Domínio: '. $tmp_arr[1] . '<br><br>';
  249.    
  250.     $i++;
  251. }
  252.  
  253. echo $output;
  254.  
  255. //$output.= ' pedaço q vai ser adicionado na string';
  256. // é a mesma coisa que:
  257. //$output = $output . ' pedaço q vai ser adicionado na string';
  258.  
  259.  
  260.  
  261. // ==========================================================
  262.  
  263.  
  264. // FOR - Um exemplo mais elaborado
  265. $array_numeros = array(100,35,92,43,77,88,11,241,22,18,32);
  266. $impares = array();
  267. $pares = array();
  268.                 // as funções sizeof e count são a mesma coisa, sendo que uma é alias(apelido) da outra
  269. $qtd_numeros = sizeof($array_numeros);
  270.  
  271. for( $i=0 ; $i<$qtd_numeros ; $i++)
  272. {
  273.     if($array_numeros[$i]%2==0)
  274.     {
  275.         echo $array_numeros[$i] . ' é par. <br>';
  276.         $pares[]=$array_numeros[$i];
  277.     }
  278.     else
  279.     {
  280.         echo $array_numeros[$i] . ' é ímpar. <br>';
  281.         $impares[]=$array_numeros[$i];
  282.     }
  283. }
  284.  
  285. sort($pares);
  286. var_dump($pares);
  287.  
  288. sort($impares);
  289. var_dump($impares);
  290.  
  291.  
  292. // ===========================================================
  293.  
  294. $arr_cliente1 = array(
  295.                         'id'        =>'1',
  296.                         'nome'      =>'Alexandre',
  297.                         'email'     =>'[email protected]',
  298.                         'profissao' =>'Programador PHP e Java'
  299.                     );
  300.                      
  301. $arr_cliente2 = array(
  302.                         'id'        =>'2',
  303.                         'nome'      =>'Pedro',
  304.                         'email'     =>'[email protected]',
  305.                         'profissao' =>'Pescador de homens'
  306.                     );
  307.                    
  308. $arr_cliente3 = array(
  309.                         'id'        =>'3',
  310.                         'nome'      =>'João',
  311.                         'email'     =>'[email protected]',
  312.                         'profissao' =>'Agricultor'
  313.                     );
  314.  
  315. // Adicionando elementos criados manualmente na matriz
  316. $matriz = array();
  317. $matriz[]=$arr_cliente1;
  318. $matriz[]=$arr_cliente2;
  319. $matriz[]=$arr_cliente3;
  320.  
  321. var_dump($matriz);
  322.  
  323.  
  324. $tb_clientes_html='<table border="1" cellpadding="5">
  325.                         <tr style="background-color:#ed0">
  326.                             <td>Id</td>
  327.                             <td>Nome</td>
  328.                             <td>E-mail</td>
  329.                             <td>Profissão</td>
  330.                         </tr>';
  331.                        
  332.                        
  333. // exemplo de FOREACH    +  forma de concatenar variáveis complexas usando chaves {}  em strings com aspas duplas                         
  334. foreach($matriz as $cliente)
  335. {
  336.     $tb_clientes_html.="<tr>
  337.                             <td>{$cliente['id']}</td>
  338.                             <td>{$cliente['nome']}</td>
  339.                             <td>{$cliente['email']}</td>
  340.                             <td>{$cliente['profissao']}</td>
  341.                         </tr>";
  342.    
  343. }
  344. $tb_clientes_html.='</table>';
  345.  
  346. echo $tb_clientes_html;
  347.  
  348.  
  349.  
  350. // =========================================================
  351.  
  352.  
  353. //Uma forma de ler arquivo inteiro para string
  354. $lista_csv = file_get_contents("lista_emails.csv");
  355.  
  356. var_dump($lista_csv);
  357.  
  358.  
  359. $lista_csv=trim($lista_csv);
  360.  
  361. $array_linhas = explode(PHP_EOL, $lista_csv);
  362.  
  363. var_dump($array_linhas);
  364.  
  365.  
  366. $lista_emails_assoc = array();
  367.  
  368. foreach($array_linhas as $linha)
  369. {
  370.     list($tmp_nome,$tmp_email) = explode("," , $linha);
  371.    
  372.     $lista_emails_assoc[]=array(
  373.                             'nome' =>$tmp_nome,
  374.                             'email'=>$tmp_email
  375.                         );
  376. }
  377.  
  378. var_dump($lista_emails_assoc);
  379.  
  380. // Pega apenas a coluna email
  381. $emails_arr = array_column($lista_emails_assoc, 'email');
  382.  
  383. var_dump($emails_arr);
  384.  
  385.  
  386. // =========================================================
  387.  
  388.  
  389.    
  390. // Exemplo de ordenação manual simples sem usar funções nativas
  391. // Exemplo usando while
  392. $array_numeros  = array(100,35,92,43,77,88,11,241,22,18,32);
  393. var_dump($array_numeros);
  394.  
  395. $i=0;
  396. $total_numeros = sizeof($array_numeros);
  397.  
  398. while( $i < $total_numeros )
  399. {
  400.     $j = 0;
  401.     while( $j < $total_numeros )
  402.     {
  403.         if($array_numeros[$j] > $array_numeros[$i])
  404.         {
  405.             $tmp_numero = $array_numeros[$i];
  406.            
  407.             $array_numeros[$i] = $array_numeros[$j];
  408.             $array_numeros[$j] = $tmp_numero;
  409.         }
  410.         $j++;
  411.     }
  412.     $i++;
  413. }
  414.  
  415. var_dump($array_numeros);
  416.  
  417. // ===================================================
  418.  
  419.  
  420.  
  421. // Exemplo de ordenação manual simples sem usar funções nativas
  422. // Exemplo usando while
  423. $array_numeros  = array(100,35,92,43,77,88,11,241,22,18,32);
  424. var_dump($array_numeros);
  425.  
  426. $i=0;
  427. $total_numeros = sizeof($array_numeros);
  428.  
  429. exibe_array_atual($array_numeros,-1,-1); // Não faz nada, apenas exibe array atual
  430.  
  431. while( $i < $total_numeros )
  432. {
  433.     $j = 0;
  434.     while( $j < $total_numeros )
  435.     {
  436.        
  437.         if($array_numeros[$j] > $array_numeros[$i])
  438.         {  
  439.             exibe_array_atual($array_numeros,$i,$j);
  440.    
  441.             $tmp_numero = $array_numeros[$i];
  442.            
  443.             $array_numeros[$i] = $array_numeros[$j];
  444.             $array_numeros[$j] = $tmp_numero;
  445.            
  446.             //exibe_array_atual($array_numeros,-1,-1);  // Novo array      
  447.            
  448.         }
  449.         $j++;
  450.     }
  451.    
  452.     $i++;
  453. }
  454.  
  455. var_dump($array_numeros);
  456.  
  457.  
  458.  
  459. function exibe_array_atual($array,$idx,$jdx)
  460. {
  461.     $c = count($array);
  462.     $output='[';
  463.     for($i=0;$i<$c;$i++)
  464.     {
  465.         $color='blue';
  466.        
  467.         if($i==$idx || $i==$jdx ) { $color = "red"; }
  468.  
  469.        
  470.         $output.="&nbsp; $i <small>=&gt;</small> <span style=\"color:$color\"><b>{$array[$i]}</b></span>  ,";
  471.     }
  472.     $output = rtrim($output,",");
  473.     $output.=']<br><br>';
  474.    
  475.     echo $output;
  476. }
  477.  
  478.  
  479.  
  480. // ===================================================
  481.  
  482.  
  483. //Mesmo exemplo anterior, só que usando for
  484. $array_numeros  = array(103,35,92,43,77,89,11,241,22,18,32);
  485. //var_dump($array_numeros);
  486.  
  487. $total_numeros = sizeof($array_numeros);
  488.  
  489. //$n_iteracoes = 0; //$n_iteracoes é um contador de iterações apenas para comparar com outros algoritmos
  490.                   // $n_iteracoes não faz parte do algoritmo abaixo e sua retirada não interfere no código
  491.                   //essa variável serve apenas como uma "medida de comparação" com os outros algoritmos que serão vistos em seguida
  492.  
  493. for( $i=0 ; $i<$total_numeros ; $i++ )
  494. {
  495.     for( $j=0; $j<$total_numeros; $j++ )
  496.     {
  497.         if($array_numeros[$j] > $array_numeros[$i])
  498.         {
  499.             $tmp_numero = $array_numeros[$i];
  500.            
  501.             $array_numeros[$i] = $array_numeros[$j];
  502.             $array_numeros[$j] = $tmp_numero;
  503.         }
  504.        
  505.         //$n_iteracoes++;
  506.     }
  507.    
  508.     //$n_iteracoes++;
  509. }
  510.  
  511. var_dump($array_numeros);
  512. //echo 'Total: <b>'.$n_iteracoes.'</b> iterações';
  513.  
  514. // OBS: O algoritmo acima embora tenha muitas iterações, não utiliza nenhuma função de reordenação de índices
  515. // e nem  funções de junção de arrays. Em questões de desafios ou provas de conhecimentos, essa seria uma boa resposta.
  516.  
  517.  
  518. // ===================================================
  519.  
  520.  
  521.  
  522. //Outro exemplo com for, usando algoritmo de Quicksort
  523. $array_numeros  = array(103,35,92,43,77,89,11,241,22,18,32);
  524.  
  525. $n_iteracoes = 0;
  526.  
  527. function quicksort( $array )
  528. {
  529.     global $n_iteracoes;
  530.    
  531.     if( count( $array ) < 2 )
  532.     {
  533.         return $array;
  534.     }
  535.    
  536.     $left = $right = array( );
  537.    
  538.     reset( $array );
  539.    
  540.     $pivot_key  = key( $array );
  541.    
  542.     $pivot  = array_shift( $array );
  543.    
  544.     foreach( $array as $k => $v )
  545.     {
  546.         if( $v < $pivot )  
  547.             $left[$k] = $v;
  548.         else
  549.             $right[$k] = $v;
  550.        
  551.         $n_iteracoes++;
  552.     }
  553.    
  554.     $n_iteracoes++;
  555.    
  556.     return array_merge(
  557.                         quicksort($left),
  558.                         array($pivot_key => $pivot),
  559.                         quicksort($right)
  560.                     );
  561. }
  562.      
  563. //Using quicksort()
  564. $array_ordenado  = quicksort( $array_numeros );  
  565.  
  566. var_dump($array_ordenado);
  567. echo 'Total: <b>'.$n_iteracoes.'</b> iterações';
  568.  
  569. // Lembrando que PHP já possui a função sort da linguagem pra esse tipo de ordenação
  570. // Os algoritmos apresentados servem apenas para entendimento de como algoritmos de ordenação funcionam
  571.  
  572.  
  573. // ===================================================
  574.  
  575.  
  576.  
  577. // Exemplo de Bubble sort
  578. $array_numeros  = array(105,35,92,43,76,89,11,249,21,18,32);
  579. $n_iteracoes=0;
  580.  
  581. function bubbleSort($array)
  582. {
  583.   global $n_iteracoes;
  584.    
  585.   for($i = 0; $i < count($array); $i++)
  586.   {
  587.     for($j = 0; $j < count($array) - 1; $j++)
  588.     {
  589.         if($array[$j] > $array[$j + 1])
  590.         {
  591.             $aux = $array[$j];
  592.             $array[$j] = $array[$j + 1];
  593.             $array[$j + 1] = $aux;
  594.         }
  595.        
  596.         $n_iteracoes++;
  597.     }
  598.    
  599.      $n_iteracoes++;
  600.   }
  601.  
  602.   return $array;
  603. }
  604.  
  605. $array_ordenado = bubbleSort($array_numeros);
  606. var_dump($array_ordenado);
  607.  
  608. echo 'Total: <b>'.$n_iteracoes.'</b> iterações';
  609.  
  610.  
  611.  
  612. // ===================================================
  613.  
  614.  
  615. // Ordenação de arrays usando funções do próprio PHP
  616. /*
  617.     //Básico
  618.     sort() - Ordena um array   
  619.     rsort() - Ordena um array em ordem descrescente
  620.  
  621.     //Para valores em array associativo
  622.     asort() - Ordena um array mantendo a associação entre índices e valores
  623.     arsort() - Ordena um array em ordem descrescente mantendo a associação entre índices e valores  
  624.  
  625.     //Para chaves em array associativo
  626.     ksort() - Ordena um array pelas chaves
  627.     krsort() - Ordena um array pelas chaves em ordem descrescente  
  628.  
  629.     //Ordem natural - de teclado
  630.     natsort() - Ordena um array utilizando o algoritmo da "ordem natural"
  631.     natcasesort — Ordena um array utilizando o algoritmo da "ordem natural" sem diferenciar maiúsculas e minúsculas
  632.    
  633.     //Ordenação utilizando função definida pelo usuário
  634.     usort() - Ordena um array pelos valores utilizando uma função de comparação definida pelo usuário
  635.     uasort() - Ordena um array utilizando uma função de comparação definida pelo usuário e mantendo as associações entre chaves e valores   
  636.     uksort — Ordena um array pelas chaves utilizando uma função de comparação definida pelo usuário.    
  637.    
  638. */
  639.  
  640.  
  641.  
  642. echo '<hr>Sem ordenação';
  643. $array_frutas = array("maçã","banana","pera","uva","morango","abacaxi","pêssego","melão","melancia","laranja","limão","maracujá");
  644. var_dump($array_frutas);
  645.  
  646. echo '<hr>sort';
  647. sort($array_frutas);
  648. var_dump($array_frutas);
  649.  
  650. echo '<hr>rsort';
  651. rsort($array_frutas);
  652. var_dump($array_frutas);
  653.  
  654.  
  655. // ===========================================
  656.  
  657.  
  658.  
  659. $array_frutas_assoc = array(
  660.                     "a"=>"maçã",
  661.                     "b"=>"banana",
  662.                     "c"=>"pera",
  663.                     "d"=>"uva",
  664.                     "e"=>"morango",
  665.                     "f"=>"abacaxi",
  666.                     "g"=>"pêssego",
  667.                     "h"=>"melão",
  668.                     "i"=>"melancia",
  669.                     "j"=>"laranja",
  670.                     "k"=>"limão",
  671.                     "l"=>"maracujá"
  672.                     );
  673.                    
  674.  
  675. // Ao usar sort ou rsort puro em array associativo as chaves associativas são perdidas e substituídas por índices
  676. // No array associativo para manter as associações após a ordenação usar asort ou arsort
  677.        
  678. echo '<hr>sort';
  679. sort($array_frutas_assoc);
  680. var_dump($array_frutas_assoc);
  681.  
  682. // Chaves se perdem ao se usar sort ou rsort em array associativo simples
  683. foreach($array_frutas_assoc as $key=>$value)
  684. {
  685.     echo $key . '&raquo;' . $value . '<br>';
  686. }
  687.  
  688. echo '<hr>rsort';
  689. rsort($array_frutas_assoc);
  690. var_dump($array_frutas_assoc);
  691.  
  692.  
  693.  
  694.  
  695.  
  696. // ===========================================
  697. echo '<hr>Associativo sem ordenação 2';
  698. $array_produtos = array(
  699.                     array(
  700.                             'nome'  =>'Laptop',
  701.                             'preco' =>'3000'
  702.                           ),
  703.                     array(
  704.                             'nome'  =>'Placa de Vídeo 3D',
  705.                             'preco' =>'1500'
  706.                           ),
  707.                     array(
  708.                             'nome'  =>'Mouse',
  709.                             'preco' =>'200'
  710.                           ),   
  711.                     array(
  712.                             'nome'  =>'Teclado',
  713.                             'preco' =>'150'
  714.                           ),   
  715.                     array(
  716.                             'nome'  =>'Monitor',
  717.                             'preco' =>'800'
  718.                           ),   
  719.                     array(
  720.                             'nome'  =>'Computador Desktop',
  721.                             'preco' =>'1500'
  722.                           ),
  723.                     array(
  724.                             'nome'  =>'Memória 4GB',
  725.                             'preco' =>'450'
  726.                           ),   
  727.                     array(
  728.                             'nome'  =>'HD 1TB',
  729.                             'preco' =>'950'
  730.                           )                          
  731.                 );
  732. var_dump($array_produtos); 
  733.                
  734. echo '<hr>Ordenado com asort';             
  735. asort($array_produtos);    
  736. var_dump($array_produtos); 
  737.  
  738.  
  739. echo '<hr>Ordenado com arsort';            
  740. arsort($array_produtos);       
  741. var_dump($array_produtos); 
  742.  
  743.  
  744.  
  745.  
  746. echo '<hr>Coluna preço na frente';    
  747. $coluna_nome  = array_column($array_produtos, 'nome');
  748. $coluna_preco = array_column($array_produtos, 'preco');
  749.  
  750. $produtos_preco = array();
  751.  
  752. $i=0;
  753. foreach($coluna_nome as $nome)
  754. {
  755.     $produtos_preco[] = array(
  756.                             'preco'=>$coluna_preco[$i],
  757.                             'nome'=>$nome,
  758.                             );
  759.     $i++;
  760. }
  761.  
  762. var_dump($produtos_preco);
  763.  
  764.  
  765. echo '<hr>Coluna preço na frente com asort';              
  766. asort($produtos_preco);    
  767. var_dump($produtos_preco); 
  768.  
  769.  
  770. echo '<hr>Coluna preço na frente com arsort';             
  771. arsort($produtos_preco);       
  772. var_dump($produtos_preco); 
  773.  
  774.  
  775.  
  776.  
  777. // ===================================================================
  778.  
  779.  
  780.  
  781. # CONSTANTES
  782.  
  783. define("NOMEDACONSTANTE","Aqui entra o valor da constante 123456"); // Nome da constante em maiúsculo. OK!
  784. echo NOMEDACONSTANTE;
  785.  
  786. define("constanteemminusculo","o nome da constante pode ser em minúsculo mas fica zoado demais");   // <- Bacalhau
  787. echo '<br>' . constanteemminusculo;
  788.  
  789. // embora a linguagem permita, POR CONVENÇÃO USE LETRA MAIÚScULA SEMPRE PARA NOMES DE CONSTANTES
Advertisement
Add Comment
Please, Sign In to add comment