vB_Library_User
extends vB_Library
in package
vB_Library_User
Table of Contents
Constants
Methods
- __serialize() : array<string|int, mixed>
- __sleep() : array<string|int, mixed>
- __unserialize() : void
- __wakeup() : void
- addSecondaryUserGroups() : void
- Adds groups to a user
- buildProfileFieldDatastore() : mixed
- buildStatistics() : mixed
- checkCoppa() : mixed
- checkPasswordResetLock() : mixed
- checkPrivacyOption() : mixed
- checkUsernameLibraryInternal() : mixed
- This function is NOT meant for general consumption. For general use, please
- cleanIpInfo() : mixed
- Delete the old IP cache data
- clearCache() : mixed
- clearChannelPerms() : mixed
- This method clears remembered channel permission
- clearUserInfo() : mixed
- Clear user cached info for given userids.
- decrementPostCountForUsers() : void
- Update the post count for a list of users.
- delete() : mixed
- Delete a user
- fetchAvatars() : array<string|int, mixed>
- Fetch the Avatars for a userid array
- fetchBannedInfo() : mixed
- Check whether a user is banned and returns info such as reason and liftdate if possible.
- fetchModerator() : array<string|int, mixed>
- Fetches an array containing all the moderator permission informationd
- fetchNodeCacheEventsForUser() : array<string|int, mixed>
- Moved from vB_Datamanager_User::updateDeletedUserData(). Fetch nodeChg_ events and list of starters owned by $userid. Call this to get the nodes to be cache-busted BEFORE running node updates for user deletes or user merges.
- fetchOnlineStatus() : int
- Fetches the online states for the user, taking into account the browsing user's viewing permissions. Also modifies the user to include [buddymark] and [invisiblemark]
- fetchTimezonesArray() : array<string|int, mixed>
- fetchUserGroups() : array<string|int, mixed>
- Gets the usergroup information. Returns the secondary groups even if allowmembergroups usergroup option is set to No.
- fetchUserinfo() : array<string|int, mixed>
- Fetches an array containing info for the specified user, or false if user is not found
- fetchUserName() : string
- Fetches the username for a userid
- fetchUserNames() : array<string|int, mixed>
- Fetches the user names for the given user ids
- fetchUserWithPerms() : array<string|int, mixed>
- Fetches an array containing info for the specified user, or false if user is not found
- formatAndValidateBirthday() : bool
- Formats the provided birthday into an array for user API, Library & datamanager consumption and runs sanity checks on the day/month/year values.
- generateUserSecret() : string
- Generates a totally random string
- getContentInstance() : mixed
- getCurrentUserPrivacyFlags() : mixed
- Get the flags for privacy options based on the user's privacy setting and the current user's permissions.
- getCustomFields() : mixed
- getDayOfWeekPhrases() : mixed
- getEmailReplacementValues() : array<string|int, mixed>
- Returns the values for the user-related phrase shortcodes, for use in emails.
- getGroupInTopic() : array<string|int, mixed>
- This returns a user's additional permissions from the groupintopic table
- getIpLocation() : string
- Return the location for an IP address
- getPersonalData() : array<string|int, mixed>
- Returns a report on "personal information" for a user
- getPrivacyOptions() : array<string|int, mixed>
- Getter for user privacy options.
- getProfileFieldsFromUserInfoArray() : mixed
- getRawCustomFields() : mixed
- getUserInfoRecords() : mixed
- getUsertitleFromPosts() : mixed
- incrementPostCountForUsers() : void
- Update the post count for a list of users.
- instance() : static
- Returns singleton instance of self.
- invalidateOldPasswords() : void
- isBanned() : bool
- Check whether a user is banned.
- isMemberOf() : bool
- Works out if a user is a member of the specified usergroup(s)
- merge() : mixed
- Merge two users
- monitorWords() : mixed
- Checks if the text contains monitored words, and if so, sends notifications to admins and moderators if the setting is on.
- needsCoppa() : int
- This checks whether a user needs COPPA approval based on birthdate. Responds to Ajax call
- precleanDisplayname() : mixed
- precleanUsername() : mixed
- precleanUsernameRaw() : mixed
- preloadUserInfo() : mixed
- This preloads information for a list of userids, so it will be available for userContext and other data loading
- registerNeedAvatarForUsers() : mixed
- Registers userids that we will later be fetching avatars for. If we register the userids here, they can be fetched in batches.
- removeSecondaryUserGroups() : void
- Remove groups from a user
- save() : int
- Insert or Update an user
- saveProfileFieldDefinition() : mixed
- sendActivateEmail() : mixed
- Send the activation email to the user
- sendPasswordEmail() : mixed
- setUsergroup() : mixed
- transferOwnership() : mixed
- Transfers all ownerships (blogs and groups) from given user to another one.
- updateEmailFloodTime() : mixed
- updateGuestPrivacyConsent() : mixed
- Updates guest privacy consent
- updateLatestUser() : mixed
- This updates the latest user in the statistics so that it stays current.
- uploadAvatar() : mixed
Constants
PASSWORD_RESET_ATTEMPTS
public
mixed
PASSWORD_RESET_ATTEMPTS
= 10
PASSWORD_RESET_LOCK_MINUTES
public
mixed
PASSWORD_RESET_LOCK_MINUTES
= 10
Methods
__serialize()
public
__serialize() : array<string|int, mixed>
Return values
array<string|int, mixed>__sleep()
public
__sleep() : array<string|int, mixed>
Return values
array<string|int, mixed>__unserialize()
public
__unserialize(array<string|int, mixed> $serialized) : void
Parameters
- $serialized : array<string|int, mixed>
__wakeup()
public
__wakeup() : void
addSecondaryUserGroups()
Adds groups to a user
public
addSecondaryUserGroups(int $userid, array<string|int, mixed> $groups) : void
Will not add a group if it matches the user's primary group is set to that group Will add groups even if allowmembergroups is set to "no". There will be cases where we want to track secondary group changes even if we aren't doing anything with them
Does not validate that the usergroupids are valid
Parameters
- $userid : int
- $groups : array<string|int, mixed>
-
list of integer ids for usergroups to add
buildProfileFieldDatastore()
public
buildProfileFieldDatastore() : mixed
buildStatistics()
public
buildStatistics() : mixed
checkCoppa()
public
checkCoppa(mixed $user) : mixed
Parameters
- $user : mixed
checkPasswordResetLock()
public
checkPasswordResetLock(array<string|int, mixed> $useractivation) : mixed
Parameters
- $useractivation : array<string|int, mixed>
-
Record to check. Must have 'reset_locked_since'
checkPrivacyOption()
public
checkPrivacyOption(mixed $option, mixed $userLocationCode) : mixed
Parameters
- $option : mixed
- $userLocationCode : mixed
checkUsernameLibraryInternal()
This function is NOT meant for general consumption. For general use, please
public
checkUsernameLibraryInternal(bool $newuser, array<string|int, mixed> $user, array<string|int, mixed> $olduser[, array<string|int, bool> $skipChecks = [] ]) : mixed
Parameters
- $newuser : bool
-
True if this is called during registration
- $user : array<string|int, mixed>
-
Array of incoming user changes
- $olduser : array<string|int, mixed>
-
Existing user data. Empty if $newuser.
- $skipChecks : array<string|int, bool> = []
-
Optional. Following bypasses are available:
- duplicate -- skip duplicate username check
Tags
cleanIpInfo()
Delete the old IP cache data
public
cleanIpInfo() : mixed
clearCache()
public
static clearCache() : mixed
clearChannelPerms()
This method clears remembered channel permission
public
clearChannelPerms(int $userid) : mixed
Parameters
- $userid : int
clearUserInfo()
Clear user cached info for given userids.
public
clearUserInfo(mixed $userids) : mixed
There's currently cached info in several places (vB_Session, vB_User and vB_Cache implementations) this makes sure they all properly cleared.
Parameters
- $userids : mixed
decrementPostCountForUsers()
Update the post count for a list of users.
public
decrementPostCountForUsers(mixed $userInfo) : void
The simple case is one user and one post, but if we do a large operation -- for example deleting a topic -- we can cause a number of posts to be "uncounted" for a number of users (and have more than one "new" post per user). We batch the call for all affected users because it allows us to avoid
Parameters
- $userInfo : mixed
delete()
Delete a user
public
delete(int $userid[, bool $transfer_groups = true ][, int $transferee = null ]) : mixed
Parameters
- $userid : int
-
The ID of user to be deleted
- $transfer_groups : bool = true
-
Whether to transfer the Groups and Blogs owned by the user to $transferee
- $transferee : int = null
-
ID of user that will receive the groups & blogs owned by deleted user.
fetchAvatars()
Fetch the Avatars for a userid array
public
fetchAvatars([array<string|int, mixed> $userids = [] ][, string|bool $typekey = 'avatar' ][, array<string|int, mixed> $userinfo = [] ]) : array<string|int, mixed>
Parameters
- $userids : array<string|int, mixed> = []
- $typekey : string|bool = 'avatar'
-
[values of 'avatar', 'thumb', and 'profile'] for size. For backwards compatibilty other values will be treated as 'thumb' if true and 'avatar if not
- $userinfo : array<string|int, mixed> = []
-
Array of userinfo, possibly already containing the avatar information. If not provided will be fetched.
Return values
array<string|int, mixed> —Information regarding the avatar
fetchBannedInfo()
Check whether a user is banned and returns info such as reason and liftdate if possible.
public
fetchBannedInfo(int $userid) : mixed
Parameters
- $userid : int
Tags
fetchModerator()
Fetches an array containing all the moderator permission informationd
public
fetchModerator(int $userid[, mixed $moderators = false ]) : array<string|int, mixed>
Parameters
- $userid : int
- $moderators : mixed = false
Return values
array<string|int, mixed> —the permission array
fetchNodeCacheEventsForUser()
Moved from vB_Datamanager_User::updateDeletedUserData(). Fetch nodeChg_ events and list of starters owned by $userid. Call this to get the nodes to be cache-busted BEFORE running node updates for user deletes or user merges.
public
fetchNodeCacheEventsForUser(int $userid) : array<string|int, mixed>
Parameters
- $userid : int
Return values
array<string|int, mixed> —[ 'events' => string[] list of nodeChg_{nodeid} events to be called 'starters' => int[] list of topics owned by $userid ]
fetchOnlineStatus()
Fetches the online states for the user, taking into account the browsing user's viewing permissions. Also modifies the user to include [buddymark] and [invisiblemark]
public
fetchOnlineStatus(mixed &$user) : int
Parameters
- $user : mixed
Return values
int —0 = offline, 1 = online, 2 = online but invisible (if permissions allow)
fetchTimezonesArray()
public
fetchTimezonesArray() : array<string|int, mixed>
Return values
array<string|int, mixed>fetchUserGroups()
Gets the usergroup information. Returns the secondary groups even if allowmembergroups usergroup option is set to No.
public
fetchUserGroups(mixed $userid) : array<string|int, mixed>
Parameters
- $userid : mixed
Tags
Return values
array<string|int, mixed> —with
- groupid integer primary group id
- displaygroupid integer display group id
- secondary array list of secondary user groups
- infraction array list of infraction groups.
fetchUserinfo()
Fetches an array containing info for the specified user, or false if user is not found
public
fetchUserinfo([int $userid = false ][, array<string|int, mixed> $option = [] ][, int $languageid = false ][, bool $nocache = false ]) : array<string|int, mixed>
Values for Option parameter: avatar - Get avatar location - Process user's online location admin - Join the administrator table to get various admin options signpic - Join the sigpic table to get the userid just to check if we have a picture isfriend - Is the logged in User a friend of this person? Therefore: ['avatar', 'location'] means 'Get avatar' and 'Process online location'
Parameters
- $userid : int = false
- $option : array<string|int, mixed> = []
-
--(see description)
- $languageid : int = false
-
-- If set to 0, it will use user-set languageid (if exists) or default languageid
- $nocache : bool = false
-
-- If true, the method won't use user cache but fetch information from DB.
Return values
array<string|int, mixed> —The information for the requested user
fetchUserName()
Fetches the username for a userid
public
fetchUserName(mixed $userid) : string
Parameters
- $userid : mixed
Return values
stringfetchUserNames()
Fetches the user names for the given user ids
public
fetchUserNames(array<string|int, mixed> $userIds) : array<string|int, mixed>
Parameters
- $userIds : array<string|int, mixed>
Return values
array<string|int, mixed> —$usernames -- format [$userid => $username]
fetchUserWithPerms()
Fetches an array containing info for the specified user, or false if user is not found
public
fetchUserWithPerms(int $userid[, int $languageid = 0 ][, bool $nocache = false ][, bool $lastactivity = false ]) : array<string|int, mixed>
Parameters
- $userid : int
- $languageid : int = 0
-
-- If set to 0, it will use user-set languageid (if exists) or default languageid.
- $nocache : bool = false
-
-- If true, the method won't use user cache but fetch information from DB.
- $lastactivity : bool = false
-
-- unused
Return values
array<string|int, mixed> —The information for the requested user
formatAndValidateBirthday()
Formats the provided birthday into an array for user API, Library & datamanager consumption and runs sanity checks on the day/month/year values.
public
formatAndValidateBirthday(mixed &$birthday) : bool
Parameters
- $birthday : mixed
Return values
bool —true if provided birthday was consumable & passed range sanity checks false if birthday was provided in an incompatible format
generateUserSecret()
Generates a totally random string
public
generateUserSecret() : string
Intended to populate the user secret field. Exposed as a function because the installer doesn't use the normal user save code and will need access.
Return values
string —Generated String
getContentInstance()
public
static getContentInstance(mixed $contenttypeid) : mixed
Parameters
- $contenttypeid : mixed
getCurrentUserPrivacyFlags()
Get the flags for privacy options based on the user's privacy setting and the current user's permissions.
public
getCurrentUserPrivacyFlags(mixed $userInfo) : mixed
Parameters
- $userInfo : mixed
getCustomFields()
public
getCustomFields(mixed $userid, mixed $showHidden) : mixed
Parameters
- $userid : mixed
- $showHidden : mixed
getDayOfWeekPhrases()
public
getDayOfWeekPhrases() : mixed
getEmailReplacementValues()
Returns the values for the user-related phrase shortcodes, for use in emails.
public
getEmailReplacementValues(mixed $email[, mixed $userid = 0 ]) : array<string|int, mixed>
These correspond to the recipient user.
Parameters
- $email : mixed
- $userid : mixed = 0
Return values
array<string|int, mixed> —Array of replacement values
getGroupInTopic()
This returns a user's additional permissions from the groupintopic table
public
getGroupInTopic(int $userid[, int $nodeid = false ][, mixed $forceReload = false ]) : array<string|int, mixed>
Parameters
- $userid : int
- $nodeid : int = false
-
-- nodeid
- $forceReload : mixed = false
Return values
array<string|int, mixed> —-- Array of ['nodeid' => nodeid, 'groupid' => groupid];
getIpLocation()
Return the location for an IP address
public
getIpLocation(string $ipaddress) : string
Parameters
- $ipaddress : string
Return values
string —The location string. Typically CountryCode:RegionCode. In some cases it may be just the CountryCode, the special value EU (for legacy EU users and in some cases where the geoip provider can't track it) and the special value "UNKNOWN".
getPersonalData()
Returns a report on "personal information" for a user
public
getPersonalData( $userid) : array<string|int, mixed>
This is the personally identifiable information for privacy laws. Currently this follows our best understanding of the EU law, but eventually this may end up being a superset of all simpilar laws.
Parameters
Return values
array<string|int, mixed> —--string username --string email --string icq --string yahoo --string skype --string google --string usertitle --int lastvisit --int lastactivity --int lastpost --int posts --string reputation --int reputationlevelid --string timezoneoffset --string ipaddress --int pmtotal --string fbuserid --int fbjoindate --string fbname --int infractions --int warnings --string reputationlevelphrase --string startofweekphrase --string language --string birthday --array(string) devicetokens --array customFields --array {categoryname} -- multiple arrays of categoryname => field -- array {fieldphrase} -- mutple array of fieldphrase => field details --mixed val --int hidden
getPrivacyOptions()
Getter for user privacy options.
public
getPrivacyOptions() : array<string|int, mixed>
Return values
array<string|int, mixed> —Existing user privacy options.
getProfileFieldsFromUserInfoArray()
public
getProfileFieldsFromUserInfoArray(mixed $userInfoArray, mixed $showHidden) : mixed
Parameters
- $userInfoArray : mixed
- $showHidden : mixed
getRawCustomFields()
public
getRawCustomFields(mixed $userid) : mixed
Parameters
- $userid : mixed
getUserInfoRecords()
public
getUserInfoRecords(mixed $userids) : mixed
Parameters
- $userids : mixed
getUsertitleFromPosts()
public
getUsertitleFromPosts(mixed $posts) : mixed
Parameters
- $posts : mixed
incrementPostCountForUsers()
Update the post count for a list of users.
public
incrementPostCountForUsers(mixed $userInfo) : void
The simple case is one user and one post, but if we do a large operation -- for example undeleting a topic -- we can cause a number of posts to be "counted" for a number of users (and have more than one "new" post per user). We batch the call for all affected users because it allows us to avoid
We also update the lastpost information for the user (conditionally). These are linked primary to save queries to the database because they tend to change together rather than because the are conceptually the same thing.
Parameters
- $userInfo : mixed
instance()
Returns singleton instance of self.
public
static instance(mixed $class) : static
Parameters
- $class : mixed
Return values
static —- Reference to singleton instance of the requested library class
invalidateOldPasswords()
public
invalidateOldPasswords(int $lookback[, int|null $limit = null ]) : void
Parameters
- $lookback : int
- $limit : int|null = null
isBanned()
Check whether a user is banned.
public
isBanned(int $userid) : bool
Parameters
- $userid : int
-
User ID.
Return values
bool —Whether the user is banned.
isMemberOf()
Works out if a user is a member of the specified usergroup(s)
public
isMemberOf(array<string|int, mixed> $userinfo, mixed $usergroupids) : bool
This function can be overloaded to test multiple usergroups: is_member_of($user, [1, 3, 4, 6...])
Parameters
- $userinfo : array<string|int, mixed>
-
- must contain usergroupid and membergroupids fields
- $usergroupids : mixed
Tags
Return values
bool —-- true if the user is a member of any given group
merge()
Merge two users
public
merge(int $sourceuserid, int $destuserid) : mixed
Parameters
- $sourceuserid : int
- $destuserid : int
monitorWords()
Checks if the text contains monitored words, and if so, sends notifications to admins and moderators if the setting is on.
public
monitorWords(mixed $text, mixed $type, mixed $nodeid[, mixed $userid = null ][, mixed $insertNotifications = true ][, mixed $currentuserid = 0 ]) : mixed
Parameters
- $text : mixed
- $type : mixed
- $nodeid : mixed
- $userid : mixed = null
- $insertNotifications : mixed = true
- $currentuserid : mixed = 0
Tags
needsCoppa()
This checks whether a user needs COPPA approval based on birthdate. Responds to Ajax call
public
needsCoppa(array<string|int, mixed> $dateInfo) : int
Parameters
- $dateInfo : array<string|int, mixed>
-
array of month/day/year.
Return values
int —0 - no COPPA needed, 1- Approve but require adult validation, 2- Deny
precleanDisplayname()
public
precleanDisplayname(mixed $displayname) : mixed
Parameters
- $displayname : mixed
precleanUsername()
public
precleanUsername(mixed $username) : mixed
Parameters
- $username : mixed
precleanUsernameRaw()
public
precleanUsernameRaw(mixed $username) : mixed
Parameters
- $username : mixed
preloadUserInfo()
This preloads information for a list of userids, so it will be available for userContext and other data loading
public
preloadUserInfo(array<string|int, mixed> $userids) : mixed
Parameters
- $userids : array<string|int, mixed>
Tags
registerNeedAvatarForUsers()
Registers userids that we will later be fetching avatars for. If we register the userids here, they can be fetched in batches.
public
registerNeedAvatarForUsers(mixed $userids) : mixed
Parameters
- $userids : mixed
removeSecondaryUserGroups()
Remove groups from a user
public
removeSecondaryUserGroups(int $userid, array<string|int, mixed> $groups) : void
Will not affect the user's primary group Will unset (set to 0) the display groupid if its being removed Will remove groups even if allowmembergroups is set to "no". There will be cases where we want to track secondary group changes even if we aren't doing anything with them
Parameters
- $userid : int
- $groups : array<string|int, mixed>
-
list of integer ids for usergroups to remove
save()
Insert or Update an user
public
save(int $userid, string $password, array<string|int, mixed> $user[, array<string|int, mixed> $userfield = [] ][, array<string|int, mixed> $userOptions = [] ][, array<string|int, mixed> $saveOptions = [] ]) : int
Parameters
- $userid : int
-
Userid to be updated. Set to 0 if you want to insert a new user.
- $password : string
-
New password for the user. Empty means no change.
- $user : array<string|int, mixed>
-
Basic user information such as email or home page * username * email * usertitle * birthday * usergroupid (will get no_permissions exception without administrate user permissions) * membergroupids (will get no_permissions exception without administrate user permissions)
- privacyconsent int -1|0|1 meaning Privacy-Consent Withdrawn|Unknown|Given respectively.
- list not complete
- $userfield : array<string|int, mixed> = []
-
User's User Profile Field data
- $userOptions : array<string|int, mixed> = []
-
Option overrides & notification options for user. Following keys:
- options -- vB options for the user
- adminoptions -- Admin Override Options for the user
- notificationOptions Following are only used if user is a moderator:
- moderatorNotificationOptions
- moderatorEmailNotificationOptions
- $saveOptions : array<string|int, mixed> = []
-
Command options to bypass certain processes or fine tuning certain user fields. Following keys:
- userfieldscope -- String admin|normal|register for admin override, user edit, user creation respectively. Default 'normal'.
- userfieldskiprequired -- Bool True to allow skipping setting required profilefields
- userfieldskiperrors -- Bool True to skip setting profilefields that fail validation instead of throwing an error.
- userfieldallowemptyrequired -- Bool True to allow blanking out required profilefields.
- skippasswordhistory -- Bool True to skip checking password history when changing password. Default True.
- skipactivationemail -- Bool true to skip sending out activation email for new user. Default True.
- skipcoppa -- Bool true to skip COPPA checks & COPPA emails, use carefully! Default False.
- skipusernamechecks -- Bool[] Allows for the following username check bypasses:
-
- duplicate - Bool true to skip duplicate username checks. Default False.
Return values
int —New or updated userid.
saveProfileFieldDefinition()
public
saveProfileFieldDefinition(mixed $profilefield) : mixed
Parameters
- $profilefield : mixed
sendActivateEmail()
Send the activation email to the user
public
sendActivateEmail(int $userid[, bool $checkmoderation = true ][, mixed $checkcoppa = true ]) : mixed
Parameters
- $userid : int
- $checkmoderation : bool = true
-
-- Depeneding on configuration options, once activated a user may be put in the awaiting moderation user group instead of the registered user's group. If this is false we'll always force a switch back to the registered user's group. This is primarily for admin actions where we still need to validate the email but by sending the activation we're implicitly moderating the account.
- $checkcoppa : mixed = true
sendPasswordEmail()
public
sendPasswordEmail(mixed $userid, mixed $email) : mixed
Parameters
- $userid : mixed
- $email : mixed
setUsergroup()
public
setUsergroup(mixed &$user, mixed $newuser, mixed $vboptions, mixed $verifyemail, mixed $coppauser) : mixed
Parameters
- $user : mixed
- $newuser : mixed
- $vboptions : mixed
- $verifyemail : mixed
- $coppauser : mixed
transferOwnership()
Transfers all ownerships (blogs and groups) from given user to another one.
public
transferOwnership(mixed $fromuser, mixed $touser) : mixed
@param int Userid to transfer ownerships from.
Parameters
- $fromuser : mixed
- $touser : mixed
updateEmailFloodTime()
public
updateEmailFloodTime() : mixed
updateGuestPrivacyConsent()
Updates guest privacy consent
public
updateGuestPrivacyConsent(mixed $consent) : mixed
This saves a new record for each consent "event", even if the IP address is the same, because we have no way of knowing if it's the same person or not. If a saved consent "event" for a given time and IP address needs to be retrieved, this will give us the greatest likelihood of finding it.
Parameters
- $consent : mixed
updateLatestUser()
This updates the latest user in the statistics so that it stays current.
public
updateLatestUser(int $userid, string $action) : mixed
This is primarily so that a) New users show up immediately as the latest user b) We don't show a deleted user as the latest user c) Changing the latest user's name or group might affect the latest user.
We don't just rebuild the stats because that can be slowish with large numbers of users and we don't necesarily want to do it. This more or less assumes that the user identified is the only thing that may have changed.
Parameters
- $userid : int
- $action : string
-
-- one of "add", "update", "delete". This determine how we approach things (if we are deleting a user then we don't need to worry that that user might be the latest.
uploadAvatar()
public
uploadAvatar(mixed $filename[, mixed $crop = [] ][, mixed $userid = false ][, mixed $adminoverride = false ]) : mixed
Parameters
- $filename : mixed
- $crop : mixed = []
- $userid : mixed = false
- $adminoverride : mixed = false