
    }Vi G                     6   d dl Z d dlmZmZmZmZmZmZmZm	Z	m
Z
mZ d dlmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ d dlZd dlmZ  ed	ed
      Z ee      Zd Zd Z dZ!ejD                  jG                  e!d      Z$ ejJ                  e$d       h dZ&d Z'ejQ                  d      d        Z)ejQ                  dddg      d        Z*ejQ                  d      d        Z+ejQ                  dddg      d        Z,ejQ                  d dg      d!        Z-ejQ                  d"ddg      d#        Z.ejQ                  d$      d%        Z/ejQ                  d&dg      d'        Z0ejQ                  d(      d)        Z1ejQ                  d*dg      d+        Z2ejQ                  d,dg      d-        Z3ejQ                  d.dg      d/        Z4ejQ                  d0dg      d1        Z5ejQ                  d2dg      d3        Z6ejQ                  d4      d5        Z7y)6    N)
	Blueprintrender_templaterequestredirecturl_forflashsessioncurrent_appsend_from_directoryabort)sessionmaker
joinedloadsubqueryload)or_)secure_filename)engine)UserRecursoPissarra)datetimerecursos	templates)template_folder)bindc                     	 t        d|  ddd      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w# t        $ r | dk7  rt	        d      cY S  w xY w)Nz%/var/www/ceduoda/static/translations/.jsonrzutf-8)encodingca)openjsonloadFileNotFoundErrorload_translation)	lang_codefs     /var/www/ceduoda/recursos.pyr$   r$      se    9)EJCZab 	 fg99Q<	  	  	  #D))	s#   ? 3	? <? ? AAc                  L    t         j                  j                  g d      xs dS )N)r   esenr   )r   accept_languages
best_match     r'   get_current_langr/      s    ##../ABJdJr.   z /var/www/ceduoda/static/recursos	pissarresT)exist_ok>   jpgpdfpngjpegc                 `    d| v xr) | j                  dd      d   j                         t        v S )N.   )rsplitlowerALLOWED_EXTfilenames    r'   allowedr>   !   s/    (?PxsA6q9??A[PPr.   z	/recursosc                      t               } t        |       }| |d<   t               }|j                  t              j                  t        t        j                        t        t        j                              j                  t        j                  j                               j                         }|j                          t        j                  d      t        j                  d      t        j                  d      d}t!        d||| |      S )Nr%   user_idusernameroleidrA   rB   zrecursos.html)r   userlangcontent)r/   r$   Sessionqueryr   optionsr   uploaderlast_editororder_byuploaded_atdescallcloser	   getr   )rF   rG   sessr   rE   s        r'   recursos_listrT   $   s    Dt$GGK9Dzz'"**:g6F6F+GT[TgTgIhirrsz  tG  tG  tL  tL  tN  O  S  S  UHJJL++i(gkk*6MW^WbWbciWjkD?XDt]deer.   z/recursos/loginGETPOST)methodsc                  v   t               } t        |       }t        j                  dk(  rt        j                  j                  d      }t        j                  j                  d      }t               }|j                  t              j                  |      j                         }|j                          |rj|j                  |      rY|j                  t        d<   |j                  t        d<   |j                   t        d<   t#        dd       t%        t'        d	            S t#        d
d       t)        d| |      S )NrV   rA   passwordrA   r@   rB   zLogin correctesuccessrecursos.recursos_listz Usuari o contrasenya incorrectesdangerzrecursos_login.htmlrF   rG   )r/   r$   r   methodformrR   rH   rI   r   	filter_byfirstrQ   check_passwordrD   r	   rA   rB   r   r   r   r   )rF   rG   rA   rY   rS   rE   s         r'   recursos_loginrd   0   s    Dt$G~~<<##J/<<##J/yzz$))8)<BBD

