Compare commits

...
8 Commits
Author SHA1 Message Date
bachy 900155d078 Merge branch '7.x' of ssh://ssh.g-u-i.net/module-tode into 7.x 2012-10-11 18:25:43 +02:00
bachy aa8698232d field formatter "Tode" for term_reference
Signed-off-by: bachy <git@g-u-i.net>
2012-10-11 18:23:30 +02:00
bachy c952bd330f redirect node to term alpha
Signed-off-by: bachy <git@g-u-i.net>
2012-09-26 16:36:56 +02:00
bachy 35a5eb3a60 bug fixing tode_url_outbound_alter
Signed-off-by: bachy <git@g-u-i.net>
2012-05-22 22:40:31 +02:00
bachy 7ce8d94ed9 php notice fixing
Signed-off-by: bachy <git@g-u-i.net>
2012-05-21 17:46:20 +02:00
bachy 93b353922e widget settings défaut values fixe
Signed-off-by: bachy <git@g-u-i.net>
2012-05-09 08:13:15 +02:00
bachy 4eda04b2f0 improvement
Signed-off-by: bachy <git@g-u-i.net>
2012-05-06 22:50:02 +02:00
bachy 4a958da4df parent bug on node update fixed
parent selection used to works only on node creation, now works on node creation and update

add automatic node titles snippet fro term translation

