| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Manifest module database functions.
 
-  */
 
- /**
 
-  * Save a manifest.
 
-  */
 
- function manifest_save(&$manifest) {
 
-   manifest_delete($manifest->name);
 
-   drupal_write_record('manifest', $manifest);
 
- }
 
- /**
 
-  * Load a manifest.
 
-  *
 
-  * Loads one manifest.
 
-  */
 
- function manifest_load($manifest_name = NULL) {
 
-   $manifests = manifest_load_multiple($manifest_name);
 
-   if (!empty($manifests)) {
 
-     return reset($manifests);
 
-   }
 
-   return FALSE;
 
- }
 
- /**
 
-  * Load manifests.
 
-  *
 
-  * Loads all manifests.
 
-  */
 
- function manifest_load_multiple($manifest_name = NULL) {
 
-   $result = manifest_query_execute('manifest', 'load', array('name' => $manifest_name));
 
-   $manifests = array();
 
-   foreach ($result as $manifest) {
 
-     $manifest->settings = unserialize($manifest->settings);
 
-     manifest_config_load($manifest);
 
-     $manifests[$manifest->name] = $manifest;
 
-   }
 
-   if (!empty($manifests)) {
 
-     return $manifests;
 
-   }
 
-   return FALSE;
 
- }
 
- /**
 
-  * Delete a manifest.
 
-  */
 
- function manifest_delete($manifest_name) {
 
-   manifest_account_delete(NULL, $manifest_name);
 
-   manifest_role_delete(NULL, $manifest_name);
 
-   manifest_ip_delete(NULL, NULL, $manifest_name);
 
-   manifest_config_delete($manifest_name);
 
-   return manifest_query_execute('manifest', 'delete', array('name' => $manifest_name));
 
- }
 
- /**
 
-  * Save a manifest config entry.
 
-  */
 
- function manifest_config_save($manifest_name, $field, $value) {
 
-   if (!is_array($value)) {
 
-     $value = array($value);
 
-   }
 
-   $entry = (object)array();
 
-   for ($i = 0; $i < count($value); $i++) {
 
-     $entry->manifest = $manifest_name;
 
-     $entry->field = $field;
 
-     $entry->delta = $i;
 
-     $entry->value = current($value);
 
-     next($value);
 
-   }
 
-   drupal_write_record('manifest_config', $entry);
 
- }
 
- /**
 
-  * Load a manifest config entry into a manifest.
 
-  */
 
- function manifest_config_load(&$manifest) {
 
-   $result = manifest_query_execute('manifest_config', 'load', array('manifest' => $manifest->name));
 
-   $manifest->config = array();
 
-   foreach ($result as $row) {
 
-     $manifest->config[$row->field][$row->delta] = $row->value;
 
-   }
 
- }
 
- /**
 
-  * Delete a manifest.
 
-  */
 
- function manifest_config_delete($manifest_name) {
 
-   return manifest_query_execute('manifest_config', 'delete', array('manifest' => $manifest_name));
 
- }
 
- /**
 
-  * Save a manifest user entry.
 
-  */
 
- function manifest_account_save($uid, $manifest_name) {
 
-   $existing = manifest_account_load($uid, $manifest_name);
 
-   if (!$existing) {
 
-     $entry = (object)array(
 
-       'uid' => $uid,
 
-       'manifest' => $manifest_name,
 
-       'created' => REQUEST_TIME,
 
-     );
 
-     drupal_write_record('manifest_user', $entry);
 
-   }
 
- }
 
- /**
 
-  * Load a manifest user entry.
 
-  */
 
- function manifest_account_load($uid = NULL, $manifest_name = NULL) {
 
-   $result = manifest_query_execute('manifest_user', 'load', array('uid' => $uid, 'manifest' => $manifest_name));
 
-   $entries = array();
 
-   foreach ($result as $row) {
 
-     $entries[] = $row;
 
-   }
 
-   if (!empty($entries)) {
 
-     return $entries;
 
-   }
 
-   return FALSE;
 
- }
 
- /**
 
-  * Delete a manifest user entry.
 
-  */
 
- function manifest_account_delete($uid = NULL, $manifest_name = NULL) {
 
-   return manifest_query_execute('manifest_user', 'delete', array('uid' => $uid, 'manifest' => $manifest_name));
 
- }
 
- /**
 
-  * Save a manifest role entry.
 
-  */
 
- function manifest_role_save($rid, $manifest_name) {
 
-   $existing = manifest_role_load($rid, $manifest_name);
 
-   if (!$existing) {
 
-     $entry = (object)array(
 
-       'rid' => $rid,
 
-       'manifest' => $manifest_name,
 
-       'created' => REQUEST_TIME,
 
-     );
 
-     drupal_write_record('manifest_role', $entry);
 
-   }
 
- }
 
