0JB7S }Խ*y`{x*b-.ؽq h]&LvcrxNQdzYnF^T<ڣqk)>ٲ۴&OYf7]<_)ߺDnDê㱇nÑ]71k-]8֑>:o!s09 Zu%w%*NKx`8 *y"OPIB]Z@HTJ㑘#}jqM6,И=-KR)Pm|( mbws1V^h鐐YF1h-ebd=;Lqw۾p mc:P d>.kd-u~aEkQNר '^YzNw"[ү{55tkf?F))F{ybEkQNר '^qu}Z<M7偋T-LxJ/9Gl37O@w|0'݊tݶ66|j^#Ml@kÔFj薯qݨ"5[4l@7a]W<(c kݞ8߆TYyzka#VcEvߣAci4tfbHoxcx rED~{+zlfQ`WoIEnŭ@ /{eMiwĶ9fQH?*ğGTaY8'q ^aaH~\EJj)O@ ],:8,$׮>Q/džO(=Yfі[[k:v>(kijԉ6 =J/X-&vW'ޔDHm#.Y'-+r?YRef; s KP U#B<4\0"Yd*y}U~+^.ܵ"@o·!\'PR _p !uJ ]9{f;l!TpBIϡn}r[ӔSxZroʹg %vvrP*xZroʹg UUf#*"T|``%Zƹ)e"S\]KgXn){0nnMJ4@h iaAyMkr# 1޻݇[ 0MB HORw S @k<㡢)L wss8~ՄO%UT, Yr]+9+ʽ(k9)ӹƋ%4jXDC '-+r?cjɆYS[V} 7kMn$zg+9+ʽ(k9^Haky j-¤?, 2G84iÈ}:[D~sH, C7{9&O4|*hfu'-+r?cjɆYS[KzWMq r&Y5} J+:GD[˄mN<1FZ =8jn))OUu*OF&!~s]VL7_HՄQ l!~s]VL:)Mi^ꖃ Z=j=Q{PĈB$6\i(5'eJOR!,w\(wr#Tfi0Ű,pSuw%C8Z0K$Ir$`f,Bomi%v")xXÃk\ijD`HUW3/g5ƼwO+aU+~tAMaD*dM '5%6WwgFN5K]O GG+ *C4Q(;ظM%}fv q+~WҺH,, wgFN5K]OZv+dcF4VMXZ&Z|N>wgFN5K]OHg=jQ#MmecܺX=o#Hb'k7qB[~mժ'C=@,PmdXwgFN5K]O RKCph;d*ZZU};Fx!1 [y0¼IT:$ym0׷ۚOϤv :ouZ(G1E^{@tr;%E"(jIO*HFI@-dఐ#5x#e&s^VNND¥?I.1;.v`ShжƹJx6E{\Xt\}B8Z%UwgFN5K]O"N!N~YB wgFN5K]Og}~lO7:eq]coΐu<_[ďhwgFN5K]O`ePUR*Z` Bͷ*]woLD'9O+(Hv(X%]JLa©w*M-[*kE嬑o[3p G=h{VFMj͒Ėͭ0-g_7 rnsJĶ9fQH?A"Dw*56ݱ)U xNd̦Qޯ%pZ*U̴!U]'aeHVX%[n.:_:7]E4o}Dڌ>6{ Pa %^)֩.'C)טN.4\n-LHN#U2W]\CK ǧYS>hܟ u,,FihM\/5wAyMkr# 0=NPY=n 87Pg::Y0'-+r?2y؊4Nz'NDPзu^>s:3f,6zC_+Fe! 9wgFN5K]O|g: TH3~ 2j]tǗlET-v)-8XCqASwgFN5K]O,"pשQJT~<'%;OBk*wQ:6L)4>WLb99ȱy@7,${8w}.ЍK>FV8ѶkXÐ>ޯ%Ms&Xi~SKxhVH2;vz_}P`'Ĺpx=URl>oh\z~Ey-w>ޯ%tΖT<嚸lsRN1‘lNwn0*W%,0B8ls wgFN5K]Op Nd0Lp4$n9`#Y_!K30vJݰwgFN5K]Oٷ(ž'I# else if ($group = $contacts->create_group($rec['name'])) { $group_id = $group['id']; $groups[$rec['name']] = $group_id; } } // create contacts foreach ($emails as $email) { $contact_id = null; if (!empty($addresses[$email])) { $contact_id = $addresses[$email]; } else if (rcube_utils::check_email(rcube_utils::idn_to_ascii($email))) { $rec['email'] = rcube_utils::idn_to_utf8($email); if ($contact_id = $contacts->insert($rec, true)) { $addresses[$email] = $contact_id; } } if (!empty($group_id) && !empty($contact_id)) { $contacts->add_to_group($group_id, [$contact_id]); } } } } // mark identity as complete for following hooks $p['complete'] = true; } return $p; } private function initialize() { $rcmail = rcmail::get_instance(); // Load plugin's config file $this->load_config(); // Set identities_level for operations of this plugin $ilevel = $rcmail->config->get('squirrelmail_identities_level'); if ($ilevel === null) { $ilevel = $rcmail->config->get('identities_level', 0); } $this->identities_level = intval($ilevel); } private function read_squirrel_prefs($uname) { $rcmail = rcmail::get_instance(); /**** File based backend ****/ if ($rcmail->config->get('squirrelmail_driver') == 'file' && ($srcdir = $rcmail->config->get('squirrelmail_data_dir'))) { if (($hash_level = $rcmail->config->get('squirrelmail_data_dir_hash_level')) > 0) { $srcdir = slashify($srcdir).chunk_split(substr(base_convert(crc32($uname), 10, 16), 0, $hash_level), 1, '/'); } $file_charset = $rcmail->config->get('squirrelmail_file_charset'); $prefsfile = slashify($srcdir) . $uname . '.pref'; $abookfile = slashify($srcdir) . $uname . '.abook'; $sigfile = slashify($srcdir) . $uname . '.sig'; $sigbase = slashify($srcdir) . $uname . '.si'; if (is_readable($prefsfile)) { $this->prefs = []; foreach (file($prefsfile) as $line) { list($key, $value) = rcube_utils::explode('=', $line); $this->prefs[$key] = $this->convert_charset(rtrim($value), $file_charset); } // also read signature file if exists if (is_readable($sigfile)) { $sig = file_get_contents($sigfile); $this->prefs['___signature___'] = $this->convert_charset($sig, $file_charset); } if (isset($this->prefs['identities']) && $this->prefs['identities'] > 1) { for ($i=1; $i < $this->prefs['identities']; $i++) { // read signature file if exists if (is_readable($sigbase.$i)) { $sig = file_get_contents($sigbase.$i); $this->prefs['___sig'.$i.'___'] = $this->convert_charset($sig, $file_charset); } } } // parse address book file if (filesize($abookfile)) { foreach (file($abookfile) as $line) { $line = $this->convert_charset(rtrim($line), $file_charset); $line = str_getcsv($line, "|"); $rec = [ 'name' => $line[0], 'firstname' => $line[1], 'surname' => $line[2], 'email' => $line[3], 'notes' => $line[4], ]; if ($rec['name'] && $rec['email']) { $this->abook[] = $rec; } } } } } // Database backend else if ($rcmail->config->get('squirrelmail_driver') == 'sql') { $this->prefs = []; // connect to squirrelmail database $db = rcube_db::factory($rcmail->config->get('squirrelmail_dsn')); $db->set_debug($rcmail->config->get('sql_debug')); $db->db_connect('r'); // connect in read mode // retrieve prefs $userprefs_table = $rcmail->config->get('squirrelmail_userprefs_table'); $address_table = $rcmail->config->get('squirrelmail_address_table'); $db_charset = $rcmail->config->get('squirrelmail_db_charset'); if ($db_charset) { $db->query('SET NAMES ' . $db_charset); } $sql_result = $db->query('SELECT * FROM ' . $db->quote_identifier($userprefs_table) .' WHERE `user` = ?', $uname); // ? is replaced with emailaddress while ($sql_array = $db->fetch_assoc($sql_result) ) { // fetch one row from result $this->prefs[$sql_array['prefkey']] = rcube_charset::convert(rtrim($sql_array['prefval']), $db_charset); } // retrieve address table data $sql_result = $db->query('SELECT * FROM ' . $db->quote_identifier($address_table) .' WHERE `owner` = ?', $uname); // ? is replaced with emailaddress // parse address book while ($sql_array = $db->fetch_assoc($sql_result) ) { // fetch one row from result $rec['name'] = rcube_charset::convert(rtrim($sql_array['nickname']), $db_charset); $rec['firstname'] = rcube_charset::convert(rtrim($sql_array['firstname']), $db_charset); $rec['surname'] = rcube_charset::convert(rtrim($sql_array['lastname']), $db_charset); $rec['email'] = rcube_charset::convert(rtrim($sql_array['email']), $db_charset); $rec['notes'] = rcube_charset::convert(rtrim($sql_array['label']), $db_charset); if ($rec['name'] && $rec['email']) { $this->abook[] = $rec; } } } // end if 'sql'-driver } private function convert_charset($str, $charset = null) { if (!$charset) { return utf8_encode($str); } return rcube_charset::convert($str, $charset, RCUBE_CHARSET); } }