diff --git a/page_manager/page_manager.install b/page_manager/page_manager.install index ad2781c..b170ce7 100644 --- a/page_manager/page_manager.install +++ b/page_manager/page_manager.install @@ -23,6 +23,8 @@ function page_manager_schema_1() { 'identifier' => 'handler', 'bulk export' => TRUE, 'export callback' => 'page_manager_export_task_handler', + 'load callback' => 'page_manager_export_task_handler_load', + 'delete callback' => 'page_manager_delete_task_handler', 'primary key' => 'did', 'api' => array( 'owner' => 'page_manager', diff --git a/page_manager/page_manager.module b/page_manager/page_manager.module index 790c64e..be15658 100644 --- a/page_manager/page_manager.module +++ b/page_manager/page_manager.module @@ -697,6 +697,44 @@ function page_manager_export_task_handler($handler, $indent = '') { } /** + * Loads page manager handler for export. + * + * Callback to load page manager handler within ctools_export_crud_load(). + * + * @param string $name + * The name of the handler to load. + * + * @return + * Loaded page manager handler object, extended with external properties. + */ +function page_manager_export_task_handler_load($name) { + $table = 'page_manager_handlers'; + $schema = ctools_export_get_schema($table); + $export = $schema['export']; + + $result = ctools_export_load_object($table, 'names', array($name)); + if (isset($result[$name])) { + $handler = $result[$name]; + + // Weight is stored in additional table so that in-code task handlers + // don't need to get written to the database just because they have their + // weight changed. Therefore, handler could have no correspondent database + // entry. Revert will not be performed for this handler and the weight + // will not be reverted. To make possible revert of the weight field + // export_type must simulate that the handler is stored in the database. + $handler->export_type = EXPORT_IN_DATABASE; + + // Also, page manager handler weight should be overriden with correspondent + // weight from page_manager_weights table, if there is one. + $result = db_query('SELECT weight FROM {page_manager_weights} WHERE name = (:names)', array(':names' => $handler->name))->fetchField(); + if (is_numeric($result)) { + $handler->weight = $result; + } + return $handler; + } +} + +/** * Create a new task handler object. * * @param $plugin