Signed-off-by: bachy <git@g-u-i.net>
2012-04-16 23:07:27 +02:00
+280 -66
View File
@@ -8,6 +8,12 @@
* you can set an auto title from this field, The required,
* number of value at 1 and term_node synch of global field are required
*
* <?php
* // automatic node titles php snippet for translation
* $items = field_get_items('node', $node, 'field_tode_program');
* return t($items[0]['name']);
* ?>
*
*
*/
@@ -36,6 +42,9 @@ function tode_theme() {
'tode' => array(
'arguments' => array('element' => NULL),
),
'tode_node_formatter' => array(
'variables' => array('item' => NULL, 'viewmode' => 'full', 'nodes'=>NULL),
),
);
}
@@ -65,6 +74,8 @@ function tode_field_widget_info() {
'show_term_form'=> -1,
'choose_term_parent'=> -1,
'maxlength'=> 255,
'redirect_term_to_node' => -1,
'show_create_tode' => -1,
),
),
);
@@ -112,6 +123,12 @@ function tode_field_widget_settings_form($field, $instance){
'#title' => t('Rewrite all term link to theire tode node ?'),
'#default_value' => $settings['redirect_term_to_node'],
);
$form['redirect_node_to_term'] = array(
'#type' => 'checkbox',
'#title' => t('Rewrite all node link to theire term node ?'),
'#default_value' => $settings['redirect_node_to_term'],
);
$form['show_create_tode'] = array(
'#type' => 'checkbox',
@@ -131,6 +148,8 @@ function _tode_widget_settings_maxlength_validate($element, &$form_state) {
if (!is_numeric($value) || intval($value) != $value || $value <= 0) {
form_error($element, t('"Maximum length" must be a positive integer.'));
}
# TODO checke that node to term and term to node can't be chexked together
}
/**
@@ -212,7 +231,7 @@ function tode_field_widget_form(&$form, &$form_state, $field, $instance, $langco
$form['tode_vid'] = array('#type' => 'hidden', '#value' => $vocabulary->vid,'#delta' => $element['#delta'],);
$form['tode_parent_term'] = array(
'#title' => 'Parent ' . $vocabulary->name . ' (optional)',
'#title' => 'Parent ' . $vocabulary->name,
'#type' => 'textfield',
'#default_value' => isset($term_parent) ? $term_parent->name : '',
'#autocomplete_path' => 'taxonomy/autocomplete' . '/' . $field['field_name'],
@@ -455,32 +474,43 @@ function tode_node_submit($node, $form, &$form_state) {
// dsm($tode_field_term_value, '$tode_field_term_value');
if($tode_field_term_value){
// dsm($form_state['values'][$prefix], '$form_state["values"][$prefix]');
$values = _tode_prefix_form($form_state['values'][$prefix], $prefix.'_', FALSE);
// dsm($values, 'values');
if(!module_exists('i18n_taxonomy') || $language == 'und' || $language == $default_language){
// define the form_state for term_form submit
$new_term_form_state = array(
'build_info'=>array(
'args'=>array(0=>(object)$tode_field_term_value),
),
"values"=>array(
'name'=> $tode_field_term_value['name'], // replace the original (hidden) term name value by the typed in the the entity field
'op'=> t('Save'),
)
);
// add new values to form_state
$new_term_form_state['values'] += $values;
// dsm($new_term_form_state, 'form_state');
drupal_form_submit('taxonomy_form_term', $new_term_form_state);
}else{
if(module_exists('i18n_taxonomy') && $language != 'und' && $language != $default_language){
$context= array('term',$values['tid'],'name');
i18n_string_textgroup('taxonomy')->update_translation($context, $language, $tode_field_term_value['name']);
$tode_field_term_value['name'] = $values['name'];
}
$parent_tid = $tode_field_term_value['parent'];
$values['parent'] = array($parent_tid => $parent_tid);
// if(!module_exists('i18n_taxonomy') || $language == 'und' || $language == $default_language){
// define the form_state for term_form submit
$new_term_form_state = array(
'build_info'=>array(
'args'=>array(0=>(object)$tode_field_term_value),
),
"values"=>array(
'name'=> $tode_field_term_value['name'], // replace the original (hidden) term name value by the typed in the the entity field
'op'=> t('Save'),
)
);
// add new values to form_state
$new_term_form_state['values'] += $values;
// dsm($new_term_form_state, 'form_state');
drupal_form_submit('taxonomy_form_term', $new_term_form_state);
// }else{
}
@@ -497,7 +527,7 @@ function tode_node_presave($node) {
// dsm('- - - tode_node_presave');
// dsm($node, 'node');
if($node->nid)
if(isset($node->nid))
return;
$tode_fields = _tode_get_node_tode_fields_def($node);
@@ -510,6 +540,10 @@ function tode_node_presave($node) {
// purpose of that is to directly atribute the right language to the term
foreach ($tode_fields as $field_name => $field){
$tode_field = $node->$field_name;
if(!isset($tode_field[$node->language][0]))
continue;
$tode_field_term = $tode_field[$node->language][0]; // on node creation field language is always to und (sure ?)
// // test the language, if not default language create the term name translation
@@ -740,18 +774,23 @@ function BAD_ONE_tode_entity_add_form($js = FALSE, $bundle, $entity) {
/**
* Implements hook_field_widget_form_alter().
*
* add create entity bundle front of term reference field with tode voc
*/
function tode_field_widget_form_alter(&$element, &$form_state, $context) {
function DESACTIVATED_tode_field_widget_form_alter(&$element, &$form_state, $context) {
$field = $context['field'];
$instance = $context['instance'];
if($field['type'] == 'taxonomy_term_reference' && $instance['widget']['type'] == 'taxonomy_autocomplete'){
// dsm('- - - - - tode_field_widget_form_alter');
// dsm($element, '$element');
// dsm($form_state, '$form_state');
// dsm($context, '$context');
if($field['type'] == 'taxonomy_term_reference' && ($instance['widget']['type'] == 'taxonomy_autocomplete' || $instance['widget']['type'] == 'autocomplete_deluxe_taxonomy')){
// dsm('- - - - - tode_field_widget_form_alter');
// dsm($element, '$element');
// dsm($form_state, '$form_state');
// dsm($context, '$context');
// dsm($instance['widget']['type'], '$instance[widget][type]');
foreach ($field['settings']['allowed_values'] as $key => $value) {
if($tode = _tode_get_voc_tode_fields_def($value['vocabulary'])){
if($tode = _tode_get_voc_tode_field_def($value['vocabulary'])){
ctools_include('ajax');
ctools_include('modal');
@@ -812,6 +851,7 @@ function tode_field_widget_form_alter(&$element, &$form_state, $context) {
$element['#suffix'] .= '</div></div>';
}
// dsm($element, '$element');
}
}
@@ -832,10 +872,9 @@ function tode_field_widget_form_alter(&$element, &$form_state, $context) {
*
*/
function tode_form_alter(&$form, $form_state, $form_id){
// dsm($form_id, 'tode form_alter form_id');
/*
TODO block the deletion if tode term has children !! because this will delete them to …
*/
// dsm($form_id, 'tode form_alter form_id');
// TODO block the deletion if tode term has children !! because this will delete them to …
if($form_id == 'test_node_form'){
// dsm($form_state);
}
@@ -945,44 +984,197 @@ function tode_delete_submit($form, &$form_state){
* Implements hook_url_outbound_alter().
*/
function tode_url_outbound_alter(&$path, &$options, $original_path) {
// dsm('tode_url_outbound_alter');
# terms url
if(isset($options['entity_type']) && $options['entity_type'] == 'taxonomy_term'){
// dsm('- - - - tode_url_outbound_alter');
// dsm($path, '$path');
// dsm($options, '$options');
// dsm($original_path, '$original_path');
$term = false;
$node = false;
// if(isset($options['entity_type']) && $options['entity_type'] == 'taxonomy_term'){
// // dsm('- - - - tode_url_outbound_alter');
// // dsm($path, '$path');
// // dsm($options, '$options');
// // dsm($original_path, '$original_path');
//
// $term = $options['entity'];
//
// }else{
// $args = explode('/', $original_path);
// // dsm($args, 'args');
// if($args[0] == 'taxonomy' && $args[1] == 'term' && is_numeric($args[2]) ){
// $term = taxonomy_term_load($args[2]);
// }
//
// }
if (preg_match('/^node\/([0-9]*)$/', $path, $matches)) {
$node = node_load($matches[1]);
}
# WARNING works only because nodeandtermrelink_url_outbound_alter() is trigered before this (KADIST)
if (preg_match('/^taxonomy\/term\/([0-9]*)$/', $path, $matches)) {
$term = taxonomy_term_load($matches[1]);
}
$term = $options['entity'];
if($field = _tode_get_voc_tode_fields_def($term->vocabulary_machine_name)){
$sr = $field['storage']['details']['sql']['FIELD_LOAD_CURRENT'];
foreach ($sr as $table => $column) {
$query = db_select($table, 'ft');
$query->join('node', 'n', 'ft.entity_id = n.nid AND n.language = :language', array(':language' => $options['language']->language));
$query
->fields('ft')
->condition('ft.'.$column['tid'], $term->tid);
$result = $query->execute();
break;
}
foreach ($result as $node) {
$new_path = 'node/'.$node->entity_id;
if( $new_alias = drupal_get_path_alias($new_path, $options['language']->language) ){
$path = $new_alias;
$original_path = $new_path;
$options['alias'] = TRUE;
}else{
$path = $new_path;
if($node){
// dsm($node, 'node');
if($fields = _tode_get_node_tode_fields_def($node)){
foreach ($fields as $field_name => $field) {
if (isset($field['widget']['settings']['redirect_node_to_term']) && $field['widget']['settings']['redirect_node_to_term']) {
dsm($field, '$field');
$items = field_get_items('node', $node, $field_name);
dsm($items, 'items');
$new_path = 'taxonomy/term/'.$items[0]['tid'];
if( $new_alias = drupal_get_path_alias($new_path) ){//, $options['language']->language
$path = $new_alias;
$original_path = $new_path;
$options['alias'] = TRUE;
}else{
$path = $new_path;
}
break;
}
break;
}
}
}
if($term){
// dsm($term, '$term : '.$term->name);
if($field = _tode_get_voc_tode_field_def($term->vocabulary_machine_name)){
// dsm($field, '$field');
// $field_settings = field_info_instance_settings($field->type);//field_info_widget_settings($field->field_name); //
// dsm($field_settings, '$field_settings');
# TODO add if widget setting; how to get the settings
if (isset($field['widget']['settings']['redirect_term_to_node']) && $field['widget']['settings']['redirect_term_to_node']) {
// dsm($field, '$field');
// dsm($options, '$options');
$sr = $field['field_info_field']['storage']['details']['sql']['FIELD_LOAD_CURRENT'];
foreach ($sr as $table => $column) {
$query = db_select($table, 'ft');
$query->join('node', 'n', 'ft.entity_id = n.nid AND n.language = :language OR n.language = :language', array(':language' => $options['language']->language, ':language' => 'und'));
$query
->fields('ft')
->condition('ft.'.$column['tid'], $term->tid);
$result = $query->execute();
break;
}
foreach ($result as $node) {
// dsm($node, '$node');
$new_path = 'node/'.$node->entity_id;
if( $new_alias = drupal_get_path_alias($new_path, $options['language']->language) ){
$path = $new_alias;
$original_path = $new_path;
$options['alias'] = TRUE;
}else{
$path = $new_path;
}
break;
}
}
}
}
}
/**
* Implements hook_field_formatter_info().
*/
function tode_field_formatter_info() {
return array(
'tode' => array(
'label' => t('tode (node of the term)'),
'field types' => array('taxonomy_term_reference'),
'settings'=>array('viewmode' => "full"),
),
);
}
/**
* Implements hook_field_formatter_settings_form().
*/
function tode_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
$element = array();
$display = $instance['display'][$view_mode];
$settings = $display['settings'];
$formatter = $display['type'];
if($formatter == 'tode'){
if($todefield = _tode_get_voc_tode_fields_def($field['settings']['allowed_values'][0]['vocabulary'])){
$entity_infos = entity_get_info();
foreach ($entity_infos['node']['view modes'] as $viewmode => $value) {
$viewmode_options[$viewmode] = $value['label'];
}
$element['viewmode'] = array(
'#type' => 'select',
'#title' => t('View mode'),
'#default_value' => $settings['viewmode'],
'#description' => t('select the view mode for the node'),
'#options' => $viewmode_options,
);
}else{
// TODO: tell that vocabulary has any tode field
}
}
return $element;
}
/**
* Implements hook_field_formatter_settings_summary().
*/
function tode_field_formatter_settings_summary($field, $instance, $view_mode) {
$display = $instance['display'][$view_mode];
if($display['type'] == 'tode'){
$settings = $display['settings'];
$summary = t('viewmode : %vm', array('%vm'=> isset($settings['viewmode']) ? $settings['viewmode'] : 'full') );
return $summary;
}
}
/**
* Implements hook_field_formatter_view().
*/
function tode_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
$settings = $display['settings'];
switch ($display['type']) {
case 'tode':
foreach ($items as $delta => $item) {
$term = taxonomy_term_load($item['tid']);
$entitys = tode_get_nids_from_term($term);
$nodes = array();
if(isset($entitys['node'])){
foreach ($entitys['node'] as $nid => $n) {
$node = node_load($nid);
$nodes[$nid] = $node;
}
$element[$delta] = array(
'#theme' => 'tode_node_formatter',
'#item' => $item,
'#viewmode' => $settings['viewmode'],
'#nodes'=> $nodes,
);
}
}
break;
}
return $element;
}
function theme_tode_node_formatter($vars){
// dsm($vars, 'theme_tode_node_formatter | vars');
print render(entity_view('node', $vars['nodes'], $vars['viewmode']));
}
/**
* HELPERS
*/
@@ -1091,22 +1283,44 @@ function _tode_get_node_tode_fields_def($node){
return $tode_fields;
}
function _tode_get_voc_tode_fields_def($voc_name){
function _tode_get_voc_tode_field_def($voc_name){
$type_fields = field_info_instances('node');
// dsm($type_fields, '$type_fields');
foreach ($type_fields as $nodetype => $fields)
foreach ($fields as $field_name => $field)
if($field['widget']['type'] == 'tode'
&& isset($field['widget']['settings']['redirect_term_to_node'])
&& $field['widget']['settings']['redirect_term_to_node']
){
if($field['widget']['type'] == 'tode'){
// dsm($field, '$field');
$fieldinfos = field_info_field($field_name);
// dsm($fieldinfos, '$fieldinfos');
$field['field_info_field'] = $fieldinfos;
if($voc_name == $fieldinfos['settings']['allowed_values'][0]['vocabulary'])
return $fieldinfos;
return $field;
}
return false;
}
function tode_get_nids_from_term($term, $language = false){
if($todefield = _tode_get_voc_tode_field_def($term->vocabulary_machine_name)){
// $fieldinfos = field_info_field($todefield->field_name);
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->fieldCondition($todefield['field_name'], 'tid', $term->tid);
if($language)
$query->propertyCondition('language', array('und', $language), 'IN');
$result = $query->execute();
if(count($result))
return $result;
}
return false;
}