- /**
 
-  * Load a manifest role entry.
 
-  */
 
- function manifest_role_load($rid = NULL, $manifest_name = NULL) {
 
-   $result = manifest_query_execute('manifest_role', 'load', array('rid' => $rid, 'manifest' => $manifest_name));
 
-   $entries = array();
 
-   foreach ($result as $row) {
 
-     $entries[] = $row;
 
-   }
 
-   if (!empty($entries)) {
 
-     return $entries;
 
-   }
 
-   return FALSE;
 
- }
 
- /**
 
-  * Delete a manifest role entry.
 
-  */
 
- function manifest_role_delete($rid = NULL, $manifest_name = NULL) {
 
-   return manifest_query_execute('manifest_role', 'delete', array('rid' => $rid, 'manifest' => $manifest_name));
 
- }
 
- /**
 
-  * Save a manifest ip entry.
 
-  */
 
- function manifest_ip_save($ip1, $ip2, $manifest_name) {
 
-   $existing = manifest_ip_load($ip1, $ip2, $manifest_name);
 
-   if (!$existing) {
 
-     $entry = (object)array(
 
-       'ip1' => ip2long($ip1),
 
-       'ip2' => $ip2 ? ip2long($ip2) : ip2long($ip1),
 
-       'manifest' => $manifest_name,
 
-       'created' => REQUEST_TIME,
 
-     );
 
-     drupal_write_record('manifest_ip', $entry);
 
-   }
 
- }
 
- /**
 
-  * Load a manifest ip entry.
 
-  */
 
- function manifest_ip_load($ip1 = NULL, $ip2 = NULL, $manifest_name = NULL) {
 
-   $result = manifest_query_execute('manifest_ip', 'load', array('ip1' => $ip1, 'ip2' => $ip2, 'manifest' => $manifest_name));
 
-   $entries = array();
 
-   foreach ($result as $row) {
 
-     $row->ip1 = long2ip($row->ip1);
 
-     $row->ip2 = long2ip($row->ip2);
 
-     $entries[] = $row;
 
-   }
 
-   if (!empty($entries)) {
 
-     return $entries;
 
-   }
 
-   return FALSE;
 
- }
 
- /**
 
-  * Load a manifest ip entry.
 
-  */
 
- function manifest_ip_match($ip, $manifest_name = NULL) {
 
-   $wheres[] = ip2long($ip) . ' >= ip1';
 
-   $wheres[] = ip2long($ip) . ' <= ip2';
 
-   $result = manifest_query_execute('manifest_ip', 'load', array('manifest' => $manifest_name), array(), $wheres);
 
-   $entries = array();
 
-   foreach ($result as $row) {
 
-     $entries[] = $row;
 
-   }
 
-   if (!empty($entries)) {
 
-     return $entries;
 
-   }
 
-   return FALSE;
 
- }
 
- /**
 
-  * Delete a manifest ip entry.
 
-  */
 
- function manifest_ip_delete($ip1 = NULL, $ip2 = NULL, $manifest_name = NULL) {
 
-   return manifest_query_execute('manifest_ip', 'delete', array('ip1' => ip2long($ip1), 'ip2' => ip2long($ip2), 'manifest' => $manifest_name));
 
- }
 
- /**
 
-  * Assemble SQL queries.
 
-  */
 
- function manifest_query_execute($table, $op = 'load', $conditions = array(), $select = array(), $wheres = array(), $args = array()) {
 
-   $placeholder_count = 0;
 
-   if ($op == 'load') {
 
-     $sql = 'SELECT ';
 
-     if ($select) {
 
-       $sql .= implode(', ', $select);
 
-     }
 
-     else {
 
-       $sql .= '*';
 
-     }
 
-   }
 
-   elseif ($op == 'delete') {
 
-     $sql = 'DELETE';
 
-   }
 
-   $sql .= ' FROM {' . $table . '} ';
 
-   $schema = drupal_get_schema($table);
 
-   foreach ($conditions as $field => $values) {
 
-     if (!empty($values)) {
 
-       if (!is_array($values)) {
 
-         $values = array($values);
 
-       }
 
-       $type = $schema['fields'][$field]['type'];
 
-       $placeholder = ':value_' . $placeholder_count++;
 
-       $wheres[] = $field . ' IN ' . $placeholder;
 
-       $args[$placeholder] = $values;
 
-     }
 
-   }
 
-   if (!empty($wheres)) {
 
-     $sql .= 'WHERE ';
 
-     $sql .= implode(' AND ', $wheres);
 
-   }
 
-   return db_query($sql, $args);
 
- }
 
