123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- <?php
- function ctools_features_declare_functions($reset = FALSE) {
- if (function_exists('_ctools_features_get_info')) {
- foreach (_ctools_features_get_info(NULL, $reset) as $component => $info) {
- $code = '';
- if (!function_exists("{$info['module']}_features_api")) {
- $code .= 'function '. $info['module'] .'_features_api() { return ctools_component_features_api("'. $info['module'] .'"); }';
- }
-
- if (!function_exists("{$component}_features_api") && $info['module'] === 'ctools') {
- $code .= 'function '. $component .'_features_api() { return ctools_component_features_api("'. $component .'"); }';
- }
- if (!function_exists("{$component}_features_export")) {
- $code .= 'function '. $component .'_features_export($data, &$export, $module_name = "") { return ctools_component_features_export("'. $component .'", $data, $export, $module_name); }';
- }
- if (!function_exists("{$component}_features_export_options")) {
- $code .= 'function '. $component .'_features_export_options() { return ctools_component_features_export_options("'. $component .'"); }';
- }
- if (!function_exists("{$component}_features_export_render")) {
- $code .= 'function '. $component .'_features_export_render($module, $data, $export = NULL) { return ctools_component_features_export_render("'. $component .'", $module, $data, $export); }';
- }
- if (!function_exists("{$component}_features_revert")) {
- $code .= 'function '. $component .'_features_revert($module) { return ctools_component_features_revert("'. $component .'", $module); }';
- }
- eval($code);
- }
- }
- }
- function ctools_features_api() {
- return array(
- 'ctools' => array(
- 'name' => 'CTools export API',
- 'feature_source' => TRUE,
- 'duplicates' => FEATURES_DUPLICATES_ALLOWED,
-
-
-
- ),
- );
- }
- function ctools_features_export($data, &$export, $module_name = '') {
-
- $export['dependencies']['ctools'] = 'ctools';
-
-
-
- foreach ($data as $component) {
- if ($info = _ctools_features_get_info($component)) {
- $identifier = "{$info['module']}:{$info['api']}:{$info['current_version']}";
- $export['features']['ctools'][$identifier] = $identifier;
- }
- }
- return array();
- }
- function ctools_features_export_render($module, $data) {
- $component_exports = array();
- foreach ($data as $component) {
- $code = array();
- if ($info = _ctools_features_get_info($component)) {
-
-
- if ($info['module'] == 'views') {
- $code[] = ' return array("api" => "3.0");';
- }
- else {
- $code[] = ' if ($module == "'. $info['module'] .'" && $api == "'. $info['api'] .'") {';
- $code[] = ' return array("version" => "'. $info['current_version'] .'");';
- $code[] = ' }';
- }
- }
- ctools_include('plugins');
- $plugin_api_hook_name = ctools_plugin_api_get_hook($info['module'], $info['api']);
- if (key_exists($plugin_api_hook_name, $component_exports)) {
- $component_exports[$plugin_api_hook_name]['code'] .= "\n" . implode("\n", $code);
- }
- else {
- $component_exports[$plugin_api_hook_name] = array(
- 'code' => implode("\n", $code),
- 'args' => '$module = NULL, $api = NULL',
- );
- }
- }
- return $component_exports;
- }
- function ctools_component_features_api($module_name) {
- $api = array();
- foreach (_ctools_features_get_info() as $component => $info) {
-
- if ($info['module'] == $module_name || ($info['module'] === 'ctools' && $component == $module_name) ) {
- $api[$component] = $info;
- }
- }
- return $api;
- }
- function ctools_component_features_export_options($component) {
- $options = array();
- ctools_include('export');
- $schema = ctools_export_get_schema($component);
- if ($schema && $schema['export']['bulk export']) {
- if (!empty($schema['export']['list callback']) && function_exists($schema['export']['list callback'])) {
- $options = $schema['export']['list callback']();
- }
- else {
- $options = _ctools_features_export_default_list($component, $schema);
- }
- }
- asort($options);
- return $options;
- }
- function ctools_component_features_export($component, $data, &$export, $module_name = '') {
-
- $info = _ctools_features_get_info();
- if ($module_name !== $info[$component]['module']) {
- $export['dependencies'][$info[$component]['module']] = $info[$component]['module'];
- }
-
- foreach ($data as $object_name) {
- if ($object = _ctools_features_export_crud_load($component, $object_name)) {
-
-
- if (!empty($object->export_module) && $object->export_module !== $module_name) {
- $export['dependencies'][$object->export_module] = $object->export_module;
- if (isset($export['features'][$component][$object_name])) {
- unset($export['features'][$component][$object_name]);
- }
- }
-
- else {
- $export['features'][$component][$object_name] = $object_name;
- }
- }
- }
-
- return array('ctools' => array($component));
- }
- function ctools_component_features_export_render($component, $module, $data) {
-
- drupal_static_reset('panels_export_display');
- ctools_include('export');
- $schema = ctools_export_get_schema($component);
- if (function_exists($schema['export']['to hook code callback'])) {
- $export = $schema['export']['to hook code callback']($data, $module);
- $code = explode("{\n", $export);
- array_shift($code);
- $code = explode('}', implode($code, "{\n"));
- array_pop($code);
- $code = implode('}', $code);
- }
- else {
- $code = ' $export = array();'."\n\n";
- foreach ($data as $object_name) {
- if ($object = _ctools_features_export_crud_load($component, $object_name)) {
- $identifier = $schema['export']['identifier'];
- $code .= _ctools_features_export_crud_export($component, $object, ' ');
- $code .= " \$export[" . ctools_var_export($object_name) . "] = \${$identifier};\n\n";
- }
- }
- $code .= ' return $export;';
- }
- return array($schema['export']['default hook'] => $code);
- }
- function ctools_component_features_revert($component, $module) {
- if ($objects = features_get_default($component, $module)) {
- foreach ($objects as $name => $object) {
-
-
- $object = ctools_export_crud_load($component, $name);
- if ($object && ($object->export_type & EXPORT_IN_DATABASE)) {
- _ctools_features_export_crud_delete($component, $object);
- }
- }
- }
- }
- function _ctools_features_get_info($identifier = NULL, $reset = FALSE) {
- static $components;
- if (!isset($components) || $reset) {
- $components = array();
- $modules = features_get_info();
- ctools_include('export');
- drupal_static('ctools_export_get_schemas', NULL, $reset);
- foreach (ctools_export_get_schemas_by_module() as $module => $schemas) {
- foreach ($schemas as $table => $schema) {
- if ($schema['export']['bulk export']) {
-
- $api_module = isset($schema['export']['api']['owner']) ? $schema['export']['api']['owner'] : $module;
- $components[$table] = array(
- 'name' => isset($modules[$api_module]->info['name']) ? $modules[$api_module]->info['name'] : $api_module,
- 'default_hook' => $schema['export']['default hook'],
- 'default_file' => FEATURES_DEFAULTS_CUSTOM,
- 'module' => $api_module,
- 'feature_source' => TRUE,
- );
- if (isset($schema['export']['api'])) {
- $components[$table] += array(
- 'api' => $schema['export']['api']['api'],
- 'default_filename' => $schema['export']['api']['api'],
- 'current_version' => $schema['export']['api']['current_version'],
- );
- }
- }
- }
- }
- }
-
- if (isset($identifier)) {
-
- if (isset($components[$identifier])) {
- return $components[$identifier];
- }
-
-
- else if (substr_count($identifier, ':') === 2) {
- list($module, $api, $current_version) = explode(':', $identifier);
-
-
- foreach ($components as $table => $info) {
- if ($info['module'] == $module && $info['api'] == $api && $info['current_version'] >= $current_version) {
- return $info;
- }
- }
-
- return array('module' => $module, 'api' => $api, 'current_version' => $current_version);
- }
- return FALSE;
- }
- return $components;
- }
- function _ctools_features_export_crud_export($table, $object, $indent = '') {
- return ctools_api_version('1.7') ? ctools_export_crud_export($table, $object, $indent) : ctools_export_object($table, $object, $indent);
- }
- function _ctools_features_export_crud_load($table, $name) {
- if (ctools_api_version('1.7')) {
- return ctools_export_crud_load($table, $name);
- }
- elseif ($objects = ctools_export_load_object($table, 'names', array($name))) {
- return array_shift($objects);
- }
- return FALSE;
- }
- function _ctools_features_export_default_list($table, $schema) {
- if (ctools_api_version('1.7')) {
- return ctools_export_default_list($table, $schema);
- }
- elseif ($objects = ctools_export_load_object($table, 'all')) {
- return drupal_map_assoc(array_keys($objects));
- }
- return array();
- }
- function _ctools_features_export_crud_delete($table, $object) {
- if (ctools_api_version('1.7')) {
- ctools_export_crud_delete($table, $object);
- }
- else {
- $schema = ctools_export_get_schema($table);
- $export = $schema['export'];
- db_query("DELETE FROM {{$table}} WHERE {$export['key']} = '%s'", $object->{$export['key']});
- }
- }
- function page_manager_pages_features_export_render($module, $data) {
-
- drupal_static_reset('panels_export_display');
-
- page_manager_get_tasks();
- return ctools_component_features_export_render('page_manager_pages', $module, $data);
- }
- function page_manager_pages_features_revert($module) {
- if ($pages = features_get_default('page_manager_pages', $module)) {
- require_once drupal_get_path('module', 'ctools') . '/page_manager/plugins/tasks/page.inc';
- foreach ($pages as $page) {
- page_manager_page_delete($page);
- }
- }
- }
- function views_features_pipe_views_view_alter(&$pipe, $data, $export) {
-
- if (!function_exists('views_plugin_list')) {
- return;
- }
- $map = array_flip($data);
- foreach (views_plugin_list() as $plugin) {
- foreach ($plugin['views'] as $view_name) {
- if (isset($map[$view_name])) {
- $pipe['dependencies'][$plugin['module']] = $plugin['module'];
- }
- }
- }
- }
|