View Full Version : Mass Admin PM v1.5
Zero Tolerance
10-04-2004, 10:00 PM
This is a minor upgrade from the first version, 1 main new feature, and a little code revision.
Features:
Number of PM's to send at a time
It's a server intensive process and you don't want to ultimatly send to everyone at once on your forum unless you have like 50 member's.
New Usergroup Selecting
Your now able to select all, 1 or certain usergroup's to which the PM is sent to, so if you wish to send to staff, Ie, Admins, SMods + Mods, you would simply check all those, making it much easier and saving time.
Very simple install, take you 3 seconds, im not joking, yet very useful, a preview is below for those desiring to see what it look's like first.
Enjoy,
- Zero Tolerance
Techguy1
10-05-2004, 02:34 PM
Thanks for the update. I have your hack installed, use it very rarely, but I find it useful.
You like apostrophes waaay too much ;)
Tarion
10-05-2004, 03:09 PM
This is a minor upgrade from the first version, 1 main new feature, and a little code revision.
Features:
Number of PM's to send at a time
It's a server intensive process and you don't want to ultimatly send to everyone at once on your forum unless you have like 50 member's.
New Usergroup Selecting
Your now able to select all, 1 or certain usergroup's to which the PM is sent to, so if you wish to send to staff, Ie, Admins, SMods + Mods, you would simply check all those, making it much easier and saving time.
Very simple install, take you 3 seconds, im not joking, yet very useful, a preview is below for those desiring to see what it look's like first.
Enjoy,
- Zero Tolerance
Nice work
Tarion klicked install
68 Z-28
10-05-2004, 04:19 PM
Thanks for the update. bravo.
However I have a minor problem. The usergroupd I have set-up are for members to join as a secondary usergroup. They show up on the window, but when trying to send a PM to users I get the error
There are no user's within the specified usergroup(s) to PM. Please go back.
select * from user where usergroupid IN(24) order by userid
Can you add support to pm users in the group that are in them as secondary users as well?
Zero Tolerance
10-05-2004, 04:32 PM
It's something ill have to look into, i've never used secondary usergroups (never saw any reason to) and im not exactly sure how they are constructued =)
- Zero Tolerance
Johnny
10-05-2004, 04:56 PM
awsome update, but just a question...
does the user that disables PMs in the USERCP still recieave a PM from the admin or do they have to have it enabled.
Zero Tolerance
10-05-2004, 05:08 PM
They still get the PM, permissions are by-passed, no matter what settings they have, they will recieve this PM :)
- Zero Tolerance
I would need support for secondary usergroups as well.
I think that the is_member_of() function accounts for secondary usergroups as opposed to using the $bbuserinfo[groupid] (that's probably not exactly right)
the Sandman
10-05-2004, 05:27 PM
Dune had the following modification posted in the original Thread for version 1.0, however at first glance I don't see how this will apply to the new version 1.5.
We use secondary groups too, primarily. ;) (We leave everyone except admins in Reg users (and banned, unregistered, etc). Additional permissions are in secondary groups, so we needed this to.
Here's what you need to do:
In admin_pmall.php
Find:
// Collect Array Of Members Within Specified Usergroup
$Get_Members=$DB->query("select * from ".TABLE_PREFIX."user where usergroupid='{$_POST['to_usergroup']}' order by userid");
REPLACE WITH:
// Collect Array Of Members Within Specified Usergroup
$Get_Members=$DB->query("select * from ".TABLE_PREFIX."user where usergroupid='{$_POST['to_usergroup']}' or membergroupids REGEXP '[[:<:]]{$_POST['to_usergroup']}[[:>:]]' order by userid");
Find:
// Collect Array Of Members Within Specified Usergroup
$Get_Members=$DB->query("select * from ".TABLE_PREFIX."user where usergroupid='{$_GET['usergroup']}' order by userid");
REPLACE WITH:
// Collect Array Of Members Within Specified Usergroup
$Get_Members=$DB->query("select * from ".TABLE_PREFIX."user where usergroupid='{$_GET['usergroup']}' or membergroupids REGEXP '[[:<:]]{$_GET['usergroup']}[[:>:]]' order by userid");
This will find members who are in the specified group as EITHER their primary or as a secondary. Hope that helps. Credit for the REGEXP goes to my sysadmin Dan (the Man).
Zero Tolerance
10-05-2004, 06:40 PM
Im not too sure on using REGEXP and IN within a query, Ie: where field REGEXP IN(bla,bla,bla)
But ill run some tests :)
- Zero Tolerance
moley
10-05-2004, 07:09 PM
wow man this is the 3rd hack of yours i've added for vb3.0.3 :p nice work and on the day he returns from his break :p
Floris
10-06-2004, 01:48 AM
This is a minor upgrade from the first version, 1 main new feature, and a little code revision.
Features:
Number of PM's to send at a time
It's a server intensive process and you don't want to ultimatly send to everyone at once on your forum unless you have like 50 member's.
New Usergroup Selecting
Your now able to select all, 1 or certain usergroup's to which the PM is sent to, so if you wish to send to staff, Ie, Admins, SMods + Mods, you would simply check all those, making it much easier and saving time.
Very simple install, take you 3 seconds, im not joking, yet very useful, a preview is below for those desiring to see what it look's like first.
Enjoy,
- Zero Tolerance
Very cool hack. I don't like installing hacks, but I am considering to install this one!
mamboking
10-06-2004, 02:33 AM
This is a good hack and I am someone who will use it often. One of the things I like about this board's messaging system over my previous one is the ability to request a receipt. It is a shame to loose that feature with Mass PM.
ChrisBaktis
10-06-2004, 11:23 AM
Great update that we use all the time.
Zero Tolerance
10-06-2004, 03:17 PM
This is a good hack and I am someone who will use it often. One of the things I like about this board's messaging system over my previous one is the ability to request a receipt. It is a shame to loose that feature with Mass PM.
Well a receipt would be available, but if you have around 13,000 members then your gonna have 13,000 receipts..not exactly what we want, lol.
However i could make a v1.6 where the user is "forced" to read the PM.
- Zero Tolerance
Basit
10-14-2004, 12:10 AM
I have 24,000 members, and i probably will never want to get receipt of MASS PM sent. Best use of this hack is to send greetings to a huge number of members at once or special annoucements. And I found it a wonderful tool.
Thanks ZT I was looking for this hack since I migrated to VB.
PS: One question, (haven't checked it yet) does this Mass PM also generate an email for those users selected to receive PM notification as eMail ? If not don't you think it will be a added feature to this same hack if it gives option to send eMail of the PM (forced eMail even if user selected not to receive PM notification / not to receive eMails from Administration) ?
Regards,
Basit
Andreas
10-14-2004, 12:23 AM
Nice hack.
Some suggestions:
Take care of user settings for reveiving PM
Take care of user settings for eMail notifiication
Use phrases ;)
Well, not really necessary but makes it easier for those of us who do not use english
Add possibility to include username in message ("Dear xyz ...")
Optimize query so it does not take so much RAM
Only userid and username should be necessary
Take care of secondary usergroups
Could be done by using FIND_IN_SET()?
XrayHead
10-20-2004, 07:18 PM
Installed, thank you!!
XraY :squareeyed:
Rodrigo
10-24-2004, 10:01 PM
This is a very nice hack (clicked *INSTALL*), but i've added a little thing...
The title now says title . So that the users know it's a masspm...
find:
$title = addslashes(htmlspecialchars_uni(fetch_censored_tex t($title)));
below it add:
$title = " ".$title." ";
again... nice work :)
dreamhost
10-26-2004, 10:15 PM
Would love 2 additional mailing options
1. send pm to every member currently online
2. send pm to every member who was online today
would be a really nice way to get a quick anouncement out to those who are active, without having to send to all members
also for really large sites, the ability to batch them would be a great feature.
Something like send "x" at a time, so those sites with tens of thousands of members could actually use this.
blue_chi
10-29-2004, 09:42 PM
Thanks on the great hack, I use this all the time. You rock.
Lextreme
10-30-2004, 05:30 PM
I found the construct_nav_option and the rest. When the instruction stated
+++++++++++++++
underneath Place:
++++++++++++++++++++
construct_nav_option("send PM To Users", admin_pmall.php', '<br/>');
What does that mean. do i replace it or add the above to the (vbphrase['send_email_to_users']
I tried but some how didnt work. I couldnt get into the admin panel
david
Lextreme
10-30-2004, 05:45 PM
Got it... thanks zero
dreamhost
10-30-2004, 09:01 PM
would really love the pm online users option if possible.....
even willing to pay for this addon.
AnhTuanCool
10-30-2004, 11:59 PM
would really love the pm online users option if possible.....
even willing to pay for this addon.
You can ask for it in the Paid Service Forum ;)
94DROPTOPZ
11-06-2004, 12:12 PM
Great hack!
I click install
Floris
11-09-2004, 02:04 PM
I kind of expected this to take user settings into consideration.
So if a user doesn't want a privmsg, it won't send it,
and if the users who want one, and want notification, will receive an email.
And the popup box settings, etc.
Hopefully version 2.0 will still be just 1 file to upload, and takes those settings into account.
Im not too sure on using REGEXP and IN within a query, Ie: where field REGEXP IN(bla,bla,bla)
But ill run some tests :)
- Zero Tolerance
I'm not using REGEXP *AND* IN(), Just REGEXP.
Secondary usergroup membership is stored as a list of values in the user table (ie, "45,6,18". You can't use IN() with this list because you'll unintentionally pickup other values - 4 is IN 45, for example.
The REGEXP function makes it look at the individual values within the list. Works for me!
sv1cec
11-11-2004, 04:55 PM
I would also love to see the "PM on-line users" option too. Tonight I was upgrading my vB software, and I ended up copying and pasting the on-line list, just to warn my users.
Rgds and thanks for another, lovely hack.
trainer
11-16-2004, 11:11 PM
does this hack/addon allow you to send html or bbcode in the mass PM?
looks great!
Spinball
11-22-2004, 09:32 AM
Thanks for this hack.
I would definitely request to be able to PM those people who have said they DO NOT want to receive emails from admin.
I want to send them a PM telling them the message instead. And invite them to turn the email receipt back on.
GREAT HACK!!! easy to install!!
>>However i could make a v1.6 where the user is "forced" to read the PM.
this wud be cool too.
let me know if u come up with new mods.
Vik
o0stephane0o
12-01-2004, 12:30 AM
My board is someting like www.lol.com/forum/ and once I?ve sent the MPs a window opens saying you have received a new MP but it looks like there is a bug with the url cos instead of opening the url www.lol.com/forum/private.php it tries to open www.lol.com/private.php
I?m pretty sure it comes form the script $pmpopupurl but how can I correct it?
Pixelgrounds
12-05-2004, 11:15 PM
i installed this hack, nice and simple to use great work :)
ozmazdaclub
01-07-2005, 10:52 PM
Thanks for the great hack.
Install Button > Click!
MikaK
01-08-2005, 02:50 AM
I'm not using REGEXP *AND* IN(), Just REGEXP.
Secondary usergroup membership is stored as a list of values in the user table (ie, "45,6,18". You can't use IN() with this list because you'll unintentionally pickup other values - 4 is IN 45, for example.
The REGEXP function makes it look at the individual values within the list. Works for me!Hi dune,
Did you manage to implement it into this new version - if so, would you be willing to share the mod? Thanks already in advance:)
*installs*
=Mika=
T3MEDIA
01-23-2005, 10:15 PM
Is it only me that gets a white screen when you mass send?
Spinball
01-24-2005, 06:38 AM
It would be good to be able to paste in a couple of hundred user names. For example, I did a database search for all the members with more than 4 carriage returns in their signatures and I wanted to PM them all asking them to reduce the size of them.
Also when I did try to PM all my members (over 25,000) it crashed and took the database down. I recommend you put some steps in there to slow it down by putting a pause between each batch of PMs.
ForYou
02-03-2005, 01:17 PM
Hello Sir ,
When i send to the Mod the message will be sent OK , but when i send to register users there is Blank Page and the messages didn't sent ,
please help why when i send PM Users to register user there is White page,
please help
regards
T3MEDIA
02-03-2005, 02:33 PM
You know... You guys are full of ish. with your "clicks install" Your telling me it acutally works for you? Your telling me you dont see a white screen for registered users?
Whatever
Eagle Creek
02-28-2005, 10:52 PM
Is it full 3.0.7 compatible?
Zero Tolerance
03-01-2005, 09:39 AM
I have no reason to believe it wouldn't work with 3.0.7, but if you get any problems feel free to let me know.
- Zero Tolerance
Eagle Creek
03-01-2005, 11:37 AM
I have no reason to believe it wouldn't work with 3.0.7, but if you get any problems feel free to let me know.
- Zero Tolerance
Ok I'll try in a test environment. I have two large boards running and I don't want them anything to happen :).
Nice hack :)
T3MEDIA
03-08-2005, 08:54 PM
I have no reason to believe it wouldn't work with 3.0.7, but if you get any problems feel free to let me know.
- Zero ToleranceZero from your experience do you know why when using your hack a white screen appears and only admins get the PM's?
Zero Tolerance
03-09-2005, 12:51 AM
Zero from your experience do you know why when using your hack a white screen appears and only admins get the PM's?
Well, the only explanation to that i can think of is a bad upload, the script is working fine for me on 3.0.7
Also, this doesn't support Secondary Usergroups.
- Zero Tolerance
Lee Wilde
03-11-2005, 01:13 AM
I'm the 100th install :-) Very useful little hack, thanks.
flee2
03-11-2005, 04:37 AM
in a 18.000 user database, i put 300 send pm times, and after tried 50, and get stuck... only the blue screen of cp, and nothing more.. only appears at top, PM Users [Created By Zero Tolerance].
flee2
03-11-2005, 05:59 AM
Zero. I will not question your way to make hacks, but checking a few posts back, i see that the users with a lot of records in USER table in database, get stuck when trying to send this. You replied that's is a UPLOAD problem.. or any other problem like this.
I will explain this for you.. checking your hack, it's really good constructed, but you miss a little detail. when you LIMIT the send of PM's, you must LIMIT the QUERY to DB too.
I looked that the query is static in all "retries" to send PM's:
$Query_Build = "select * from ".TABLE_PREFIX."user where usergroupid IN({$set_in}) order by userid"
this will return a query result with ALL your members in the usergroup / user table.. if you have 25.000 members in the group "Registered", the query result will have 25.000 records, and before you get the reply from DB, you mysql will go down.
The way to solve this, is LIMIT the query to database, in the one by one step to sending pm's. (LIKE the vB do while sending mass emails)
Example:
Sending to 150 users in usergroup 6, send amount by step is set in 50.
- START SCRIPT
- CHECK THE AMOUNT OF PM'S SENT BY STEP (50)
- QUERY DATABASE TO USERGROUP 6, LIMIT RECORDS FROM 0 TO 50
- SEND PM'S 0 TO 50
- SHOW OK RESULTS AND CONTINUE TO NEXT STEP (SEND THE "STARTAT")
- QUERY DATABASE TO USERGROUP 6, LIMIT RECORDS 51 TO 100 (START - START + AMOUNT)
- SEND PM'S 51 TO 100
AND CONTINUE... TO END
-------------------------
your actual script works like this:
Sending to 150 users in usergroup 6, send amount by step is set in 50.
- START SCRIPT
- CHECK THE AMOUNT OF PM'S SENT BY STEP (50)
- QUERY DATABASE TO USERGROUP 6, NO LIMIT RECORDS (ALL RESULTS)
*** IF THE USERS ARE A LOT, YOU GET A HANGED DB IN A SUPER BIG QUERY **
-----------------
It will be much better if you correct this issue... :D
Dennis Olson
03-15-2005, 01:51 PM
One more thing: I would like to NOT include the sending Admin's signature-line (or at least have it as a yes/no checkbox). How can that be done please?
Thanks!
I find this hack.. VERY useful. I installed it today.
However I have a question. When i sent an PM to all my members using this mod, no one got a automated email in their inbox telling them that they have recieved a new PM (!?)
any suggestion what could be wrong. they all get notified otherwise.
can I *bump* the thread to if anyone has any comments on my question?
Eagle Creek
03-18-2005, 08:42 AM
can I *bump* the thread to if anyone has any comments on my question?
You already did ;).
Marco van Herwaarden
03-18-2005, 08:50 AM
I find this hack.. VERY useful. I installed it today.
However I have a question. When i sent an PM to all my members using this mod, no one got a automated email in their inbox telling them that they have recieved a new PM (!?)
any suggestion what could be wrong. they all get notified otherwise.
Sending a PM notification mail is not implemented in this hack. Since this hack is already very server intensive, i also don't know if that would be a good idea.
PS If you want to reach them by mail anyway, why don't you just send out a mass mail instead of a PM?
Dennis Olson
03-29-2005, 02:43 PM
I'd still like to know how to NOT include the sender's SIG-line....
dssmili
03-30-2005, 02:59 PM
I click send PM and all I get is a blank page. No error nothing and it just sits there?
mili
Devient
03-31-2005, 02:12 PM
gettting same problem as many people......can send a mass pm to a few people, but as i got 6500 members when i try and send them a pm the page goes blank...even when i try sending 25 at a time.
is there a fix for this?
magyosha
03-31-2005, 06:56 PM
i'm using this hack .. very effective ..
however ..
when a user normaly sends a PM it they also recieve an email telling them they have recieved a PM etc .. when sending with the hack no email is sent .. can this be added as an option .. it may well increase the server load .. however lowering the sends at one time could make this ok
flee2
04-09-2005, 05:37 PM
we are waiting the BUGFIX to the error generated trying to send pm to a big user database (I writed the solution above..) if you want to make it tell us, if not, i will make a new hack with this bug fixed, and release with another name.
greetz..
T3MEDIA
04-09-2005, 05:41 PM
we are waiting the BUGFIX to the error generated trying to send pm to a big user database (I writed the solution above..) if you want to make it tell us, if not, i will make a new hack with this bug fixed, and release with another name.
greetz..just do a fix no big deal. No need to confuse users. just say hey I found a work around and here it is... done.
I know I will be waiting.
RichieBoy67
04-15-2005, 03:00 PM
That worked perfectly for me!! Thanks.... this is an awesome hack and your right..... very easy install.
Thanks for another great hack!!
BigBlue1974
04-15-2005, 07:19 PM
I have just a small site, around 250 users. There is a subset of members on that site(my baseball team) that I want PMs to send to. From reading what this can do and the screenshots this will not do it. Is there such a thing available?
MB Dreamz
05-06-2005, 05:43 PM
Zero, did you figure out how to implement the second usergroup into this hack yet, or is it not going to happen? Thanks.
Watson
05-12-2005, 07:35 PM
gettting same problem as many people......can send a mass pm to a few people, but as i got 6500 members when i try and send them a pm the page goes blank...even when i try sending 25 at a time.
is there a fix for this?
I get this exact same problem :(:(
Watson
05-16-2005, 05:45 PM
I am wondering if this problem is because I use a subdomain for my forums, if so is there a way round this??
Watson
GSX-Racing
06-17-2005, 06:20 AM
Any fix or change for second usergroup.
I need to send mass PM's to a usergroup that has only additional users.
Alrasam
06-23-2005, 08:01 PM
Hello Sir ,
When i send to the Mod the message will be sent OK , but when i send to register users there is Blank Page and the messages didn't sent ,
please help :ermm:
i have more that 8000 users
is there any thing to fix it!!!!!
Alrasam
06-24-2005, 08:15 PM
.
.
up
GSX-Racing
06-24-2005, 09:25 PM
Not sure we are going to get any feedback here Alrasam. :(
Alrasam
06-25-2005, 08:04 AM
:ermm:
derekivey
07-17-2005, 10:33 PM
Great mod!
* derekivey clicks install
csidlernet
07-20-2005, 07:33 AM
coolies
Thanks for the hack Zero Tolerance!
sajjid
08-22-2005, 04:05 PM
will ypu be porting this over to 3.5
thanks
thephonemall
08-27-2005, 04:08 PM
Havent tested it.. but it looks like its working ;) Took me about 30 seconds to install rather than 3 seconds though. sheesh. /me click install n e wayz :)
Neutral Singh
08-28-2005, 03:35 AM
will ypu be porting this over to 3.5
i second the request.
Valter
08-31-2005, 09:50 AM
Hi ZT
Did you tried to make vB3.5 compatible version?
Thanks
Avalon111
09-02-2005, 08:58 AM
i love this hack!!!!!
great work
gethinoakes
09-29-2005, 10:01 PM
Any chance this would work with 3.5?
Avalon111
09-30-2005, 12:30 PM
Any chance this would work with 3.5?
have your tried it?
trackpads
10-10-2005, 12:59 AM
have your tried it?
I did, here is the error with 3.5:
Fatal error: Call to a member function on a non-object in /home/mysite/public_html/forum/admincp/admin_pmall.php on line 46
Line 46 is:
// ----------------------------
// Get Usergroups
// ----------------------------
$UserGroups = array();
$usergroups = $DB->query("SELECT * FROM " . TABLE_PREFIX . "usergroup ORDER BY title");
while($usergroup = $DB_site->fetch_array($usergroups)){
$UserGroups[] = array(
'uid' => $usergroup['usergroupid'],
'u_name' => $usergroup['title'],
);
}
derekivey
10-10-2005, 01:52 AM
You are using the 3.0.x version. You should use this one, https://vborg.vbsupport.ru/showthread.php?s=&threadid=96190.
Saphrym
10-27-2005, 05:01 PM
Installed. But I also need secondary group support.
ThugTheLeet
01-16-2006, 05:21 AM
great !!
installed
Eagle Creek
01-20-2006, 09:36 AM
Installed. But I also need secondary group support.
So do I :(.
TVNettet
08-17-2006, 05:49 PM
Quite possibly one of the most practical add on's ever. Well done mate!!! Thx.
gonzek
02-24-2008, 11:21 AM
Zero. I will not question your way to make hacks, but checking a few posts back, i see that the users with a lot of records in USER table in database, get stuck when trying to send this. You replied that's is a UPLOAD problem.. or any other problem like this.
I will explain this for you.. checking your hack, it's really good constructed, but you miss a little detail. when you LIMIT the send of PM's, you must LIMIT the QUERY to DB too.
I looked that the query is static in all "retries" to send PM's:
$Query_Build = "select * from ".TABLE_PREFIX."user where usergroupid IN({$set_in}) order by userid"
this will return a query result with ALL your members in the usergroup / user table.. if you have 25.000 members in the group "Registered", the query result will have 25.000 records, and before you get the reply from DB, you mysql will go down.
The way to solve this, is LIMIT the query to database, in the one by one step to sending pm's. (LIKE the vB do while sending mass emails)
Example:
Sending to 150 users in usergroup 6, send amount by step is set in 50.
- START SCRIPT
- CHECK THE AMOUNT OF PM'S SENT BY STEP (50)
- QUERY DATABASE TO USERGROUP 6, LIMIT RECORDS FROM 0 TO 50
- SEND PM'S 0 TO 50
- SHOW OK RESULTS AND CONTINUE TO NEXT STEP (SEND THE "STARTAT")
- QUERY DATABASE TO USERGROUP 6, LIMIT RECORDS 51 TO 100 (START - START + AMOUNT)
- SEND PM'S 51 TO 100
AND CONTINUE... TO END
-------------------------
your actual script works like this:
Sending to 150 users in usergroup 6, send amount by step is set in 50.
- START SCRIPT
- CHECK THE AMOUNT OF PM'S SENT BY STEP (50)
- QUERY DATABASE TO USERGROUP 6, NO LIMIT RECORDS (ALL RESULTS)
*** IF THE USERS ARE A LOT, YOU GET A HANGED DB IN A SUPER BIG QUERY **
-----------------
It will be much better if you correct this issue... :D
Yes, it's true. I have more than 120.000 users and mass PMing can not work.
Is there somebody able to fix the problem?
I had the same problem with mass PM'ing about 70,000 members in my "Registered" usergroup. I solved it by temporarily adjusting the memory_limit variable in my php.ini file.
Great hack -- thanks Zero Tolerance!
gonzek
01-21-2009, 09:41 PM
I had the same problem with mass PM'ing about 70,000 members in my "Registered" usergroup. I solved it by temporarily adjusting the memory_limit variable in my php.ini file.
What value you set in memory_limit?
First, try the script, and confirm that it's failing. Then, look in your apache error log (probably /var/log/httpd/error_log). If it's failing because of a PHP memory error, you'll probably see a line like this:
Allowed memory size of 50331648 bytes exhausted (tried to allocate 0 bytes)
If you see a line like that, double the memory_limit variable, restart apache, then try again. Watch your server load while the script is running, via the "top" command. Also, you might need to limit it to send only 100 PMs at a time, rather than the default 300. You can also adjust this while the script is executing, by altering the value in the meta-refresh url.
When you're done, don't forget to change memory_limit back in php.ini, and then restart apache again.
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.