From 55a97589e5d8886cc886a23aea80b7b1e5cb02fd Mon Sep 17 00:00:00 2001
From: OnkelTem <OnkelTem@239962.no-reply.drupal.org>
Date: Sat, 25 Aug 2012 23:15:51 +0400
Subject: [PATCH] Issue 1358682 by ydnar79: Add Language property to the
 default properties list

---
 eck.module                             |    6 +++++
 eck.properties.inc                     |   11 +++++++++
 plugins/property_behavior/language.inc |   39 ++++++++++++++++++++++++++++++++
 views/eck.views.inc                    |   27 ++++++++++++++++++++--
 4 files changed, 81 insertions(+), 2 deletions(-)
 create mode 100644 plugins/property_behavior/language.inc

diff --git a/eck.module b/eck.module
index 5666d0e..582fdb8 100644
--- a/eck.module
+++ b/eck.module
@@ -48,6 +48,12 @@ function eck_eck_default_properties(){
     'type' => "integer",
     'behavior' => 'changed'
   );
+  $default_properties['language'] =
+  array(
+    'label' => "Language",
+    'type' => "language",
+    'behavior' => 'language'
+  );
   
   return $default_properties;
 }
diff --git a/eck.properties.inc b/eck.properties.inc
index c45fe44..7f83f37 100644
--- a/eck.properties.inc
+++ b/eck.properties.inc
@@ -27,6 +27,7 @@ function eck_property_types() {
     'integer' => t('Integer'), 
     'decimal' => t('Decimal'), 
     'positive_integer' => t('Unsigned Integer'),
+    'language' => t('Language'),
   );
 
   drupal_alter('eck_property_types', $default_types);
@@ -92,6 +93,16 @@ function eck_property_type_schema($type) {
       );
       break;
       
+    case 'language':
+      $schema = array(
+        'description' => 'Language',
+        'type' => 'varchar',
+        'length' => 12,
+        'not null' => TRUE,
+        'default' => '',
+      );
+      break;
+
     default:
       $schema = NULL;
       break;
diff --git a/plugins/property_behavior/language.inc b/plugins/property_behavior/language.inc
new file mode 100644
index 0000000..2907b51
--- /dev/null
+++ b/plugins/property_behavior/language.inc
@@ -0,0 +1,39 @@
+<?php
+
+// language plugin definition
+
+$plugin = array(
+  'label' => "Language",
+  'entity_save' => 'eck_language_property_entity_save',
+  'property_info' => 'eck_language_property_property_info',
+  'default_widget' => 'eck_language_property_widget',
+);
+
+function eck_language_property_entity_save($property, $vars) {
+  $entity = $vars['entity'];
+  if (isset($entity->is_new) && $entity->is_new && empty($entity->{$property})) {
+    $default = language_default();
+    $entity->{$property} = $default->language;
+  }
+}
+
+function eck_language_property_property_info($property, $vars) {
+  $vars['properties'][$property] += array(
+    'type' => 'token',
+    'setter callback' => 'entity_property_verbatim_set',
+    'options list' => 'entity_metadata_language_list',
+    'description' => t('The language the entity is in.'),
+  );
+  return $vars;
+}
+
+function eck_language_property_widget($property, $vars) {
+  $entity = $vars['entity'];
+  $language = isset($entity->{$property}) ? $entity->{$property} : '';
+  return array(
+    '#type' => 'select',
+    '#title' => $vars['properties'][$property]['label'],
+    '#default_value' => $language,
+    '#options' => entity_metadata_language_list(),
+  );
+}
diff --git a/views/eck.views.inc b/views/eck.views.inc
index c85af08..5e7aac0 100644
--- a/views/eck.views.inc
+++ b/views/eck.views.inc
@@ -30,5 +30,28 @@
         'handler' => 'eck_views_handler_field_link_delete',
       ),
     );
-  }  
-}
\ No newline at end of file
+    if (module_exists('locale')) {
+      foreach($entity_type->properties as $property_name => $property_info) {
+        if ($property_info['behavior'] == 'language') {
+          $data["eck_{$entity_type->name}"][$property_name] = array(
+            'title' => $property_info['label'],
+            'help' => t('Entity language.'),
+            'field' => array(
+              'handler' => 'views_handler_field_locale_language',
+              'click sortable' => TRUE,
+            ),
+            'filter' => array(
+              'handler' => 'views_handler_filter_locale_language',
+            ),
+            'argument' => array(
+              'handler' => 'views_handler_argument_locale_language',
+            ),
+            'sort' => array(
+              'handler' => 'views_handler_sort',
+            ),
+          );
+        }
+      }
+    }
+  }
+}
-- 
1.7.9.5

