Affinity views field & filter
in Project codes
This CodeLet lets you add a field and a filter in views. You can use this field to display data and filter the data.
<?php
//view.inc file
//$Id$
/**
* @file
*
* @author Joshi Consultancy Services <info@joshics.in>
*/
/**
* Implementation of hook_views_handlers
*
* @author Joshi Consultancy Services <info@joshics.in>
*/
function user_affinity_views_handlers() {
return array(
'info' => array(
'path' => drupal_get_path('module', 'user_affinity') . '/views',
),
'handlers' => array(
'user_affinity_views_handler_field_similarity' => array(
'parent' => 'views_handler_field',
),
'user_affinity_views_handler_filter_similarity' => array(
'parent' => 'views_handler_filter_many_to_one',
),
)
);
}
/**
* Implementation of hook_views_data
*
* @author Joshi Consultancy Services <info@joshics.in>
*/
function user_affinity_views_data() {
$data['affinity_matches']['table']['group'] = t('Affinity');
$data['affinity_matches']['table']['join'] = array(
'users' => array(
'left_field' => 'uid',
'field' => 'match_uid',
'type' => 'INNER',
),
'node' => array(
'left_field' => 'uid',
'field' => 'uid',
'type' => 'INNER', // all nodes have an author.
),
);
$data['affinity_matches']['similarity'] = array(
'title' => t("User Affinity"),
'help' => t("User affinity with current user"),
'field' => array(
'handler' => 'user_affinity_views_handler_field_similarity',
'click sortable' => TRUE,
'notafield' => TRUE,
),
'filter' => array(
'title' => t('User affinity'),
'handler' => 'user_affinity_views_handler_filter_similarity',
),
'sort' => array(
'handler' => 'views_handler_sort',
),
);
return $data;
}
?>Filter
<?php
//Filter
//$Id$
/**
* @file
*
* @author Joshi Consultancy Services <info@joshics.in>
*/
class user_affinity_views_handler_filter_similarity extends views_handler_filter_many_to_one {
function get_value_options() {
if (isset($this->value_options)) {
return;
}
$this->value_options = array();
$this->value_options = array(0, 1, 2, 3, 4, 5);
}
function query() {
if (!empty($this->value_options)) {
$subquery = " LEFT JOIN {affnity_matches} am ON users.uid = am.match_uid\n";
$where = " affinity_matches.similarity = %d\n";
}
$this->ensure_my_table();
$this->query->add_table("affnity_matches", "affinity_matches.match_uid", "INNER");
$this->query->add_where($this->options['group'], $where, $this->value);
}
}
?>Field
<?php
//Field
//$Id$
/**
* @file
*
* @author Joshi Consultancy Services <info@joshics.in>
*/
class user_affinity_views_handler_field_similarity extends views_handler_field {
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
$form['affinity'] = array(
'#title' => t("User affinity"),
'#description' => t('User affnity with current user'),
'#type' => 'checkbox',
'#options' => array(
1 => t('Dispaly affinity'),
),
'#default_value' => $this->options['affinity'],
);
}
function query() {
global $user;
$om__user = user_load(arg(1));
$sn__similarity = db_result(db_query("SELECT similarity
FROM {affinity_matches} af WHERE (af.uid = %d OR af.match_uid = %d)
OR (af.match_uid = %d AND af.uid = %d)", $user->uid, $om__user->uid, $user->uid, $om__user->uid));
return $sn__similarity;
}
function render($values) {
global $user;
$om__user = user_load($values->uid);
$sn__similarity = db_result(db_query("SELECT similarity
FROM {affinity_matches} af WHERE (af.uid = %d AND af.match_uid = %d)
OR (af.match_uid = %d AND af.uid = %d)", $user->uid, $om__user->uid, $user->uid, $om__user->uid));
return (!empty($sn__similarity) ? $sn__similarity : 0);
}
}
?> (3 votes)
- Login or register to post comments
- 1685 reads
-
Your feedback





Recent comments
21 weeks 4 hours ago
39 weeks 3 days ago
41 weeks 2 days ago
50 weeks 5 days ago
1 year 2 weeks ago
1 year 4 weeks ago
1 year 4 weeks ago
1 year 4 weeks ago
1 year 4 weeks ago
1 year 4 weeks ago