D''1!%GI"&--GJ"iiGFO"I.G$<=>>0(;0tWMMr.   z/recursos/logoutc                      t        j                  dd        t        j                  dd        t        j                  dd        t        dd       t        t	        d            S )Nr@   rA   rB   u   Sessió tancadainfor\   )r	   popr   r   r   r-   r.   r'   recursos_logoutrh   D   sH    KK	4 KK
D!KK	
V$G4566r.   z/recursos/uploadc            
         dt         vrt        t        d            S t        j                  dk(  r)t        j
                  j                  dd      j                         } t        j
                  j                  dd      j                         }t        j
                  j                  dd      j                         }t        j                  j                  d      }| s t        d	d
       t        t        d            S |r|j                  r|j                  dt        j                         |j                         }|j                  d       |dkD  rHt               }t!        |      }t        |d   j                  dd      d       t        t        d            S d }d }d }	|r)|}|j#                         j%                  d      rd}	nd}	n|r|j                  rt'        |j                        s t        dd       t        t        d            S t)        t+        t-        j.                         j1                                d|j                         }t        j2                  j5                  t6        |      }
|j9                  |
       |j;                  dd      d   j#                         }|dv rdn|dk(  rdnd}	n t        dd
       t        t        d            S t=               }t?        | |xs d |||	t        j                  d            }|jA                  |       |jC                          |jE                          t        dd       t        t        d            S t               }t!        |      }tG        d||       S )!Nr@   recursos.recursos_loginrV   title descriptionlinkfile   Cal indicar un títolwarningzrecursos.recursos_uploadr     P r   error_file_too_large#   El fitxer és massa gran (màx 5MB)r]   .pdfr3      Tipus de fitxer no permès_r7   r8   >   r2   r4   r5   imgu(   Cal pujar un fitxer o indicar un enllaç)rk   rm   r=   url	file_typeuploader_idzRecurs pujat correctamentr[   r\   zrecursos_upload.htmlr^   )$r	   r   r   r   r_   r`   rR   stripfilesr   r=   seekosSEEK_ENDtellr/   r$   r:   endswithr>   r   intr   utcnow	timestamppathjoinSTATIC_RECURSOS_DIRsaver9   rH   r   addcommitrQ   r   )rk   rm   rn   ro   	file_sizerF   rG   r=   ry   rz   destextrS   recs                 r'   recursos_uploadr   L   s    9:;;~~  "-335ll&&}b9??A||+113}}  ()95G$>?@@ DMMIIa%		IIIaL?*')*40gj)--.DFklnvw(B CDD	Czz|$$V,!	"	dmm4==)2H=(B CDD&#hoo.?.I.I.K*L)MQt}}o'^_H77<< 3X>DIIdO//#q)!,224C!$(<!<CQVJ5\bI<iHG$>?@@y#+tI.
 	

)95 89::Dt$G1gNNr.   z!/recursos/delete/<int:recurso_id>c                    dt         vrt        d      S t               }|j                  t              j                  |       }|s|j                          t        d      S |j                  rbt        j                  j                  t        |j                        }t        j                  j                  |      rt        j                  |       |j                  |       |j                          |j                          t!               }t#        |      }t%        |d   j                  dd      d       t'        t)        d            S )	Nr@       r   msg_deletedzRecurs eliminat correctament.r[   r\   )r	   r   rH   rI   r   rR   rQ   r=   r   r   r   r   existsremovedeleter   r/   r$   r   r   r   )
recurso_idrS   r   r   rF   rG   s         r'   recursos_deleter      s    Sz9D
**W

!
!*
-C

Sz ||ww||/>77>>$IIdOKKKKMJJLDt$G	'*

!
!-1P
QS\]G4566r.   z/recursos/edit/<int:recurso_id>c                    dt         vrt        t        d            S t               }|j	                  t
              j                  |       }|s|j                          t        d      S t        j                  dk(  rt        j                  j                  dd      j                         }t        j                  j                  dd      j                         }t        j                  j                  dd      j                         }t        j                  j                  d	      }|s"t        d
