]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Added elgg_get_entities_from_plugin_user_settings(). Added a name_prefix option to...
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 12 Feb 2011 02:33:55 +0000 (02:33 +0000)
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 12 Feb 2011 02:33:55 +0000 (02:33 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@8136 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/lib/elgglib.php
engine/lib/plugins.php
engine/lib/private_settings.php

index cd746b3d8b7380bbad31276c6ca8cd0bcac715b4..12560308ede32846e21ddbf5730cb2503ed0c155 100644 (file)
@@ -1618,7 +1618,7 @@ function js_page_handler($page) {
                $return = elgg_view('js/' . $js);
 
                header('Content-type: text/javascript');
-               
+
                // @todo should js be cached when simple cache turned off
                //header('Expires: ' . date('r', time() + 864000));
                //header("Pragma: public");
index 2ac49e8dff7d2f0bf60a2a10b7b531e629f9a76b..b8fd321a83f7caac5c685c0f3a55cb4adf65e11b 100644 (file)
@@ -978,6 +978,76 @@ function elgg_unset_all_plugin_settings($plugin_id = null) {
        return $plugin->unsetAllSettings();
 }
 
+/**
+ * Returns entities based upon plugin settings.
+ * Takes all the options for {@see elgg_get_entities_from_private_settings()}
+ * in addition to the ones below.
+ *
+ * @param array $options Array in the format:
+ *
+ *     plugin_name => NULL|STR The plugin name. Defaults to calling plugin
+ *
+ *     plugin_user_setting_names => NULL|ARR private setting names
+ *
+ *     plugin_user_setting_values => NULL|ARR metadata values
+ *
+ *     plugin_user_setting_name_value_pairs => NULL|ARR (
+ *                                         name => 'name',
+ *                                         value => 'value',
+ *                                         'operand' => '=',
+ *                                        )
+ *                                  Currently if multiple values are sent via
+ *                               an array (value => array('value1', 'value2')
+ *                               the pair's operand will be forced to "IN".
+ *
+ *     plugin_user_setting_name_value_pairs_operator => NULL|STR The operator to use for combining
+ *                                        (name = value) OPERATOR (name = value); default AND
+ *
+ * @return mixed
+ */
+function elgg_get_entities_from_plugin_user_settings(array $options = array()) {
+       // if they're passing it don't bother
+       if (!isset($options['plugin_name'])) {
+               $options['plugin_name'] = elgg_get_calling_plugin_id();
+       }
+
+       $singulars = array('plugin_user_setting_name', 'plugin_user_setting_value',
+               'plugin_user_setting_name_value_pair');
+
+       $options = elgg_normalise_plural_options_array($options, $singulars);
+
+       // rewrite plugin_user_setting_name_* to the right PS ones.
+       $map = array(
+               'plugin_user_setting_names' => 'private_setting_names',
+               'plugin_user_setting_values' => 'private_setting_values',
+               'plugin_user_setting_name_value_pairs' => 'private_setting_name_value_pairs',
+               'plugin_user_setting_name_value_pairs_operator' => 'private_setting_name_value_pairs_operator'
+       );
+
+       foreach ($map as $plugin => $private) {
+               if (!isset($options[$plugin])) {
+                       continue;
+               }
+
+               if (isset($options[$private])) {
+                       if (!is_array($options[$private])) {
+                               $options[$private] = array($options[$private]);
+                       }
+
+                       $options[$private] = array_merge($options[$private], $options[$plugin]);
+               } else {
+                       $options[$private] = $options[$plugin];
+               }
+       }
+
+
+       $plugin_id = $options['plugin_name'];
+       $prefix = elgg_namespace_plugin_private_setting('user_setting', '', $plugin_id);
+       $options['private_setting_name_prefix'] = $prefix;
+
+       return elgg_get_entities_from_private_settings($options);
+}
+
 /**
  * Register object, plugin entities as ElggPlugin classes
  *
index 77641e122335217bcd61d08fe66de406b59a8174..e5e7b2213026b8926a9b2ad91ca437aa26728307 100644 (file)
  *     private_setting_name_value_pairs_operator => NULL|STR The operator to use for combining
  *                                        (name = value) OPERATOR (name = value); default AND
  *
+ *  private_setting_name_prefix => STR A prefix to apply to all private settings. Used to
+ *                                     namespace plugin user settings or by plugins to namespace
+ *                                     their own settings.
+ *
  *
  * @return array
  * @since 1.8.0
@@ -43,6 +47,7 @@ function elgg_get_entities_from_private_settings(array $options = array()) {
                'private_setting_values'                    =>  ELGG_ENTITIES_ANY_VALUE,
                'private_setting_name_value_pairs'          =>  ELGG_ENTITIES_ANY_VALUE,
                'private_setting_name_value_pairs_operator' => 'AND',
+               'private_setting_name_prefix'                           => '',
        );
 
        $options = array_merge($defaults, $options);
@@ -54,7 +59,7 @@ function elgg_get_entities_from_private_settings(array $options = array()) {
 
        $clauses = elgg_get_entity_private_settings_where_sql('e', $options['private_setting_names'],
                $options['private_setting_values'], $options['private_setting_name_value_pairs'],
-               $options['private_setting_name_value_pairs_operator']);
+               $options['private_setting_name_value_pairs_operator'], $options['private_setting_name_prefix']);
 
        if ($clauses) {
                // merge wheres to pass to get_entities()
@@ -87,11 +92,12 @@ function elgg_get_entities_from_private_settings(array $options = array()) {
  * @param array|null $values        Array of values
  * @param array|null $pairs         Array of names / values / operands
  * @param string     $pair_operator Operator for joining pairs where clauses
+ * @param string     $name_prefix   A string to prefix all names with
  * @return array
  * @since 1.8.0
  */
 function elgg_get_entity_private_settings_where_sql($table, $names = NULL, $values = NULL,
-$pairs = NULL, $pair_operator = 'AND') {
+$pairs = NULL, $pair_operator = 'AND', $name_prefix = '') {
 
        global $CONFIG;
 
@@ -116,6 +122,7 @@ $pairs = NULL, $pair_operator = 'AND') {
 
                $sanitised_names = array();
                foreach ($names as $name) {
+                       $name = $name_prefix . $name;
                        $sanitised_names[] = '\'' . sanitise_string($name) . '\'';
                }
 
@@ -220,7 +227,7 @@ $pairs = NULL, $pair_operator = 'AND') {
                                $value = "'" . sanitise_string($pair['value']) . "'";
                        }
 
-                       $name = sanitise_string($pair['name']);
+                       $name = sanitise_string($name_prefix . $pair['name']);
 
                        // @todo The multiple joins are only needed when the operator is AND
                        $return['joins'][] = "JOIN {$CONFIG->dbprefix}private_settings ps{$i}