mlpanels_panels_renderer_editor.class.php in Multilingual Panels 7
Class file to control the main Panels editor.
File
mlpanels_panels_renderer_editor.class.phpView source
<?php
/**
* @file
* Class file to control the main Panels editor.
*/
/**
* Editor panel class replacement.
*
* @see panels_renderer_editor()
*/
class mlpanels_panels_renderer_editor extends panels_renderer_editor {
var $commands = array();
var $admin = TRUE;
var $no_edit_links = FALSE;
/**
* Receive and store the display object to be rendered.
*
* This is a psuedo-constructor that should typically be called immediately
* after object construction.
*/
function init($plugin, &$display) {
drupal_add_css(drupal_get_path('module', 'mlpanels') . '/' . MLPANELS_RENDERER_EDITOR_CLASS . '.css');
drupal_add_js(drupal_get_path('module', 'mlpanels') . '/' . MLPANELS_RENDERER_EDITOR_CLASS . '.js');
// Pass settings.
drupal_add_js(array(
'mlpanels' => _mlpanels_settings(),
), 'setting');
return parent::init($plugin, $display);
}
/**
* AJAX entry point to add a new pane.
*/
function ajax_add_pane($region = NULL, $type_name = NULL, $subtype_name = NULL, $step = NULL) {
// Check if we should skip pane translation.
if (_mlpanels_pane_skip($type_name, $subtype_name)) {
// Pass to default renderer.
return parent::ajax_add_pane($region, $type_name, $subtype_name, $step);
}
// Show messages.
$settings = _mlpanels_settings();
if ($settings['show_messages'] && empty($step)) {
drupal_set_message(t('Please fill default pane settings,
you can translate them later if you want by editing pane settings.'));
}
// Return default method.
return parent::ajax_add_pane($region, $type_name, $subtype_name, $step);
}
/**
* AJAX entry point to edit a pane.
*/
function ajax_edit_pane($pid = NULL, $step = NULL) {
if (empty($this->cache->display->content[$pid])) {
ctools_modal_render(t('Error'), t('Invalid pane id.'));
}
$pane =& $this->cache->display->content[$pid];
// Check if we should skip pane translation.
if (_mlpanels_pane_skip($pane->type, $pane->subtype)) {
// Pass to default renderer.
return parent::ajax_edit_pane($pid, $step);
}
$content_type = ctools_get_content_type($pane->type);
$subtype = ctools_content_get_subtype($content_type, $pane->subtype);
$settings = _mlpanels_settings();
if (empty($step)) {
$messages[] = t('You can translate settings for different languages,
but you must set %renderer as display renderer in order to see result.', array(
'%renderer' => t('Multilingual Standard'),
));
}
if ($settings['show_types']) {
$messages[] = t('Pane type to disable %type', array(
'%type' => $pane->type . '::' . $pane->subtype,
));
}
// Get language.
$path = explode('/', $_GET['q']);
$tmp = explode('_', end($path));
if ($tmp[0] == 'mlpanels') {
$conf_lng = $tmp[1];
}
if (empty($conf_lng)) {
$conf_lng = LANGUAGE_NONE;
}
// Prepare language dependent config.
if (!empty($pane->configuration['mlpanels'])) {
$ml_config = $pane->configuration['mlpanels'];
$ml_config[LANGUAGE_NONE] = $pane->configuration;
unset($ml_config[LANGUAGE_NONE]['mlpanels']);
}
else {
$ml_config[LANGUAGE_NONE] = $pane->configuration;
}
if (!empty($ml_config[$conf_lng])) {
$configuration = $ml_config[$conf_lng];
}
else {
$messages[] = t('No configuration exists for this language yet, using default.');
$configuration = $ml_config[LANGUAGE_NONE];
}
// Safety check.
if (isset($configuration['mlpanels'])) {
unset($configuration['mlpanels']);
}
// Change finish button text.
$finish_text = t('Finish');
if ($conf_lng != LANGUAGE_NONE) {
if (_mlpanels_settings('keep_window')) {
$finish_text = t('Save Translation and Continue');
}
else {
$finish_text = t('Save Translation and Finish');
}
}
$form_state = array(
'display' => &$this->cache->display,
'contexts' => $this->cache->display->context,
'pane' => &$pane,
'display cache' => &$this->cache,
'ajax' => TRUE,
'modal' => TRUE,
'modal return' => TRUE,
'commands' => array(),
);
$form_info = array(
'path' => $this
->get_url('edit-pane', $pid, '%step', 'mlpanels_' . $conf_lng),
'show cancel' => TRUE,
'finish text' => $finish_text,
'next callback' => 'panels_ajax_edit_pane_next',
'finish callback' => 'panels_ajax_edit_pane_finish',
'cancel callback' => 'panels_ajax_edit_pane_cancel',
);
// This is used to get our form in form alter.
if ($conf_lng != LANGUAGE_NONE) {
$form_info['untranslate text'] = t('Remove Translation');
$form_info['untranslate hidden'] = empty($ml_config[$conf_lng]);
}
// Building form.
$output = ctools_content_form('edit', $form_info, $form_state, $content_type, $pane->subtype, $subtype, $configuration, $step);
// Add language links to the form.
$languages = array(
LANGUAGE_NONE => (object) array(
'name' => t('Default'),
'language' => LANGUAGE_NONE,
),
) + language_list();
foreach ($languages as $lng) {
$class = array(
'ctools-use-modal',
);
$class[] = $lng->language;
if (empty($ml_config[$lng->language])) {
$class[] = 'empty';
}
if ($conf_lng == $lng->language) {
$class[] = 'current';
}
$links[] = l($lng->name, $this
->get_url('edit-pane', $pid, $form_state['step'], 'mlpanels_' . $lng->language), array(
'attributes' => array(
'class' => $class,
),
'html' => TRUE,
));
}
$output['mlpanels'] = array(
'#markup' => theme('item_list', array(
'items' => $links,
'attributes' => array(
'class' => array(
'mlpanels_lnd_list',
),
),
)),
);
$output['mlpanels_messages'] = array(
'#markup' => '<div class="message-target"></div>',
);
// If $rc is FALSE, there was no actual form.
if ($output === FALSE || !empty($form_state['cancel'])) {
// Dismiss the modal.
$this->commands[] = ctools_modal_command_dismiss();
}
elseif (!empty($form_state['clicked_button']) && $form_state['clicked_button']['#wizard type'] == 'untranslate') {
// Unset surrent translation.
unset($ml_config[$conf_lng]);
// Update pane configuration.
$form_state['pane']->configuration = array(
'mlpanels' => $ml_config,
) + $ml_config[LANGUAGE_NONE];
// References get blown away with AJAX caching. This will fix that.
$this->cache->display->content[$pid] = $form_state['pane'];
panels_edit_cache_set($this->cache);
$this
->command_update_pane($pid);
if (_mlpanels_settings('keep_window') && $conf_lng != LANGUAGE_NONE) {
drupal_set_message(t('Translation removed.'));
$this->commands[] = ajax_command_remove('#modal-content .messages');
$this->commands[] = ajax_command_html('#modal-content .message-target', theme('status_messages'));
$this->commands[] = ajax_command_invoke('#modal-content input.pane-untranslate', 'hide');
$this->commands[] = ajax_command_invoke('.mlpanels_lnd_list a.' . $conf_lng, 'addClass', array(
'empty',
));
}
else {
$this->commands[] = ctools_modal_command_dismiss();
}
}
elseif (!empty($form_state['complete'])) {
// Save our settings for selected language.
$ml_config[$conf_lng] = $configuration;
// Update pane configuration.
$form_state['pane']->configuration = array(
'mlpanels' => $ml_config,
) + $ml_config[LANGUAGE_NONE];
// References get blown away with AJAX caching. This will fix that.
$this->cache->display->content[$pid] = $form_state['pane'];
panels_edit_cache_set($this->cache);
$this
->command_update_pane($pid);
if (_mlpanels_settings('keep_window') && $conf_lng != LANGUAGE_NONE) {
drupal_set_message(t('Translation updated.'));
$this->commands[] = ajax_command_remove('#modal-content .messages');
$this->commands[] = ajax_command_html('#modal-content .message-target', theme('status_messages'));
$this->commands[] = ajax_command_invoke('#modal-content input.pane-untranslate', 'show');
$this->commands[] = ajax_command_invoke('.mlpanels_lnd_list a.' . $conf_lng, 'removeClass', array(
'empty',
));
}
else {
$this->commands[] = ctools_modal_command_dismiss();
}
}
else {
// Show messages.
if ($settings['show_messages']) {
if (isset($messages)) {
foreach ($messages as $msg) {
drupal_set_message($msg);
}
}
}
// This overwrites any previous commands.
$this->commands = ctools_modal_form_render($form_state, $output);
array_unshift($this->commands, array(
'command' => 'mlpanels_ckefix',
));
}
}
}
Classes
Name | Description |
---|---|
mlpanels_panels_renderer_editor | Editor panel class replacement. |