copia de user.module
TRANSCRIPT
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 1/71
<?php
/***@file*Enablestheuserregistrationandloginsystem.*/
/***Maximumlengthofusernametextfield.*/define('USERNAME_MAX_LENGTH',60);
/***Maximumlengthofusere-mailtextfield.*/define('EMAIL_MAX_LENGTH',254);
/***Onlyadministratorscancreateuseraccounts.*/define('USER_REGISTER_ADMINISTRATORS_ONLY',0);
/***Visitorscancreatetheirownaccounts.
*/define('USER_REGISTER_VISITORS',1);
/***Visitorscancreateaccounts,buttheydon'tbecomeactivewithout*administrativeapproval.*/define('USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL',2);
/***Implementhook_help().*/functionuser_help($path,$arg){
global$user;
switch($path){case'admin/help#user':$output='';$output.='<h3>'.t('About').'</h3>';$output.='<p>'.t('TheUsermoduleallowsuserstoregister,login,andlogout.Italsoallowsuserswithproperpermissionstomanageuserroles(usedtoclassifyusers)andpermissionsassociatedwiththoseroles.Formoreinformation,seetheonlinehandbookentryfor<ahref="@user">Usermodule</a>.',array('@user'=>'http://drupal.org/handbook/modules/user')).'</p>';$output.='<h3>'.t('Uses').'</h3>';$output.='<dl>';
$output.='<dt>'.t('Creatingandmanagingusers').'</dt>';$output.='<dd>'.t('TheUsermoduleallowsuserswiththeappropriate<ahref="@permissions">permissions</a>tocreateuseraccountsthroughthe<ahref="@people">Peopleadministrationpage</a>,wheretheycanalsoassignuserstooneormoreroles,andblockordeleteuseraccounts.Ifallowed,userswithoutaccounts(anonymoususers)cancreatetheirownaccountsonthe<ahref="@register">Createnewaccount</a>page.',array('@permissions'=>url('admin/people/permissions',array('fragment'=>'module-user')),'@people'=>url('admin/people'),'@register'=>url('user/register'))).'</dd>';$output.='<dt>'.t('Userrolesandpermissions').'</dt>';
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 2/71
$output.='<dd>'.t('<em>Roles</em>areusedtogroupandclassifyusers;eachusercanbeassignedoneormoreroles.Bydefaulttherearetworoles:<em>anonymoususer</em>(usersthatarenotloggedin)and<em>authenticateduser</em>(usersthatareregisteredandloggedin).DependingonchoicesyoumadewhenyouinstalledDrupal,theinstallationprocessmayhavedefinedmoreroles,andyoucancreateadditionalcustomrolesonthe<ahref="@roles">Rolespage</a>.Aftercreatingroles,youcansetpermissionsforeachroleonthe<ahref="@permissions_user">Permissionspage</a>.Grantingapermissionallowsuserswhohavebeenassignedaparticularroletoperformanactiononthesite,suchasviewingaparticulartypeofcontent,editingorcreatingcontent,administeringsettingsforaparticularmodule,orusingaparticularfunctionofthesite(suchassearch).',array('@permissions_user'=>url('admin/people/permissions'),'@roles'=>url('admin/people/permissions/roles'))).'</dd>';$output.='<dt>'.t('Accountsettings').'</dt>';$output.='<dd>'.t('The<ahref="@accounts">Accountsettingspage</a>allowsyoutomanagesettingsforthedisplayednameoftheanonymoususerrole,personalcontactforms,userregistration,andaccountcancellation.Onthispageyoucanalsomanagesettingsforaccountpersonalization(includingsignaturesanduserpictures),andadaptthetextforthee-mailmessagesthataresentautomaticallyduringtheuserregistrationprocess.',array('@accounts'=>url('admin/config/people/accounts'))).'</dd>';$output.='</dl>';return$output;case'admin/people/create':
return'<p>'.t("Thiswebpageallowsadministratorstoregisternewusers.Users'e-mailaddressesandusernamesmustbeunique.").'</p>';case'admin/people/permissions':return'<p>'.t('Permissionsletyoucontrolwhatuserscandoandseeonyoursite.Youcandefineaspecificsetofpermissionsforeachrole.(Seethe<ahref="@role">Roles</a>pagetocreatearole).TwoimportantrolestoconsiderareAuthenticatedUsersandAdministrators.AnypermissionsgrantedtotheAuthenticatedUsersrolewillbegiventoanyuserwhocanlogintoyoursite.YoucanmakeanyroletheAdministratorroleforthesite,meaningthiswillbegrantedallnewpermissionsautomatically.Youcandothisonthe<ahref="@settings">UserSettings</a>page.Youshouldbecarefultoensurethatonlytrustedusersaregiventhisaccessandlevelofcontrolofyoursite.',array('@role'=>url('admin/people/permissions/roles'),'@settings'=>url('admin/config/people/ac
counts'))).'</p>';case'admin/people/permissions/roles':$output='<p>'.t('RolesallowyoutofinetunethesecurityandadministrationofDrupal.Aroledefinesagroupofusersthathavecertainprivilegesasdefinedonthe<ahref="@permissions">permissionspage</a>.Examplesofrolesinclude:anonymoususer,authenticateduser,moderator,administratorandsoon.Inthisareayouwilldefinethenamesandorderoftherolesonyoursite.Itisrecommendedtoorderyourrolesfromleastpermissive(anonymoususer)tomostpermissive(administrator).Todeletearolechoose"editrole".',array('@permissions'=>url('admin/people/permissions'))).'</p>';$output.='<p>'.t('Bydefault,Drupalcomeswithtwouserroles:').'</p>';$output.='<ul>';
$output.='<li>'.t("Anonymoususer:thisroleisusedforusersthatdon'thaveauseraccountorthatarenotauthenticated.").'</li>';$output.='<li>'.t('Authenticateduser:thisroleisautomaticallygrantedtoallloggedinusers.').'</li>';$output.='</ul>';return$output;case'admin/config/people/accounts/fields':return'<p>'.t('Thisformletsadministratorsadd,edit,andarrangefieldsforstoringuserdata.').'</p>';case'admin/config/people/accounts/display':
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 3/71
return'<p>'.t('Thisformletsadministratorsconfigurehowfieldsshouldbedisplayedwhenrenderingauserprofilepage.').'</p>';case'admin/people/search':return'<p>'.t('Enterasimplepattern("*"maybeusedasawildcardmatch)tosearchforausernameore-mailaddress.Forexample,onemaysearchfor"br"andDrupalmightreturn"brian","brad",and"[email protected]".').'</p>';}}
/***Invokesauserhookineverymodule.**Wecannotusemodule_invoke()forthis,becausetheargumentsneedto*bepassedbyreference.**@param$type*Atextstringthatcontrolswhichuserhooktoinvoke.Validchoicesare:*-cancel:Invokeshook_user_cancel().*-insert:Invokeshook_user_insert().*-login:Invokeshook_user_login().*-presave:Invokeshook_user_presave().*-update:Invokeshook_user_update().*@param$edit
*Anassociativearrayvariablecontainingformvaluestobepassed*asthefirstparameterofthehookfunction.*@param$account*Theuseraccountobjecttobepassedasthesecondparameterofthehook*function.*@param$category*Thecategoryofuserinformationbeingactedupon.*/functionuser_module_invoke($type,&$edit,$account,$category=NULL){foreach(module_implements('user_'.$type)as$module){$function=$module.'_user_'.$type;$function($edit,$account,$category);}
}
/***Implementshook_theme().*/functionuser_theme(){returnarray('user_picture'=>array('variables'=>array('account'=>NULL),'template'=>'user-picture',),'user_profile'=>array('renderelement'=>'elements',
'template'=>'user-profile','file'=>'user.pages.inc',),'user_profile_category'=>array('renderelement'=>'element','template'=>'user-profile-category','file'=>'user.pages.inc',),'user_profile_item'=>array('renderelement'=>'element',
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 4/71
'template'=>'user-profile-item','file'=>'user.pages.inc',),'user_list'=>array('variables'=>array('users'=>NULL,'title'=>NULL),),'user_admin_permissions'=>array('renderelement'=>'form','file'=>'user.admin.inc',),'user_admin_roles'=>array('renderelement'=>'form','file'=>'user.admin.inc',),'user_permission_description'=>array('variables'=>array('permission_item'=>NULL,'hide'=>NULL),'file'=>'user.admin.inc',),'user_signature'=>array('variables'=>array('signature'=>NULL),),);}
/***Implementshook_entity_info().*/functionuser_entity_info(){$return=array('user'=>array('label'=>t('User'),'controllerclass'=>'UserController','basetable'=>'users','uricallback'=>'user_uri','labelcallback'=>'format_username','fieldable'=>TRUE,'entitykeys'=>array(
'id'=>'uid',),'bundles'=>array('user'=>array('label'=>t('User'),'admin'=>array('path'=>'admin/config/people/accounts','accessarguments'=>array('administerusers'),),),),'viewmodes'=>array('full'=>array(
'label'=>t('Useraccount'),'customsettings'=>FALSE,),),),);return$return;}
/**
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 5/71
*Entityuricallback.*/functionuser_uri($user){returnarray('path'=>'user/'.$user->uid,);}
/***Implementshook_field_info_alter().*/functionuser_field_info_alter(&$info){//Addthe'user_register_form'instancesettingtoallfieldtypes.foreach($infoas$field_type=>&$field_type_info){$field_type_info+=array('instance_settings'=>array());$field_type_info['instance_settings']+=array('user_register_form'=>FALSE,);}}
/***Implementshook_field_extra_fields().*/
functionuser_field_extra_fields(){$return['user']['user']=array('form'=>array('account'=>array('label'=>t('Usernameandpassword'),'description'=>t('Usermoduleaccountformelements.'),'weight'=>-10,),'timezone'=>array('label'=>t('Timezone'),'description'=>t('Usermoduletimezoneformelement.'),'weight'=>6,),
),'display'=>array('summary'=>array('label'=>t('History'),'description'=>t('Usermodulehistoryviewelement.'),'weight'=>5,),),);
return$return;}
/***Fetchesauserobjectbasedonanexternalauthenticationsource.**@paramstring$authname*Theexternalauthenticationusername.**@return*Afully-loadeduserobjectiftheuserisfoundorFALSEifnotfound.*/functionuser_external_load($authname){
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 6/71
$uid=db_query("SELECTuidFROM{authmap}WHEREauthname=:authname",array(':authname'=>$authname))->fetchField();
if($uid){returnuser_load($uid);}else{returnFALSE;}}
/***Loadmultipleusersbasedoncertainconditions.**Thisfunctionshouldbeusedwheneveryouneedtoloadmorethanoneuser*fromthedatabase.Usersareloadedintomemoryandwillnotrequire*databaseaccessifloadedagainduringthesamepagerequest.**@param$uids*AnarrayofuserIDs.*@param$conditions*(deprecated)Anassociativearrayofconditionsonthe{users}*table,wherethekeysarethedatabasefieldsandthevaluesarethe*valuesthosefieldsmusthave.Instead,itispreferabletouse
*EntityFieldQuerytoretrievealistofentityIDsloadableby*thisfunction.*@param$reset*Abooleanindicatingthattheinternalcacheshouldbereset.Usethisif*loadingauserobjectwhichhasbeenalteredduringthepagerequest.**@return*Anarrayofuserobjects,indexedbyuid.**@seeentity_load()*@seeuser_load()*@seeuser_load_by_mail()*@seeuser_load_by_name()
*@seeEntityFieldQuery**@todoRemove$conditionsinDrupal8.*/functionuser_load_multiple($uids=array(),$conditions=array(),$reset=FALSE){returnentity_load('user',$uids,$conditions,$reset);}
/***Controllerclassforusers.**ThisextendstheDrupalDefaultEntityControllerclass,addingrequired
*specialhandlingforuserobjects.*/classUserControllerextendsDrupalDefaultEntityController{
functionattachLoad(&$queried_users,$revision_id=FALSE){//BuildanarrayofuserpictureIDssothatthesecanbefetchedlater.$picture_fids=array();foreach($queried_usersas$key=>$record){$picture_fids[]=$record->picture;$queried_users[$key]->data=unserialize($record->data);
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 7/71
$queried_users[$key]->roles=array();if($record->uid){$queried_users[$record->uid]->roles[DRUPAL_AUTHENTICATED_RID]='authenticateduser';}else{$queried_users[$record->uid]->roles[DRUPAL_ANONYMOUS_RID]='anonymoususer';}}
//Addanyadditionalrolesfromthedatabase.$result=db_query('SELECTr.rid,r.name,ur.uidFROM{role}rINNERJOIN{users_roles}urONur.rid=r.ridWHEREur.uidIN(:uids)',array(':uids'=>array_keys($queried_users)));foreach($resultas$record){$queried_users[$record->uid]->roles[$record->rid]=$record->name;}
//Addthefullfileobjectsforuserpicturesifenabled.if(!empty($picture_fids)&&variable_get('user_pictures',1)==1){$pictures=file_load_multiple($picture_fids);foreach($queried_usersas$account){if(!empty($account->picture)&&isset($pictures[$account->picture])){
$account->picture=$pictures[$account->picture];}else{$account->picture=NULL;}}}//CallthedefaultattachLoad()method.Thiswilladdfieldsandcall//hook_user_load().parent::attachLoad($queried_users,$revision_id);}}
/***Loadsauserobject.**Drupalhasaglobal$userobject,whichrepresentsthecurrently-logged-in*user.Sotoavoidconfusionandtoavoidclobberingtheglobal$userobject,*itisagoodideatoassigntheresultofthisfunctiontoadifferentlocal*variable,generally$account.Ifyouactuallydowanttoactastheuseryou*areloading,itisessentialtocalldrupal_save_session(FALSE);first.*See*@linkhttp://drupal.org/node/218104Safelyimpersonatinganotheruser@endlink*formoreinformation.*
*@param$uid*IntegerspecifyingtheuserIDtoload.*@param$reset*TRUEtoresettheinternalcacheandloadfromthedatabase;FALSE*(default)toloadfromtheinternalcache,ifset.**@return*Afully-loadeduserobjectuponsuccessfuluserload,orFALSEiftheuser*cannotbeloaded.*
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 8/71
*@seeuser_load_multiple()*/functionuser_load($uid,$reset=FALSE){$users=user_load_multiple(array($uid),array(),$reset);returnreset($users);}
/***Fetchauserobjectbyemailaddress.**@param$mail*Stringwiththeaccount'se-mailaddress.*@return*Afully-loaded$userobjectuponsuccessfuluserloadorFALSEifuser*cannotbeloaded.**@seeuser_load_multiple()*/functionuser_load_by_mail($mail){$users=user_load_multiple(array(),array('mail'=>$mail));returnreset($users);}
/**
*Fetchauserobjectbyaccountname.**@param$name*Stringwiththeaccount'susername.*@return*Afully-loaded$userobjectuponsuccessfuluserloadorFALSEifuser*cannotbeloaded.**@seeuser_load_multiple()*/functionuser_load_by_name($name){$users=user_load_multiple(array(),array('name'=>$name));returnreset($users);
}
/***Savechangestoauseraccountoraddanewuser.**@param$account*(optional)Theuserobjecttomodifyoradd.Ifyouwanttomodify*anexistinguseraccount,youwillneedtoensurethat(a)$account*isanobject,and(b)youhaveset$account->uidtothenumeric*userIDoftheuseraccountyouwishtomodify.Ifyou*wanttocreateanewuseraccount,youcanset$account->is_newto*TRUEoromitthe$account->uidfield.*@param$edit
*Anarrayoffieldsandvaluestosave.Forexamplearray('name'*=>'Myname').Key/valuepairsaddedtothe$edit['data']willbe*serializedandsavedinthe{users.data}column.*@param$category*(optional)Thecategoryforstoringprofileinformationin.**@return*Afully-loaded$userobjectuponsuccessfulsaveorFALSEifthesavefailed.*
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 9/71
*@todoD8:Drop$editandfixuser_save()tobeconsistentwithothers.*/functionuser_save($account,$edit=array(),$category='account'){$transaction=db_transaction();try{if(!empty($edit['pass'])){//Allowalternatepasswordhashingschemes.require_onceDRUPAL_ROOT.'/'.variable_get('password_inc','includes/password.inc');$edit['pass']=user_hash_password(trim($edit['pass']));//AbortifthehashingfailedandreturnedFALSE.if(!$edit['pass']){returnFALSE;}}else{//Avoidoverwritinganexistingpasswordwithablankpassword.unset($edit['pass']);}if(isset($edit['mail'])){$edit['mail']=trim($edit['mail']);}
//Loadthestoredentity,ifany.
if(!empty($account->uid)&&!isset($account->original)){$account->original=entity_load_unchanged('user',$account->uid);}
if(empty($account)){$account=newstdClass();}if(!isset($account->is_new)){$account->is_new=empty($account->uid);}//Prepopulate$edit['data']withthecurrentvalueof$account->data.//Modulescanaddtoorremovefromthisarrayinhook_user_presave().if(!empty($account->data)){
$edit['data']=!empty($edit['data'])?array_merge($account->data,$edit['data']):$account->data;}
//Invokehook_user_presave()forallmodules.user_module_invoke('presave',$edit,$account,$category);
//InvokepresaveoperationsofFieldAttachAPIandEntityAPI.ThoseAPIs//requireafully-fledgedandupdatedentityobject.Therefore,weneedto//copyanynewpropertyvaluesof$editintoit.foreach($editas$key=>$value){$account->$key=$value;}
field_attach_presave('user',$account);module_invoke_all('entity_presave',$account,'user');
if(is_object($account)&&!$account->is_new){//Processpictureuploads.if(!empty($account->picture->fid)&&(!isset($account->original->picture->fid)||$account->picture->fid!=$account->original->picture->fid)){$picture=$account->picture;//Ifthepictureisatemporaryfilemoveittoitsfinallocationand//makeitpermanent.
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 10/71
if(!$picture->status){$info=image_get_info($picture->uri);$picture_directory=file_default_scheme().'://'.variable_get('user_picture_path','pictures');
//Preparethepicturesdirectory.file_prepare_directory($picture_directory,FILE_CREATE_DIRECTORY);$destination=file_stream_wrapper_uri_normalize($picture_directory.'/picture-'.$account->uid.'-'.REQUEST_TIME.'.'.$info['extension']);
//Movethetemporaryfileintothefinallocation.if($picture=file_move($picture,$destination,FILE_EXISTS_RENAME)){$picture->status=FILE_STATUS_PERMANENT;$account->picture=file_save($picture);file_usage_add($picture,'user','user',$account->uid);}}//Deletethepreviouspictureifitwasdeletedorreplaced.if(!empty($account->original->picture->fid)){file_usage_delete($account->original->picture,'user','user',$account->uid);file_delete($account->original->picture);}
}$account->picture=empty($account->picture->fid)?0:$account->picture->fid;
//Donotallow'uid'tobechanged.$account->uid=$account->original->uid;//Savechangestotheusertable.$success=drupal_write_record('users',$account,'uid');if($success===FALSE){//Thequeryfailed-bettertoabortthesavethanriskfurther//dataloss.returnFALSE;}
//Reloaduserrolesifprovided.if($account->roles!=$account->original->roles){db_delete('users_roles')->condition('uid',$account->uid)->execute();
$query=db_insert('users_roles')->fields(array('uid','rid'));foreach(array_keys($account->roles)as$rid){if(!in_array($rid,array(DRUPAL_ANONYMOUS_RID,DRUPAL_AUTHENTICATED_RID))){$query->values(array('uid'=>$account->uid,
'rid'=>$rid,));}}$query->execute();}
//Deleteablockeduser'ssessionstokickthemiftheyareonline.if($account->original->status!=$account->status&&$account->status==0){
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 11/71
drupal_session_destroy_uid($account->uid);}
//Ifthepasswordchanged,deleteallopensessionsandrecreate//thecurrentone.if($account->pass!=$account->original->pass){drupal_session_destroy_uid($account->uid);if($account->uid==$GLOBALS['user']->uid){drupal_session_regenerate();}}
//SaveFielddata.field_attach_update('user',$account);
//Sendemailsafterwehavethenewuserobject.if($account->status!=$account->original->status){//Theuser'sstatusischanging;conditionallysendnotificationemail.$op=$account->status==1?'status_activated':'status_blocked';_user_mail_notify($op,$account);}
//Update$editwithanyinterimchangesto$account.foreach($accountas$key=>$value){
if(!property_exists($account->original,$key)||$value!==$account->original->$key){$edit[$key]=$value;}}user_module_invoke('update',$edit,$account,$category);module_invoke_all('entity_update',$account,'user');}else{//Allow'uid'tobesetbythecaller.Thereisnodangerofwritingan//existinguserasdrupal_write_recordwilldoanINSERT.if(empty($account->uid)){$account->uid=db_next_id(db_query('SELECTMAX(uid)FROM{users}')->fet
chField());}//Allow'created'tobesetbythecaller.if(!isset($account->created)){$account->created=REQUEST_TIME;}$success=drupal_write_record('users',$account);if($success===FALSE){//OnafailedINSERTsomeotherexistinguser'suidmaybereturned.//Wemustaborttoavoidoverwritingtheiraccount.returnFALSE;}
//Makesure$accountisproperlyinitialized.$account->roles[DRUPAL_AUTHENTICATED_RID]='authenticateduser';
field_attach_insert('user',$account);$edit=(array)$account;user_module_invoke('insert',$edit,$account,$category);module_invoke_all('entity_insert',$account,'user');
//Saveuserroles.if(count($account->roles)>1){
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 12/71
$query=db_insert('users_roles')->fields(array('uid','rid'));foreach(array_keys($account->roles)as$rid){if(!in_array($rid,array(DRUPAL_ANONYMOUS_RID,DRUPAL_AUTHENTICATED_RID))){$query->values(array('uid'=>$account->uid,'rid'=>$rid,));}}$query->execute();}}//Clearinternalproperties.unset($account->is_new);unset($account->original);//Clearthestaticloadingcache.entity_get_controller('user')->resetCache(array($account->uid));
return$account;}catch(Exception$e){$transaction->rollback();watchdog_exception('user',$e);
throw$e;}}
/***Verifythesyntaxofthegivenname.*/functionuser_validate_name($name){if(!$name){returnt('Youmustenterausername.');}if(substr($name,0,1)==''){returnt('Theusernamecannotbeginwithaspace.');
}if(substr($name,-1)==''){returnt('Theusernamecannotendwithaspace.');}if(strpos($name,'')!==FALSE){returnt('Theusernamecannotcontainmultiplespacesinarow.');}if(preg_match('/[^\x{80}-\x{F7}a-z0-9@_.\'-]/i',$name)){returnt('Theusernamecontainsanillegalcharacter.');}if(preg_match('/[\x{80}-\x{A0}'.//Non-printableISO-8859-1+NBSP'\x{AD}'.//Soft-hyphen'\x{2000}-\x{200F}'.//Variousspacecharacters
'\x{2028}-\x{202F}'.//Bidirectionaltextoverrides'\x{205F}-\x{206F}'.//Varioustexthintingcharacters'\x{FEFF}'.//Byteordermark'\x{FF01}-\x{FF60}'.//Full-widthlatin'\x{FFF9}-\x{FFFD}'.//Replacementcharacters'\x{0}-\x{1F}]/u',//NULLbyteandcontrolcharacters$name)){returnt('Theusernamecontainsanillegalcharacter.');}if(drupal_strlen($name)>USERNAME_MAX_LENGTH){
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 13/71
returnt('Theusername%nameistoolong:itmustbe%maxcharactersorless.',array('%name'=>$name,'%max'=>USERNAME_MAX_LENGTH));}}
/***Validatesauser'semailaddress.**Checksthatauser'semailaddressexistsandfollowsallstandard*validationrules.Returnserrormessageswhentheaddressisinvalid.**@param$mail*Auser'semailaddress.**@return*Iftheaddressisinvalid,ahuman-readableerrormessageisreturned.*Iftheaddressisvalid,nothingisreturned.*/functionuser_validate_mail($mail){if(!$mail){returnt('Youmustenterane-mailaddress.');}if(!valid_email_address($mail)){returnt('Thee-mailaddress%mailisnotvalid.',array('%mail'=>$mail));
}}
/***Validatesanimageuploadedbyauser.**@seeuser_account_form()*/functionuser_validate_picture(&$form,&$form_state){//Ifrequired,validatetheuploadedpicture.$validators=array('file_validate_is_image'=>array(),'file_validate_image_resolution'=>array(variable_get('user_picture_dimensi
ons','85x85')),'file_validate_size'=>array(variable_get('user_picture_file_size','30')*1024),);
//Savethefileasatemporaryfile.$file=file_save_upload('picture_upload',$validators);if($file===FALSE){form_set_error('picture_upload',t("Failedtouploadthepictureimage;the%directorydirectorydoesn'texistorisnotwritable.",array('%directory'=>variable_get('user_picture_path','pictures'))));}elseif($file!==NULL){
$form_state['values']['picture_upload']=$file;}}
/***Generatearandomalphanumericpassword.*/functionuser_password($length=10){//Thisvariablecontainsthelistofallowablecharactersforthe//password.Notethatthenumber0andtheletter'O'havebeen
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 14/71
//removedtoavoidconfusionbetweenthetwo.Thesameistrue//of'I',1,and'l'.$allowable_characters='abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789';
//Zero-basedcountofcharactersintheallowablelist:$len=strlen($allowable_characters)-1;
//Declarethepasswordasablankstring.$pass='';
//Loopthenumberoftimesspecifiedby$length.for($i=0;$i<$length;$i++){
//Eachiteration,pickarandomcharacterfromthe//allowablestringandappendittothepassword:$pass.=$allowable_characters[mt_rand(0,$len)];}
return$pass;}
/***Determinethepermissionsforoneormoreroles.
**@param$roles*AnarraywhosekeysaretheroleIDsofinterest,suchas$user->roles.**@return*AnarrayindexedbyroleID.Eachvalueisanarraywhosekeysarethe*permissionstringsforthegivenroleID.*/functionuser_role_permissions($roles=array()){$cache=&drupal_static(__FUNCTION__,array());
$role_permissions=$fetch=array();
if($roles){foreach($rolesas$rid=>$name){if(isset($cache[$rid])){$role_permissions[$rid]=$cache[$rid];}else{//Addthisridtothelistofthoseneedingtobefetched.$fetch[]=$rid;//Prepareincasenopermissionsarereturned.$cache[$rid]=array();}}
if($fetch){//Getfromthedatabasepermissionsthatwerenotinthestaticvariable.//OnlyroleIDswithatleastonepermissionassignedwillreturnrows.$result=db_query("SELECTrid,permissionFROM{role_permission}WHEREridIN(:fetch)",array(':fetch'=>$fetch));
foreach($resultas$row){$cache[$row->rid][$row->permission]=TRUE;}foreach($fetchas$rid){
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 15/71
//Foreveryrid,weknowweatleastassignedanemptyarray.$role_permissions[$rid]=$cache[$rid];}}}
return$role_permissions;}
/***Determinewhethertheuserhasagivenprivilege.**@param$string*Thepermission,suchas"administernodes",beingcheckedfor.*@param$account*(optional)Theaccounttocheck,ifnotgivenusecurrentlyloggedinuser.**@return*BooleanTRUEifthecurrentuserhastherequestedpermission.**AllpermissionchecksinDrupalshouldgothroughthisfunction.This*way,weguaranteeconsistentbehavior,andensurethatthesuperuser*canperformallactions.*/
functionuser_access($string,$account=NULL){global$user;
if(!isset($account)){$account=$user;}
//User#1hasallprivileges:if($account->uid==1){returnTRUE;}
//ToreducethenumberofSQLqueries,wecachetheuser'spermissions
//inastaticvariable.//Usetheadvanceddrupal_static()pattern,sincethisiscalledveryoften.static$drupal_static_fast;if(!isset($drupal_static_fast)){$drupal_static_fast['perm']=&drupal_static(__FUNCTION__);}$perm=&$drupal_static_fast['perm'];if(!isset($perm[$account->uid])){$role_permissions=user_role_permissions($account->roles);
$perms=array();foreach($role_permissionsas$one_role){$perms+=$one_role;
}$perm[$account->uid]=$perms;}
returnisset($perm[$account->uid][$string]);}
/***Checksforusernamesblockedbyuseradministration.*
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 16/71
*@returnbooleanTRUEforblockedusers,FALSEforactive.*/functionuser_is_blocked($name){returndb_select('users')->fields('users',array('name'))->condition('name',db_like($name),'LIKE')->condition('status',0)->execute()->fetchObject();}
/***Implementshook_permission().*/functionuser_permission(){returnarray('administerpermissions'=>array('title'=>t('Administerpermissions'),'restrictaccess'=>TRUE,),'administerusers'=>array('title'=>t('Administerusers'),'restrictaccess'=>TRUE,),'accessuserprofiles'=>array(
'title'=>t('Viewuserprofiles'),),'changeownusername'=>array('title'=>t('Changeownusername'),),'cancelaccount'=>array('title'=>t('Cancelownuseraccount'),'description'=>t('Note:contentmaybekept,unpublished,deletedortransferredtothe%anonymous-nameuserdependingontheconfigured<ahref="@user-settings-url">usersettings</a>.',array('%anonymous-name'=>variable_get('anonymous',t('Anonymous')),'@user-settings-url'=>url('admin/config/people/accounts'))),),
'selectaccountcancellationmethod'=>array('title'=>t('Selectmethodforcancellingownaccount'),'restrictaccess'=>TRUE,),);}
/***Implementshook_file_download().**Ensurethatuserpictures(avatars)arealwaysdownloadable.*/functionuser_file_download($uri){
if(strpos(file_uri_target($uri),variable_get('user_picture_path','pictures').'/picture-')===0){$info=image_get_info($uri);returnarray('Content-Type'=>$info['mime_type']);}}
/***Implementshook_file_move().*/
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 17/71
functionuser_file_move($file,$source){//Ifauser'spictureisreplacedwithanewone,updatetherecordin//theuserstable.if(isset($file->fid)&&isset($source->fid)&&$file->fid!=$source->fid){db_update('users')->fields(array('picture'=>$file->fid,))->condition('picture',$source->fid)->execute();}}
/***Implementshook_file_delete().*/functionuser_file_delete($file){//Removeanyreferencestothefile.db_update('users')->fields(array('picture'=>0))->condition('picture',$file->fid)->execute();}
/***Implementshook_search_info().*/functionuser_search_info(){returnarray('title'=>'Users',);}
/***Implementshook_search_access().*/functionuser_search_access(){
returnuser_access('accessuserprofiles');}
/***Implementshook_search_execute().*/functionuser_search_execute($keys=NULL,$conditions=NULL){$find=array();//ReplacewildcardswithMySQL/PostgreSQLwildcards.$keys=preg_replace('!\*+!','%',$keys);$query=db_select('users')->extend('PagerDefault');$query->fields('users',array('uid'));if(user_access('administerusers')){
//Administratorscanalsosearchintheotherwiseprivateemailfield.$query->fields('users',array('mail'));$query->condition(db_or()->condition('name','%'.db_like($keys).'%','LIKE')->condition('mail','%'.db_like($keys).'%','LIKE'));}else{$query->condition('name','%'.db_like($keys).'%','LIKE');}$uids=$query
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 18/71
->limit(15)->execute()->fetchCol();$accounts=user_load_multiple($uids);
$results=array();foreach($accountsas$account){$result=array('title'=>format_username($account),'link'=>url('user/'.$account->uid,array('absolute'=>TRUE)),);if(user_access('administerusers')){$result['title'].='('.$account->mail.')';}$results[]=$result;}
return$results;}
/***Implementshook_element_info().*/functionuser_element_info(){
$types['user_profile_category']=array('#theme_wrappers'=>array('user_profile_category'),);$types['user_profile_item']=array('#theme'=>'user_profile_item',);return$types;}
/***Implementshook_user_view().*/functionuser_user_view($account){
$account->content['user_picture']=array('#markup'=>theme('user_picture',array('account'=>$account)),'#weight'=>-10,);if(!isset($account->content['summary'])){$account->content['summary']=array();}$account->content['summary']+=array('#type'=>'user_profile_category','#attributes'=>array('class'=>array('user-member')),'#weight'=>5,'#title'=>t('History'),);
$account->content['summary']['member_for']=array('#type'=>'user_profile_item','#title'=>t('Memberfor'),'#markup'=>format_interval(REQUEST_TIME-$account->created),);}
/***Helperfunctiontoadddefaultuseraccountfieldstouserregistrationandeditform.
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 19/71
**@seeuser_account_form_validate()*@seeuser_validate_current_pass()*@seeuser_validate_picture()*@seeuser_validate_mail()*/functionuser_account_form(&$form,&$form_state){global$user;
$account=$form['#user'];$register=($form['#user']->uid>0?FALSE:TRUE);
$admin=user_access('administerusers');
$form['#validate'][]='user_account_form_validate';
//Accountinformation.$form['account']=array('#type'=>'container','#weight'=>-10,);//Onlyshownamefieldonregistrationformorusercanchangeownusername.$form['account']['name']=array('#type'=>'textfield',
'#title'=>t('Username'),'#maxlength'=>USERNAME_MAX_LENGTH,'#description'=>t('Spacesareallowed;punctuationisnotallowedexceptforperiods,hyphens,apostrophes,andunderscores.'),'#required'=>TRUE,'#attributes'=>array('class'=>array('username')),'#default_value'=>(!$register?$account->name:''),'#access'=>($register||($user->uid==$account->uid&&user_access('changeownusername'))||$admin),'#weight'=>-10,);
$form['account']['mail']=array(
'#type'=>'textfield','#title'=>t('E-mailaddress'),'#maxlength'=>EMAIL_MAX_LENGTH,'#description'=>t('Avalide-mailaddress.Alle-mailsfromthesystemwillbesenttothisaddress.Thee-mailaddressisnotmadepublicandwillonlybeusedifyouwishtoreceiveanewpasswordorwishtoreceivecertainnewsornotificationsbye-mail.'),'#required'=>TRUE,'#default_value'=>(!$register?$account->mail:''),);
//Displaypasswordfieldonlyforexistingusersorwhenuserisallowedto//assignapasswordduringregistration.
if(!$register){$form['account']['pass']=array('#type'=>'password_confirm','#size'=>25,'#description'=>t('Tochangethecurrentuserpassword,enterthenewpasswordinbothfields.'),);//Toskipthecurrentpasswordfield,theusermusthaveloggedinviaa//one-timelinkandhavethetokenintheURL.$pass_reset=isset($_SESSION['pass_reset_'.$account->uid])&&isset($_GET
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 20/71
['pass-reset-token'])&&($_GET['pass-reset-token']==$_SESSION['pass_reset_'.$account->uid]);$protected_values=array();$current_pass_description='';//Theusermayonlychangetheirownpasswordwithouttheircurrent//passwordiftheyloggedinviaaone-timeloginlink.if(!$pass_reset){$protected_values['mail']=$form['account']['mail']['#title'];$protected_values['pass']=t('Password');$request_new=l(t('Requestnewpassword'),'user/password',array('attributes'=>array('title'=>t('Requestnewpasswordviae-mail.'))));$current_pass_description=t('Enteryourcurrentpasswordtochangethe%mailor%pass.!request_new.',array('%mail'=>$protected_values['mail'],'%pass'=>$protected_values['pass'],'!request_new'=>$request_new));}//Theusermustentertheircurrentpasswordtochangetoanewone.if($user->uid==$account->uid){$form['account']['current_pass_required_values']=array('#type'=>'value','#value'=>$protected_values,);$form['account']['current_pass']=array('#type'=>'password','#title'=>t('Currentpassword'),
'#size'=>25,'#access'=>!empty($protected_values),'#description'=>$current_pass_description,'#weight'=>-5,'#attributes'=>array('autocomplete'=>'off'),);$form['#validate'][]='user_validate_current_pass';}}elseif(!variable_get('user_email_verification',TRUE)||$admin){$form['account']['pass']=array('#type'=>'password_confirm','#size'=>25,
'#description'=>t('Provideapasswordforthenewaccountinbothfields.'),'#required'=>TRUE,);}
if($admin){$status=isset($account->status)?$account->status:1;}else{$status=$register?variable_get('user_register',USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL)==USER_REGISTER_VISITORS:$account->status;}
$form['account']['status']=array('#type'=>'radios','#title'=>t('Status'),'#default_value'=>$status,'#options'=>array(t('Blocked'),t('Active')),'#access'=>$admin,);
$roles=array_map('check_plain',user_roles(TRUE));//Thedisabledcheckboxsubelementforthe'authenticateduser'role
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 21/71
//mustbegeneratedseparatelyandaddedtothecheckboxeselement,//becauseofalimitationinFormAPInotsupportingasingledisabled//checkboxwithinasetofcheckboxes.//@todoThisshouldbesolvedmoreelegantly.Seeissue#119038.$checkbox_authenticated=array('#type'=>'checkbox','#title'=>$roles[DRUPAL_AUTHENTICATED_RID],'#default_value'=>TRUE,'#disabled'=>TRUE,);unset($roles[DRUPAL_AUTHENTICATED_RID]);$form['account']['roles']=array('#type'=>'checkboxes','#title'=>t('Roles'),'#default_value'=>(!$register&&isset($account->roles)?array_keys($account->roles):array()),'#options'=>$roles,'#access'=>$roles&&user_access('administerpermissions'),DRUPAL_AUTHENTICATED_RID=>$checkbox_authenticated,);
$form['account']['notify']=array('#type'=>'checkbox','#title'=>t('Notifyuserofnewaccount'),
'#access'=>$register&&$admin,);
//Signature.$form['signature_settings']=array('#type'=>'fieldset','#title'=>t('Signaturesettings'),'#weight'=>1,'#access'=>(!$register&&variable_get('user_signatures',0)),);
$form['signature_settings']['signature']=array('#type'=>'text_format',
'#title'=>t('Signature'),'#default_value'=>isset($account->signature)?$account->signature:'','#description'=>t('Yoursignaturewillbepubliclydisplayedattheendofyourcomments.'),'#format'=>isset($account->signature_format)?$account->signature_format:NULL,);
//Picture/avatar.$form['picture']=array('#type'=>'fieldset','#title'=>t('Picture'),'#weight'=>1,
'#access'=>(!$register&&variable_get('user_pictures',0)),);$form['picture']['picture']=array('#type'=>'value','#value'=>isset($account->picture)?$account->picture:NULL,);$form['picture']['picture_current']=array('#markup'=>theme('user_picture',array('account'=>$account)),);$form['picture']['picture_delete']=array(
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 22/71
'#type'=>'checkbox','#title'=>t('Deletepicture'),'#access'=>!empty($account->picture->fid),'#description'=>t('Checkthisboxtodeleteyourcurrentpicture.'),);$form['picture']['picture_upload']=array('#type'=>'file','#title'=>t('Uploadpicture'),'#size'=>48,'#description'=>t('Yourvirtualfaceorpicture.Pictureslargerthan@dimensionspixelswillbescaleddown.',array('@dimensions'=>variable_get('user_ picture_dimensions','85x85'))).''.filter_xss_admin(variable_get('user_picture_guidelines','')),);$form['#validate'][]='user_validate_picture';}
/***Formvalidationhandlerforthecurrentpasswordontheuser_account_form().**@seeuser_account_form()*/functionuser_validate_current_pass(&$form,&$form_state){$account=$form['#user'];
foreach($form_state['values']['current_pass_required_values']as$key=>$name){//Thisvalidationonlyworksforrequiredtextfields(likemail)or//formvalueslikepassword_confirmthathavetheirownvalidation//thatpreventthemfrombeingemptyiftheyarechanged.if((strlen(trim($form_state['values'][$key]))>0)&&($form_state['values'][$key]!=$account->$key)){require_onceDRUPAL_ROOT.'/'.variable_get('password_inc','includes/password.inc');$current_pass_failed=empty($form_state['values']['current_pass'])||!user_check_password($form_state['values']['current_pass'],$account);if($current_pass_failed){form_set_error('current_pass',t("Yourcurrentpasswordismissingorin
correct;it'srequiredtochangethe%name.",array('%name'=>$name)));form_set_error($key);}//Weonlyneedtocheckthepasswordonce.break;}}}
/***Formvalidationhandlerforuser_account_form().**@seeuser_account_form()
*/functionuser_account_form_validate($form,&$form_state){if($form['#user_category']=='account'||$form['#user_category']=='register'){$account=$form['#user'];//Validateneworchangingusername.if(isset($form_state['values']['name'])){if($error=user_validate_name($form_state['values']['name'])){form_set_error('name',$error);}
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 23/71
elseif((bool)db_select('users')->fields('users',array('uid'))->condition('uid',$account->uid,'<>')->condition('name',db_like($form_state['values']['name']),'LIKE')->range(0,1)->execute()->fetchField()){form_set_error('name',t('Thename%nameisalreadytaken.',array('%name'=>$form_state['values']['name'])));}}
//Trimwhitespacefrommail,topreventconfusing'e-mailnotvalid'//warningsoftencausedbycuttingandpasting.$mail=trim($form_state['values']['mail']);form_set_value($form['account']['mail'],$mail,$form_state);
//Validatethee-mailaddress,andcheckifitistakenbyanexistinguser.if($error=user_validate_mail($form_state['values']['mail'])){form_set_error('mail',$error);}elseif((bool)db_select('users')->fields('users',array('uid'))->condition('uid',$account->uid,'<>')->condition('mail',db_like($form_state['values']['mail']),'LIKE')->range(0,1)->execute()->fetchField()){//Formaterrormessagedependentonwhethertheuserisloggedinornot.if($GLOBALS['user']->uid){form_set_error('mail',t('Thee-mailaddress%emailisalreadytaken.',
array('%email'=>$form_state['values']['mail'])));}else{form_set_error('mail',t('Thee-mailaddress%emailisalreadyregistered.<ahref="@password">Haveyouforgottenyourpassword?</a>',array('%email'=>$form_state['values']['mail'],'@password'=>url('user/password'))));}}
//Makesurethesignatureisn'tlongerthanthesizeofthedatabasefield.//Signaturesaredisabledbydefault,somakesureitexistsfirst.if(isset($form_state['values']['signature'])){//Movetextformatforusersignatureinto'signature_format'.
$form_state['values']['signature_format']=$form_state['values']['signature']['format'];//Movetextvalueforusersignatureinto'signature'.$form_state['values']['signature']=$form_state['values']['signature']['value'];
$user_schema=drupal_get_schema('users');if(drupal_strlen($form_state['values']['signature'])>$user_schema['fields']['signature']['length']){form_set_error('signature',t('Thesignatureistoolong:itmustbe%maxcharactersorless.',array('%max'=>$user_schema['fields']['signature']['length'])));}
}}}
/***Implementshook_user_presave().*/functionuser_user_presave(&$edit,$account,$category){if($category=='account'||$category=='register'){if(!empty($edit['picture_upload'])){
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 24/71
$edit['picture']=$edit['picture_upload'];}//Deletepictureifrequested,andifnoreplacementpicturewasgiven.elseif(!empty($edit['picture_delete'])){$edit['picture']=NULL;}//Prepareuserroles.if(isset($edit['roles'])){$edit['roles']=array_filter($edit['roles']);}}
//Moveaccountcancellationinformationinto$user->data.foreach(array('user_cancel_method','user_cancel_notify')as$key){if(isset($edit[$key])){$edit['data'][$key]=$edit[$key];}}}
/***Implementshook_user_categories().*/functionuser_user_categories(){
returnarray(array('name'=>'account','title'=>t('Accountsettings'),'weight'=>1,));}
functionuser_login_block($form){$form['#action']=url($_GET['q'],array('query'=>drupal_get_destination()));$form['#id']='user-login-form';$form['#validate']=user_login_default_validators();$form['#submit'][]='user_login_submit';
$form['name']=array('#type'=>'textfield','#title'=>t('Username'),'#maxlength'=>USERNAME_MAX_LENGTH,'#size'=>15,'#required'=>TRUE,);$form['pass']=array('#type'=>'password','#title'=>t('Password'),'#maxlength'=>60,'#size'=>15,'#required'=>TRUE,);$form['actions']=array('#type'=>'actions');
$form['actions']['submit']=array('#type'=>'submit','#value'=>t('Login'),);$items=array();if(variable_get('user_register',USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL)){$items[]=l(t('Createnewaccount'),'user/register',array('attributes'=>array('title'=>t('Createanewuseraccount.'))));}$items[]=l(t('Requestnewpassword'),'user/password',array('attributes'=>
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 25/71
array('title'=>t('Requestnewpasswordviae-mail.'))));$form['links']=array('#markup'=>theme('item_list',array('items'=>$items)));return$form;}
/***Implementshook_block_info().*/functionuser_block_info(){global$user;
$blocks['login']['info']=t('Userlogin');//Notworthcaching.$blocks['login']['cache']=DRUPAL_NO_CACHE;
$blocks['new']['info']=t('Who\'snew');$blocks['new']['properties']['administrative']=TRUE;
//Toodynamictocache.$blocks['online']['info']=t('Who\'sonline');$blocks['online']['cache']=DRUPAL_NO_CACHE;$blocks['online']['properties']['administrative']=TRUE;
return$blocks;}
/***Implementshook_block_configure().*/functionuser_block_configure($delta=''){global$user;
switch($delta){case'new':$form['user_block_whois_new_count']=array('#type'=>'select',
'#title'=>t('Numberofuserstodisplay'),'#default_value'=>variable_get('user_block_whois_new_count',5),'#options'=>drupal_map_assoc(array(1,2,3,4,5,6,7,8,9,10)),);return$form;
case'online':$period=drupal_map_assoc(array(30,60,120,180,300,600,900,1800,2700,3600,5400,7200,10800,21600,43200,86400),'format_interval');$form['user_block_seconds_online']=array('#type'=>'select','#title'=>t('Useractivity'),'#default_value'=>variable_get('user_block_seconds_online',900),'#options'=>$period,'#description'=>t('Auserisconsideredonlineforthislongaftertheyhavelastviewedapage.'));
$form['user_block_max_list_count']=array('#type'=>'select','#title'=>t('Userlistlength'),'#default_value'=>variable_get('user_block_max_list_count',10),'#options'=>drupal_map_assoc(array(0,5,10,15,20,25,30,40,50,75,100)),'#description'=>t('Maximumnumberofcurrentlyonlineuserstodisplay.'));return$form;}}
/**
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 26/71
*Implementshook_block_save().*/functionuser_block_save($delta='',$edit=array()){global$user;
switch($delta){case'new':variable_set('user_block_whois_new_count',$edit['user_block_whois_new_count']);break;
case'online':variable_set('user_block_seconds_online',$edit['user_block_seconds_online']);variable_set('user_block_max_list_count',$edit['user_block_max_list_count']);break;}}
/***Implementshook_block_view().*/functionuser_block_view($delta=''){
global$user;
$block=array();
switch($delta){case'login'://Forusability'ssake,avoidshowingtwologinformsononepage.if(!$user->uid&&!(arg(0)=='user'&&!is_numeric(arg(1)))){
$block['subject']=t('Userlogin');$block['content']=drupal_get_form('user_login_block');}return$block;
case'new':if(user_access('accesscontent')){//Retrievealistofnewuserswhohavesubsequentlyaccessedthesitesuccessfully.$items=db_query_range('SELECTuid,nameFROM{users}WHEREstatus<>0ANDaccess<>0ORDERBYcreatedDESC',0,variable_get('user_block_whois_new_count',5))->fetchAll();$output=theme('user_list',array('users'=>$items));
$block['subject']=t('Who\'snew');$block['content']=$output;}
return$block;
case'online':if(user_access('accesscontent')){//Countusersactivewithinthedefinedperiod.$interval=REQUEST_TIME-variable_get('user_block_seconds_online',900);
//Performdatabasequeriestogatheronlineuserlists.Weuses.timestamp
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 27/71
//ratherthanu.accessbecauseitismuchfaster.$authenticated_count=db_query("SELECTCOUNT(DISTINCTs.uid)FROM{sessions}sWHEREs.timestamp>=:timestampANDs.uid>0",array(':timestamp'=>$interval))->fetchField();
$output='<p>'.format_plural($authenticated_count,'Thereiscurrently1useronline.','Therearecurrently@countusersonline.').'</p>';
//Displayalistofcurrentlyonlineusers.$max_users=variable_get('user_block_max_list_count',10);if($authenticated_count&&$max_users){$items=db_query_range('SELECTu.uid,u.name,MAX(s.timestamp)ASmax _timestampFROM{users}uINNERJOIN{sessions}sONu.uid=s.uidWHEREs.timestamp>=:intervalANDs.uid>0GROUPBYu.uid,u.nameORDERBYmax_timestampDESC',0,$max_users,array(':interval'=>$interval))->fetchAll();$output.=theme('user_list',array('users'=>$items));}
$block['subject']=t('Who\'sonline');$block['content']=$output;}return$block;}}
/***Processvariablesforuser-picture.tpl.php.**The$variablesarraycontainsthefollowingarguments:*-$account:Auser,nodeorcommentobjectwith'name','uid'and'picture'*fields.**@seeuser-picture.tpl.php*/functiontemplate_preprocess_user_picture(&$variables){$variables['user_picture']='';if(variable_get('user_pictures',0)){
$account=$variables['account'];if(!empty($account->picture)){//@TODO:Ideallythisfunctionwouldonlybepassedfileobjects,but//sincethere'salotoflegacycodethatJOINsthe{users}tableto//{node}or{comments}andpassestheresultsintothisfunctionifwe//anumericvalueinthepicturefieldwe'llassumeit'safileid//andloaditforthem.Oncewe'vegotuser_load_multiple()and//comment_load_multiple()functionstheusermodulewillbeabletoload//thepicturefilesinmassduringtheobject'sloadprocess.if(is_numeric($account->picture)){$account->picture=file_load($account->picture);}if(!empty($account->picture->uri)){
$filepath=$account->picture->uri;}}elseif(variable_get('user_picture_default','')){$filepath=variable_get('user_picture_default','');}if(isset($filepath)){$alt=t("@user'spicture",array('@user'=>format_username($account)));//IftheimagedoesnothaveavalidDrupalscheme(foreg.HTTP),//don'tloadimagestyles.
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 28/71
if(module_exists('image')&&file_valid_uri($filepath)&&$style=variable_get('user_picture_style','')){$variables['user_picture']=theme('image_style',array('style_name'=>$style,'path'=>$filepath,'alt'=>$alt,'title'=>$alt));}else{$variables['user_picture']=theme('image',array('path'=>$filepath,'alt'=>$alt,'title'=>$alt));}if(!empty($account->uid)&&user_access('accessuserprofiles')){$attributes=array('attributes'=>array('title'=>t('Viewuserprofile.')),'html'=>TRUE);$variables['user_picture']=l($variables['user_picture'],"user/$account->uid",$attributes);}}}}
/***ReturnsHTMLforalistofusers.**@param$variables*Anassociativearraycontaining:
*-users:Anarraywithuserobjects.Shouldcontainatleastthenameand*uid.*-title:(optional)Titletopassontotheme_item_list().**@ingroupthemeable*/functiontheme_user_list($variables){$users=$variables['users'];$title=$variables['title'];$items=array();
if(!empty($users)){foreach($usersas$user){
$items[]=theme('username',array('account'=>$user));}}returntheme('item_list',array('items'=>$items,'title'=>$title));}
functionuser_is_anonymous(){//Menuadministratorscanseeitemsforanonymouswhenadministering.return!$GLOBALS['user']->uid||!empty($GLOBALS['menu_admin']);}
functionuser_is_logged_in(){return(bool)$GLOBALS['user']->uid;
}
functionuser_register_access(){returnuser_is_anonymous()&&variable_get('user_register',USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);}
/***Userviewaccesscallback.*
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 29/71
*@param$account*Caneitherbeafulluserobjectora$uid.*/functionuser_view_access($account){$uid=is_object($account)?$account->uid:(int)$account;
//Neverallowaccesstoviewtheanonymoususeraccount.if($uid){//Adminscanviewall,userscanviewownprofilesatalltimes.if($GLOBALS['user']->uid==$uid||user_access('administerusers')){returnTRUE;}elseif(user_access('accessuserprofiles')){//Atthispoint,loadthecompleteaccountobject.if(!is_object($account)){$account=user_load($uid);}return(is_object($account)&&$account->status);}}returnFALSE;}
/**
*Accesscallbackforuseraccountediting.*/functionuser_edit_access($account){return(($GLOBALS['user']->uid==$account->uid)||user_access('administerusers'))&&$account->uid>0;}
/***Menuaccesscallback;limitaccesstoaccountcancellationpages.**Limitaccesstouserswiththe'cancelaccount'permissionoradministrative*users,andpreventtheanonymoususerfromcancellingtheaccount.*/
functionuser_cancel_access($account){return((($GLOBALS['user']->uid==$account->uid)&&user_access('cancelaccount'))||user_access('administerusers'))&&$account->uid>0;}
/***Implementshook_menu().*/functionuser_menu(){$items['user/autocomplete']=array('title'=>'Userautocomplete','pagecallback'=>'user_autocomplete','accesscallback'=>'user_access',
'accessarguments'=>array('accessuserprofiles'),'type'=>MENU_CALLBACK,'file'=>'user.pages.inc',);
//Registrationandloginpages.$items['user']=array('title'=>'Useraccount','titlecallback'=>'user_menu_title','pagecallback'=>'user_page',
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 30/71
'accesscallback'=>TRUE,'file'=>'user.pages.inc','weight'=>-10,'menu_name'=>'user-menu',);
$items['user/login']=array('title'=>'Login','accesscallback'=>'user_is_anonymous','type'=>MENU_DEFAULT_LOCAL_TASK,);
$items['user/register']=array('title'=>'Createnewaccount','pagecallback'=>'drupal_get_form','pagearguments'=>array('user_register_form'),'accesscallback'=>'user_register_access','type'=>MENU_LOCAL_TASK,);
$items['user/password']=array('title'=>'Requestnewpassword','pagecallback'=>'drupal_get_form','pagearguments'=>array('user_pass'),
'accesscallback'=>TRUE,'type'=>MENU_LOCAL_TASK,'file'=>'user.pages.inc',);$items['user/reset/%/%/%']=array('title'=>'Resetpassword','pagecallback'=>'drupal_get_form','pagearguments'=>array('user_pass_reset',2,3,4),'accesscallback'=>TRUE,'type'=>MENU_CALLBACK,'file'=>'user.pages.inc',);
$items['user/logout']=array('title'=>'Logout','accesscallback'=>'user_is_logged_in','pagecallback'=>'user_logout','weight'=>10,'menu_name'=>'user-menu','file'=>'user.pages.inc',);
//Userlistingpages.$items['admin/people']=array('title'=>'People','description'=>'Manageuseraccounts,roles,andpermissions.',
'pagecallback'=>'user_admin','pagearguments'=>array('list'),'accessarguments'=>array('administerusers'),'position'=>'left','weight'=>-4,'file'=>'user.admin.inc',);$items['admin/people/people']=array('title'=>'List','description'=>'Findandmanagepeopleinteractingwithyoursite.',
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 31/71
'accessarguments'=>array('administerusers'),'type'=>MENU_DEFAULT_LOCAL_TASK,'weight'=>-10,'file'=>'user.admin.inc',);
//Permissionsandroleforms.$items['admin/people/permissions']=array('title'=>'Permissions','description'=>'Determineaccesstofeaturesbyselectingpermissionsforroles.','pagecallback'=>'drupal_get_form','pagearguments'=>array('user_admin_permissions'),'accessarguments'=>array('administerpermissions'),'file'=>'user.admin.inc','type'=>MENU_LOCAL_TASK,);$items['admin/people/permissions/list']=array('title'=>'Permissions','description'=>'Determineaccesstofeaturesbyselectingpermissionsforroles.','type'=>MENU_DEFAULT_LOCAL_TASK,'weight'=>-8,);
$items['admin/people/permissions/roles']=array('title'=>'Roles','description'=>'List,edit,oradduserroles.','pagecallback'=>'drupal_get_form','pagearguments'=>array('user_admin_roles'),'accessarguments'=>array('administerpermissions'),'file'=>'user.admin.inc','type'=>MENU_LOCAL_TASK,'weight'=>-5,);$items['admin/people/permissions/roles/edit/%user_role']=array('title'=>'Editrole','pagearguments'=>array('user_admin_role',5),
'accesscallback'=>'user_role_edit_access','accessarguments'=>array(5),);$items['admin/people/permissions/roles/delete/%user_role']=array('title'=>'Deleterole','pagecallback'=>'drupal_get_form','pagearguments'=>array('user_admin_role_delete_confirm',5),'accesscallback'=>'user_role_edit_access','accessarguments'=>array(5),'file'=>'user.admin.inc',);
$items['admin/people/create']=array(
'title'=>'Adduser','pagearguments'=>array('create'),'accessarguments'=>array('administerusers'),'type'=>MENU_LOCAL_ACTION,);
//Administrationpages.$items['admin/config/people']=array('title'=>'People','description'=>'Configureuseraccounts.',
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 32/71
'position'=>'left','weight'=>-20,'pagecallback'=>'system_admin_menu_block_page','accessarguments'=>array('accessadministrationpages'),'file'=>'system.admin.inc','filepath'=>drupal_get_path('module','system'),);$items['admin/config/people/accounts']=array('title'=>'Accountsettings','description'=>'Configuredefaultbehaviorofusers,includingregistrationrequirements,e-mails,fields,anduserpictures.','pagecallback'=>'drupal_get_form','pagearguments'=>array('user_admin_settings'),'accessarguments'=>array('administerusers'),'file'=>'user.admin.inc','weight'=>-10,);$items['admin/config/people/accounts/settings']=array('title'=>'Settings','type'=>MENU_DEFAULT_LOCAL_TASK,'weight'=>-10,);
$items['user/%user']=array(
'title'=>'Myaccount','titlecallback'=>'user_page_title','titlearguments'=>array(1),'pagecallback'=>'user_view_page','pagearguments'=>array(1),'accesscallback'=>'user_view_access','accessarguments'=>array(1),//Byassigningadifferentmenuname,thisitem(andallregisteredchild//paths)arenolongerconsideredaschildrenof'user'.Whenaccessingthe//useraccountpages,thepreferredmenulinkthatisusedtobuildthe//activetrail(breadcrumb)willbefoundinthismenu(unlessthereis//morespecificlink),sothelinkto'user'willnotbeinthebreadcrumb.'menu_name'=>'navigation',
);
$items['user/%user/view']=array('title'=>'View','type'=>MENU_DEFAULT_LOCAL_TASK,'weight'=>-10,);
$items['user/%user/cancel']=array('title'=>'Cancelaccount','pagecallback'=>'drupal_get_form','pagearguments'=>array('user_cancel_confirm_form',1),'accesscallback'=>'user_cancel_access',
'accessarguments'=>array(1),'file'=>'user.pages.inc',);
$items['user/%user/cancel/confirm/%/%']=array('title'=>'Confirmaccountcancellation','pagecallback'=>'user_cancel_confirm','pagearguments'=>array(1,4,5),'accesscallback'=>'user_cancel_access','accessarguments'=>array(1),
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 33/71
'file'=>'user.pages.inc',);
$items['user/%user/edit']=array('title'=>'Edit','pagecallback'=>'drupal_get_form','pagearguments'=>array('user_profile_form',1),'accesscallback'=>'user_edit_access','accessarguments'=>array(1),'type'=>MENU_LOCAL_TASK,'file'=>'user.pages.inc',);
$items['user/%user_category/edit/account']=array('title'=>'Account','type'=>MENU_DEFAULT_LOCAL_TASK,'loadarguments'=>array('%map','%index'),);
if(($categories=_user_categories())&&(count($categories)>1)){foreach($categoriesas$key=>$category){//'account'isalreadyhandledbytheMENU_DEFAULT_LOCAL_TASK.if($category['name']!='account'){$items['user/%user_category/edit/'.$category['name']]=array(
'titlecallback'=>'check_plain','titlearguments'=>array($category['title']),'pagecallback'=>'drupal_get_form','pagearguments'=>array('user_profile_form',1,3),'accesscallback'=>isset($category['accesscallback'])?$category['accesscallback']:'user_edit_access','accessarguments'=>isset($category['accessarguments'])?$category['accessarguments']:array(1),'type'=>MENU_LOCAL_TASK,'weight'=>$category['weight'],'loadarguments'=>array('%map','%index'),'tab_parent'=>'user/%/edit','file'=>'user.pages.inc',
);}}}return$items;}
/***Implementshook_menu_site_status_alter().*/functionuser_menu_site_status_alter(&$menu_site_status,$path){if($menu_site_status==MENU_SITE_OFFLINE){//Ifthesiteisoffline,logoutunprivilegedusers.
if(user_is_logged_in()&&!user_access('accesssiteinmaintenancemode')){module_load_include('pages.inc','user','user');user_logout();}
if(user_is_anonymous()){switch($path){case'user'://Forwardanonymoususertologinpage.
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 34/71
drupal_goto('user/login');case'user/login':case'user/password'://Disableofflinemode.$menu_site_status=MENU_SITE_ONLINE;break;default:if(strpos($path,'user/reset/')===0){//Disableofflinemode.$menu_site_status=MENU_SITE_ONLINE;}break;}}}if(user_is_logged_in()){if($path=='user/login'){//Ifuserisloggedin,redirectto'user'insteadofgiving403.drupal_goto('user');}if($path=='user/register'){//Authenticatedusershouldberedirectedtousereditpage.drupal_goto('user/'.$GLOBALS['user']->uid.'/edit');}
}}
/***Implementshook_menu_link_alter().*/functionuser_menu_link_alter(&$link){//Thepath'user'mustbeaccessibleforanonymoususers,butonlyvisible//forauthenticatedusers.Authenticatedusersshouldsee"Myaccount",but//anonymoususersshouldnotseeitatall.Therefore,invoke//user_translated_menu_link_alter()toconditionallyhidethelink.if($link['link_path']=='user'&&$link['module']=='system'){$link['options']['alter']=TRUE;
}
//ForcetheLogoutlinktoappearonthetop-levelof'user-menu'menuby//default(i.e.,unlessithasbeencustomized).if($link['link_path']=='user/logout'&&$link['module']=='system'&&empty($link['customized'])){$link['plid']=0;}}
/***Implementshook_translated_menu_link_alter().*/
functionuser_translated_menu_link_alter(&$link){//Hidethe"Useraccount"linkforanonymoususers.if($link['link_path']=='user'&&$link['module']=='system'&&user_is_anonymous()){$link['hidden']=1;}}
/***Implementshook_admin_paths().
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 35/71
*/functionuser_admin_paths(){$paths=array('user/*/cancel'=>TRUE,'user/*/edit'=>TRUE,'user/*/edit/*'=>TRUE,);return$paths;}
/***Returns$argortheuserIDofthecurrentuserif$argis'%'orempty.**Deprecated.Use%user_uid_optionalinstead.**@todoD8:Remove.*/functionuser_uid_only_optional_to_arg($arg){returnuser_uid_optional_to_arg($arg);}
/***Loadeitheraspecifiedorthecurrentuseraccount.*
*@param$uid*AnoptionaluserIDoftheusertoload.Ifnotprovided,thecurrent*user'sIDwillbeused.*@return*Afully-loaded$userobjectuponsuccessfuluserload,FALSEifuser*cannotbeloaded.**@seeuser_load()*@todorethinkthenamingofthisinDrupal8.*/functionuser_uid_optional_load($uid=NULL){if(!isset($uid)){$uid=$GLOBALS['user']->uid;
}returnuser_load($uid);}
/***Returnauserobjectaftercheckingifanyprofilecategoryinthepathexists.*/functionuser_category_load($uid,&$map,$index){static$user_categories,$accounts;
//Cache$account-thisloadfunctionwillgetcalledforeachprofiletab.if(!isset($accounts[$uid])){
$accounts[$uid]=user_load($uid);}$valid=TRUE;if($account=$accounts[$uid]){//Sincethepathislikeuser/%/edit/category_name,thecategorynamewill//beataposition2beyondtheindexcorrespondingtothe%wildcard.$category_index=$index+2;//Validcategoriesmaycontainslashes,andhenceneedtobeimploded.$category_path=implode('/',array_slice($map,$category_index));if($category_path){
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 36/71
//Checkthattherequestedcategoryexists.$valid=FALSE;if(!isset($user_categories)){$user_categories=_user_categories();}foreach($user_categoriesas$category){if($category['name']==$category_path){$valid=TRUE;//Truncatethemaparrayincasethecategorynamehadslashes.$map=array_slice($map,0,$category_index);//Assigntheimplodedcategorynametothelastmapelement.$map[$category_index]=$category_path;break;}}}}return$valid?$account:FALSE;}
/***Returns$argortheuserIDofthecurrentuserif$argis'%'orempty.**@todorethinkthenamingofthisinDrupal8.
*/functionuser_uid_optional_to_arg($arg){//Givebackthecurrentuseruidwhencalledfromeg.tracker,aka.//withanemptyarg.Alsousethecurrentuseruidwhencalledfrom//themenuwitha%forthecurrentaccountlink.returnempty($arg)||$arg=='%'?$GLOBALS['user']->uid:$arg;}
/***Menuitemtitlecallbackforthe'user'path.**Anonymoususersshouldsee"Useraccount",butauthenticatedusersare*expectedtosee"Myaccount".
*/functionuser_menu_title(){returnuser_is_logged_in()?t('Myaccount'):t('Useraccount');}
/***Menuitemtitlecallback-usetheusername.*/functionuser_page_title($account){returnis_object($account)?format_username($account):'';}
/**
*Discoverwhichexternalauthenticationmodule(s)authenticatedausername.**@param$authname*Ausernameusedbyanexternalauthenticationmodule.*@return*Anassociativearraywithmoduleaskeyandusernameasvalue.*/functionuser_get_authmaps($authname=NULL){$authmaps=db_query("SELECTmodule,authnameFROM{authmap}WHEREauthname=:authname",array(':authname'=>$authname))->fetchAllKeyed();
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 37/71
returncount($authmaps)?$authmaps:0;}
/***Savemappingsofwhichexternalauthenticationmodule(s)authenticated*auser.Mapsexternalusernamestouseridsintheuserstable.**@param$account*Auserobject.*@param$authmaps*Anassociativearraywithacompoundkeyandtheusernameasthevalue.*Thekeyismadeupof'authname_'plusthenameoftheexternalauthentication*module.*@seeuser_external_login_register()*/functionuser_set_authmaps($account,$authmaps){foreach($authmapsas$key=>$value){$module=explode('_',$key,2);if($value){db_merge('authmap')->key(array('uid'=>$account->uid,'module'=>$module[1],
))->fields(array('authname'=>$value))->execute();}else{db_delete('authmap')->condition('uid',$account->uid)->condition('module',$module[1])->execute();}}}
/***Formbuilder;themainuserloginform.**@ingroupforms*/functionuser_login($form,&$form_state){global$user;
//Ifwearealreadyloggedon,gototheuserpageinstead.if($user->uid){drupal_goto('user/'.$user->uid);}
//Displayloginform:$form['name']=array('#type'=>'textfield','#title'=>t('Username'),'#size'=>60,'#maxlength'=>USERNAME_MAX_LENGTH,'#required'=>TRUE,);
$form['name']['#description']=t('Enteryour@susername.',array('@s'=>variable_get('site_name','Drupal')));
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 38/71
$form['pass']=array('#type'=>'password','#title'=>t('Password'),'#description'=>t('Enterthepasswordthataccompaniesyourusername.'),'#required'=>TRUE,);$form['#validate']=user_login_default_validators();$form['actions']=array('#type'=>'actions');$form['actions']['submit']=array('#type'=>'submit','#value'=>t('Login'));
return$form;}
/***Setupaseriesforvalidatorswhichcheckforblockedusers,*thenauthenticateagainstlocaldatabase,thenreturnanerrorif*authenticationfails.Distributedauthenticationmodulesarewelcome*tousehook_form_alter()tochangethisseriesinorderto*authenticateagainsttheiruserdatabaseinsteadofthelocalusers*table.Ifadistributedauthenticationmoduleissuccessful,it*shouldset$form_state['uid']toauserID.**Weusethreevalidatorsinsteadofonesinceexternalauthentication*modulesusuallyonlyneedtoalterthesecondvalidator.
**@seeuser_login_name_validate()*@seeuser_login_authenticate_validate()*@seeuser_login_final_validate()*@returnarray*Asimplelistofvalidatefunctions.*/functionuser_login_default_validators(){returnarray('user_login_name_validate','user_login_authenticate_validate','user_login_final_validate');}
/**
*AFAPIvalidatehandler.Setsanerrorifsuppliedusernamehasbeenblocked.*/functionuser_login_name_validate($form,&$form_state){if(isset($form_state['values']['name'])&&user_is_blocked($form_state['values']['name'])){//Blockedinuseradministration.form_set_error('name',t('Theusername%namehasnotbeenactivatedorisblocked.',array('%name'=>$form_state['values']['name'])));}}
/***Avalidatehandlerontheloginform.Checksuppliedusername/password
*againstlocaluserstable.Ifsuccessful,$form_state['uid']*issettothematchinguserID.*/functionuser_login_authenticate_validate($form,&$form_state){$password=trim($form_state['values']['pass']);if(!empty($form_state['values']['name'])&&!empty($password)){//Donotallowanyloginfromthecurrentuser'sIPifthelimithasbeen//reached.Defaultis50failedattemptsallowedinonehour.Thisis//independentoftheper-userlimittocatchattemptsfromoneIPtolog//intomanydifferentuseraccounts.Wehaveareasonablyhighlimit
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 39/71
//sincetheremaybeonlyoneapparentIPforallusersataninstitution.if(!flood_is_allowed('failed_login_attempt_ip',variable_get('user_failed_login_ip_limit',50),variable_get('user_failed_login_ip_window',3600))){$form_state['flood_control_triggered']='ip';return;}$account=db_query("SELECT*FROM{users}WHEREname=:nameANDstatus=1",array(':name'=>$form_state['values']['name']))->fetchObject();if($account){if(variable_get('user_failed_login_identifier_uid_only',FALSE)){//Registerfloodeventsbasedontheuidonly,sotheyapplyforany//IPaddress.Thisisthemostsecureoption.$identifier=$account->uid;}else{//ThedefaultidentifierisacombinationofuidandIPaddress.This//islesssecurebutmoreresistanttodenial-of-serviceattacksthat//couldlockoutalluserswithpublicusernames.$identifier=$account->uid.'-'.ip_address();}$form_state['flood_control_user_identifier']=$identifier;
//Don'tallowloginifthelimitforthisuserhasbeenreached.//Defaultistoallow5failedattemptsevery6hours.
if(!flood_is_allowed('failed_login_attempt_user',variable_get('user_failed_login_user_limit',5),variable_get('user_failed_login_user_window',21600),$identifier)){$form_state['flood_control_triggered']='user';return;}}//Wearenotlimitedbyfloodcontrol,sotrytoauthenticate.//Set$form_state['uid']asaflagforuser_login_final_validate().$form_state['uid']=user_authenticate($form_state['values']['name'],$password);}}
/***Thefinalvalidationhandlerontheloginform.**Setsaformerrorifuserhasnotbeenauthenticated,oriftoomany*loginshavebeenattempted.Thisvalidationfunctionshouldalways*bethelastone.*/functionuser_login_final_validate($form,&$form_state){if(empty($form_state['uid'])){//AlwaysregisteranIP-basedfailedloginevent.flood_register_event('failed_login_attempt_ip',variable_get('user_failed_login_ip_window',3600));
//Registeraper-userfailedloginevent.if(isset($form_state['flood_control_user_identifier'])){flood_register_event('failed_login_attempt_user',variable_get('user_failed_login_user_window',21600),$form_state['flood_control_user_identifier']);}
if(isset($form_state['flood_control_triggered'])){if($form_state['flood_control_triggered']=='user'){form_set_error('name',format_plural(variable_get('user_failed_login_user_limit',5),'Sorry,therehasbeenmorethanonefailedloginattemptforthis
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 40/71
account.Itistemporarilyblocked.Tryagainlateror<ahref="@url">requestanewpassword</a>.','Sorry,therehavebeenmorethan@countfailedloginattemptsforthisaccount.Itistemporarilyblocked.Tryagainlateror<ahref="@url">requestanewpassword</a>.',array('@url'=>url('user/password'))));}else{//Wedidnotfindauid,sothelimitisIP-based.form_set_error('name',t('Sorry,toomanyfailedloginattemptsfromyourIPaddress.ThisIPaddressistemporarilyblocked.Tryagainlateror<ahref="@url">requestanewpassword</a>.',array('@url'=>url('user/password'))));}}else{form_set_error('name',t('Sorry,unrecognizedusernameorpassword.<ahref="@password">Haveyouforgottenyourpassword?</a>',array('@password'=>url('user/password'))));watchdog('user','Loginattemptfailedfor%user.',array('%user'=>$form _state['values']['name']));}}elseif(isset($form_state['flood_control_user_identifier'])){//Clearpastfailuresforthisusersoasnottoblockauserwhomight//loginandoutmorethanonceinanhour.flood_clear_event('failed_login_attempt_user',$form_state['flood_control_us
er_identifier']);}}
/***Trytovalidatetheuser'slogincredentialslocally.**@param$name*Usernametoauthenticate.*@param$password*Aplain-textpassword,suchastrimmedtextfromformvalues.*@return*Theuser'suidonsuccess,orFALSEonfailuretoauthenticate.
*/functionuser_authenticate($name,$password){$uid=FALSE;if(!empty($name)&&!empty($password)){$account=user_load_by_name($name);if($account){//Allowalternatepasswordhashingschemes.require_onceDRUPAL_ROOT.'/'.variable_get('password_inc','includes/password.inc');if(user_check_password($password,$account)){//Successfulauthentication.$uid=$account->uid;
//Updateusertonewpasswordschemeifneeded.if(user_needs_new_hash($account)){user_save($account,array('pass'=>$password));}}}}return$uid;}
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 41/71
/***Finalizetheloginprocess.Mustbecalledwhenlogginginauser.**Thefunctionrecordsawatchdogmessageaboutthenewsession,savesthe*logintimestamp,callshook_userop'login'andgeneratesanewsession.**/functionuser_login_finalize(&$edit=array()){global$user;watchdog('user','Sessionopenedfor%name.',array('%name'=>$user->name));//Updatetheusertabletimestampnotinguserhasloggedin.//Thisisalsousedtoinvalidateone-timeloginlinks.$user->login=REQUEST_TIME;db_update('users')->fields(array('login'=>$user->login))->condition('uid',$user->uid)->execute();
//RegeneratethesessionIDtopreventagainstsessionfixationattacks.//Thisiscalledbeforehook_userincaseoneofthosefunctionsfails//orincorrectlydoesaredirectwhichwouldleavetheoldsessioninplace.drupal_session_regenerate();
user_module_invoke('login',$edit,$user);}
/***Submithandlerfortheloginform.Load$userobjectandperformstandardlogin*tasks.TheuseristhenredirectedtotheMyAccountpage.Settingthe*destinationinthequerystringoverridestheredirect.*/functionuser_login_submit($form,&$form_state){global$user;$user=user_load($form_state['uid']);$form_state['redirect']='user/'.$user->uid;
user_login_finalize($form_state);
}
/***Helperfunctionforauthenticationmodules.Eitherlogsinorregisters*thecurrentuser,basedonusername.Eitherway,theglobal$userobjectis*populatedandlogintasksareperformed.*/functionuser_external_login_register($name,$module){$account=user_external_load($name);if(!$account){//Registerthisnewuser.$userinfo=array('name'=>$name,
'pass'=>user_password(),'init'=>$name,'status'=>1,'access'=>REQUEST_TIME);$account=user_save(drupal_anonymous_user(),$userinfo);//Terminateifanerroroccurredduringuser_save().if(!$account){drupal_set_message(t("Errorsavinguseraccount."),'error');return;
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 42/71
}user_set_authmaps($account,array("authname_$module"=>$name));}
//Loguserin.$form_state['uid']=$account->uid;user_login_submit(array(),$form_state);}
/***GeneratesauniqueURLforausertologinandresettheirpassword.**@paramobject$account*Anobjectcontainingtheuseraccount.**@return*AuniqueURLthatprovidesaone-timeloginfortheuser,fromwhich*theycanchangetheirpassword.*/functionuser_pass_reset_url($account){$timestamp=REQUEST_TIME;returnurl("user/reset/$account->uid/$timestamp/".user_pass_rehash($account->pass,$timestamp,$account->login),array('absolute'=>TRUE));}
/***GeneratesaURLtoconfirmanaccountcancellationrequest.**@paramobject$account*Theuseraccountobject,whichmustcontainatleastthefollowing*properties:*-uid:Theuseruidnumber.*-pass:Thehasheduserpasswordstring.*-login:Theuserloginname.**@return*AuniqueURLthatmaybeusedtoconfirmthecancellationoftheuser
*account.**@seeuser_mail_tokens()*@seeuser_cancel_confirm()*/functionuser_cancel_url($account){$timestamp=REQUEST_TIME;returnurl("user/$account->uid/cancel/confirm/$timestamp/".user_pass_rehash($account->pass,$timestamp,$account->login),array('absolute'=>TRUE));}
/***Createsauniquehashvalueforuseintime-dependentper-userURLs.
**ThishashisnormallyusedtobuildauniqueandsecureURLthatissentto*theuserbyemailforpurposessuchasresettingtheuser'spassword.In*ordertovalidatetheURL,thesamehashcanbegeneratedagain,fromthe*sameinformation,andcomparedtothehashvaluefromtheURL.TheURL*normallycontainsboththetimestampandthenumericuserID.Thelogin*nameandhashedpasswordareretrievedfromthedatabaseasnecessary.Fora*usageexample,seeuser_cancel_url()anduser_cancel_confirm().**@param$password
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 43/71
*Thehasheduseraccountpasswordvalue.*@param$timestamp*Aunixtimestamp.*@param$login*Theuseraccountloginname.**@return*AstringthatissafeforuseinURLsandSQLstatements.*/functionuser_pass_rehash($password,$timestamp,$login){returndrupal_hmac_base64($timestamp.$login,drupal_get_hash_salt().$password);}
/***Cancelauseraccount.**Sincetheusercancellationprocessneedstoberuninabatch,either*FormAPIwillinvokeit,orbatch_process()needstobeinvokedaftercalling*thisfunctionandshoulddefinethepathtoredirectto.**@param$edit*Anarrayofsubmittedformvalues.*@param$uid
*TheuserIDoftheuseraccounttocancel.*@param$method*Theaccountcancellationmethodtouse.**@see_user_cancel()*/functionuser_cancel($edit,$uid,$method){global$user;
$account=user_load($uid);
if(!$account){drupal_set_message(t('Theuseraccount%iddoesnotexist.',array('%id'=>
$uid)),'error');watchdog('user','Attemptedtocancelnon-existinguseraccount:%id.',array('%id'=>$uid),WATCHDOG_ERROR);return;}
//Initializebatch(tosettitle).$batch=array('title'=>t('Cancellingaccount'),'operations'=>array(),);batch_set($batch);
//Modulesusehook_user_delete()torespondtodeletion.if($method!='user_cancel_delete'){//Allowmodulestoaddfurthersetstothisbatch.module_invoke_all('user_cancel',$edit,$account,$method);}
//Finishthebatchandactuallycanceltheaccount.$batch=array('title'=>t('Cancellinguseraccount'),'operations'=>array(
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 44/71
array('_user_cancel',array($edit,$account,$method)),),);batch_set($batch);
//BatchprocessingiseitherhandledviaFormAPIorhastobeinvoked//manually.}
/***Lastbatchprocessingstepforcancellingauseraccount.**SincebatchandsessionAPIrequireavaliduseraccount,theactual*cancellationofauseraccountneedstohappenlast.**@seeuser_cancel()*/function_user_cancel($edit,$account,$method){global$user;
switch($method){case'user_cancel_block':case'user_cancel_block_unpublish':default:
//Sendaccountblockednotificationifoptionwaschecked.if(!empty($edit['user_cancel_notify'])){_user_mail_notify('status_blocked',$account);}user_save($account,array('status'=>0));drupal_set_message(t('%namehasbeendisabled.',array('%name'=>$account->name)));watchdog('user','Blockeduser:%name%email.',array('%name'=>$account->name,'%email'=>'<'.$account->mail.'>'),WATCHDOG_NOTICE);break;
case'user_cancel_reassign':case'user_cancel_delete':
//Sendaccountcancelednotificationifoptionwaschecked.if(!empty($edit['user_cancel_notify'])){_user_mail_notify('status_canceled',$account);}user_delete($account->uid);drupal_set_message(t('%namehasbeendeleted.',array('%name'=>$account->name)));watchdog('user','Deleteduser:%name%email.',array('%name'=>$account->name,'%email'=>'<'.$account->mail.'>'),WATCHDOG_NOTICE);break;}
//Aftercancellingaccount,ensurethatuserisloggedout.
if($account->uid==$user->uid){//Destroythecurrentsession,andreset$usertotheanonymoususer.session_destroy();}
//Clearthecacheforanonymoususers.cache_clear_all();}
/**
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 45/71
*Deleteauser.**@param$uid*AuserID.*/functionuser_delete($uid){user_delete_multiple(array($uid));}
/***Deletemultipleuseraccounts.**@param$uids*AnarrayofuserIDs.*/functionuser_delete_multiple(array$uids){if(!empty($uids)){$accounts=user_load_multiple($uids,array());
$transaction=db_transaction();try{foreach($accountsas$uid=>$account){module_invoke_all('user_delete',$account);module_invoke_all('entity_delete',$account,'user');
field_attach_delete('user',$account);drupal_session_destroy_uid($account->uid);}
db_delete('users')->condition('uid',$uids,'IN')->execute();db_delete('users_roles')->condition('uid',$uids,'IN')->execute();db_delete('authmap')->condition('uid',$uids,'IN')->execute();
}catch(Exception$e){$transaction->rollback();watchdog_exception('user',$e);throw$e;}entity_get_controller('user')->resetCache();}}
/***Pagecallbackwrapperforuser_view().*/
functionuser_view_page($account){//Anadministratormaytrytoviewanon-existentaccount,//sowegivethema404(versusa403fornon-admins).returnis_object($account)?user_view($account):MENU_NOT_FOUND;}
/***Generateanarrayforrenderingthegivenuser.**Whenviewingauserprofile,the$pagearraycontains:
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 46/71
**-$page['content']['ProfileCategory']:*Profilecategorieskeyedbytheirhuman-readablenames.*-$page['content']['ProfileCategory']['profile_machine_name']:*Profilefieldskeyedbytheirmachine-readablenames.*-$page['content']['user_picture']:*User'srenderedpicture.*-$page['content']['summary']:*Containsthedefault"History"profiledataforauser.*-$page['content']['#account']:*Theuseraccountoftheprofilebeingviewed.**Tothemeuserprofiles,copymodules/user/user-profile.tpl.php*toyourthemedirectory,andedititasinstructedinthatfile'scomments.**@param$account*Auserobject.*@param$view_mode*Viewmode,e.g.'full'.*@param$langcode*(optional)Alanguagecodetouseforrendering.Defaultstotheglobal*contentlanguageofthecurrentrequest.**@return
*Anarrayasexpectedbydrupal_render().*/functionuser_view($account,$view_mode='full',$langcode=NULL){if(!isset($langcode)){$langcode=$GLOBALS['language_content']->language;}
//Retrieveallprofilefieldsandattachto$account->content.user_build_content($account,$view_mode,$langcode);
$build=$account->content;//Wedon'tneedduplicaterenderinginfoinaccount->content.unset($account->content);
$build+=array('#theme'=>'user_profile','#account'=>$account,'#view_mode'=>$view_mode,'#language'=>$langcode,);
//Allowmodulestomodifythestructureduser.$type='user';drupal_alter(array('user_view','entity_view'),$build,$type);
return$build;
}
/***Buildsastructuredarrayrepresentingtheprofilecontent.**@param$account*Auserobject.*@param$view_mode*Viewmode,e.g.'full'.*@param$langcode
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 47/71
*(optional)Alanguagecodetouseforrendering.Defaultstotheglobal*contentlanguageofthecurrentrequest.*/functionuser_build_content($account,$view_mode='full',$langcode=NULL){if(!isset($langcode)){$langcode=$GLOBALS['language_content']->language;}
//Removepreviouslybuiltcontent,ifexists.$account->content=array();
//Buildfieldscontent.field_attach_prepare_view('user',array($account->uid=>$account),$view_mode,$langcode);entity_prepare_view('user',array($account->uid=>$account),$langcode);$account->content+=field_attach_view('user',$account,$view_mode,$langcode);
//Populate$account->contentwitharender()array.module_invoke_all('user_view',$account,$view_mode,$langcode);module_invoke_all('entity_view',$account,'user',$view_mode,$langcode);}
/**
*Implementshook_mail().*/functionuser_mail($key,&$message,$params){$language=$message['language'];$variables=array('user'=>$params['account']);$message['subject'].=_user_mail_text($key.'_subject',$language,$variables);$message['body'][]=_user_mail_text($key.'_body',$language,$variables);}
/***Returnsamailstringforavariablename.*
*Usedbyuser_mail()andthesettingsformstoretrievestrings.*/function_user_mail_text($key,$language=NULL,$variables=array(),$replace=TRUE){$langcode=isset($language)?$language->language:NULL;
if($admin_setting=variable_get('user_mail_'.$key,FALSE)){//Anadminsettingoverridesthedefaultstring.$text=$admin_setting;}else{//Nooverride,returndefaultstring.switch($key){
case'register_no_approval_required_subject':$text=t('Accountdetailsfor[user:name]at[site:name]',array(),array('langcode'=>$langcode));break;case'register_no_approval_required_body':$text=t("[user:name],
Thankyouforregisteringat[site:name].Youmaynowloginbyclickingthislinkorcopyingandpastingittoyourbrowser:
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 48/71
[user:one-time-login-url]
Thislinkcanonlybeusedoncetologinandwillleadyoutoapagewhereyoucansetyourpassword.
Aftersettingyourpassword,youwillbeabletologinat[site:login-url]inthefutureusing:
username:[user:name]password:Yourpassword
--[site:name]team",array(),array('langcode'=>$langcode));break;
case'register_admin_created_subject':$text=t('Anadministratorcreatedanaccountforyouat[site:name]',array(),array('langcode'=>$langcode));break;case'register_admin_created_body':$text=t("[user:name],
Asiteadministratorat[site:name]hascreatedanaccountforyou.Youmaynowloginbyclickingthislinkorcopyingandpastingittoyourbrowser:
[user:one-time-login-url]
Thislinkcanonlybeusedoncetologinandwillleadyoutoapagewhereyoucansetyourpassword.
Aftersettingyourpassword,youwillbeabletologinat[site:login-url]inthefutureusing:
username:[user:name]password:Yourpassword
--[site:name]team",array(),array('langcode'=>$langcode));break;
case'register_pending_approval_subject':case'register_pending_approval_admin_subject':$text=t('Accountdetailsfor[user:name]at[site:name](pendingadminapproval)',array(),array('langcode'=>$langcode));break;case'register_pending_approval_body':$text=t("[user:name],
Thankyouforregisteringat[site:name].Yourapplicationforanaccountiscurrentlypendingapproval.Onceithasbeenapproved,youwillreceiveanothere-mailcontaininginformationabouthowtologin,setyourpassword,andotherdetails.
--[site:name]team",array(),array('langcode'=>$langcode));break;case'register_pending_approval_admin_body':$text=t("[user:name]hasappliedforanaccount.
[user:edit-url]",array(),array('langcode'=>$langcode));break;
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 49/71
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 50/71
$text=t('Accountcancellationrequestfor[user:name]at[site:name]',array(),array('langcode'=>$langcode));break;case'cancel_confirm_body':$text=t("[user:name],
Arequesttocancelyouraccounthasbeenmadeat[site:name].
Youmaynowcancelyouraccounton[site:url-brief]byclickingthislinkorcopyingandpastingitintoyourbrowser:
[user:cancel-url]
NOTE:Thecancellationofyouraccountisnotreversible.
Thislinkexpiresinonedayandnothingwillhappenifitisnotused.
--[site:name]team",array(),array('langcode'=>$langcode));break;
case'status_canceled_subject':$text=t('Accountdetailsfor[user:name]at[site:name](canceled)',array(),array('langcode'=>$langcode));break;
case'status_canceled_body':$text=t("[user:name],
Youraccounton[site:name]hasbeencanceled.
--[site:name]team",array(),array('langcode'=>$langcode));break;}}
if($replace){//Wedonotsanitizethetokenreplacement,sincetheoutputofthis//replacementisintendedforane-mailmessage,notawebbrowser.
returntoken_replace($text,$variables,array('language'=>$language,'callback'=>'user_mail_tokens','sanitize'=>FALSE));}
return$text;}
/***Tokencallbacktoaddunsafetokensforusermails.**Thisfunctionisusedbythetoken_replace()callattheendof*_user_mail_text()tosetupsomeadditionaltokensthatcanbe*usedinemailmessagesgeneratedbyuser_mail().
**@param$replacements*Anassociativearrayvariablecontainingmappingsfromtokennamesto*values(forusewithstrtr()).*@param$data*Anassociativearrayoftokenreplacementvalues.Ifthe'user'element*exists,itmustcontainauseraccountobjectwiththefollowing*properties:*-login:Theaccountloginname.*-pass:Thehashedaccountloginpassword.
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 51/71
*@param$options*Unusedparameterrequiredbythetoken_replace()function.*/functionuser_mail_tokens(&$replacements,$data,$options){if(isset($data['user'])){$replacements['[user:one-time-login-url]']=user_pass_reset_url($data['user']);$replacements['[user:cancel-url]']=user_cancel_url($data['user']);}}
/***Administrativefeatures***********************************************/
/***Retrieveanarrayofrolesmatchingspecifiedconditions.**@param$membersonly*SetthistoTRUEtoexcludethe'anonymous'role.*@param$permission*Astringcontainingapermission.Ifset,onlyrolescontainingthat*permissionarereturned.**@return*Anassociativearraywiththeroleidasthekeyandtherolenameas
*value.*/functionuser_roles($membersonly=FALSE,$permission=NULL){$query=db_select('role','r');$query->addTag('translatable');$query->fields('r',array('rid','name'));$query->orderBy('weight');$query->orderBy('name');if(!empty($permission)){$query->innerJoin('role_permission','p','r.rid=p.rid');$query->condition('p.permission',$permission);}$result=$query->execute();
$roles=array();foreach($resultas$role){switch($role->rid){//WeonlytranslatethebuiltinrolenamescaseDRUPAL_ANONYMOUS_RID:if(!$membersonly){$roles[$role->rid]=t($role->name);}break;caseDRUPAL_AUTHENTICATED_RID:$roles[$role->rid]=t($role->name);break;
default:$roles[$role->rid]=$role->name;}}
return$roles;}
/***FetchesauserrolebyroleID.
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 52/71
**@param$rid*AnintegerrepresentingtheroleID.**@return*Afully-loadedroleobjectifarolewiththegivenIDexists,orFALSE*otherwise.**@seeuser_role_load_by_name()*/functionuser_role_load($rid){returndb_select('role','r')->fields('r')->condition('rid',$rid)->execute()->fetchObject();}
/***Fetchesauserrolebyrolename.**@param$role_name*Astringrepresentingtherolename.*
*@return*Afully-loadedroleobjectifarolewiththegivennameexists,orFALSE*otherwise.**@seeuser_role_load()*/functionuser_role_load_by_name($role_name){returndb_select('role','r')->fields('r')->condition('name',$role_name)->execute()->fetchObject();}
/***Saveauserroletothedatabase.**@param$role*Aroleobjecttomodifyoradd.If$role->ridisnotspecified,anew*rolewillbecreated.*@return*Statusconstantindicatingifrolewascreatedorupdated.*FailuretowritetheuserrolerecordwillreturnFALSE.Otherwise.*SAVED_NEWorSAVED_UPDATEDisreturneddependingontheoperation*performed.*/
functionuser_role_save($role){if($role->name){//Preventleadingandtrailingspacesinrolenames.$role->name=trim($role->name);}if(!isset($role->weight)){//Setaroleweighttomakethisnewrolelast.$query=db_select('role');$query->addExpression('MAX(weight)');$role->weight=$query->execute()->fetchField()+1;
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 53/71
}
//Letmodulesmodifytheuserrolebeforeitissavedtothedatabase.module_invoke_all('user_role_presave',$role);
if(!empty($role->rid)&&$role->name){$status=drupal_write_record('role',$role,'rid');module_invoke_all('user_role_update',$role);}else{$status=drupal_write_record('role',$role);module_invoke_all('user_role_insert',$role);}
//Cleartheuseraccesscache.drupal_static_reset('user_access');drupal_static_reset('user_role_permissions');
return$status;}
/***Deleteauserrolefromdatabase.*
*@param$role*Astringwiththerolename,oranintegerwiththeroleID.*/functionuser_role_delete($role){if(is_int($role)){$role=user_role_load($role);}else{$role=user_role_load_by_name($role);}
db_delete('role')->condition('rid',$role->rid)
->execute();db_delete('role_permission')->condition('rid',$role->rid)->execute();//Updatetheuserswhohavethisroleset:db_delete('users_roles')->condition('rid',$role->rid)->execute();
module_invoke_all('user_role_delete',$role);
//Cleartheuseraccesscache.drupal_static_reset('user_access');
drupal_static_reset('user_role_permissions');}
/***Menuaccesscallbackforuserroleediting.*/functionuser_role_edit_access($role){//Preventthesystem-definedrolesfrombeingalteredorremoved.if($role->rid==DRUPAL_ANONYMOUS_RID||$role->rid==DRUPAL_AUTHENTICATED_RID){
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 54/71
returnFALSE;}
returnuser_access('administerpermissions');}
/***Determinethemodulesthatpermissionsbelongto.**@return*Anassociativearrayintheformat$permission=>$module.*/functionuser_permission_get_modules(){$permissions=array();foreach(module_implements('permission')as$module){$perms=module_invoke($module,'permission');foreach($permsas$key=>$value){$permissions[$key]=$module;}}return$permissions;}
/**
*Changepermissionsforauserrole.**Thisfunctionmaybeusedtograntandrevokemultiplepermissionsatonce.*Forexample,whenaformexposescheckboxestoconfigurepermissionsfora*role,theformsubmithandlermaydirectlypassthesubmittedvaluesforthe*checkboxesformelementtothisfunction.**@param$rid*TheIDofauserroletoalter.*@param$permissions*Anassociativearray,wherethekeyholdsthepermissionnameandthevalue*determineswhethertograntorrevokethatpermission.Anyvaluethat*evaluatestoTRUEwillcausethepermissiontobegranted.Anyvaluethat
*evaluatestoFALSEwillcausethepermissiontoberevoked.*@code*array(*'administernodes'=>0,//Revoke'administernodes'*'administerblocks'=>FALSE,//Revoke'administerblocks'*'accessuserprofiles'=>1,//Grant'accessuserprofiles'*'accesscontent'=>TRUE,//Grant'accesscontent'*'accesscomments'=>'accesscomments',//Grant'accesscomments'*)*@endcode*Existingpermissionsarenotchanged,unlessspecifiedin$permissions.**@seeuser_role_grant_permissions()
*@seeuser_role_revoke_permissions()*/functionuser_role_change_permissions($rid,array$permissions=array()){//Grantnewpermissionsfortherole.$grant=array_filter($permissions);if(!empty($grant)){user_role_grant_permissions($rid,array_keys($grant));}//Revokepermissionsfortherole.$revoke=array_diff_assoc($permissions,$grant);
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 55/71
if(!empty($revoke)){user_role_revoke_permissions($rid,array_keys($revoke));}}
/***Grantpermissionstoauserrole.**@param$rid*TheIDofauserroletoalter.*@param$permissions*Alistofpermissionnamestogrant.**@seeuser_role_change_permissions()*@seeuser_role_revoke_permissions()*/functionuser_role_grant_permissions($rid,array$permissions=array()){$modules=user_permission_get_modules();//Grantnewpermissionsfortherole.foreach($permissionsas$name){db_merge('role_permission')->key(array('rid'=>$rid,'permission'=>$name,
))->fields(array('module'=>$modules[$name],))->execute();}
//Cleartheuseraccesscache.drupal_static_reset('user_access');drupal_static_reset('user_role_permissions');}
/**
*Revokepermissionsfromauserrole.**@param$rid*TheIDofauserroletoalter.*@param$permissions*Alistofpermissionnamestorevoke.**@seeuser_role_change_permissions()*@seeuser_role_grant_permissions()*/functionuser_role_revoke_permissions($rid,array$permissions=array()){//Revokepermissionsfortherole.db_delete('role_permission')
->condition('rid',$rid)->condition('permission',$permissions,'IN')->execute();
//Cleartheuseraccesscache.drupal_static_reset('user_access');drupal_static_reset('user_role_permissions');}
/**
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 56/71
*Implementshook_user_operations().*/functionuser_user_operations($form=array(),$form_state=array()){$operations=array('unblock'=>array('label'=>t('Unblocktheselectedusers'),'callback'=>'user_user_operations_unblock',),'block'=>array('label'=>t('Blocktheselectedusers'),'callback'=>'user_user_operations_block',),'cancel'=>array('label'=>t('Canceltheselecteduseraccounts'),),);
if(user_access('administerpermissions')){$roles=user_roles(TRUE);unset($roles[DRUPAL_AUTHENTICATED_RID]);//Can'teditauthenticatedrole.
$add_roles=array();foreach($rolesas$key=>$value){$add_roles['add_role-'.$key]=$value;
}
$remove_roles=array();foreach($rolesas$key=>$value){$remove_roles['remove_role-'.$key]=$value;}
if(count($roles)){$role_operations=array(t('Addaroletotheselectedusers')=>array('label'=>$add_roles,),t('Removearolefromtheselectedusers')=>array(
'label'=>$remove_roles,),);
$operations+=$role_operations;}}
//Iftheformhasbeenposted,weneedtoinserttheproperdatafor//roleeditingifnecessary.if(!empty($form_state['submitted'])){$operation_rid=explode('-',$form_state['values']['operation']);$operation=$operation_rid[0];
if($operation=='add_role'||$operation=='remove_role'){$rid=$operation_rid[1];if(user_access('administerpermissions')){$operations[$form_state['values']['operation']]=array('callback'=>'user_multiple_role_edit','callbackarguments'=>array($operation,$rid),);}else{watchdog('security','Detectedmaliciousattempttoalterprotecteduser
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 57/71
fields.',array(),WATCHDOG_WARNING);return;}}}
return$operations;}
/***Callbackfunctionforadminmassunblockingusers.*/functionuser_user_operations_unblock($accounts){$accounts=user_load_multiple($accounts);foreach($accountsas$account){//Skipunblockinguseriftheyarealreadyunblocked.if($account!==FALSE&&$account->status==0){user_save($account,array('status'=>1));}}}
/***Callbackfunctionforadminmassblockingusers.
*/functionuser_user_operations_block($accounts){$accounts=user_load_multiple($accounts);foreach($accountsas$account){//Skipblockinguseriftheyarealreadyblocked.if($account!==FALSE&&$account->status==1){//Forefficiencymanuallysavetheoriginalaccountbeforeapplyingany//changes.$account->original=clone$account;user_save($account,array('status'=>0));}}}
/***Callbackfunctionforadminmassadding/deletingauserrole.*/functionuser_multiple_role_edit($accounts,$operation,$rid){//Therolenameisnotnecessaryasuser_save()willreloadtheuser//object,butsomemodules'hook_user()maylookatthisfirst.$role_name=db_query('SELECTnameFROM{role}WHERErid=:rid',array(':rid'=>$rid))->fetchField();
switch($operation){case'add_role':$accounts=user_load_multiple($accounts);
foreach($accountsas$account){//Skipaddingtheroletotheuseriftheyalreadyhaveit.if($account!==FALSE&&!isset($account->roles[$rid])){$roles=$account->roles+array($rid=>$role_name);//Forefficiencymanuallysavetheoriginalaccountbeforeapplying//anychanges.$account->original=clone$account;user_save($account,array('roles'=>$roles));}}
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 58/71
break;case'remove_role':$accounts=user_load_multiple($accounts);foreach($accountsas$account){//Skipremovingtherolefromtheuseriftheyalreadydon'thaveit.if($account!==FALSE&&isset($account->roles[$rid])){$roles=array_diff($account->roles,array($rid=>$role_name));//Forefficiencymanuallysavetheoriginalaccountbeforeapplying//anychanges.$account->original=clone$account;user_save($account,array('roles'=>$roles));}}break;}}
functionuser_multiple_cancel_confirm($form,&$form_state){$edit=$form_state['input'];
$form['accounts']=array('#prefix'=>'<ul>','#suffix'=>'</ul>','#tree'=>TRUE);$accounts=user_load_multiple(array_keys(array_filter($edit['accounts'])));foreach($accountsas$uid=>$account){
//Preventuser1frombeingcanceled.if($uid<=1){continue;}$form['accounts'][$uid]=array('#type'=>'hidden','#value'=>$uid,'#prefix'=>'<li>','#suffix'=>check_plain($account->name)."</li>\n",);}
//Outputanoticethatuser1cannotbecanceled.
if(isset($accounts[1])){$redirect=(count($accounts)==1);$message=t('Theuseraccount%namecannotbecancelled.',array('%name'=>$accounts[1]->name));drupal_set_message($message,$redirect?'error':'warning');//Ifonlyuser1wasselected,redirecttotheoverview.if($redirect){drupal_goto('admin/people');}}
$form['operation']=array('#type'=>'hidden','#value'=>'cancel');
module_load_include('inc','user','user.pages');$form['user_cancel_method']=array('#type'=>'item','#title'=>t('Whencancellingtheseaccounts'),);$form['user_cancel_method']+=user_cancel_methods();//Removemethoddescriptions.foreach(element_children($form['user_cancel_method'])as$element){unset($form['user_cancel_method'][$element]['#description']);}
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 59/71
//Allowtosendtheaccountcancellationconfirmationmail.$form['user_cancel_confirm']=array('#type'=>'checkbox','#title'=>t('Requiree-mailconfirmationtocancelaccount.'),'#default_value'=>FALSE,'#description'=>t('Whenenabled,theusermustconfirmtheaccountcancellationviae-mail.'),);//Alsoallowtosendaccountcancelednotificationmail,ifenabled.$form['user_cancel_notify']=array('#type'=>'checkbox','#title'=>t('Notifyuserwhenaccountiscanceled.'),'#default_value'=>FALSE,'#access'=>variable_get('user_mail_status_canceled_notify',FALSE),'#description'=>t('Whenenabled,theuserwillreceiveane-mailnotificationaftertheaccounthasbeencancelled.'),);
returnconfirm_form($form,t('Areyousureyouwanttocanceltheseuseraccounts?'),'admin/people',t('Thisactioncannotbeundone.'),t('Cancelaccounts'),t('Cancel'));}
/***Submithandlerformass-accountcancellationform.**@seeuser_multiple_cancel_confirm()*@seeuser_cancel_confirm_form_submit()*/functionuser_multiple_cancel_confirm_submit($form,&$form_state){global$user;
if($form_state['values']['confirm']){foreach($form_state['values']['accounts']as$uid=>$value){//Preventprogrammaticformsubmissionsfromcancellinguser1.
if($uid<=1){continue;}//Preventuseradministratorsfromdeletingthemselveswithoutconfirmation.if($uid==$user->uid){$admin_form_state=$form_state;unset($admin_form_state['values']['user_cancel_confirm']);$admin_form_state['values']['_account']=$user;user_cancel_confirm_form_submit(array(),$admin_form_state);}else{user_cancel($form_state['values'],$uid,$form_state['values']['user_can
cel_method']);}}}$form_state['redirect']='admin/people';}
/***Retrievealistofallusersetting/informationcategoriesandsortthembyweight.
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 60/71
*/function_user_categories(){$categories=module_invoke_all('user_categories');usort($categories,'_user_sort');
return$categories;}
function_user_sort($a,$b){$a=(array)$a+array('weight'=>0,'title'=>'');$b=(array)$b+array('weight'=>0,'title'=>'');return$a['weight']<$b['weight']?-1:($a['weight']>$b['weight']?1:($a['title']<$b['title']?-1:1));}
/***Listuseradministrationfiltersthatcanbeapplied.*/functionuser_filters(){//Regularfilters$filters=array();$roles=user_roles(TRUE);unset($roles[DRUPAL_AUTHENTICATED_RID]);//Don'tlistauthorizedrole.if(count($roles)){
$filters['role']=array('title'=>t('role'),'field'=>'ur.rid','options'=>array('[any]'=>t('any'),)+$roles,);}
$options=array();foreach(module_implements('permission')as$module){$function=$module.'_permission';if($permissions=$function('permission')){
asort($permissions);foreach($permissionsas$permission=>$description){$options[t('@modulemodule',array('@module'=>$module))][$permission]=t($permission);}}}ksort($options);$filters['permission']=array('title'=>t('permission'),'options'=>array('[any]'=>t('any'),)+$options,
);
$filters['status']=array('title'=>t('status'),'field'=>'u.status','options'=>array('[any]'=>t('any'),1=>t('active'),0=>t('blocked'),),
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 61/71
);return$filters;}
/***Extendsaqueryobjectforuseradministrationfiltersbasedonsession.**@param$query*Queryobjectthatshouldbefiltered.*/functionuser_build_filter_query(SelectQuery$query){$filters=user_filters();//ExtendQuerywithfilterconditions.foreach(isset($_SESSION['user_overview_filter'])?$_SESSION['user_overview_filter']:array()as$filter){list($key,$value)=$filter;//Thischeckstoseeifthispermissionfilterisanenabledpermissionfor//theauthenticatedrole.Ifso,thenalluserswouldbelisted,andwecan//skipaddingittothefilterquery.if($key=='permission'){$account=newstdClass();$account->uid='user_filter';$account->roles=array(DRUPAL_AUTHENTICATED_RID=>1);if(user_access($value,$account)){
continue;}$users_roles_alias=$query->join('users_roles','ur','%alias.uid=u.uid');$permission_alias=$query->join('role_permission','p',$users_roles_alias.'.rid=%alias.rid');$query->condition($permission_alias.'.permission',$value);}elseif($key=='role'){$users_roles_alias=$query->join('users_roles','ur','%alias.uid=u.uid');$query->condition($users_roles_alias.'.rid',$value);}
else{$query->condition($filters[$key]['field'],$value);}}}
/***Implementshook_forms().*/functionuser_forms(){$forms['user_admin_access_add_form']['callback']='user_admin_access_form';$forms['user_admin_access_edit_form']['callback']='user_admin_access_form';return$forms;
}
/***Implementshook_comment_view().*/functionuser_comment_view($comment){if(variable_get('user_signatures',0)&&!empty($comment->signature)){//@todoThisaltersandreplacestheoriginalobjectvalue,soa//hypotheticalprocessofloading,viewing,andsavingwillhijackthe//storeddata.Considerrenamingto$comment->signature_safeorsimilar
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 62/71
//hereandelsewhereinDrupal8.$comment->signature=check_markup($comment->signature,$comment->signature_ format,'',TRUE);}else{$comment->signature='';}}
/***ReturnsHTMLforausersignature.**@param$variables*Anassociativearraycontaining:*-signature:Theuser'ssignature.**@ingroupthemeable*/functiontheme_user_signature($variables){$signature=$variables['signature'];$output='';
if($signature){$output.='<divclass="clear">';
$output.='<div>â</div>';$output.=$signature;$output.='</div>';}
return$output;}
/***Getthelanguageobjectpreferredbytheuser.Thisuserpreferencecan*besetontheuseraccounteditingpage,andisonlyavailableifthere*aremorethanonelanguagesenabledonthesite.Iftheuserdidnot*chooseapreferredlanguage,oristheanonymoususer,the$default
*value,orifitisnotset,thesitedefaultlanguagewillbereturned.**@param$account*Useraccounttolookuplanguagefor.*@param$default*Optionaldefaultlanguageobjecttoreturniftheaccount*hasnovalidlanguage.*/functionuser_preferred_language($account,$default=NULL){$language_list=language_list();if(!empty($account->language)&&isset($language_list[$account->language])){return$language_list[$account->language];}
else{return$default?$default:language_default();}}
/***Conditionallycreateandsendanotificationemailwhenacertain*operationhappensonthegivenuseraccount.**@seeuser_mail_tokens()
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 63/71
*@seedrupal_mail()**@param$op*Theoperationbeingperformedontheaccount.Possiblevalues:*-'register_admin_created':Welcomemessageforusercreatedbytheadmin.*-'register_no_approval_required':Welcomemessagewhenuser*self-registers.*-'register_pending_approval':Welcomemessage,userpendingadmin*approval.*-'password_reset':Passwordrecoveryrequest.*-'status_activated':Accountactivated.*-'status_blocked':Accountblocked.*-'cancel_confirm':Accountcancellationrequest.*-'status_canceled':Accountcanceled.**@param$account*Theuserobjectoftheaccountbeingnotified.Mustcontainat*leastthefields'uid','name',and'mail'.*@param$language*Optionallanguagetouseforthenotification,overridingaccountlanguage.**@return*Thereturnvaluefromdrupal_mail_system()->mail(),ifendsupbeing*called.
*/function_user_mail_notify($op,$account,$language=NULL){//Bydefault,wealwaysnotifyexceptforcanceledandblocked.$default_notify=($op!='status_canceled'&&$op!='status_blocked');$notify=variable_get('user_mail_'.$op.'_notify',$default_notify);if($notify){$params['account']=$account;$language=$language?$language:user_preferred_language($account);$mail=drupal_mail('user',$op,$account->mail,$language,$params);if($op=='register_pending_approval'){//Ifauserregisteredrequiringadminapproval,notifytheadmin,too.//Weusethesitedefaultlanguageforthis.drupal_mail('user','register_pending_approval_admin',variable_get('site_
mail',ini_get('sendmail_from')),language_default(),$params);}}returnempty($mail)?NULL:$mail['result'];}
/***Formelementprocesshandlerforclient-sidepasswordvalidation.**This#processhandlerisautomaticallyinvokedfor'password_confirm'form*elementstoaddtheJavaScriptandstringtranslationsfordynamicpassword*validation.*
*@seesystem_element_info()*/functionuser_form_process_password_confirm($element){global$user;
$js_settings=array('password'=>array('strengthTitle'=>t('Passwordstrength:'),'hasWeaknesses'=>t('Tomakeyourpasswordstronger:'),'tooShort'=>t('Makeitatleast6characters'),
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 64/71
'addLowerCase'=>t('Addlowercaseletters'),'addUpperCase'=>t('Adduppercaseletters'),'addNumbers'=>t('Addnumbers'),'addPunctuation'=>t('Addpunctuation'),'sameAsUsername'=>t('Makeitdifferentfromyourusername'),'confirmSuccess'=>t('yes'),'confirmFailure'=>t('no'),'weak'=>t('Weak'),'fair'=>t('Fair'),'good'=>t('Good'),'strong'=>t('Strong'),'confirmTitle'=>t('Passwordsmatch:'),'username'=>(isset($user->name)?$user->name:''),),);
$element['#attached']['js'][]=drupal_get_path('module','user').'/user.js';//Ensuresettingsareonlyaddedonceperpage.static$already_added=FALSE;if(!$already_added){$already_added=TRUE;$element['#attached']['js'][]=array('data'=>$js_settings,'type'=>'setting');
}
return$element;}
/***Implementshook_node_load().*/functionuser_node_load($nodes,$types){//Buildanarrayofalluidsfornodeauthors,keyedbynid.$uids=array();foreach($nodesas$nid=>$node){$uids[$nid]=$node->uid;
}
//Fetchname,picture,anddatafortheseusers.$user_fields=db_query("SELECTuid,name,picture,dataFROM{users}WHEREuidIN(:uids)",array(':uids'=>$uids))->fetchAllAssoc('uid');
//Addthesevaluesbackintothenodeobjects.foreach($uidsas$nid=>$uid){$nodes[$nid]->name=$user_fields[$uid]->name;$nodes[$nid]->picture=$user_fields[$uid]->picture;$nodes[$nid]->data=$user_fields[$uid]->data;}}
/***Implementshook_image_style_delete().*/functionuser_image_style_delete($style){//Ifastyleisdeleted,updatethevariables.//Administratorschooseareplacementstylewhendeleting.user_image_style_save($style);}
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 65/71
/***Implementshook_image_style_save().*/functionuser_image_style_save($style){//Ifastyleisrenamed,updatethevariablesthatuseit.if(isset($style['old_name'])&&$style['old_name']==variable_get('user_picture_style','')){variable_set('user_picture_style',$style['name']);}}
/***Implementshook_action_info().*/functionuser_action_info(){returnarray('user_block_user_action'=>array('label'=>t('Blockcurrentuser'),'type'=>'user','configurable'=>FALSE,'triggers'=>array('any'),),);}
/***Blocksthecurrentuser.**@ingroupactions*/functionuser_block_user_action(&$entity,$context=array()){//Firstpriority:Ifthereisa$entity->uid,blockthatuser.//Thisismostlikelyauserobjectortheauthorifanodeorcomment.if(isset($entity->uid)){$uid=$entity->uid;}elseif(isset($context['uid'])){
$uid=$context['uid'];}//Ifneitherofthosearevalid,thenblockthecurrentuser.else{$uid=$GLOBALS['user']->uid;}$account=user_load($uid);$account=user_save($account,array('status'=>0));watchdog('action','Blockeduser%name.',array('%name'=>$account->name));}
/***Implementshook_form_FORM_ID_alter().
**Addacheckboxforthe'user_register_form'instancesettingsonthe'Edit*fieldinstance'form.*/functionuser_form_field_ui_field_edit_form_alter(&$form,&$form_state,$form_id){$instance=$form['#instance'];
if($instance['entity_type']=='user'){$form['instance']['settings']['user_register_form']=array(
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 66/71
'#type'=>'checkbox','#title'=>t('Displayonuserregistrationform.'),'#description'=>t("Thisiscompulsoryfor'required'fields."),//FieldinstancescreatedinD7betareleasesbeforethesettingwas//introducedmightbesetas'required'and'notshownonuser_register//form'.Wemakesurethecheckboxcomesas'checked'forthose.'#default_value'=>$instance['settings']['user_register_form']||$instance['required'],//Displayjustbelowthe'required'checkbox.'#weight'=>$form['instance']['required']['#weight']+.1,//Disabledwhenthe'required'checkboxischecked.'#states'=>array('enabled'=>array('input[name="instance[required]"]'=>array('checked'=>FALSE)),),//Checkedwhenthe'required'checkboxischecked.Thisisdonethrough//acustombehavior,sincethe#statessystemwouldalsosynchronizeon//uncheck.'#attached'=>array('js'=>array(drupal_get_path('module','user').'/user.js'),),);
array_unshift($form['#submit'],'user_form_field_ui_field_edit_form_submit')
;}}
/***Additionalsubmithandlerforthe'Editfieldinstance'form.**Makesurethe'user_register_form'settingissetforrequiredfields.*/functionuser_form_field_ui_field_edit_form_submit($form,&$form_state){$instance=$form_state['values']['instance'];
if(!empty($instance['required'])){
form_set_value($form['instance']['settings']['user_register_form'],1,$form _state);}}
/***Formbuilder;theuserregistrationform.**@ingroupforms*@seeuser_account_form()*@seeuser_account_form_validate()*@seeuser_register_submit()*/
functionuser_register_form($form,&$form_state){global$user;
$admin=user_access('administerusers');
//Ifwearen'tadminbutalreadyloggedon,gototheuserpageinstead.if(!$admin&&$user->uid){drupal_goto('user/'.$user->uid);}
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 67/71
$form['#user']=drupal_anonymous_user();$form['#user_category']='register';
$form['#attached']['library'][]=array('system','jquery.cookie');$form['#attributes']['class'][]='user-info-from-cookie';
//Startwiththedefaultuseraccountfields.user_account_form($form,$form_state);
//Attachfieldwidgets,andhidetheoneswherethe'user_register_form'//settingisnoton.field_attach_form('user',$form['#user'],$form,$form_state);foreach(field_info_instances('user','user')as$field_name=>$instance){if(empty($instance['settings']['user_register_form'])){$form[$field_name]['#access']=FALSE;}}
if($admin){//Redirectbacktopagewhichinitiatedthecreaterequest;//usuallyadmin/people/create.$form_state['redirect']=$_GET['q'];}
$form['actions']=array('#type'=>'actions');$form['actions']['submit']=array('#type'=>'submit','#value'=>t('Createnewaccount'),);
$form['#validate'][]='user_register_validate';//Addthefinaluserregistrationformsubmithandler.$form['#submit'][]='user_register_submit';
return$form;}
/***Validationfunctionfortheuserregistrationform.*/functionuser_register_validate($form,&$form_state){entity_form_field_validate('user',$form,$form_state);}
/***Submithandlerfortheuserregistrationform.**Thisfunctionissharedbytheinstallationformandthenormalregistrationform,*whichiswhyitcan'tbeintheuser.pages.incfile.
**@seeuser_register_form()*/functionuser_register_submit($form,&$form_state){$admin=user_access('administerusers');
if(!variable_get('user_email_verification',TRUE)||$admin){$pass=$form_state['values']['pass'];}else{
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 68/71
$pass=user_password();}$notify=!empty($form_state['values']['notify']);
//Removeunneededvalues.form_state_values_clean($form_state);
$form_state['values']['pass']=$pass;$form_state['values']['init']=$form_state['values']['mail'];
$account=$form['#user'];
entity_form_submit_build_entity('user',$account,$form,$form_state);
//Populate$editwiththepropertiesof$account,whichhavebeeneditedon//thisformbytakingoverallvalues,whichappearintheformvaluestoo.$edit=array_intersect_key((array)$account,$form_state['values']);$account=user_save($account,$edit);
//Terminateifanerroroccurredduringuser_save().if(!$account){drupal_set_message(t("Errorsavinguseraccount."),'error');$form_state['redirect']='';return;
}$form_state['user']=$account;$form_state['values']['uid']=$account->uid;
watchdog('user','Newuser:%name(%email).',array('%name'=>$form_state['values']['name'],'%email'=>$form_state['values']['mail']),WATCHDOG_NOTICE,l(t('edit'),'user/'.$account->uid.'/edit'));
//Addplaintextpasswordintouseraccounttogeneratemailtokens.$account->password=$pass;
//Newadministrativeaccountwithoutnotification.$uri=entity_uri('user',$account);
if($admin&&!$notify){drupal_set_message(t('Createdanewuseraccountfor<ahref="@url">%name</a>.Noe-mailhasbeensent.',array('@url'=>url($uri['path'],$uri['options']),'%name'=>$account->name)));}//Noe-mailverificationrequired;loginuserimmediately.elseif(!$admin&&!variable_get('user_email_verification',TRUE)&&$account->status){_user_mail_notify('register_no_approval_required',$account);$form_state['uid']=$account->uid;user_login_submit(array(),$form_state);drupal_set_message(t('Registrationsuccessful.Youarenowloggedin.'));$form_state['redirect']='';
}//Noadministratorapprovalrequired.elseif($account->status||$notify){$op=$notify?'register_admin_created':'register_no_approval_required';_user_mail_notify($op,$account);if($notify){drupal_set_message(t('Awelcomemessagewithfurtherinstructionshasbeene-mailedtothenewuser<ahref="@url">%name</a>.',array('@url'=>url($uri['path'],$uri['options']),'%name'=>$account->name)));}
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 69/71
else{drupal_set_message(t('Awelcomemessagewithfurtherinstructionshasbeensenttoyoure-mailaddress.'));$form_state['redirect']='';}}//Administratorapprovalrequired.else{_user_mail_notify('register_pending_approval',$account);drupal_set_message(t('Thankyouforapplyingforanaccount.Youraccountiscurrentlypendingapprovalbythesiteadministrator.<br/>Inthemeantime,awelcomemessagewithfurtherinstructionshasbeensenttoyoure-mailaddress.'));$form_state['redirect']='';}}
/***Implementshook_modules_installed().*/functionuser_modules_installed($modules){//Assignallavailablepermissionstotheadministratorrole.$rid=variable_get('user_admin_role',0);if($rid){
$permissions=array();foreach($modulesas$module){if($module_permissions=module_invoke($module,'permission')){$permissions=array_merge($permissions,array_keys($module_permissions));}}if(!empty($permissions)){user_role_grant_permissions($rid,$permissions);}}}
/***Implementshook_modules_uninstalled().*/functionuser_modules_uninstalled($modules){db_delete('role_permission')->condition('module',$modules,'IN')->execute();}
/***Helperfunctiontorewritethedestinationtoavoidredirectingtologinpageafterlogin.*
*Third-partyauthenticationmodulesmayusethisfunctiontodeterminethe*properdestinationafterauserhasbeenproperlyloggedin.*/functionuser_login_destination(){$destination=drupal_get_destination();if($destination['destination']=='user/login'){$destination['destination']='user';}return$destination;}
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 70/71
/***Savesvisitorinformationasacookiesoitcanbereused.**@param$values*Anarrayofkey/valuepairstobesavedintoacookie.*/functionuser_cookie_save(array$values){foreach($valuesas$field=>$value){//Setcookiefor365days.setrawcookie('Drupal.visitor.'.$field,rawurlencode($value),REQUEST_TIME+31536000,'/');}}
/***Deleteavisitorinformationcookie.**@param$cookie_name*Acookienamesuchas'homepage'.*/functionuser_cookie_delete($cookie_name){setrawcookie('Drupal.visitor.'.$cookie_name,'',REQUEST_TIME-3600,'/');}
/***Implementshook_rdf_mapping().*/functionuser_rdf_mapping(){returnarray(array('type'=>'user','bundle'=>RDF_DEFAULT_BUNDLE,'mapping'=>array('rdftype'=>array('sioc:UserAccount'),'name'=>array('predicates'=>array('foaf:name'),
),'homepage'=>array('predicates'=>array('foaf:page'),'type'=>'rel',),),),);}
/***Implementshook_file_download_access().*/
functionuser_file_download_access($field,$entity_type,$entity){if($entity_type=='user'){returnuser_view_access($entity);}}
/***Implementshook_system_info_alter().**Drupal7shipswithtwomethodstoaddadditionalfieldstousers:Profile
8/2/2019 Copia de User.module
http://slidepdf.com/reader/full/copia-de-usermodule 71/71
*module,alegacymoduledatingbackfrom2002,andFieldAPIintegration*withusers.WhileFieldAPIsupportforuserscurrentlyprovideslessend*userfeatures,theinefficientdatastoragemechanismofProfilemodule,as*wellasitslackofconsistencywiththerestoftheentity/fieldbased*systemsinDrupal7,makethisasub-optimalsolutiontothosewhowerenot*usingitinpreviousreleasesofDrupal.**TopreventnewDrupal7sitesfrominstallingProfilemodule,and*unwittinglyendingupwithtwocompletelydifferentandincompatiblemethods*ofextendingusers,onlymaketheProfilemoduleavailableiftheprofile_**tablesarepresent.**@todo:RemoveinD8,pendingupgradepath.*/functionuser_system_info_alter(&$info,$file,$type){if($type=='module'&&$file->name=='profile'&&db_table_exists('profile_ field')){$info['hidden']=FALSE;}}