- /**
 
-  * Get a list of manifests the user is in, matching the settings.
 
-  *
 
-  * @param $config
 
-  *   An array of key values that must be true of the $manifest->config.
 
-  * @param $account
 
-  *   An optional user account object.  If not supplied will use the current
 
-  *   user.
 
-  * @return
 
-  *   An array of loaded manifests.
 
-  */
 
- function manifest($config = NULL, $account = NULL) {
 
-   if (is_null($account)) {
 
-     global $user;
 
-     $account = $user;
 
-     $check_ip = TRUE;
 
-   }
 
-   $sql = 'SELECT DISTINCT(m.name) AS manifest FROM {manifest} m';
 
-   $args = array();
 
-   $wheres = array();
 
-   $sql .= ' LEFT JOIN {manifest_user} mu ON mu.manifest = m.name';
 
-   $sql .= ' LEFT JOIN {manifest_role} mr ON mr.manifest = m.name';
 
-   if ($check_ip) {
 
-     $sql .= ' LEFT JOIN {manifest_ip} mi ON mi.manifest = m.name';
 
-   }
 
-   if (!empty($config)) {
 
-     $placeholder_count = 0;
 
-     foreach ($config as $key => $value) {
 
-       $placeholder = $placeholder_count++;
 
-       $sql .= ' INNER JOIN {manifest_config} mc_' . $key . ' ON mc_' . $key . '.manifest = m.name AND mc_' . $key . '.field = :key_' . $placeholder . ' AND mc_' . $key . '.value = :val_' . $placeholder;
 
-       $args[':key_' . $placeholder] = $key;
 
-       $args[':val_' . $placeholder] = $value;
 
-     }
 
-   }
 
-   $wheres[] = 'mu.uid = :uid';
 
-   $args[':uid'] = $account->uid;
 
-   $roles = array_keys($account->roles);
 
-   $wheres[] = 'mr.rid IN :rids';
 
-   $args[':rids'] = $roles;
 
-   if ($check_ip) {
 
-     $wheres[] = '(:ip >= mi.ip1 AND :ip <= mi.ip2)';
 
-     $args[':ip'] = ip2long($ip);
 
-   }
 
-   $sql .= ' WHERE ' . implode(' OR ', $wheres);
 
-   $result = db_query($sql, $args);
 
-   $manifests = array();
 
-   foreach ($result as $row) {
 
-     $manifests[] = $row->manifest;
 
-   }
 
-   if (!empty($manifests)) {
 
-     return $manifests;
 
-   }
 
-   return FALSE;
 
- }
 
- /**
 
-  * Get a list of users for the supplied manifests, matching the settings.
 
-  *
 
-  * @param $config
 
-  *   An array of key values that must be true of the $manifest->config.
 
-  * @param $manifests
 
-  *   Which manifests to look in.
 
-  * @return
 
-  *   An array of uids.
 
-  */
 
- function manifest_users($config = NULL, $manifests = NULL) {
 
-   $sql = 'SELECT DISTINCT(u.uid) AS uid FROM {users} u';
 
-   $args = array();
 
-   $sql .= ' LEFT JOIN {manifest_user} mu ON mu.uid = u.uid';
 
-   $sql .= ' LEFT JOIN {users_roles} ur ON u.uid = ur.uid';
 
-   $sql .= ' LEFT JOIN {manifest_role} mr ON ur.rid = mr.rid';
 
-   if (!empty($config)) {
 
-     $placeholder_count = 0;
 
-     foreach ($config as $key => $value) {
 
-       $placholder = $placeholder_count++;
 
-       $sql .= ' INNER JOIN {manifest_config} mc_' . $key . ' ON mu.manifest = mc_' . $key . '.manifest AND mc_' . $key . '.field = :key_' . $placeholder . ' AND mc_' . $key . '.value = :val_' . $placeholder;
 
-       $args[':key_' . $placeholder] = $key;
 
-       $args[':val_' . $placeholder] = $value;
 
-     }
 
-   }
 
-   if (!empty($manifests)) {
 
-     $wheres[] = 'mu.manifest IN :manifests';
 
-     $args[':manifests'] = $manifests;
 
-   }
 
-   $wheres[] = '(mu.uid IS NOT NULL OR mr.rid IS NOT NULL)';
 
-   if (!empty($wheres)) {
 
-     $sql .= ' WHERE ' . implode(' AND ', $wheres);
 
-   }
 
-   $result = db_query($sql, $args);
 
-   $users = array();
 
-   foreach ($result as $row) {
 
-     $users[$row->uid] = $row->uid;
 
-   }
 
-   if (!empty($users)) {
 
-     return $users;
 
-   }
 
-   return FALSE;
 
- }
 
 
  |