
Recherche avancée
Médias (91)
-
Spoon - Revenge !
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
My Morning Jacket - One Big Holiday
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Zap Mama - Wadidyusay ?
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
David Byrne - My Fair Lady
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Beastie Boys - Now Get Busy
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Granite de l’Aber Ildut
9 septembre 2011, par
Mis à jour : Septembre 2011
Langue : français
Type : Texte
Autres articles (59)
-
Le profil des utilisateurs
12 avril 2011, parChaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...) -
Configurer la prise en compte des langues
15 novembre 2010, parAccéder à la configuration et ajouter des langues prises en compte
Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...) -
XMP PHP
13 mai 2011, parDixit Wikipedia, XMP signifie :
Extensible Metadata Platform ou XMP est un format de métadonnées basé sur XML utilisé dans les applications PDF, de photographie et de graphisme. Il a été lancé par Adobe Systems en avril 2001 en étant intégré à la version 5.0 d’Adobe Acrobat.
Étant basé sur XML, il gère un ensemble de tags dynamiques pour l’utilisation dans le cadre du Web sémantique.
XMP permet d’enregistrer sous forme d’un document XML des informations relatives à un fichier : titre, auteur, historique (...)
Sur d’autres sites (2281)
-
How to verify user permissions – Introducing the Piwik Platform
9 novembre 2014, par Thomas Steur — DevelopmentThis is the next post of our blog series where we introduce the capabilities of the Piwik platform (our previous post was How to make your plugin multilingual). This time you’ll learn how to verify user permissions. For this tutorial you will need to have basic knowledge of PHP and the Piwik platform.
When should a plugin verify permissions ?
Usually you want to do this before executing any action – such as deleting or fetching data – and before rendering any sensitive information that should not be accessible by everyone. For instance in an API method or Controller action. You sometimes also need to verify permissions before registering menu items or widgets.
How does Piwik’s user management work ?
It is quite simple as it only differentiates between a few roles : View permission, Admin permission and Super User permission. If you manage multiple websites with Piwik a user can be assigned to different roles as a user might have no permission for some websites but view or admin permission for another set of websites.
Worth mentioning is that roles inherit from each other. This means the role admin automatically includes the role view and a super user automatically covers the view and admin role.
Getting started
In this post, we assume that you have already set up your development environment and created a plugin. If not, visit the Piwik Developer Zone where you’ll find the tutorial Setting up Piwik and other Guides that help you to develop a plugin.
Verifying user permissions
To protect your data the platform offers many convenient methods in the \Piwik\Piwik class. There you will find methods that either start with
check
,is
orhas
. While methods that start withcheck
throw an exception in case a condition is not met, the other methods return a booleantrue
orfalse
.Use methods that throw an exception if you want to stop any further execution in case a user does not have an appropriate role. The platform will catch the exception and display an error message or ask the user to log in.
- public function deleteAllMessages()
- {
- // delete messages only if user has super user access, otherwise show an error message
- Piwik::checkUserSuperUserAccess();
- $this->getModel()->deleteAllMessages();
- }
Use methods that return a boolean for instance when registering menu items or widgets.
- public function configureAdminMenu(MenuAdmin $menu)
- {
- if (Piwik::hasUserSuperUserAccess()) {
- $menu->addPlatformItem('Plugins', $this->urlForDefaultAction());
- }
- }
It is important to be aware that just because the menu item won’t be displayed in the UI a user can still open the registered URL manually. Therefore you have to check for permissions in the actual controller action as well.
View permission
A user having a view permission should be only able to view reports but not make any changes apart from his personal settings. The methods that end with
UserHasSomeViewAccess
make sure a user has at least view permission for one website whereas the methods*UserHasViewAccess($idSites = array(1,2,3))
check whether a user has view access for all of the given websites.- Piwik::checkUserHasSomeViewAccess();
As a plugin developer you would usually use the latter example to verify the permissions for specific websites. Use the first example in case you develop something like an “All Websites Dashboard” where you only want to make sure the user has a view permission for at least one website.
Admin permission
A user having an admin permission cannot only view reports but also change website related settings. The methods to check for this role are similar to the ones before, just swap the term
View
withAdmin
.- Piwik::checkUserHasSomeAdminAccess();
Super user permission
A user having the super user permission is allowed to access all of the data stored in Piwik and change any settings. To check if a user has this role use one of the methods that end with
UserSuperUserAccess
.Piwik::checkUserHasSuperUserAccess();
As a plugin developer you would check for this permission for instance in places where your plugin shows an activity log over all users or where it offers the possibility to change any system wide settings.
Getting information about the currently logged in user
Sometimes you might want to know which user is currently logged in. This can be useful if you want to persist user related information in the database or if you want to send an email to the currently logged in user. You can easily get this information by calling the following methods :
- $login = Piwik::getCurrentUserLogin()
- $email = Piwik::getCurrentUserEmail()
Advanced features
Of course there is more that you can do. For instance you can verify whether a user is an anonymous user or whether a user has a specific role. You can also perform any operation in the context of a super user even if the current user does not have this role. Would you like to know more about those features ? Check out the Piwik class reference, the Security guide and the Manage Users user guide.
If you have any feedback regarding our APIs or our guides in the Developer Zone feel free to send it to us.
-
Evolution #3973 : Brancher inc/distant recuperer_url() sur une librairie récente
20 février 2019, par Eric CamusBonjour,
Suite à un changement de machine pour nos SPIP (de WIMP vers LAMP (centos)) de nombreux flux RSS ne fonctionnaient plus, la cause : la fonction ’recuperer_url’ !!!.
J’ai donc réécrit le corps de cette fonction avec la biblio PHP CURL a partir du code dans SPIP 3.2.0 (je sais que je suis en retard d’une version).
Je vous le livre comme je viens de le finir après un léger debug.- <span class="CodeRay"><span class="keyword">function</span> <span class="function">recuperer_url</span>(<span class="local-variable">$url</span>, <span class="local-variable">$options</span> = <span class="predefined">array</span>()) {
- <span class="local-variable">$default</span> = <span class="predefined">array</span>(
- <span class="string"><span class="delimiter">'</span><span class="content">transcoder</span><span class="delimiter">'</span></span> => <span class="predefined-constant">false</span>,
- <span class="string"><span class="delimiter">'</span><span class="content">methode</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="content">GET</span><span class="delimiter">'</span></span>,
- <span class="string"><span class="delimiter">'</span><span class="content">taille_max</span><span class="delimiter">'</span></span> => <span class="predefined-constant">null</span>,
- <span class="string"><span class="delimiter">'</span><span class="content">datas</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>,
- <span class="string"><span class="delimiter">'</span><span class="content">boundary</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>,
- <span class="string"><span class="delimiter">'</span><span class="content">refuser_gz</span><span class="delimiter">'</span></span> => <span class="predefined-constant">false</span>,
- <span class="string"><span class="delimiter">'</span><span class="content">if_modified_since</span><span class="delimiter">'</span></span> => <span class="integer">0</span>,
- <span class="string"><span class="delimiter">'</span><span class="content">uri_referer</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>,
- <span class="string"><span class="delimiter">'</span><span class="content">file</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>,
- <span class="string"><span class="delimiter">'</span><span class="content">follow_location</span><span class="delimiter">'</span></span> => <span class="integer">10</span>,
- <span class="string"><span class="delimiter">'</span><span class="content">version_http</span><span class="delimiter">'</span></span> => _INC_DISTANT_VERSION_HTTP,
- );
- <span class="local-variable">$options</span> = <span class="predefined">array_merge</span>(<span class="local-variable">$default</span>, <span class="local-variable">$options</span>);
- <span class="comment">// copier directement dans un fichier ?</span>
- <span class="local-variable">$copy</span> = <span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">file</span><span class="delimiter">'</span></span>];
- <span class="keyword">if</span> (<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">methode</span><span class="delimiter">'</span></span>] == <span class="string"><span class="delimiter">'</span><span class="content">HEAD</span><span class="delimiter">'</span></span>) {
- <span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">taille_max</span><span class="delimiter">'</span></span>] = <span class="integer">0</span>;
- }
- <span class="keyword">if</span> (<span class="predefined">is_null</span>(<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">taille_max</span><span class="delimiter">'</span></span>])) {
- <span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">taille_max</span><span class="delimiter">'</span></span>] = <span class="local-variable">$copy</span> ? _COPIE_LOCALE_MAX_SIZE : _INC_DISTANT_MAX_SIZE;
- }
- <span class="comment">// Accepter les URLs au format feed:// ou qui ont oublie le http:// ou les urls relatives au protocole</span>
- <span class="local-variable">$url</span> = <span class="predefined">preg_replace</span>(<span class="string"><span class="delimiter">'</span><span class="content">,^feed://,i</span><span class="delimiter">'</span></span>, <span class="string"><span class="delimiter">'</span><span class="content">http://</span><span class="delimiter">'</span></span>, <span class="local-variable">$url</span>);
- <span class="keyword">if</span> (!tester_url_absolue(<span class="local-variable">$url</span>)) {
- <span class="local-variable">$url</span> = <span class="string"><span class="delimiter">'</span><span class="content">http://</span><span class="delimiter">'</span></span> . <span class="local-variable">$url</span>;
- } <span class="keyword">elseif</span> (<span class="predefined">strncmp</span>(<span class="local-variable">$url</span>, <span class="string"><span class="delimiter">'</span><span class="content">//</span><span class="delimiter">'</span></span>, <span class="integer">2</span>) == <span class="integer">0</span>) {
- <span class="local-variable">$url</span> = <span class="string"><span class="delimiter">'</span><span class="content">http:</span><span class="delimiter">'</span></span> . <span class="local-variable">$url</span>;
- }
- <span class="local-variable">$url</span> = url_to_ascii(<span class="local-variable">$url</span>);
- <span class="local-variable">$result</span> = <span class="predefined">array</span>(
- <span class="string"><span class="delimiter">'</span><span class="content">status</span><span class="delimiter">'</span></span> => <span class="integer">0</span>,
- <span class="string"><span class="delimiter">'</span><span class="content">headers</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>,
- <span class="string"><span class="delimiter">'</span><span class="content">page</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>,
- <span class="string"><span class="delimiter">'</span><span class="content">length</span><span class="delimiter">'</span></span> => <span class="integer">0</span>,
- <span class="string"><span class="delimiter">'</span><span class="content">last_modified</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>,
- <span class="string"><span class="delimiter">'</span><span class="content">location</span><span class="delimiter">'</span></span> => <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>,
- <span class="string"><span class="delimiter">'</span><span class="content">url</span><span class="delimiter">'</span></span> => <span class="local-variable">$url</span>
- );
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_HTTP_VERSION</span>,<span class="constant">CURL_HTTP_VERSION_1_1</span>);
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_SSL_VERIFYPEER</span>,<span class="predefined-constant">false</span>);
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_RETURNTRANSFER</span>,<span class="predefined-constant">true</span>);
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_FOLLOWLOCATION</span>,<span class="predefined-constant">true</span>);
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_TIMEOUT</span>,<span class="integer">30</span>); <span class="comment">// timeout 30s</span>
- <span class="keyword">if</span> (!<span class="predefined">empty</span>(<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">datas</span><span class="delimiter">'</span></span>])) { <span class="comment">// des datas</span>
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_POST</span>,<span class="predefined-constant">true</span>);
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_SAFE_UPLOAD</span>,<span class="predefined-constant">true</span>);
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_POSTFIELDS</span>,<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">datas</span><span class="delimiter">'</span></span>]);
- <span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">methode</span><span class="delimiter">'</span></span>]=<span class="string"><span class="delimiter">'</span><span class="content">POST</span><span class="delimiter">'</span></span>;
- }
- <span class="keyword">if</span>(<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">methode</span><span class="delimiter">'</span></span>]==<span class="string"><span class="delimiter">'</span><span class="content">HEAD</span><span class="delimiter">'</span></span>) {
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_NOBODY</span>,<span class="predefined-constant">true</span>);
- <span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">taille_max</span><span class="delimiter">'</span></span>]=<span class="integer">0</span>; <span class="comment">// pas de taille</span>
- <span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">if_modified_since</span><span class="delimiter">'</span></span>]=<span class="integer">0</span>; <span class="comment">// pas de date de modif</span>
- <span class="local-variable">$copy</span>=<span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>; <span class="comment">// pas de copie dans fichier</span>
- }
- <span class="keyword">if</span>(<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">if_modified_since</span><span class="delimiter">'</span></span>]><span class="integer">0</span>) {
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_TIMEVALUE</span>,<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">if_modified_since</span><span class="delimiter">'</span></span>]);
- }
- <span class="keyword">if</span>(<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">taille_max</span><span class="delimiter">'</span></span>]><span class="integer">0</span>) {
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_RANGE</span>,<span class="string"><span class="delimiter">'</span><span class="content">0-</span><span class="delimiter">'</span></span>.<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">taille_max</span><span class="delimiter">'</span></span>]);
- }
- <span class="keyword">if</span>(<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">uri_referer</span><span class="delimiter">'</span></span>]) {
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_REFERER</span>,<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">uri_referer</span><span class="delimiter">'</span></span>]);
- }
- <span class="local-variable">$opt_header</span>=<span class="predefined-constant">true</span>;
- <span class="local-variable">$fheader</span>=<span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>; <span class="comment">// nom du fichier contenant le header</span>
- <span class="keyword">if</span>(<span class="local-variable">$copy</span>) {
- <span class="local-variable">$fc</span>=<span class="predefined">fopen</span>(<span class="local-variable">$copy</span>,<span class="string"><span class="delimiter">'</span><span class="content">w</span><span class="delimiter">'</span></span>);
- <span class="keyword">if</span>(<span class="local-variable">$fc</span>) {
- <span class="local-variable">$fheader</span>=_DIR_TMP.<span class="predefined">md5</span>(<span class="local-variable">$copy</span>).<span class="string"><span class="delimiter">'</span><span class="content">_head.txt</span><span class="delimiter">'</span></span>;
- <span class="local-variable">$fh</span>=<span class="predefined">fopen</span>(<span class="local-variable">$fheader</span>,<span class="string"><span class="delimiter">'</span><span class="content">w</span><span class="delimiter">'</span></span>);
- <span class="keyword">if</span>(<span class="local-variable">$fh</span>) {
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_FILE</span>,<span class="local-variable">$fc</span>);
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_WRITEHEADER</span>,<span class="local-variable">$fh</span>);
- <span class="local-variable">$opt_header</span>=<span class="predefined-constant">false</span>;
- }
- <span class="keyword">else</span> {
- <span class="predefined">fclose</span>(<span class="local-variable">$fc</span>);
- }
- }
- }
- curl_setopt(<span class="local-variable">$pCurl</span>,<span class="constant">CURLOPT_HEADER</span>,<span class="local-variable">$opt_header</span>);
- <span class="keyword">if</span>(<span class="local-variable">$fc</span>) {
- <span class="predefined">fclose</span>(<span class="local-variable">$fc</span>); <span class="comment">// fermer fichier</span>
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">file</span><span class="delimiter">'</span></span>]=<span class="local-variable">$copy</span>;
- }
- <span class="keyword">if</span>(<span class="local-variable">$fh</span>) {
- <span class="predefined">fclose</span>(<span class="local-variable">$fh</span>);
- }
- <span class="keyword">if</span>(<span class="local-variable">$cont</span>===<span class="predefined-constant">false</span>) {
- spip_log(<span class="string"><span class="delimiter">'</span><span class="content">ECHEC CURL </span><span class="delimiter">'</span></span>.<span class="local-variable">$url</span>,_LOG_ERREUR);
- <span class="keyword">if</span>(<span class="predefined">file_exists</span>(<span class="local-variable">$copy</span>)) <span class="predefined">unlink</span>(<span class="local-variable">$copy</span>); <span class="comment">// suppr fichier sur erreur</span>
- <span class="keyword">if</span>(<span class="predefined">file_exists</span>(<span class="local-variable">$fheader</span>)) <span class="predefined">unlink</span>(<span class="local-variable">$fheader</span>);
- <span class="keyword">return</span> <span class="predefined-constant">false</span>;
- }
- <span class="comment">// on range le tout dans la var $result</span>
- <span class="local-variable">$body</span>=<span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>;
- <span class="local-variable">$head</span>=<span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>;
- <span class="keyword">if</span>(<span class="local-variable">$cont</span>!==<span class="predefined-constant">true</span>) { <span class="comment">// cas de demande par fichier</span>
- <span class="keyword">if</span>(<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">methode</span><span class="delimiter">'</span></span>]==<span class="string"><span class="delimiter">'</span><span class="content">HEAD</span><span class="delimiter">'</span></span>) {
- <span class="local-variable">$head</span>=<span class="local-variable">$cont</span>;
- }
- <span class="keyword">else</span> {
- <span class="keyword">if</span>(<span class="predefined">isset</span>(<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">download_content_length</span><span class="delimiter">'</span></span>]) <span class="keyword">and</span> <span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">download_content_length</span><span class="delimiter">'</span></span>]><span class="integer">0</span>) {
- <span class="local-variable">$body</span>=<span class="predefined">substr</span>(<span class="local-variable">$cont</span>,-<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">download_content_length</span><span class="delimiter">'</span></span>]);
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">length</span><span class="delimiter">'</span></span>]=<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">download_content_length</span><span class="delimiter">'</span></span>];
- }
- <span class="keyword">elseif</span>(<span class="predefined">isset</span>(<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">size_download</span><span class="delimiter">'</span></span>]) <span class="keyword">and</span> <span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">size_download</span><span class="delimiter">'</span></span>]><span class="integer">0</span>) {
- <span class="local-variable">$body</span>=<span class="predefined">substr</span>(<span class="local-variable">$cont</span>,-<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">size_download</span><span class="delimiter">'</span></span>]);
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">length</span><span class="delimiter">'</span></span>]=<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">size_download</span><span class="delimiter">'</span></span>];
- }
- <span class="keyword">if</span>(<span class="predefined">isset</span>(<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">header_size</span><span class="delimiter">'</span></span>]) <span class="keyword">and</span> <span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">header_size</span><span class="delimiter">'</span></span>]><span class="integer">0</span>) {
- <span class="local-variable">$head</span>=<span class="predefined">substr</span>(<span class="local-variable">$cont</span>,<span class="integer">0</span>,<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">header_size</span><span class="delimiter">'</span></span>]);
- <span class="keyword">if</span>(<span class="local-variable">$body</span>==<span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>) { <span class="comment">// cas ou download_content_length=-1 !!!!!!</span>
- <span class="local-variable">$body</span>=<span class="predefined">substr</span>(<span class="local-variable">$cont</span>,<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">header_size</span><span class="delimiter">'</span></span>]);
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">length</span><span class="delimiter">'</span></span>]=<span class="predefined">strlen</span>(<span class="local-variable">$body</span>); <span class="comment">// pare absence</span>
- }
- }
- }
- }
- <span class="keyword">if</span>(<span class="local-variable">$fheader</span> <span class="keyword">and</span> <span class="predefined">file_exists</span>(<span class="local-variable">$fheader</span>)) { <span class="comment">// si un fichier de header est fait</span>
- <span class="local-variable">$head</span>=<span class="predefined">file_get_contents</span>(<span class="local-variable">$fheader</span>);
- <span class="predefined">unlink</span>(<span class="local-variable">$fheader</span>);
- }
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">status</span><span class="delimiter">'</span></span>]=<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">http_code</span><span class="delimiter">'</span></span>];
- <span class="keyword">if</span>(<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">http_code</span><span class="delimiter">'</span></span>]==<span class="integer">206</span>) <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">status</span><span class="delimiter">'</span></span>]=<span class="integer">200</span>; <span class="comment">// SPIP refuse les partial content alors qu'il les demande</span>
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">headers</span><span class="delimiter">'</span></span>]=<span class="local-variable">$head</span>;
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">page</span><span class="delimiter">'</span></span>]=<span class="local-variable">$body</span>;
- <span class="keyword">if</span>(<span class="predefined">isset</span>(<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">download_content_length</span><span class="delimiter">'</span></span>]) <span class="keyword">and</span> <span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">download_content_length</span><span class="delimiter">'</span></span>]><span class="integer">0</span>) {
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">length</span><span class="delimiter">'</span></span>]=<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">download_content_length</span><span class="delimiter">'</span></span>];
- }
- <span class="keyword">elseif</span>(<span class="predefined">isset</span>(<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">size_download</span><span class="delimiter">'</span></span>]) <span class="keyword">and</span> <span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">size_download</span><span class="delimiter">'</span></span>]><span class="integer">0</span>) {
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">length</span><span class="delimiter">'</span></span>]=<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">size_download</span><span class="delimiter">'</span></span>];
- }
- <span class="keyword">if</span>(<span class="predefined">isset</span>(<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">url</span><span class="delimiter">'</span></span>]) <span class="keyword">and</span> <span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">url</span><span class="delimiter">'</span></span>]!=<span class="local-variable">$url</span>) <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">location</span><span class="delimiter">'</span></span>]=<span class="local-variable">$info</span>[<span class="string"><span class="delimiter">'</span><span class="content">url</span><span class="delimiter">'</span></span>];
- <span class="keyword">if</span>(<span class="local-variable">$head</span>) { <span class="comment">// analyse de head pour info</span>
- <span class="local-variable">$trouve</span>=<span class="predefined">array</span>(<span class="string"><span class="delimiter">'</span><span class="content">Content-Length</span><span class="delimiter">'</span></span>=><span class="string"><span class="delimiter">'</span><span class="content">length</span><span class="delimiter">'</span></span>, <span class="comment">// texte avant : => cle du $result</span>
- <span class="string"><span class="delimiter">'</span><span class="content">Last-Modified</span><span class="delimiter">'</span></span>=><span class="string"><span class="delimiter">'</span><span class="content">last_modified</span><span class="delimiter">'</span></span>,
- <span class="string"><span class="delimiter">'</span><span class="content">Accept-Ranges</span><span class="delimiter">'</span></span>=><span class="string"><span class="delimiter">'</span><span class="content">range</span><span class="delimiter">'</span></span>);
- <span class="local-variable">$liste</span>=<span class="predefined">preg_split</span>(<span class="string"><span class="delimiter">'</span><span class="content">/[</span><span class="content">\r</span><span class="content">\n</span><span class="content">]+/</span><span class="delimiter">'</span></span>,<span class="local-variable">$head</span>,-<span class="integer">1</span>,<span class="constant">PREG_SPLIT_NO_EMPTY</span>);
- <span class="keyword">if</span>(<span class="predefined">is_array</span>(<span class="local-variable">$liste</span>)) {
- <span class="local-variable">$liste</span>=<span class="predefined">array_reverse</span>(<span class="local-variable">$liste</span>);
- <span class="keyword">foreach</span>(<span class="local-variable">$liste</span> <span class="keyword">as</span> <span class="local-variable">$l</span>) { <span class="comment">// premier trouver donc dernier dans le head</span>
- <span class="local-variable">$lt</span>=<span class="predefined">trim</span>(<span class="local-variable">$l</span>);
- <span class="keyword">if</span>(<span class="predefined">strlen</span>(<span class="local-variable">$lt</span>)><span class="integer">5</span> <span class="keyword">and</span> <span class="predefined">substr</span>(<span class="local-variable">$lt</span>,<span class="integer">0</span>,<span class="integer">4</span>)==<span class="string"><span class="delimiter">'</span><span class="content">HTTP</span><span class="delimiter">'</span></span>) <span class="keyword">break</span>; <span class="comment">// on arrete sur derniere entete HTTP ?</span>
- <span class="local-variable">$item</span>=<span class="predefined">explode</span>(<span class="string"><span class="delimiter">'</span><span class="content">:</span><span class="delimiter">'</span></span>,<span class="local-variable">$lt</span>,<span class="integer">2</span>);
- <span class="keyword">if</span>(<span class="predefined">isset</span>(<span class="local-variable">$item</span>[<span class="integer">0</span>]) <span class="keyword">and</span> <span class="predefined">isset</span>(<span class="local-variable">$trouve</span>[<span class="local-variable">$item</span>[<span class="integer">0</span>]])) {
- <span class="local-variable">$result</span>[<span class="local-variable">$trouve</span>[<span class="local-variable">$item</span>[<span class="integer">0</span>]]]=<span class="predefined">trim</span>(<span class="local-variable">$item</span>[<span class="integer">1</span>]);
- <span class="predefined">unset</span>(<span class="local-variable">$trouve</span>[<span class="local-variable">$item</span>[<span class="integer">0</span>]]); <span class="comment">// plus d'autre a chercher</span>
- }
- }
- }
- <span class="comment">// cas particuliers</span>
- <span class="keyword">if</span>(<span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">last_modified</span><span class="delimiter">'</span></span>]) {
- <span class="local-variable">$val</span>=<span class="predefined">strtotime</span>(<span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">last_modified</span><span class="delimiter">'</span></span>]);
- <span class="keyword">if</span>(<span class="local-variable">$val</span>===<span class="predefined-constant">false</span>) {
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">last_modified</span><span class="delimiter">'</span></span>]=<span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>;
- }
- <span class="keyword">else</span> {
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">last_modified</span><span class="delimiter">'</span></span>]=<span class="local-variable">$val</span>;
- }
- }
- }
- <span class="comment">// Faut-il l'importer dans notre charset local ?</span>
- <span class="keyword">if</span> (<span class="local-variable">$options</span>[<span class="string"><span class="delimiter">'</span><span class="content">transcoder</span><span class="delimiter">'</span></span>]) {
- include_spip(<span class="string"><span class="delimiter">'</span><span class="content">inc/charsets</span><span class="delimiter">'</span></span>);
- <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">page</span><span class="delimiter">'</span></span>] = transcoder_page(<span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">page</span><span class="delimiter">'</span></span>], <span class="local-variable">$result</span>[<span class="string"><span class="delimiter">'</span><span class="content">headers</span><span class="delimiter">'</span></span>]);
- }
- <span class="keyword">return</span> <span class="local-variable">$result</span>;
- }
- </span>
Normalement, ce code doit être compatible avec l’ancienne fonction, il donne en plus en sortie [’range’] qui permet de savoir si un partial content peut être délivré.
Il ne prend plus en compte les entrées [’refuser_gz’], [’version_http’] et [’boundary’] et l’entrée [’data’] doit être compatible avec celle de ’curl_setopt : CURLOPT_POSTFIELDS’.
Si des gens veulent la tester et l’améliorer : bienvenue.Petit nota : SPIP laisse le fichier créer dans cette fonction ([’file’]) dans le tmp sans le détruire (version de base idem) : accumulation !
-
Evolution #4171 (En cours) : Rendre le formulaire d’oubli du mot de passe plus conforme aux conven...
16 septembre 2018, par b bPeux-tu fournir ton patch au format diff stp ?
Reste aussi à valider ou améliorer le nouvel item de langue.