d       t        t        d|             S |r|j                  r|j!                  dt"        j$                         |j'                         }|j!                  d       |dkD  rJt)               }t+        |      }	t        |	d   j                  dd      d       t        t        d|             S ||_        |xs d |_        t        j                  d      |_        |r?||_        d |_        |j5                         j7                  d      r	d|_        n{d|_        nr|ro|j                  rbt;        |j                        s"t        dd       t        t        d|             S |j                  rbt"        j<                  j?                  t@        |j                        }
t"        j<                  jC                  |
      rt#        jD                  |
       tG        tI        tK        jL                         jO                                d|j                         }t"        j<                  j?                  t@        |      }|jQ                  |       |jS                  dd      d   j5                         }||_        d |_        |dv rdn|dk(  rdnd	|_        |jU                          |j                          t)               }t+        |      }	t        |	d   j                  dd      d       t        t        d            S t)               }t+        |      }	|j                          tW        d |||	!      S )"Nr@   rj   r   rV   rk   rl   rm   rn   ro   rp   rq   zrecursos.recursos_edit)r   r   rr   r   rs   rt   r]   ru   r3   rv   rw   r7   r8   >   r2   r4   r5   rx   msg_updatedz Recurs actualitzat correctament.r[   r\   zrecursos_edit.html)recursorF   rG   ),r	   r   r   rH   rI   r   rR   rQ   r   r   r_   r`   r|   r}   r   r=   r~   r   r   r   r/   r$   rk   rm   last_editor_idry   r:   r   rz   r>   r   r   r   r   r   r   r   r   r   r   r   r9   r   r   )r   rS   r   rk   rm   rn   ro   r   rF   rG   old_pathr=   r   r   s                 r'   recursos_editr      sO    9:;;9D
**W

!
!*
-C

Sz~~  "-335ll&&}b9??A||+113}}  ()95G$<TUU DMMIIa%		IIIaL?*')*40gj)--.DFklnvw(@Z XYY	%-$[[3CGCLzz|$$V, % &dmm4==)2H=(@Z XYY ||77<<(;S\\J77>>(+IIh'&#hoo.?.I.I.K*L)MQt}}o'^_H77<< 3X>DIIdO//#q)!,224C#CLCG%(,@%@EPSUZPZu`fCM

!"4(gj!%%m5WXZcd 89::Dt$GJJL/4QXYYr.   z/recursos/pissarresc                     t               } t        |       }t               }t        j                  d      }t        j                  d      }|j                  t              j                  t        t        j                        t        t        j                        t        t        j                              }|rb|dk7  r|j                  t        t        j                  |k(  t        j                  j!                  |      t        j"                  dk(              }n"|j                  t        j"                  dk(        }|j%                  t        j&                  j)                               j+                         }g }|r@|j                  t,              j%                  t,        j.                        j+                         }|j1                          |t        j                  d      |d}t3        d|||| |	      S )
Nr@   rB   adminrD   TrA   rC   zpissarra_list.html)boardsrE   	all_usersrF   rG   )r/   r$   rH   r	   rR   rI   r   rJ   r   rK   rL   r   shared_usersfilterr   r{   any	is_publicrM   
updated_atrO   rP   r   rA   rQ   r   )	rF   rG   rS   current_user_id	user_roleqr   r   rE   s	            r'   pissarra_listr      sy   Dt$G9Dkk),OF#I

