+/**
+ * Function to save the identities array
+ *
+ * @param array $identities Array of identities
+ * @since 1.5.1 and 1.4.5
+ */
+function save_identities($identities) {
+
+ global $username, $data_dir, $domain;
+
+ if (empty($identities) || !is_array($identities)) {
+ return;
+ }
+
+
+ $num_cur = getPref($data_dir, $username, 'identities');
+
+ $cnt = count($identities);
+
+ // Remove any additional identities in prefs //
+ for($i=$cnt; $i <= $num_cur; $i++) {
+ removePref($data_dir, $username, 'full_name' . $i);
+ removePref($data_dir, $username, 'email_address' . $i);
+ removePref($data_dir, $username, 'reply_to' . $i);
+ setSig($data_dir, $username, $i, '');
+ }
+
+ foreach($identities as $id=>$ident) {
+
+ $key = ($id?$id:'');
+
+ setPref($data_dir, $username, 'full_name' . $key, $ident['full_name']);
+ setPref($data_dir, $username, 'email_address' . $key, $ident['email_address']);
+ setPref($data_dir, $username, 'reply_to' . $key, $ident['reply_to']);
+
+ if ($id === 0) {
+ setSig($data_dir, $username, 'g', $ident['signature']);
+ } else {
+ setSig($data_dir, $username, $key, $ident['signature']);
+ }
+
+ }
+
+ setPref($data_dir, $username, 'identities', $cnt);
+
+}
+
+/**
+ * Returns an array with a fixed set of identities
+ *
+ * @param array $identities Array of identities
+ * @param int $id Identity to modify
+ * @param string $action Action to perform
+ * @return array
+ * @since 1.5.1 and 1.4.5
+ */
+function sqfixidentities( $identities, $id, $action ) {
+
+ $fixed = array();
+ $tmp_hold = array();
+ $i = 0;
+
+ if (empty($identities) || !is_array($identities)) {
+ return $fixed;
+ }
+
+ foreach( $identities as $key=>$ident ) {
+
+ if (empty_identity($ident)) {
+ continue;
+ }
+
+ switch($action) {
+
+ case 'makedefault':
+
+ if ($key == $id) {
+ $fixed[0] = $ident;
+
+ // inform plugins about renumbering of ids
+ do_hook('options_identities_renumber', $temp=array(&$id, 'default'));
+
+ continue 2;
+ } else {
+ $fixed[$i+1] = $ident;
+ }
+ break;
+
+ case 'move':
+
+ if ($key == ($id - 1)) {
+ $tmp_hold = $ident;
+
+ // inform plugins about renumbering of ids
+ do_hook('options_identities_renumber', $temp=array(&$id , $id - 1));
+
+ continue 2;
+ } else {
+ $fixed[$i] = $ident;
+
+ if ($key == $id) {
+ $i++;
+ $fixed[$i] = $tmp_hold;
+ }
+ }
+ break;
+
+ case 'delete':
+
+ if ($key == $id) {
+ // inform plugins about deleted id
+ do_hook('options_identities_process', $temp=array(&$action, &$id));
+
+ continue 2;
+ } else {
+ $fixed[$i] = $ident;
+ }
+ break;
+
+ // Process actions from plugins and save/update action //
+ default:
+ /**
+ * send action and id information. number of hook arguments
+ * differs from 1.4.4 or older and 1.5.0. count($args) can
+ * be used to detect modified hook. Older hook does not
+ * provide information that can be useful for plugins.
+ */
+ do_hook('options_identities_process', $temp=array(&$action, &$id));
+
+ $fixed[$i] = $ident;
+
+ }
+
+ // Inc array index //
+ $i++;
+ }
+
+ ksort($fixed);
+ return $fixed;
+
+}
+
+/**
+ * Function to test if identity is empty
+ *
+ * @param array $identity Identitiy Array
+ * @return boolean
+ * @since 1.5.1 and 1.4.5
+ */
+function empty_identity($ident) {
+ if (empty($ident['full_name']) && empty($ident['email_address']) && empty($ident['signature']) && empty($ident['reply_to'])) {
+ return true;
+ } else {
+ return false;
+ }
+}