X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fpersonal%2Fgeneric%2Fclass_user.inc;h=46ecbc77d434db966131cb7fe6910dbc588d2228;hb=7697f34f9e7b22c3c38d429278e667f46a087f2b;hp=bcbd2d14c63dc078d8668492909404a18d311ec7;hpb=5f305cccde524d528bff44b9c3d51fe4822f0cf4;p=gosa.git diff --git a/plugins/personal/generic/class_user.inc b/plugins/personal/generic/class_user.inc index bcbd2d14c..46ecbc77d 100644 --- a/plugins/personal/generic/class_user.inc +++ b/plugins/personal/generic/class_user.inc @@ -76,6 +76,8 @@ class user extends plugin var $role= ""; var $publicVisible= ""; + var $dialog; + /* variables to trigger password changes */ var $pw_storage= "crypt"; var $last_pw_storage= "unset"; @@ -84,7 +86,7 @@ class user extends plugin /* attribute list for save action */ var $attributes= array("sn", "givenName", "uid", "personalTitle", "academicTitle", "homePostalAddress", "homePhone", "labeledURI", "o", "ou", "dateOfBirth", "gender","preferredLanguage", - "departmentNumber", "employeeNumber", "employeeType", "l", "st", + "departmentNumber", "employeeNumber", "employeeType", "l", "st","jpegPhoto", "roomNumber", "telephoneNumber", "mobile", "pager", "cn", "userPKCS12", "postalAddress", "facsimileTelephoneNumber", "userSMIMECertificate"); @@ -199,15 +201,15 @@ class user extends plugin /* Put gender attribute to upper case */ if (isset ($this->attrs['gender'])){ $this->gender= strtoupper($this->attrs['gender'][0]); - } + } } /* execute generates the html output for this node */ function execute() { - /* Call parent execute */ - plugin::execute(); + /* Call parent execute */ + plugin::execute(); $smarty= get_smarty(); @@ -255,7 +257,9 @@ class user extends plugin $smarty->assign("gender_list", $sex); /* Assign prefered langage */ - $language= array(0 => " ", "fr_FR" => ("fr_FR"), "en_EN" => ("en_EN"), "de_DE" => ("de_DE"), "it_IT" => ("it_IT"), "nl_NL" => ("nl_NL")); + $language= array(0 => " ", "fr_FR" => ("fr_FR"), "en_EN" => ("en_EN"), + "de_DE" => ("de_DE"), "it_IT" => ("it_IT"), + "nl_NL" => ("nl_NL"), "ru_RU" => ("ru_RU")); $smarty->assign("preferredLanguage_list", $language); /* Get random number for pictures */ @@ -269,6 +273,31 @@ class user extends plugin return; } + /* Base select dialog */ + $once = true; + foreach($_POST as $name => $value){ + if(preg_match("/^chooseBase/",$name) && $once){ + $once = false; + $this->dialog = new baseSelectDialog($this->config,$this->allowedBasesToMoveTo()); + $this->dialog->setCurrentBase($this->base); + } + } + + /* Dialog handling */ + if(is_object($this->dialog)){ + /* Must be called before save_object */ + $this->dialog->save_object(); + + if($this->dialog->isClosed()){ + $this->dialog = false; + }elseif($this->dialog->isSelected()){ + $this->base = $this->dialog->isSelected(); + $this->dialog= false; + }else{ + return($this->dialog->execute()); + } + } + /* Want picture edit dialog? */ if (isset($_POST['edit_picture'])){ /* Save values for later recovery, in case some presses @@ -281,8 +310,8 @@ class user extends plugin /* Remove picture? */ if (isset($_POST['picture_remove'])){ + $this->set_picture (); $this->jpegPhoto= "*removed*"; - $this->set_picture ("./images/default.jpg"); $this->is_modified= TRUE; return($smarty->fetch (get_template_path('generic_picture.tpl', TRUE, dirname(__FILE__)))); @@ -426,8 +455,25 @@ class user extends plugin /* Read out data*/ $timeto = $certificate->getvalidto_date(); $timefrom = $certificate->getvalidfrom_date(); - $str = "
CN".preg_replace("/ /", " ", $certificate->getname())."

". - sprintf(_("Certificate is valid from %s to %s and is currently %s."), "".date('d M Y',$timefrom)."","".date('d M Y',$timeto)."", $certificate->isvalid()?""._("valid")."":""._("invalid").""); + + /* Additional info if start end time is '0' */ + $add_str_info = ""; + if($timeto == 0 && $timefrom == 0){ + $add_str_info = "
"._("(Some types of certificates are currently not supported and may be displayed as 'invalid'.)").""; + } + + $str = " + + + + +
CN".preg_replace("/ /", " ", $certificate->getname())."

". + + sprintf(_("Certificate is valid from %s to %s and is currently %s."), + "".date('d M Y',$timefrom)."", + "".date('d M Y',$timeto)."", + $certificate->isvalid()?""._("valid")."": + ""._("invalid")."").$add_str_info; $smarty->assign($cert."info",$str); $smarty->assign($cert."_state","true"); } else { @@ -442,7 +488,7 @@ class user extends plugin /* Show us the edit screen */ @$smarty->assign("bases", $this->allowedBasesToMoveTo()); # $smarty->assign("bases", $this->config->idepartments); - $smarty->assign("base_select", $this->base); + $smarty->assign("base_select", $this->base); $smarty->assign("selectmode", chkacl($this->acl, "create")); $smarty->assign("certificatesACL", chkacl($this->acl, "certificates")); $smarty->assign("jpegPhotoACL", chkacl($this->acl, "jpegPhoto")); @@ -452,7 +498,7 @@ class user extends plugin $this->pw_storage= $this->config->current['HASH']; } - $temp = passwordMethod::get_available_methods(); + $temp = @passwordMethod::get_available_methods(); $hashes = $temp['name']; $smarty->assign("pwmode", $hashes); @@ -514,6 +560,7 @@ class user extends plugin { $ldap= $this->config->get_ldap_link(); $ldap->rmdir ($this->dn); + show_ldap_error($ldap->get_error(), _("Removing generic user account failed")); /* Delete references to groups */ $ldap->cd ($this->config->current['BASE']); @@ -533,8 +580,43 @@ class user extends plugin $og->save (); } + /* Kerberos server defined? */ + if (isset($this->config->data['SERVERS']['KERBEROS'])){ + $cfg= $this->config->data['SERVERS']['KERBEROS']; + } + if (isset($cfg['SERVER']) && function_exists('kadm5_init_with_password')){ + + /* Connect to the admin interface */ + $handle = kadm5_init_with_password($cfg['SERVER'], $cfg['REALM'], + $cfg['ADMIN'], $cfg['PASSWORD']); + + /* Errors? */ + if ($handle === FALSE){ + print_red (_("Kerberos database communication failed")); + return (2); + } + + /* Build user principal, get list of existsing principals */ + $principal= $this->uid."@".$cfg['REALM']; + $principals = kadm5_get_principals($handle); + + /* User exists in database? */ + if (in_array($principal, $principals)){ + + /* Ok. User exists. Remove him/her */ + $ret= kadm5_delete_principal ( $handle, $principal); + if ($ret === FALSE){ + print_red (_("Can't remove user from kerberos database.")); + } + } + + /* Free kerberos admin handle */ + kadm5_destroy($handle); + } + + /* Optionally execute a command after we're done */ - $this->handle_post_events("remove"); + $this->handle_post_events("remove",array("uid" => $this->uid)); } @@ -600,9 +682,6 @@ class user extends plugin /* Only force save of changes .... If this attributes aren't changed, avoid saving. */ - if ($this->use_dob == "1"){ - $this->dateOfBirth= date("Y-m-d", $this->dateOfBirth); - } if($this->gender=="0") $this->gender =""; if($this->preferredLanguage=="0") $this->preferredLanguage =""; @@ -610,6 +689,12 @@ class user extends plugin /* First use parents methods to do some basic fillup in $this->attrs */ plugin::save (); + if ($this->use_dob == "1"){ + /* If it is an array, the generic page has never been loaded - so there's no difference. Using an array would cause an error btw. */ + if(!is_array($this->attrs['dateOfBirth'])) { + $this->attrs['dateOfBirth']= date("Y-m-d", $this->attrs['dateOfBirth']); + } + } /* Remove additional objectClasses */ $tmp= array(); foreach ($this->attrs['objectClass'] as $key => $set){ @@ -755,7 +840,7 @@ class user extends plugin $this->attrs["jpegPhoto"] = $output; } - } elseif(!$this->new) { + } else{ $this->attrs["jpegPhoto"] = array(); } @@ -781,7 +866,7 @@ class user extends plugin /* Save data. Using 'modify' implies that the entry is already present, use 'add' for new entries. So do a check first... */ - $ldap->cat ($this->dn); + $ldap->cat ($this->dn, array('dn')); if ($ldap->fetch()){ $mode= "modify"; } else { @@ -802,7 +887,7 @@ class user extends plugin $this->cleanup(); $ldap->cd ($this->dn); $ldap->$mode ($this->attrs); - if (show_ldap_error($ldap->get_error())){ + if (show_ldap_error($ldap->get_error(), _("Saving generic user account failed"))){ return (1); } @@ -862,7 +947,7 @@ class user extends plugin /* Ok. User exists. Remove him/her when pw_storage has changed to be NOT kerberos. */ - if ($this->pw_storage != "kerberos"){ + if ($this->pw_storage != $this->config->current['KRBSASL']){ $ret= kadm5_delete_principal ( $handle, $principal); if ($ret === FALSE){ @@ -872,8 +957,8 @@ class user extends plugin } else { - /* User doesn't exists, create it when pw_storage is kerberos. */ - if ($this->pw_storage == "kerberos"){ + /* User doesn't exists, create it when pw_storage is kerberos or SASL. */ + if ($this->pw_storage == "kerberos" || $this->pw_storage == "sasl" ){ $ret= kadm5_create_principal ( $handle, $principal); if ($ret === FALSE){ @@ -889,11 +974,14 @@ class user extends plugin /* Optionally execute a command after we're done */ if ($mode == "add"){ - $this->handle_post_events("add"); + $this->handle_post_events("add",array("uid" => $this->uid)); } elseif ($this->is_modified){ - $this->handle_post_events("modify"); + $this->handle_post_events("modify",array("uid" => $this->uid)); } + /* Fix tagging if needed */ + $this->handle_object_tagging(); + return (0); } @@ -901,10 +989,16 @@ class user extends plugin /* Check formular input */ function check() { - $message= array(); + /* Call common method to give check the hook */ + $message= plugin::check(); /* Assemble cn */ - $this->cn= $this->givenName." ".$this->sn; + if ($this->personalTitle == ""){ + $pt= ""; + } else { + $pt= $this->personalTitle." "; + } + $this->cn= $pt.$this->givenName." ".$this->sn; /* Permissions for that base? */ if (isset($this->config->current['DNMODE']) && $this->config->current['DNMODE'] == "uid"){ @@ -1084,9 +1178,9 @@ class user extends plugin /* Load picture from file to object */ - function set_picture($filename) + function set_picture($filename ="") { - if (!is_file($filename)){ + if (!is_file($filename) || $filename == ""){ $filename= "./images/default.jpg"; $this->jpegPhoto= "*removed*"; } @@ -1165,13 +1259,17 @@ class user extends plugin $ldap->search("(&(objectClass=posixGroup)(memberUid=".$_SESSION['ui']->username."))",array("gosaSubtreeACL")); while($attrs = $ldap->fetch()){ - foreach($attrs['gosaSubtreeACL'] as $attr){ - if((preg_match("/:user#/",$attr))||(preg_match("/:all/",$attr))){ - $s = preg_replace("/^.*ou=groups,/","",$attrs['dn']); - - foreach($this->config->idepartments as $key => $dep) { - if(preg_match("/".$s."/i",$key)){ - $allowed[$key] = $dep; + + if(isset($attrs['gosaSubtreeACL'])){ + + foreach($attrs['gosaSubtreeACL'] as $attr){ + if((preg_match("/:user#/",$attr))||(preg_match("/:all/",$attr))){ + $s = preg_replace("/^.*".get_groups_ou().",/","",$attrs['dn']); + + foreach($this->config->idepartments as $key => $dep) { + if(preg_match("/".$s."/i",$key)){ + $allowed[$key] = $dep; + } } } } @@ -1193,10 +1291,76 @@ class user extends plugin } + function getCopyDialog() + { + $str = ""; + + $_SESSION['binary'] = $this->photoData; + $_SESSION['binarytype']= "image/jpeg"; + + /* Get random number for pictures */ + srand((double)microtime()*1000000); + $rand = rand(0, 10000); + + $smarty = get_smarty(); + + $smarty->assign("passwordTodo","clear"); + + if(isset($_POST['passwordTodo'])){ + $smarty->assign("passwordTodo",$_POST['passwordTodo']); + } + + $smarty->assign("sn", $this->sn); + $smarty->assign("givenName",$this->givenName); + $smarty->assign("uid", $this->uid); + $smarty->assign("rand", $rand); + $str = $smarty->fetch(get_template_path("paste_generic.tpl",TRUE,dirname(__FILE__))); + $ret = array(); + $ret['string'] = $str; + $ret['status'] = ""; + return($ret); + } + function saveCopyDialog() + { + if((isset($_FILES['picture_file']['tmp_name'])) && ($_FILES['picture_file']['size'] > 0)){ + $this->set_picture($_FILES['picture_file']['tmp_name']); + } + + /* Remove picture? */ + if (isset($_POST['picture_remove'])){ + $this->jpegPhoto= "*removed*"; + $this->set_picture ("./images/default.jpg"); + $this->is_modified= TRUE; + } + + $attrs = array("uid","givenName","sn"); + foreach($attrs as $attr){ + if(isset($_POST[$attr])){ + $this->$attr = $_POST[$attr]; + } + } + } + + + function PrepareForCopyPaste($source) + { + plugin::PrepareForCopyPaste($source); + + /* Reset certificate information addepted from source user + to avoid setting the same user certificate for the destination user. */ + $this->userPKCS12= ""; + $this->userSMIMECertificate= ""; + $this->userCertificate= ""; + $this->certificateSerialNumber= ""; + $this->old_certificateSerialNumber= ""; + $this->old_userPKCS12= ""; + $this->old_userSMIMECertificate= ""; + $this->old_userCertificate= ""; + } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: