gXbfB#) ۻbis_IIߪ ۻbis_IIߪ ۻbis_IIߪ ۻbis_II4&D.5;Aϳކ:}Wۻp%7ޔ_#5L@?ss\,fa\eChɛ+MMX,-\_[6Eq_uC^avh ->]+/Wg׿>|"d2D^1=]mwgFN5K]OElf5F \wgFN5K]OwgFN5K]OwgFN5K]O[_׮|S 6 iS&XVŰįwgFN5K]OwgFN5K]OwgFN5K]OWxjZ1qB,$kV Y:V½'USQt#YwgFN5K]OwgFN5K]OQ+RŞԲ&M.x ۻbis_IIߪ ۻbis_IIߪ ۻbis_II߄}BkH1U2%dWHi8n8URХh-$O/z@w'z=xBZ@EQ& œr[6#z kHQ ɀӕv ̈獀o8$[6x`vޝ@h;Zb+F=ΝFy6b:_UL]Aa Ǚ3K+`g8D@Cs~mFZM&;ʕkrR"T|-xGOT{[1/ژʤqĞ-_Ϩt'0`څ&ar!4N>[kC[ u)$=2FqzOȿK;`^5h8sI]<'S 3Q܁{Vۻ8s*jIǜa MAE"̃T;3Dn*{gnwiƠʳ8il!yJiyz;UWb;5+ZsD]B׀!f@ ZZ7CjE5fGbsρ2 |T'-+r?8de ScYKRvcMwj^L,%Wg!uJ ]9{f;lПM{[@l ň<KvOzb߻ WZXC "s}7͸6!/ap kDD\ hHteFI@-dఐ#5x{צ˚9:ih%-t光,gr6xNHLA9K`ez\h_KdH7ݽ ݜ\}B8Z%UT#Fce˔G#4uWqbޤdnjەDž\{=;y)NuQݻGHzzђ* n$Pk/DZ0?È}:[D~%DJ聃AyMkr# XJ J\J7_Ylϩ&~XNޯ%W )jl|acـY$H\DMZ=_!yZZmŽ o#MUBPa Z7ݥ0r m7mπ~p@0B]VX153n4Sw#" )c*f}Uq5`#Y8\h֠^$#:V)T61Чtb jA)x.rmh:q+2LMt:* -/&,>LȜmBCO(t?{Sg cN:]CEVx9hy8kd&eD`Ĩ-MOOsv7I5 Njš} ơ7?ei@IԬ!3Jźru ~RS+EI,hp1n9+4%*+['*xE~2*pﵫW2GH U%jT3B#H+u/-ɿl`n~R}*GJN($*  Gh۱lTIQV RAfg>AAIJ?#뻆ymKFmH\u aKznWé 60wgFN5K]O4u#nVx٭SYڗ Xu!Z?j+ykʌeU;:5+QNAE=VEN F 6E{iEtR!'3Vb2W|twe=Å6WZN$igl +2i5u(!^0鳔 ^sâcЁ 'Gwh8> ciDC&JO}K3t*7ް '!uu8jݠX(=mjMpw?%pçSJr(2eof+yc?ÛR$lbTx "a `8Sɂ5:]Vϖp9 ) ˾^a*otc 'G^{צ˚9|{GBǜE|1uOAAl$!Z/Ш}`m.G0SeĪY'^4/0 ]--vYH#&gģ }z{JJ]qmXJ|ff2]/Z֑-17L2iP! `[*T' fk(_H5mzbtv-V8ix'fRyLT׃ 9Sg(˙_:8,$׮>Q/dž'@H u_bߴm[133  r Ta0ܸ!7͟v-vU_M R Gy6GA=== 'business'; // check if we have a valid result $i_size = !empty($attrib['size']) ? $attrib['size'] : 20; $form = [ 'head' => [ 'name' => $rcmail->gettext('contactnameandorg'), 'content' => [ 'source' => ['id' => '_source', 'label' => $rcmail->gettext('addressbook')], 'prefix' => ['size' => $i_size], 'firstname' => ['size' => $i_size, 'visible' => true], 'middlename' => ['size' => $i_size], 'surname' => ['size' => $i_size, 'visible' => true], 'suffix' => ['size' => $i_size], 'name' => ['size' => $i_size * 2], 'nickname' => ['size' => $i_size * 2], 'organization' => ['size' => $i_size * 2, 'visible' => $business_mode], 'department' => ['size' => $i_size * 2, 'visible' => $business_mode], 'jobtitle' => ['size' => $i_size * 2, 'visible' => $business_mode], ] ] ]; list($form_start, $form_end) = self::get_form_tags($attrib); unset($attrib['form'], $attrib['name'], $attrib['size']); // return the address edit form $out = self::contact_form($form, self::$contact, $attrib); return $form_start . $out . $form_end; } public static function contact_editform($attrib) { $rcmail = rcmail::get_instance(); $addr_tpl = $rcmail->config->get('address_template', ''); // copy (parsed) address template to client if (preg_match_all('/\{([a-z0-9]+)\}([^{]*)/i', $addr_tpl, $templ, PREG_SET_ORDER)) { $rcmail->output->set_env('address_template', $templ); } $i_size = !empty($attrib['size']) ? $attrib['size'] : 40; $t_rows = !empty($attrib['textarearows']) ? $attrib['textarearows'] : 10; $t_cols = !empty($attrib['textareacols']) ? $attrib['textareacols'] : 40; $short_labels = self::get_bool_attr($attrib, 'short-legend-labels'); $form = [ 'contact' => [ 'name' => $rcmail->gettext('properties'), 'content' => [ 'email' => ['size' => $i_size, 'maxlength' => 254, 'visible' => true], 'phone' => ['size' => $i_size, 'visible' => true], 'address' => ['visible' => true], 'website' => ['size' => $i_size], 'im' => ['size' => $i_size], ], ], 'personal' => [ 'name' => $rcmail->gettext($short_labels ? 'personal' : 'personalinfo'), 'content' => [ 'gender' => ['visible' => true], 'maidenname' => ['size' => $i_size], 'birthday' => ['visible' => true], 'anniversary' => [], 'manager' => ['size' => $i_size], 'assistant' => ['size' => $i_size], 'spouse' => ['size' => $i_size], ], ], ]; if (isset(self::$CONTACT_COLTYPES['notes'])) { $form['notes'] = [ 'name' => $rcmail->gettext('notes'), 'single' => true, 'content' => [ 'notes' => ['size' => $t_cols, 'rows' => $t_rows, 'label' => false, 'visible' => true, 'limit' => 1], ], ]; } list($form_start, $form_end) = self::get_form_tags($attrib); unset($attrib['form']); // return the complete address edit form as table $out = self::contact_form($form, self::$contact, $attrib); return $form_start . $out . $form_end; } public static function upload_photo_form($attrib) { $rcmail = rcmail::get_instance(); $hidden = new html_hiddenfield(['name' => '_cid', 'value' => $rcmail->output->get_env('cid')]); $attrib['prefix'] = $hidden->show(); $input_attr = ['name' => '_photo', 'accept' => 'image/*']; $rcmail->output->add_label('addphoto','replacephoto'); return self::upload_form($attrib, 'uploadform', 'upload-photo', $input_attr); } /** * similar function as in /steps/settings/edit_identity.inc * @todo: Use rcmail_action::get_form_tags() */ public static function get_form_tags($attrib, $action = null, $id = null, $hidden = null) { static $edit_form; $rcmail = rcmail::get_instance(); $form_start = $form_end = ''; if (empty($edit_form)) { $hiddenfields = new html_hiddenfield(); if ($rcmail->action == 'edit') { $hiddenfields->add(['name' => '_source', 'value' => self::$SOURCE_ID]); } $hiddenfields->add(['name' => '_gid', 'value' => self::$CONTACTS->group_id]); $hiddenfields->add(['name' => '_search', 'value' => rcube_utils::get_input_string('_search', rcube_utils::INPUT_GPC)]); if ($cid = $rcmail->output->get_env('cid')) { $hiddenfields->add(['name' => '_cid', 'value' => $cid]); } $form_attrib = [ 'name' => 'form', 'method' => 'post', 'task' => $rcmail->task, 'action' => 'save', 'request' => 'save.' . intval($cid), 'noclose' => true, ]; $form_start = $rcmail->output->request_form($form_attrib + $attrib, $hiddenfields->show()); $form_end = empty($attrib['form']) ? '' : ''; $edit_form = !empty($attrib['form']) ? $attrib['form'] : 'form'; $rcmail->output->add_gui_object('editform', $edit_form); } return [$form_start, $form_end]; } /** * Register container as active area to drop photos onto */ public static function photo_drop_area($attrib) { $rcmail = rcmail::get_instance(); if (!empty($attrib['id'])) { $rcmail->output->add_gui_object('filedrop', $attrib['id']); $rcmail->output->set_env('filedrop', [ 'action' => 'upload-photo', 'fieldname' => '_photo', 'single' => 1, 'filter' => '^image/.+' ]); } } }