@@ -8,30 +8,31 @@
* 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']);
* ?>
*
*
*/
/**
* Implementation of hook_menu ().
* Implements hook_views_api ().
*/
/*
function tode_menu() {
$items = array();
// $items['node/%node/tode/%term'] = array(
// 'title' => 'Taxonomy Term',
// 'type' => MENU_LOCAL_TASK,
// 'access callback' => 'tode_node_tab_access',
// 'access arguments' => array(2),
// 'page callback' => 'tode_tab_page',
// 'page arguments' => array(2),
// 'file' => 'tode.pages.inc',
// 'weight' => 2,
// );
return $items;
}
TODO hook_views_api().
*/
// function tode_views_api() {
// return array(
// 'api' => 3,
// 'path' => drupal_get_path('module', 'tode') . '/views',
// );
// }
/**
* Implementation of hook_theme().
@@ -41,6 +42,9 @@ function tode_theme() {
'tode' => array(
'arguments' => array('element' => NULL),
),
'tode_node_formatter' => array(
'variables' => array('item' => NULL, 'viewmode' => 'full', 'nodes'=>NULL),
),
);
}
@@ -70,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,8 +118,25 @@ function tode_field_widget_settings_form($field, $instance){
'#default_value' => $settings['choose_term_parent'],
);
$form['redirect_term_to_node'] = array(
'#type' => 'checkbox',
'#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',
'#title' => t('Show create "tode" on term fields about this tode\'s vocabulary ?'),
'#default_value' => $settings['show_create_tode'],
);
return $form;
}
function _tode_widget_settings_maxlength_validate($element, &$form_state) {
@@ -125,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
}
/**
@@ -169,7 +194,11 @@ function tode_field_widget_form(&$form, &$form_state, $field, $instance, $langco
// dsm($instance, '$instance');
$node = $form_state['node'];
if(isset( $form_state['node'])){
$language = $form_state['node']->language;
}else{
$language = null;
}
// dsm($node, '$node');
if(isset($items[$delta])){
@@ -202,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'],
@@ -223,7 +252,7 @@ function tode_field_widget_form(&$form, &$form_state, $field, $instance, $langco
// set element form item
$element += array(
'#type' => 'textfield',
'#default_value' => isset($term) ? ( if( module_exists('i18n_taxonomy')) ? i18n_taxonomy_term_name($term, $node-> language) : $term->name ) : '',
'#default_value' => isset($term) ? ( module_exists('i18n_taxonomy') ? i18n_taxonomy_term_name($term, $language) : $term->name ) : '',
'#size' => $instance['widget']['settings']['size'],
'#maxlength' => $instance['widget']['settings']['maxlength'],
'#element_validate' => array('tode_widget_validate'),
@@ -328,7 +357,7 @@ function tode_widget_validate($element, &$form_state){
// dsm($form_state, 'form_state');
// dsm($element, 'element');
$node = $form_state['node'];
// $node = $form_state['node'];
$value = array();
@@ -401,7 +430,7 @@ function tode_node_submit($node, $form, &$form_state) {
module_load_include('inc', 'taxonomy', 'taxonomy.admin');
// module_load_include('inc', 'i18n_string', 'i18n_string.pages');
//
$tode_fields = _tode_get_tode_fields_def($node);
$tode_fields = _tode_get_node_ tode_fields_def($node);
// dsm($tode_fields, '$tode_fields');
@@ -432,14 +461,39 @@ function tode_node_submit($node, $form, &$form_state) {
$init_language = $form[$field_name]['#language'];
// retreive the value of term field, to get the typed term name
$tode_field_term_value = $form_state['values'][$field_name][$init_language][0];
if(isset( $form_state['values'][$field_name][$init_language][0])){
$tode_field_term_value = $form_state['values'][$field_name][$init_language][0];
}else if(isset($form_state['values'][$field_name][$language][0])){
$tode_field_term_value = $form_state['values'][$field_name][$language][0];
}else if(isset($form_state['values'][$field_name]['und'][0])){
$tode_field_term_value = $form_state['values'][$field_name]['und'][0];
}else{
drupal_set_message('$form_state[values][$field_name][$language][0] is undefined', 'warning');
$tode_field_term_value = false;
}
// dsm($tode_field_term_value, '$tode_field_term_value');
$values = _tode_prefix_for m($form_state['values'][$prefix], $prefix.'_', FALSE );
// dsm($values, 'values' );
if(!module_exists('i18n_taxonomy') || $language == 'und' || $language == $default_language){
if($tode_field_term_value){
// ds m($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){
$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(
@@ -452,14 +506,12 @@ function tode_node_submit($node, $form, &$form_state) {
);
// 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{
$context= array('term',$values['tid'],'name');
i18n_string_textgroup('taxonomy')->update_translation($context, $language, $tode_field_term_value['name']);
// }else{
}
}
@@ -475,10 +527,10 @@ function tode_node_presave($node) {
// dsm('- - - tode_node_presave');
// dsm($node, 'node');
if($node->nid)
if(isset( $node->nid))
return;
$tode_fields = _tode_get_tode_fields_def($node);
$tode_fields = _tode_get_node_ tode_fields_def($node);
if(!count($tode_fields))
return;
@@ -488,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
@@ -501,10 +557,311 @@ function tode_node_presave($node) {
/*
TODO Sélectionner une traduction pour test tode fr
merge two terms when translation is made by selecting a node whiche already exists
TODO merge two terms when translation is made by selecting a node whiche already exists
*/
/*
TODO create a node when a term is created else where than the node which got the tode
*/
/**
* Implements hook_menu().
*/
function tode_menu() {
// dsm('tode_menu');
$items = array();
$items['tode/%ctools_js/add'] = array(
'title' => 'Tode modal add entity',
'page callback' => 'tode_entity_add',
'page arguments' => array(1,3,4,5),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}
function tode_entity_add($js = FALSE, $bundle, $entity, $title = 'Title'){
// Fall back if $js is not set.
if (!$js) {
return drupal_get_form('tode_entity_add_form', $bundle, $entity);
}
ctools_include('modal');
ctools_include('ajax');
$form_state = array(
'title' => t('Create '.$entity),
'ajax' => TRUE,
'build_info' => array('args' => array('0' => $bundle, '1' => $entity, '2' => $title)),
);
$output = ctools_modal_form_wrapper('tode_entity_add_form', $form_state);
if (!empty($form_state['executed'])) {
$commands = array();
$commands[] = ctools_modal_command_dismiss();
print ajax_render($commands);
exit;
}
else {
print ajax_render($output);
exit;
}
}
function tode_entity_add_form($form, $form_state, $bundle, $entity, $title) {
$form = array();
$form['title'] = array(
'#type' => 'textfield',
'#title' => t($title),
'#size' => 40,
'#maxlength' => 255,
);
$form['bundle'] = array(
'#type' => 'hidden',
'#value' => $bundle,
);
$form['entity'] = array(
'#type' => 'hidden',
'#value' => $entity,
);
$form['create'] = array(
'#type' => 'submit',
'#value' => t('Create'),
);
return $form;
}
function tode_entity_add_form_validate($form, &$form_state){
if(empty($form_state['values']['title'])){
form_set_error('title', 'Title field can\'t be empty!');
}
}
function tode_entity_add_form_submit($form, &$form_state){
global $user;
// dsm($form_state, '$form_state');
$values = $form_state['values'];
$bundle_fields = field_info_instances($values['bundle']);
// dsm($bundle_fields, '$bundle_fields');
$fields = $bundle_fields[$values['entity']];
// dsm($fields, '$fields');
foreach ($fields as $field_name => $field) {
if($field['widget']['type'] == 'tode'){
$tode_field = $field;
break;
}
}
# get vocabulary
$tode_field_infos = field_info_field($field['field_name']);
// dsm($tode_field_infos, '$tode_field_infos');
$voc_name = $tode_field_infos['settings']['allowed_values'][0]['vocabulary'];
$vocabulary = taxonomy_vocabulary_machine_name_load($voc_name);
// dsm($vocabulary, '$vocabulary');
# create the term
$term = new stdClass();
$term->name = $values['title'];
$term->vid = $vocabulary->vid; // ‘ 1’ is a vocabulary id you wish this term to assign to
// $term->field_custom_field_name[LANGUAGE_NONE][0]['value'] = ‘ Some value’ ; // OPTIONAL. If your term has a custom field attached it can added as simple as this
taxonomy_term_save($term); // Finally, save our term
// dsm($term, '$term');
# create the node
//http://www.group42.ca/creating_and_updating_nodes_programmatically_in_drupal_7
//http://timonweb.com/how-programmatically-create-nodes-comments-and-taxonomies-drupal-7
$node = new stdClass();
$node->type = $values['entity'];
node_object_prepare($node);
$tode_field_name = $tode_field['field_name'];
$node = (array)$node +array(
"title" => $values['title'],
"language" => LANGUAGE_NONE,
"uid" => $user->uid,
$tode_field_name => array( LANGUAGE_NONE => array(0 => array('tid' => $term->tid))),
);
// $node->$tode_field_name[$node->language]['tid'] = $term->tid;
// $node->$tode_field_name = array( $node->language => array('tid' => $term->tid));
// $tode_field_name = $tode_field['field_name'];
// $node = (object) array(
// "type" => $values['entity'],
// // node_object_prepare($node);
// "title" => $values['title'],
// "language" => LANGUAGE_NONE,
// "uid" => $user->uid,
// $tode_field_name => array( LANGUAGE_NONE=>array('tid' => $term->tid)),
// );
$node = (object)$node;
// dsm($node, '$node');
node_save($node);
// dsm($node, '$node');
# tag the node with the term
# set the tode field to the term tid
}
function BAD_ONE_tode_entity_add_form($js = FALSE, $bundle, $entity) {
// dsm('- - - - tode_entity_add_form');
// dsm($bundle, '$bundle');
// dsm($entity, '$entity');
// error_log($js);
// error_log($bundle);
// error_log($entity);
//
global $user;
//module_load_include('inc', 'node', 'node.pages');
ctools_include('node.pages', 'node', '');
$node = (object) array(
'uid' => $user->uid,
'name' => (isset($user->name) ? $user->name : ''),
'type' => $entity,
'language' => LANGUAGE_NONE
);
$form_id = $entity.'_node_form';
if (!$js) {
return drupal_get_form($form_id, $node);
}
ctools_include('modal');
ctools_include('ajax');
$form_state = array(
'title' => t('Add '.$entity),
'ajax' => TRUE,
);
$form_state['build_info']['args'] = array($node);
$output = ctools_modal_form_wrapper($entity.'_node_form', $form_state);
if (!empty($form_state['executed'])) {
$output = array();
$output[] = ctools_modal_command_display( t('Node created'), '<div class="modal-message">'.$entity.' creation successful.</div>'); /** Add success message*/
};
print ajax_render($output);
exit;
}
/**
* Implements hook_field_widget_form_alter().
*
* add create entity bundle front of term reference field with tode voc
*/
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' || $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_field_def($value['vocabulary'])){
ctools_include('ajax');
ctools_include('modal');
ctools_modal_add_js();
// ctools_add_css('tode', 'tode');
// drupal_add_css(drupal_get_path('module', 'tode') . "tode.css");
// dsm($tode, '$tode');
$type_fields = field_info_instances('node');
if(!isset($element['#attributes']["class"]))
$element['#attributes']["class"] = array();
$element['#attributes']["class"][] = "tode-add-modal";
$element['#suffix'] = '';
foreach ($tode['bundles'] as $bundle => $entities) {
foreach ($entities as $entity) {
$tode_instance = $type_fields[$entity][$tode['field_name']];
$btn = ctools_modal_text_button(t('create a new %s', array('%s'=>$entity)), 'tode/nojs/add/'.$bundle.'/'.$entity.'/'.$tode_instance['label'], t('alt'), "button ctools-modal-tode-add-modal") . "\n"; // modal-popup-small
// $btn .= ctools_modal_text_button(t('create new test'), 'tode/nojs/add/node/test', t('alt'));
// dsm($btn);
if($element['#suffix'] == '')
$element['#suffix'] = '<div class="tode-add-modal-links">';
$element['#suffix'] .= $btn;
}
}
}
}
if( isset($element['#suffix']) && $element['#suffix'] != '' ){
$throbber = theme('image', array('path' => ctools_image_path('loading_animation.gif', 'modal_forms'), 'alt' => t('Loading...'), 'title' => t('Loading')));
$js_settings = array(
'tode-add-modal' => array(
'modalSize' => array(
'type' => 'fixed',
'width' => 500,
'height' => 200,
),
'modalOptions' => array(
'opacity' => 0.4,
'background' => '#000',
),
'animation' => 'fadeIn',
// 'modalTheme' => 'ModalFormsPopup',
'throbber' => $throbber,
'closeText' => t('Close'),
),
);
drupal_add_js($js_settings, 'setting');
$element['#prefix'] = '<div class="tode-add-modal-wrapper">';
$element['#suffix'] .= '</div></div>';
}
// dsm($element, '$element');
}
}
/**
* Implements hook_taxonomy_term_insert().
*/
// function tode_taxonomy_term_insert($term) {
// dsm($term, '$term');
// }
@@ -515,11 +872,12 @@ function tode_node_presave($node) {
*
*/
function tode_form_alter(&$form, $form_state, $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);
}
if (stripos($form_id, 'node_delete_confirm') !== false){
// dsm($form_id, 'tode form_alter form_id');
_tode_node_delete_form_alter($form, $form_state);
@@ -542,7 +900,7 @@ function _tode_node_delete_form_alter(&$form, $form_state){
// dsm($node, '$node');
#get the fields defenition of node type
$tode_fields = _tode_get_tode_fields_def($node);
$tode_fields = _tode_get_node_ tode_fields_def($node);
// dsm($tode_fields);
if(count($tode_fields) == 0)
@@ -567,7 +925,7 @@ function _tode_nodes_delete_form_alter(&$form, $form_state){
$terms = array('names'=>array(), 'tids'=>array());
foreach ($nodes as $node) {
#get the fields definition of node type
$tode_fields = _tode_get_tode_fields_def($node);
$tode_fields = _tode_get_node_ tode_fields_def($node);
//dsm($tode_fields);
if(count($tode_fields) == 0)
@@ -585,7 +943,7 @@ function _tode_populate_terms_node_delete(&$terms, $tode_field){
foreach ($tode_field as $language) {
foreach ($language as $term) {
$term = taxonomy_term_load($term['tid']);
if(!in_array($term->tid, $terms['tids'])){
if(isset($term->tid) && !in_array($term->tid, $terms['tids'])){
$terms['names'][] = $term->name;
$terms['tids'][] = $term->tid;
}
@@ -594,6 +952,7 @@ function _tode_populate_terms_node_delete(&$terms, $tode_field){
}
function _tode_node_delete_prepare_form(&$form, $terms){
if(count($terms)){
/*
TODO add here a checkbox to select terms to delete
@@ -620,6 +979,202 @@ function tode_delete_submit($form, &$form_state){
drupal_set_message(t('Following Taxonomy terms have been deleted : %terms', array('%terms' => implode(', ', $terms) )), 'status');
}
/**
* Implements hook_url_outbound_alter().
*/
function tode_url_outbound_alter(&$path, &$options, $original_path) {
// dsm('tode_url_outbound_alter');
# terms url
$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]);
}
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;
}
}
}
}
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
*/
@@ -708,9 +1263,9 @@ function _tode_trim_options(&$form, $item){
}
/**
* OK OK OK
* _tode_get_node_tode_fields_def
*/
function _tode_get_tode_fields_def($node){
function _tode_get_node_ tode_fields_def($node){
// dsm($node, '_tode_get_fields_def');
#get the fields defenition of node type
@@ -727,3 +1282,45 @@ function _tode_get_tode_fields_def($node){
return $tode_fields;
}
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'){
// 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 $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;
}