Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
project
drupal
Commits
032fe0a6
Commit
032fe0a6
authored
Nov 02, 2009
by
webchick
Browse files
#539022
follow-up by David_Rothstein: Batch API should use the current theme to run the batches.
parent
4363c22b
Changes
5
Hide whitespace changes
Inline
Side-by-side
includes/batch.inc
View file @
032fe0a6
...
...
@@ -16,6 +16,26 @@
* @see batch_get()
*/
/**
* Loads a batch from the database.
*
* @param $id
* The ID of the batch to load. When a progressive batch is being processed,
* the relevant ID is found in $_REQUEST['id'].
* @return
* An array representing the batch, or FALSE if no batch was found.
*/
function
batch_load
(
$id
)
{
$batch
=
db_query
(
"SELECT batch FROM
{
batch
}
WHERE bid = :bid AND token = :token"
,
array
(
':bid'
=>
$id
,
':token'
=>
drupal_get_token
(
$id
),
))
->
fetchField
();
if
(
$batch
)
{
return
unserialize
(
$batch
);
}
return
FALSE
;
}
/**
* State-based dispatcher for the batch processing page.
*
...
...
@@ -28,19 +48,15 @@ function _batch_page() {
return
FALSE
;
}
// Retrieve the current state of batch from db.
$batch
=
db_query
(
"SELECT batch FROM
{
batch
}
WHERE bid = :bid AND token = :token"
,
array
(
':bid'
=>
$_REQUEST
[
'id'
],
':token'
=>
drupal_get_token
(
$_REQUEST
[
'id'
]))
)
->
fetchField
();
// Retrieve the current state of the batch.
if
(
!
$batch
)
{
drupal_set_message
(
t
(
'No active batch.'
),
'error'
);
drupal_goto
();
$batch
=
batch_load
(
$_REQUEST
[
'id'
]);
if
(
!
$batch
)
{
drupal_set_message
(
t
(
'No active batch.'
),
'error'
);
drupal_goto
();
}
}
$batch
=
unserialize
(
$batch
);
// Register database update for the end of processing.
register_shutdown_function
(
'_batch_shutdown'
);
...
...
modules/simpletest/tests/batch.test
View file @
032fe0a6
...
...
@@ -6,6 +6,40 @@
* Unit tests for the Drupal Batch API.
*/
/**
* Tests for the batch API progress page theme.
*/
class
BatchAPIThemeTestCase
extends
DrupalWebTestCase
{
public
static
function
getInfo
()
{
return
array
(
'name'
=>
'Batch API progress page theme'
,
'description'
=>
'Tests that while a progressive batch is running, it correctly uses the theme of the page that started the batch.'
,
'group'
=>
'Batch API'
,
);
}
function
setUp
()
{
parent
::
setUp
(
'system_test'
);
// Make sure that the page which starts the batch (an administrative page)
// is using a different theme than would normally be used by the batch API.
variable_set
(
'theme_default'
,
'garland'
);
variable_set
(
'admin_theme'
,
'seven'
);
}
/**
* Tests that the batch API progress page uses the correct theme.
*/
function
testBatchAPIProgressPageTheme
()
{
// Visit an administrative page that runs a test batch, and check that the
// theme that was used during batch execution (which the batch callback
// function saved as a variable) matches the theme used on the
// administrative page.
$this
->
drupalGet
(
'admin/system-test/batch-theme'
);
$batch_theme_used
=
variable_get
(
'system_test_batch_theme_used'
,
'garland'
);
$this
->
assertEqual
(
$batch_theme_used
,
'seven'
,
t
(
'A progressive batch correctly uses the theme of the page that started the batch.'
));
}
}
/**
* Tests the function _batch_api_percentage() to make sure that the rounding
* works properly in all cases.
...
...
modules/simpletest/tests/system_test.module
View file @
032fe0a6
...
...
@@ -5,6 +5,11 @@
* Implement hook_menu().
*/
function
system_test_menu
()
{
$items
[
'admin/system-test/batch-theme'
]
=
array
(
'page callback'
=>
'system_test_batch_theme'
,
'access callback'
=>
TRUE
,
'type'
=>
MENU_CALLBACK
,
);
$items
[
'system-test/sleep/%'
]
=
array
(
'page callback'
=>
'system_test_sleep'
,
'page arguments'
=>
array
(
2
),
...
...
@@ -97,6 +102,34 @@ function system_test_menu() {
return
$items
;
}
/**
* Menu callback; start a new batch for testing the batch progress page theme.
*/
function
system_test_batch_theme
()
{
$batch
=
array
(
'operations'
=>
array
(
array
(
'system_test_batch_theme_callback'
,
array
()),
),
);
batch_set
(
$batch
);
// Force the batch to redirect to some page other than this one (to avoid an
// infinite loop).
batch_process
(
'node'
);
}
/**
* Batch callback function for testing the theme used by a batch.
*/
function
system_test_batch_theme_callback
()
{
// Because drupalGet() steps through the full progressive batch before
// returning control to the test function, we cannot test that the correct
// theme is being used on the batch processing page by viewing that page
// directly. Instead, we save the theme being used in a variable here, so
// that it can be loaded and inspected in the thread running the test.
global
$theme
;
variable_set
(
'system_test_batch_theme_used'
,
$theme
);
}
function
system_test_sleep
(
$seconds
)
{
sleep
(
$seconds
);
}
...
...
modules/system/system.admin.inc
View file @
032fe0a6
...
...
@@ -2054,10 +2054,6 @@ function system_batch_page() {
require_once
DRUPAL_ROOT
.
'/includes/batch.inc'
;
$output
=
_batch_page
();
// Use the same theme that the page that started the batch.
$batch
=
&
batch_get
();
$GLOBALS
[
'custom_theme'
]
=
$batch
[
'theme'
];
if
(
$output
===
FALSE
)
{
drupal_access_denied
();
}
...
...
modules/system/system.module
View file @
032fe0a6
...
...
@@ -993,12 +993,29 @@ function system_menu() {
$items
[
'batch'
]
=
array
(
'page callback'
=>
'system_batch_page'
,
'access callback'
=>
TRUE
,
'theme callback'
=>
'_system_batch_theme'
,
'type'
=>
MENU_CALLBACK
,
'file'
=>
'system.admin.inc'
,
);
return
$items
;
}
/**
* Theme callback for the default batch page.
*/
function
_system_batch_theme
()
{
// Retrieve the current state of the batch.
$batch
=
&
batch_get
();
if
(
!
$batch
&&
isset
(
$_REQUEST
[
'id'
]))
{
require_once
DRUPAL_ROOT
.
'/includes/batch.inc'
;
$batch
=
batch_load
(
$_REQUEST
[
'id'
]);
}
// Use the same theme as the page that started the batch.
if
(
!
empty
(
$batch
[
'theme'
]))
{
return
$batch
[
'theme'
];
}
}
/**
* Implementation of hook_library().
*/
...
...
Write
Preview
Markdown
is supported
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