8$$8$$%8''(X**+	A ((O;))---A&&$.A HHX''4/0ZZ++0023779F IJJt$--dmm<@@B	JJL!w{{:/FPYZD/TU^eisz{{r.   z/recursos/pissarres/novac                  v   dt         vrt        d      S t        j                  j	                  dd      j                         } t               }|j                  t              j                  |       j                         }|r4|j                          t        d|  dd       t        t        d	            S t        t!        j"                         j%                                d
t         d    d}dg d}t'        t(        j*                  j-                  t.        |      d      5 }t1        j2                  ||       d d d        t        | |t         d   t         d         }|j5                  |       |j7                          |j8                  }|j                          t        t        d|            S # 1 sw Y   yxY w)Nr@   r   rk   u   Sense títol)rk   u(   Ja existeix una pissarra amb el títol 'z'. Tria un altre nom.r]   recursos.pissarra_listrw   r   z5.3.0)versionobjectsw)rk   r=   r{   r   zrecursos.pissarra_editor)board_id)r	   r   r   r`   rR   r|   rH   rI   r   ra   rb   rQ   r   r   r   r   r   r   r   r    r   r   r   STATIC_PISSARRES_DIRr!   dumpr   r   rD   )rk   rS   existingr=   initial_datar&   	new_boardbids           r'   pissarra_novar     si   SzLLWn5;;=E 9Dzz(#--E-:@@BH

8?TUW_` 89::hoo'11345Qwy7I6J%PH&26L	bggll/:C	@ #A		,"# I&y)	I 	HHYKKM
,,CJJLG6EFF# #s    F//F8z)/recursos/pissarres/editor/<int:board_id>c           	         t               }|j                  t              j                  |       }|s|j	                          t        d      S t        j                  d      t        j                  d      dk(  }r|j                  k(  nd}rt        fd|j                  D              nd}|j                  }|sC|sA|s?|s=|j	                          r t        dd       t        t        d	            S t        d
      S t        j                  j!                  t"        |j$                        }d}t        j                  j'                  |      r%t)        |d      5 }	|	j+                         }d d d        |j	                          t-               }
t/        |
      }xr |xs
 |xs |xs |}t1        d|||
||xs ||      S # 1 sw Y   VxY w)Nr   r@   rB   r   Fc              3   <   K   | ]  }|j                   k(    y wNr   .0ur   s     r'   	<genexpr>z"pissarra_editor.<locals>.<genexpr>D       DADDO+D   u+   No tens permís per veure aquesta pissarra.r]   r   r   z{}r   zpissarra_editor.html)boardcanvas_datarF   rG   is_ownercan_edit)rH   rI   r   rR   rQ   r   r	   r{   r   r   r   r   r   r   r   r   r   r   r=   r   r    readr/   r$   r   )r   rS   bis_adminr   	is_sharedr   pcdatar&   lcntr   r   s                @r'   pissarra_editorr   9  s   9D

8  *A

U3Z' kk),O{{6"g-H3Bq}}/HHWDQ^^DD]bIII

?JG$<=>>:
)1::6AE	ww~~a!S\0Q0JJLA
1
CSH$R$RI$RH1TU_bmu  nB  zB  MU  V  V 	10s   GG
z*/recursos/pissarres/guardar/<int:board_id>c                 B  
 dt         vrt        d      S t        j                         }t	               }|j                  t              j                  |       }|s|j                          t        d      S t         d   
t        j                  d      dk(  }|j                  
k(  }t        
fd|j                  D              }|j                  }|s!|s|s|s|j                          t        d      S t        j                  j                  t         |j"                        }t%        |d      5 }	t'        j(                  ||	       d d d        t         d   |_        t-        j.                         |_        |j3                          |j                          dd	iS # 1 sw Y   TxY w)
Nr@   r   r   rB   r   c              3   <   K   | ]  }|j                   k(    y wr   r   r   s     r'   r   z#pissarra_guardar.<locals>.<genexpr>e  r   r   r   statusok)r	   r   r   get_jsonrH   rI   r   rR   rQ   r{   r   r   r   r   r   r   r   r=   r    r!   r   r   r   r   r   r   )r   drS   r   r   r   r   r   r   r&   r   s             @r'   pissarra_guardarr   Y  s2   c
!2A9D

8  *Adjjl5:- i(O{{6"g-H}}/HDQ^^DDIII

Sz
)1::6A	a+DIIaO+y)A??$ALKKM4::<d	 ,+s   +FFz+/recursos/pissarres/eliminar/<int:board_id>c                    dt         vrt        d      S t               }|j                  t              j                  |       }|s|j                          t        d      S t         d   }t        j
                  d      dk(  }|j                  |k(  }|s2|s0|j                          t        dd       t        t        d            S t        j                  j                  t        |j                        }t        j                  j!                  |      rt        j"                  |       |j%                  |       |j'                          |j                          t        t        d            S )	Nr@   r   r   rB   r   u2   Només el creador o un administrador pot esborrar.r]   r   )r	   r   rH   rI   r   rR   rQ   r{   r   r   r   r   r   r   r   r=   r   r   r   r   )r   rS   r   r   r   r   r   s          r'   pissarra_eliminarr   s  s    c
!29D

8  *Adjjl5:- i(O{{6"g-H}}/H

BHM 89::
)1::6A	ww~~a"))A,KKNDKKM4::<G4566r.   z,/recursos/pissarres/compartir/<int:board_id>c                    dt         vrt        d      S t        j                  j	                  d      }t               }|j                  t              j	                  |       }|s|j                          t        d      S t         d   }t        j                  d      dk(  }|j                  |k(  }|s2|s0|j                          t        dd       t        t        d	            S |j                  t              j                  |
      j                         }|s4|j                          t        d| dd       t        t        d	            S ||j                   vr<|j                   j#                  |       |j%                          t        d| dd       nt        dd       |j                          t        t        d	            S )Nr@   r   rA   r   rB   r   u/   No tens permís per compartir aquesta pissarra.r]   r   rZ   z	L'usuari z no existeix.rq   zPissarra compartida amb r7   r[   u   L'usuari ja té accés.rf   )r	   r   r   r`   rR   rH   rI   r   rQ   r{   r   r   r   r   ra   rb   r   appendr   )r   username_to_addrS   r   r   r   r   user_to_adds           r'   pissarra_compartirr     si   c
!2ll&&z2O9D

8  *Adjjl5:- i(O{{6"g-H}}/H

?J 89::**T",,o,FLLNK

	/*-8)D 89::!..(	k*((9;YG'&1JJLG4566r.   z0/recursos/pissarres/toggle_public/<int:board_id>c                 l   dt         vrt        d      S t               }|j                  t              j                  |       }|s|j                          t        d      S t         d   }t        j
                  d      dk(  }|j                  |k(  }|s2|s0|j                          t        dd       t        t        d            S |j                   |_        |j                          |j                  rd	nd
}t        d|j                   d| dd       |j                          t        t        d            S )Nr@   r   r   rB   r   u@   Només el creador o un administrador pot canviar la visibilitat.r]   r   u   públicaprivadazLa pissarra 'u
   ' ara és r7   r[   )r	   r   rH   rI   r   rR   rQ   r{   r   r   r   r   r   rk   )r   rS   r   r   r   r   r   s          r'   pissarra_toggle_publicr     s    c
!29D

8  *Adjjl5:- i(O{{6"g-H}}/H

PRZ[ 89:: kk/AKKKM;;ZIF	M!''*VHA
6	BJJLG4566r.   z/recursos/users/createc                  `   dt         vst        j                  d      dk7  rt        d      S t        j                  j                  d      } t        j                  j                  d      }t        j                  j                  dd      }| r|s t        dd	       t        t        d
            S t               }|j                  t              j                  |       j                         r0|j                          t        dd       t        t        d
            S t        | |      }|j                  |       |j                  |       |j!                          |j                          t        d|  dd       t        d|  dd       t        t        j"                  xs t        d
            S )Nr@   rB   r   r   rA   rY   rE   zFalten dades.rq   r   rZ   zL'usuari ja existeix.r]   )rA   rB   zUsuari z creat correctament.r[   )r	   rR   r   r   r`   r   r   r   rH   rI   r   ra   rb   rQ   set_passwordr   r   referrer)rA   rY   rB   rS   new_users        r'   user_creater     sM   7;;v#6'#ASz||
+H||
+H<<FF+D8oy) 89::9Dzz$!!8!4::<

%x0 89::XD1H(#HHXKKMJJL	GH:1
2I>	GH:1
2I>G$$I0H(IJJr.   z /recursos/static/<path:filename>c                 "    t        t        |       S r   )r   r   r<   s    r'   recursos_staticr     s    2H==r.   )8r!   flaskr   r   r   r   r   r   r	   r
   r   r   sqlalchemy.ormr   r   r   
sqlalchemyr   werkzeug.utilsr   
crea_dadesr   modelsr   r   r   r   r   __name__bprH   r$   r/   r   r   r   r   makedirsr;   r>   routerT   rd   rh   r   r   r   r   r   r   r   r   r   r   r   r   r-   r.   r'   <module>r      s    B  B  B A A  *  * * 	 z8[A
F
#K 9 ww||$7E   4 0+Q +	f 	f 
eV_5N 6N& 
7 7 
ufo6@O 7@OD 
-x@7 A72 
+eV_EHZ FHZT 
 #| !#|J 
$vh7G 8G< 
56V 7V> 
6I J2 
7&J7 K7* 
86(K 7 L 7D 
<vhO7 P72 
"VH5K 6K8 
,-> .>r.   