Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
lib
unicaen
app
Commits
62662210
Commit
62662210
authored
Oct 26, 2012
by
Bertrand Gauthier
Browse files
Nouvelles aides de vue : Messenger et FlashMessenger
parent
4b804e51
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/UnicaenApp/View/Helper/FlashMessenger.php
0 → 100644
View file @
62662210
<?php
namespace
UnicaenApp\View\Helper
;
use
Zend\Mvc\Controller\PluginManager
;
/**
* Aide de vue affichant les messages positionnés en session par le plugin de
* contrôleur 'FlashMessenger'.
*
* 2 formats possibles pour chaque message, exemples :
* - <code>array('warning'=>"La demande 12 est introuvable!")</code>
* - <code>"Ceci est un message d'information."</code>,
* équivalent à <code>array('info'=>"Ceci est un message d'information.")</code>
*
* @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
*/
class
FlashMessenger
extends
Messenger
{
/**
* @var PluginManager
*/
protected
$pm
;
/**
* Constructeur.
*
* @param PluginManager $pm
*/
public
function
__construct
(
PluginManager
$pm
)
{
$this
->
pm
=
$pm
;
}
/**
* Point d'entrée.
*
* @return FlashMessenger fluent interface, returns self
*/
public
function
__invoke
()
{
/* @var $fm FlashMessenger */
$fm
=
$this
->
pm
->
get
(
'flashMessenger'
);
$messages
=
array
();
foreach
(
$fm
->
getMessages
()
as
$value
)
{
if
(
is_array
(
$value
))
{
$messages
+=
$value
;
}
else
{
$messages
[]
=
$value
;
}
}
$this
->
setMessages
(
$messages
);
return
$this
;
}
}
src/UnicaenApp/View/Helper/Messenger.php
0 → 100644
View file @
62662210
<?php
namespace
UnicaenApp\View\Helper
;
use
Exception
;
use
UnicaenApp\View\Helper\Messenger
;
use
Zend\View\Helper\AbstractHelper
;
/**
* Aide de vue permettant de stocker une liste de messages d'information de différentes sévérités
* et de générer le code HTML pour les afficher (affublés d'un icône correspondant à leur sévérité).
*
* @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
*/
class
Messenger
extends
AbstractHelper
{
const
INFO
=
'info'
;
const
OK
=
'ok'
;
const
WARNING
=
'warning'
;
const
ERROR
=
'error'
;
protected
$uiClasses
=
array
(
// CSS class, icon name
self
::
INFO
=>
array
(
'info'
,
'info-sign'
),
self
::
OK
=>
array
(
'success'
,
'ok-sign'
),
self
::
WARNING
=>
array
(
'warning'
,
'warning-sign'
),
self
::
ERROR
=>
array
(
'error'
,
'exclamation-sign'
),
);
/**
* Messages courants
* @var array
*/
protected
$messages
=
array
();
/**
* Seule sévérité éventuelle à prendre en compte
* @var string
*/
protected
$severity
=
null
;
/**
* Helper entry point
*
* @param string $severity Ex: Messenger::INFO
* @return Messenger fluent interface, returns self
*/
public
function
__invoke
(
$severity
=
null
)
{
if
(
$severity
)
{
$this
->
severity
=
$severity
;
}
return
$this
;
}
/**
* Retourne le code HTML généré par cette aide de vue.
*
* @return string
*/
public
function
__toString
()
{
try
{
return
$this
->
render
();
}
catch
(
Exception
$e
)
{
$msg
=
get_class
(
$e
)
.
': '
.
$e
->
getMessage
();
trigger_error
(
$msg
,
E_USER_ERROR
);
return
''
;
}
}
/**
* Génère le code HTML
*
* @return string
*/
public
function
render
()
{
if
(
!
$this
->
hasMessages
())
{
return
''
;
}
$messages
=
(
array
)
$this
->
getMessages
();
$out
=
''
;
if
(
$this
->
severity
&&
isset
(
$messages
[
$this
->
severity
]))
{
// on ne conserve que la sévérité éventuellement demandée
$messages
=
array
(
$this
->
severity
=>
$messages
[
$this
->
severity
]);
}
foreach
(
$messages
as
$key
=>
$message
)
{
if
(
is_array
(
$message
))
{
if
(
$this
->
severity
&&
isset
(
$message
[
$this
->
severity
]))
{
// on ne conserve que la sévérité éventuellement demandée
$message
=
array
(
$this
->
severity
=>
$message
[
$this
->
severity
]);
}
foreach
(
$message
as
$s
=>
$m
)
{
$out
.
=
sprintf
(
$this
->
getTemplate
(
is_string
(
$key
)
?
$key
:
(
is_string
(
$s
)
?
$s
:
'info'
)),
implode
(
'<br />'
,
(
array
)
$m
)
);
}
}
else
{
$s
=
is_string
(
$key
)
?
$key
:
(
$this
->
severity
?
$this
->
severity
:
'info'
);
if
(
$this
->
severity
&&
$this
->
severity
==
$s
)
$out
.
=
sprintf
(
$this
->
getTemplate
(
$s
),
$message
)
.
'<br />'
;
}
}
return
$out
;
}
/**
* Spécifie les messages courants (remplaçant les messages existants).
*
* @param string|array $messages
* @return Messenger
*/
public
function
setMessages
(
$messages
)
{
$this
->
messages
=
array
();
foreach
((
array
)
$messages
as
$severity
=>
$message
)
{
if
(
is_numeric
(
$severity
))
{
$severity
=
'info'
;
}
foreach
((
array
)
$message
as
$m
)
{
$this
->
messages
[
$severity
][]
=
$m
;
}
}
return
$this
;
}
/**
* Spécifie l'unique message courant.
*
* @param string $message Message
* @param string $severity Ex: Messenger::INFO
* @return Messenger
*/
public
function
setMessage
(
$message
,
$severity
=
self
::
INFO
)
{
return
$this
->
setMessages
(
array
(
$severity
=>
$message
));
}
/**
* Indique si cette aide de vue contient des messages actuellement.
*
* @param string $severity Seule sévérité éventuelle à prendre en compte, ex: Messenger::INFO
* @return bool
*/
public
function
hasMessages
(
$severity
=
null
)
{
return
(
boolean
)
$this
->
getMessages
(
$severity
);
}
/**
* Retourne les messages courants.
*
* @param string $severity Seule sévérité éventuelle à prendre en compte, ex: Messenger::INFO
* @return array
*/
public
function
getMessages
(
$severity
=
null
)
{
if
(
$severity
&&
array_key_exists
(
$severity
,
$this
->
messages
))
{
return
$this
->
messages
[
$severity
];
}
return
$this
->
messages
;
}
/**
* Ajoute un message.
*
* @param string $message Message
* @param string $severity Sévérité, ex: Messenger::INFO
* @return Messenger
*/
public
function
addMessage
(
$message
,
$severity
=
self
::
INFO
)
{
$this
->
messages
[
$severity
][]
=
$message
;
return
$this
;
}
/**
* Supprime tous les messages courants.
*
* @param string $severity Seule sévérité éventuelle à prendre en compte, ex: Messenger::INFO
* @return Messenger
*/
public
function
clearMessages
(
$severity
=
null
)
{
if
(
$severity
&&
array_key_exists
(
$severity
,
$this
->
getMessages
()))
{
$this
->
messages
[
$severity
]
=
array
();
}
else
{
$this
->
messages
=
array
();
}
return
$this
;
}
/**
* Retourne le motif utilisé pour générer le conteneur des messages à afficher.
*
* @param string $severity Ex: Messenger::INFO
* @param string $divId Dom id éventuel à utiliser pour la div englobante
* @param string $innerContainerTemplate Template du container éventuel
* contenant le message.
* @return string
*/
public
function
getTemplate
(
$severity
,
$divId
=
null
,
$innerContainerTemplate
=
'%s'
)
{
if
(
!
isset
(
$this
->
uiClasses
[
$severity
]))
{
throw
new
Unicaen_Exception
(
"Sévérité inconnue: "
.
$severity
);
}
$divId
=
$divId
?
sprintf
(
'id="%s"'
,
$divId
)
:
''
;
$template
=
<<<EOT
<p class="messenger {$this->uiClasses[$severity][0]} text-{$this->uiClasses[$severity][0]}" {$divId}>
<i class="icon-{$this->uiClasses[$severity][1]}"></i>
$innerContainerTemplate
</p>
EOT;
return
$template
.
PHP_EOL
;
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment