copia de user.module

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); /** *Visitorscancreate accounts,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('TheUsermoduleal lowsuserstoregister,l ogin,an dlogout.Italsoallowsuserswithproperpermissionstomanageuser roles(us edtoclassifyusers) andpermissionsassociat edwiththoseroles.For moreinfo rmation,seetheonlinehandbookentryfor<a href="@user">Usermodule</a>.',ar ray('@user'=>'http:/ /drupal.org/handbook/mod ules/user')).'</p>'; $output.='<h3>'.t('Uses').'</h3>'; $output.='<dl>'; $output.='<dt> '.t('Creatingandmanagingusers').'</dt>'; $output.='<dd> '.t('TheUsermodulea llowsuserswiththeappr opriate< ahref="@permissions"> permissions</a>tocreat euseraccountsthroughthe<ahre f="@people">Peopleadm inistrationpage</a>,wh eretheycanalsoassign usersto oneormoreroles,and blockordeleteuseraccounts.Ifallowed,users without accounts(anonymousus ers)cancreatetheirownaccountsonthe<ahref ="@regist er">Createnewaccount </a>page.',array('@per missions'=>url('admin/p eople/per missions',array('frag ment'=>'module-user')) ,'@people'=>url('admin /people') ,'@register'=>url('user/register'))).'</dd>'; $output.='<dt> '.t('Userrolesandpe rmissions').'</dt>';

Upload: fernando-perez-rodriguez

Post on 06-Apr-2018

227 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Copia de User.module

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>';

Page 2: Copia de User.module

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':

Page 3: Copia de User.module

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',

Page 4: Copia de User.module

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;}

/**

Page 5: Copia de User.module

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){

Page 6: Copia de User.module

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);

Page 7: Copia de User.module

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.*

Page 8: Copia de User.module

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.*

Page 9: Copia de User.module

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.

Page 10: Copia de User.module

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){

Page 11: Copia de User.module

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){

Page 12: Copia de User.module

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){

Page 13: Copia de User.module

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

Page 14: Copia de User.module

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){

Page 15: Copia de User.module

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.*

Page 16: Copia de User.module

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().*/

Page 17: Copia de User.module

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

Page 18: Copia de User.module

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.

Page 19: Copia de User.module

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

Page 20: Copia de User.module

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

Page 21: Copia de User.module

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(

Page 22: Copia de User.module

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);}

Page 23: Copia de User.module

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'])){

Page 24: Copia de User.module

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'=>

Page 25: Copia de User.module

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;}}

/**

Page 26: Copia de User.module

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

Page 27: Copia de User.module

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.

Page 28: Copia de User.module

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.*

Page 29: Copia de User.module

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',

Page 30: Copia de User.module

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.',

Page 31: Copia de User.module

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.',

Page 32: Copia de User.module

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),

Page 33: Copia de User.module

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.

Page 34: Copia de User.module

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().

Page 35: Copia de User.module

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){

Page 36: Copia de User.module

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();

Page 37: Copia de User.module

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')));

Page 38: Copia de User.module

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

Page 39: Copia de User.module

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

Page 40: Copia de User.module

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;}

Page 41: Copia de User.module

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;

Page 42: Copia de User.module

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

Page 43: Copia de User.module

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(

Page 44: Copia de User.module

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();}

/**

Page 45: Copia de User.module

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:

Page 46: Copia de User.module

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

Page 47: Copia de User.module

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:

Page 48: Copia de User.module

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;

Page 49: Copia de User.module

8/2/2019 Copia de User.module

http://slidepdf.com/reader/full/copia-de-usermodule 49/71

Page 50: Copia de User.module

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.

Page 51: Copia de User.module

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.

Page 52: Copia de User.module

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;

Page 53: Copia de User.module

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){

Page 54: Copia de User.module

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);

Page 55: Copia de User.module

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');}

/**

Page 56: Copia de User.module

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

Page 57: Copia de User.module

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));}}

Page 58: Copia de User.module

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']);}

Page 59: Copia de User.module

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.

Page 60: Copia de User.module

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'),),

Page 61: Copia de User.module

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

Page 62: Copia de User.module

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()

Page 63: Copia de User.module

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'),

Page 64: Copia de User.module

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);}

Page 65: Copia de User.module

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(

Page 66: Copia de User.module

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);}

Page 67: Copia de User.module

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{

Page 68: Copia de User.module

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)));}

Page 69: Copia de User.module

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;}

Page 70: Copia de User.module

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

Page 71: Copia de User.module

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;}}