diff --git a/ee1/language/english/lang.vz_members.php b/ee1/language/english/lang.vz_members.php
index 8b85d74..470edbc 100755
--- a/ee1/language/english/lang.vz_members.php
+++ b/ee1/language/english/lang.vz_members.php
@@ -4,8 +4,8 @@
'mode_label' => 'Selection mode:',
'mode_label_cell' => 'Mode',
-'mode_single' => 'Allow only one member at a time',
-'mode_multiple' => 'Allow multiple members to be selected',
+'mode_single' => 'Allow only one member',
+'mode_multiple' => 'Allow multiple members',
'member_groups_label' => 'Allow members from these groups:',
'member_groups_label_cell' => 'Allowed groups',
diff --git a/ee2/thirdparty/vz_members/ft.vz_members.php b/ee2/thirdparty/vz_members/ft.vz_members.php
index e4816ff..cfd3c58 100644
--- a/ee2/thirdparty/vz_members/ft.vz_members.php
+++ b/ee2/thirdparty/vz_members/ft.vz_members.php
@@ -1,95 +1,127 @@
-
* @copyright Copyright (c) 2009-2010 Eli Van Zoeren
* @license http://creativecommons.org/licenses/by-sa/3.0/ Attribution-Share Alike 3.0 Unported
- * Some small bits of code here and there were borrowed from the
- * Checkbox Group fieldtype included with FieldFrame.
*/
-class Vz_members extends Fieldframe_Fieldtype {
+class Vz_members_ft extends EE_Fieldtype {
- /**
- * Fieldtype Info
- * @var array
- */
- var $info = array(
+ public $info = array(
'name' => 'VZ Members',
'version' => '0.99',
- 'desc' => 'Select members from one or more member groups',
- 'docs_url' => 'http://elivz.com/blog/single/vz_members/',
- 'versions_xml_url' => 'http://elivz.com/files/versions.xml'
- );
-
- var $requires = array(
- 'ff' => '1.3.4',
- 'cp_jquery' => '1.1.1',
- );
-
- var $default_site_settings = array();
-
- var $default_field_settings = array(
- 'member_groups' => array(),
- 'mode' => 'multiple'
);
- var $default_cell_settings = array(
+ /**
+ * Fieldtype Constructor
+ *
+ */
+ function Vz_members_ft()
+ {
+ parent::EE_Fieldtype();
+
+ // Initialize the cache
+ if (!isset($this->EE->session->cache['vz_members']))
+ {
+ $this->EE->session->cache['vz_members'] = array();
+ }
+ $this->cache =& $this->EE->session->cache['vz_members'];
+ }
+
+
+ /**
+ * Install Fieldtype
+ *
+ */
+ function install()
+ {
+ // Default field settings
+ return array(
+ 'member_groups' => array(),
+ 'mode' => 'multiple'
+ );
+ }
+
+ public $default_cell_settings = array(
'member_groups' => array(),
'mode' => 'single'
);
- var $modes = array(
- 'single' => 'mode_single',
- 'multiple' => 'mode_multiple'
- );
+ protected function modes()
+ {
+ $this->EE->lang->loadfile('vz_members');
+
+ return array(
+ 'single' => $this->EE->lang->line('mode_single'),
+ 'multiple' => $this->EE->lang->line('mode_multiple')
+ );
+ }
+
-
/**
* Member Groups Select
*/
- function _member_groups_select($selected_groups)
+ private function _get_member_groups()
{
- global $DB, $DSP;
-
// Get the available member groups
- $member_groups = $DB->query("SELECT group_title, group_id FROM exp_member_groups WHERE site_id = 1");
-
- // Construct the select list of member groups
- $r = $DSP->input_select_header('member_groups[]', 'y', ($member_groups->num_rows < 10 ? $member_groups->num_rows : 10));
- foreach($member_groups->result as $member_group)
+ if (!isset( $this->cache['groups']['all'] ))
{
- $selected = in_array($member_group['group_id'], $selected_groups) ? 1 : 0;
- $r .= $DSP->input_select_option($member_group['group_id'], $member_group['group_title'], $selected);
+ $member_groups = array();
+ $result = $this->EE->db->query("
+ SELECT group_title, group_id
+ FROM exp_member_groups
+ WHERE site_id = 1
+ ")->result_array();
+
+ // We need it in key-value form for the select helper functions
+ foreach ($result as $item)
+ {
+ $member_groups[array_pop($item)] = array_pop($item);
+ }
+ $this->cache['groups']['all'] = $member_groups;
}
- $r .= $DSP->input_select_footer();
- return $r;
+ return $this->cache['groups']['all'];
}
-
- /**
- * Display Field Settings
- */
- function display_field_settings($field_settings)
- {
- // Initialize a new instance of SettingsDisplay
- $SD = new Fieldframe_SettingsDisplay();
+
+ /**
+ * Create the settings ui
+ */
+ private function _get_settings($settings)
+ {
+ $this->EE->lang->loadfile('vz_members');
+ $this->EE->load->helper('form');
- $cell1 = $SD->label('mode_label')
- . $SD->select('mode', $field_settings['mode'], $this->modes);
+ $mode = isset($settings['mode']) ? $settings['mode'] : 0;
+ $row1 = array(
+ $this->EE->lang->line('mode_label_cell'),
+ form_dropdown('mode', $this->modes(), $mode)
+ );
+
+ $member_groups = isset($settings['member_groups']) ? $settings['member_groups'] : 0;
+ $row2 = array(
+ $this->EE->lang->line('member_groups_label_cell'),
+ form_multiselect('member_groups[]', $this->_get_member_groups(), $member_groups)
+ );
+
+ return array( $row1, $row2 );
+ }
- $cell2 = $r = $SD->label('member_groups_label')
- . $this->_member_groups_select($field_settings['member_groups']);
-
- return array('cell1' => $cell1, 'cell2' => $cell2);
- }
+
+ /**
+ * Display Field Settings
+ */
+ function display_settings($field_settings)
+ {
+ $settings_array = $this->_get_settings($field_settings);
+
+ $this->EE->table->add_row($settings_array[0]);
+ $this->EE->table->add_row($settings_array[1]);
+ }
/**
@@ -97,17 +129,7 @@ function display_field_settings($field_settings)
*/
function display_cell_settings($cell_settings)
{
- global $DSP, $LANG;
- $SD = new Fieldframe_SettingsDisplay();
-
- return ''
- . '';
+ return $this->_get_settings($cell_settings);
}
@@ -116,41 +138,43 @@ function display_cell_settings($cell_settings)
*/
function _create_user_list($field_name, $selected_members, $member_groups, $mode)
{
- global $DB, $DSP, $LANG;
+ $this->EE->load->helper('form');
// If there are no member groups selected, don't bother
- if (!$member_groups)
+ if (empty($member_groups))
{
- return $DSP->qdiv('highlight_alt', $LANG->line('no_member_groups'));
+ $this->EE->lang->loadfile('vz_members');
+ return '
' . $this->EE->lang->line('no_member_groups') . '
';
}
- // Flatten the list of members to csv
+ // Flatten the list of member groups csv
if (is_array($member_groups))
{
$member_groups = implode(',', $member_groups);
}
-
- // Initialize a new instance of SettingsDisplay
- $SD = new Fieldframe_SettingsDisplay();
// Get the members in the selected member groups
- $query = $DB->query("
- SELECT
- exp_members.member_id AS member_id,
- exp_members.screen_name AS screen_name,
- exp_member_groups.group_title AS group_title,
- exp_member_groups.group_id AS group_id
- FROM
- exp_members
- INNER JOIN
- exp_member_groups
- ON
- exp_members.group_id = exp_member_groups.group_id
- WHERE
- exp_member_groups.group_id IN ($member_groups) AND exp_member_groups.site_id = 1
- ORDER BY
- exp_member_groups.group_id ASC, exp_members.screen_name ASC
- ");
+ if ( !isset($this->cache['in_groups'][$member_groups]) )
+ {
+ $this->cache['in_groups'][$member_groups] = $this->EE->db->query("
+ SELECT
+ exp_members.member_id AS member_id,
+ exp_members.screen_name AS screen_name,
+ exp_member_groups.group_title AS group_title,
+ exp_member_groups.group_id AS group_id
+ FROM
+ exp_members
+ INNER JOIN
+ exp_member_groups
+ ON
+ exp_members.group_id = exp_member_groups.group_id
+ WHERE
+ exp_member_groups.group_id IN ($member_groups) AND exp_member_groups.site_id = 1
+ ORDER BY
+ exp_member_groups.group_id ASC, exp_members.screen_name ASC
+ ")->result_array();
+ }
+ $members = $this->cache['in_groups'][$member_groups];
$r = '';
$current_group = 0;
@@ -158,34 +182,38 @@ function _create_user_list($field_name, $selected_members, $member_groups, $mode
if ($mode == 'single')
{
// Get the first selected member if there are more than one
- if (is_array($selected_members)) $selected_members = array_shift($selected_members);
+ if (is_array($selected_members))
+ {
+ $selected_members = array_shift($selected_members);
+ }
- $r = $DSP->input_select_header($field_name);
- $selected = (!$selected_members) ? 1 : 0;
- $r .= $DSP->input_select_option('', '—', $selected) . NL;
- foreach($query->result AS $member)
+ // Construct the select box markup
+ $r = '';
}
- else
+ else // Multi-select mode
{
- foreach($query->result AS $member)
+ foreach ($members as $member)
{
// If we are moving on to a new group
if ($current_group != $member['group_id'])
@@ -195,7 +223,7 @@ function _create_user_list($field_name, $selected_members, $member_groups, $mode
// Output the group header
$r .= '';
- $r .= $SD->label(''.$member['group_title'].':');
+ $r .= '
'.$member['group_title'].':
';
}
// Is it selected?
@@ -209,14 +237,30 @@ function _create_user_list($field_name, $selected_members, $member_groups, $mode
}
// Output the checkbox
- $r .= ' ';
+ $r .= '';
}
// Fool the form into working
- $r .= $DSP->input_hidden($field_name.'[]', 'temp');
+ $r .= form_hidden($field_name.'[]', 'temp');
+
+ // Make it pretty
+ $this->EE->cp->add_to_head('');
+ $this->EE->cp->add_to_foot('');
// Clear the floats
$r .= '';
@@ -269,23 +313,25 @@ function save_cell($cell_data, $cell_settings)
*/
function _get_member_names($members, $orderby, $sort)
{
- global $DB;
-
// Prepare parameters for SQL query
$member_list = (is_array($members)) ? implode(',', $members) : $members;
if (!$member_list) $member_list = -1;
$sort = (strtolower($sort) == 'desc') ? 'DESC' : 'ASC';
$orderby = ($orderby == 'username' || $orderby == 'screen_name' || $orderby == 'group_id') ? $orderby : 'member_id';
- // Get the names of the members
- $query = $DB->query("
- SELECT member_id, group_id, username, screen_name
- FROM exp_members
- WHERE member_id IN ($member_list)
- ORDER BY $orderby $sort
- ");
+ // Only hit the database once per pageload
+ if ( !isset($this->cache['members'][$member_list][$orderby][$sort]) )
+ {
+ // Get the names of the members
+ $this->cache['members'][$member_list][$orderby][$sort] = $this->EE->db->query("
+ SELECT member_id, group_id, username, screen_name
+ FROM exp_members
+ WHERE member_id IN ($member_list)
+ ORDER BY $orderby $sort
+ ")->result_array();
+ }
- return $query->result;
+ return $this->cache['members'][$member_list][$orderby][$sort];
}
/**
@@ -298,7 +344,7 @@ function display_tag($params, $tagdata, $field_data, $field_settings)
if (is_array($field_data))
{
// Multiple members are selected
- $separator = ($params['separator']) ? $params['separator'] : '|';
+ $separator = isset($params['separator']) ? $params['separator'] : '|';
return implode($separator, $field_data);
}
else
@@ -338,7 +384,7 @@ function display_tag($params, $tagdata, $field_data, $field_settings)
}
// Backsapce parameter
- if ($params['backspace'])
+ if (isset($params['backspace']))
{
$r = substr($r, 0, -$params['backspace']);
}
@@ -363,17 +409,18 @@ function names($params, $tagdata, $field_data, $field_settings)
}
// Output the list
- $separator = ($params['separator']) ? $params['separator'] : ', ';
+ $separator = isset($params['separator']) ? $params['separator'] : ', ';
return implode($separator, $member_names);
}
/**
- * is_allowed
+ * Checks the intersection between the selected members and a
+ * member or list of members
*/
function is_allowed($params, $tagdata, $field_data, $field_settings)
{
- global $DB;
+ global $DB, $SESS;
$allowed = is_array($field_data) ? $field_data : array($field_data);
$candidates = explode('|', $params['members']);
@@ -381,21 +428,22 @@ function is_allowed($params, $tagdata, $field_data, $field_settings)
if ( isset($params['groups']) )
{
// Get all the users in those groups
- $supers = $DB->query("
- SELECT member_id, group_id
- FROM exp_members
- WHERE group_id IN (".$params['groups'].")
- ");
+ if ( !isset($this->cache['groups'][$params['groups']]) )
+ {
+ $this->cache['groups'][$params['groups']] = $this->EE->db->query("
+ SELECT member_id
+ FROM exp_members
+ WHERE group_id IN (".$params['groups'].")
+ ")->result_array();
+ }
+ $supers = $this->cache['groups'][$params['groups']];
// Separate out the member_ids
- foreach ($supers->result as $super)
+ foreach ($supers as $super)
{
$candidates[] = $super['member_id'];
}
}
-
- // Remove duplicates
- $candidates = array_unique($candidates);
// Are there any matches between the two?
$isAllowed = count(array_intersect($candidates, $allowed));
@@ -412,5 +460,4 @@ function is_allowed($params, $tagdata, $field_data, $field_settings)
}
-
/* End of file ft.vz_members.php */
\ No newline at end of file
diff --git a/ee2/thirdparty/vz_members/language/english/lang.vz_members.php b/ee2/thirdparty/vz_members/language/english/lang.vz_members.php
index 66b1c49..989b0c1 100755
--- a/ee2/thirdparty/vz_members/language/english/lang.vz_members.php
+++ b/ee2/thirdparty/vz_members/language/english/lang.vz_members.php
@@ -1,12 +1,14 @@
'Selection mode:',
-'mode_single' => 'Allow only one member at a time',
-'mode_multiple' => 'Allow multiple members to be selected',
+'mode_label_cell' => 'Mode',
+'mode_single' => 'Allow only one member',
+'mode_multiple' => 'Allow multiple members',
-'member_groups_label' => 'Show members from these groups:',
+'member_groups_label' => 'Allow members from these groups:',
+'member_groups_label_cell' => 'Allowed groups',
'no_member_groups' => 'There are no member groups selected',