Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F3314048
rcube_json_output.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
rcube_json_output.php
View Options
<?php
/*
+-----------------------------------------------------------------------+
| program/include/rcube_json_output.php |
| |
| This file is part of the RoundCube Webmail client |
| Copyright (C) 2008-2010, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
| Class to handle HTML page output using a skin template. |
| Extends rcube_html_page class from rcube_shared.inc |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
$Id$
*/
/**
* View class to produce JSON responses
*
* @package View
*/
class
rcube_json_output
{
private
$config
;
private
$charset
=
RCMAIL_CHARSET
;
private
$env
=
array
();
private
$texts
=
array
();
private
$commands
=
array
();
private
$callbacks
=
array
();
private
$message
=
null
;
public
$type
=
'js'
;
public
$ajax_call
=
true
;
/**
* Constructor
*/
public
function
__construct
(
$task
)
{
$this
->
config
=
rcmail
::
get_instance
()->
config
;
}
/**
* Set environment variable
*
* @param string Property name
* @param mixed Property value
*/
public
function
set_env
(
$name
,
$value
)
{
$this
->
env
[
$name
]
=
$value
;
}
/**
* Issue command to set page title
*
* @param string New page title
*/
public
function
set_pagetitle
(
$title
)
{
$name
=
$this
->
config
->
get
(
'product_name'
);
$this
->
command
(
'set_pagetitle'
,
empty
(
$name
)
?
$title
:
$name
.
' :: '
.
$title
);
}
/**
* @ignore
*/
function
set_charset
(
$charset
)
{
// ignore: $this->charset = $charset;
}
/**
* Get charset for output
*
* @return string Output charset
*/
function
get_charset
()
{
return
$this
->
charset
;
}
/**
* Register a template object handler
*
* @param string Object name
* @param string Function name to call
* @return void
*/
public
function
add_handler
(
$obj
,
$func
)
{
// ignore
}
/**
* Register a list of template object handlers
*
* @param array Hash array with object=>handler pairs
* @return void
*/
public
function
add_handlers
(
$arr
)
{
// ignore
}
/**
* Call a client method
*
* @param string Method to call
* @param ... Additional arguments
*/
public
function
command
()
{
$cmd
=
func_get_args
();
if
(
strpos
(
$cmd
[
0
],
'plugin.'
)
===
0
)
$this
->
callbacks
[]
=
$cmd
;
else
$this
->
commands
[]
=
$cmd
;
}
/**
* Add a localized label to the client environment
*/
public
function
add_label
()
{
$args
=
func_get_args
();
if
(
count
(
$args
)
==
1
&&
is_array
(
$args
[
0
]))
$args
=
$args
[
0
];
foreach
(
$args
as
$name
)
{
$this
->
texts
[
$name
]
=
rcube_label
(
$name
);
}
}
/**
* Invoke display_message command
*
* @param string Message to display
* @param string Message type [notice|confirm|error]
* @param array Key-value pairs to be replaced in localized text
* @param boolean Override last set message
* @uses self::command()
*/
public
function
show_message
(
$message
,
$type
=
'notice'
,
$vars
=
null
,
$override
=
true
)
{
if
(
$override
||
!
$this
->
message
)
{
$this
->
message
=
$message
;
$this
->
command
(
'display_message'
,
rcube_label
(
array
(
'name'
=>
$message
,
'vars'
=>
$vars
)),
$type
);
}
}
/**
* Delete all stored env variables and commands
*/
public
function
reset
()
{
$this
->
env
=
array
();
$this
->
texts
=
array
();
$this
->
commands
=
array
();
}
/**
* Redirect to a certain url
*
* @param mixed Either a string with the action or url parameters as key-value pairs
* @see rcmail::url()
*/
public
function
redirect
(
$p
=
array
(),
$delay
=
1
)
{
$location
=
rcmail
::
get_instance
()->
url
(
$p
);
$this
->
remote_response
(
"window.setTimeout(
\"
location.href='{$location}'
\"
, $delay);"
);
exit
;
}
/**
* Send an AJAX response to the client.
*/
public
function
send
()
{
$this
->
remote_response
();
exit
;
}
/**
* Send an AJAX response with executable JS code
*
* @param string Additional JS code
* @param boolean True if output buffer should be flushed
* @return void
* @deprecated
*/
public
function
remote_response
(
$add
=
''
)
{
static
$s_header_sent
=
false
;
if
(!
$s_header_sent
)
{
$s_header_sent
=
true
;
send_nocacheing_headers
();
header
(
'Content-Type: text/plain; charset='
.
$this
->
get_charset
());
}
// unset default env vars
unset
(
$this
->
env
[
'task'
],
$this
->
env
[
'action'
],
$this
->
env
[
'comm_path'
]);
$rcmail
=
rcmail
::
get_instance
();
$response
=
array
(
'action'
=>
$rcmail
->
action
,
'unlock'
=>
(
bool
)
$_REQUEST
[
'_unlock'
]);
if
(!
empty
(
$this
->
env
))
$response
[
'env'
]
=
$this
->
env
;
if
(!
empty
(
$this
->
texts
))
$response
[
'texts'
]
=
$this
->
texts
;
// send function calls
$response
[
'exec'
]
=
$this
->
get_js_commands
()
.
$add
;
if
(!
empty
(
$this
->
callbacks
))
$response
[
'callbacks'
]
=
$this
->
callbacks
;
echo
json_serialize
(
$response
);
}
/**
* Return executable javascript code for all registered commands
*
* @return string $out
*/
private
function
get_js_commands
()
{
$out
=
''
;
foreach
(
$this
->
commands
as
$i
=>
$args
)
{
$method
=
array_shift
(
$args
);
foreach
(
$args
as
$i
=>
$arg
)
{
$args
[
$i
]
=
json_serialize
(
$arg
);
}
$out
.=
sprintf
(
"this.%s(%s);
\n
"
,
preg_replace
(
'/^parent
\.
/'
,
''
,
$method
),
implode
(
','
,
$args
)
);
}
return
$out
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Thu, Apr 9, 2:49 PM (1 d, 22 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
501849
Default Alt Text
rcube_json_output.php (6 KB)
Attached To
Mode
R3 roundcubemail
Attached
Detach File
Event Timeline
Log In to Comment