Deleting users from the OJS database

hi @obi,

it is an alias for table article , the same is for r and table roles…

regards

I can’t see any table in the database called articles in OJS 3.x

@obi, sorry, I was playing on an OJS2.x database… in OJS 3 not even roles table exist!

on OJS3 you can use tables users and authors to figure out user who are not in authors table…
also user_groups to see if they have other roles (i guess)

I made a username list (in ojs2) by exporting list of URL column and making frequency list (some urls was in 20-30k user profiles) and by exporting usernames wits “stop phrases” in user_settings table.

Now, I deleted about 300K users (via mergeUsers.php, it is enough slow) from this list (only with reader role) and I see about 200K users in my system now. It is no more possible to delete bad users by big groups (there is no stop phrases or bad urls more).

ReCAPTCHA is enough good. It was about 1000 new users per day, and now I see about 10 new users per day.

One more strange moment - more than 90% of bad users was enrolled in one journal (we have 15 journals in our ojs). There was no comments or articles by this authors, but profiles (with porn, casino and other) was in google cache.

Conspiracy theory advocates say this is an “attack” on the journal.

sorry to be so basic, but how do I bring up a command line if on a home pc for this equivalent: https://JournalURL/base/tools/mergeUsers.php

Hi @gail,

That depends on your operating system. Have a look e.g. at websocket - How to run php file through command line? - Stack Overflow.

Regards,
Alec Smecher
Public Knowledge Project Team

  1. I have a php executable in my “path” on windows and on linux.
  2. I make a list of “bad” users by database query ( for example select username from ojs.users WHERE user_id in (select user_id from ojs.user_settings WHERE setting_value like '%porno%');)
  3. I make a batch file in a text editor by replacing “\nbadusername” to “\nphp pathtotools\megreusers.php tempusername badusername”
  4. After this, I just run batch file in the shell (windows or linux) and see a result. Deleting/merging of big (10K+) groups of users is very long procedure.
3 Likes

Hi.

Help me please to make an sql querry, to get a list of users with their registration date, last login date and group. May be, it will be good even to get only users (usernames) with only a “reader” role with registration date = last login date.

I want to delete all “readers only” with registration and last login before 2019.

I allready deleted more than 750K bots, bul last 20-30K are not clearable in batch mode.

Hi. We made a great cleanup of our database. A lot of users was deleted/megred. But it is unclear for me how to cleanup “user_interests” table in right way. We have a lot of allready deleted users (ids) in this table.

May be, mergeUsers.php should be impoved?

Can you advise me if I’m forming the SQL query correctly to delete users from my database?

DELETE FROM users
WHERE id IN (
  SELECT user_id
  FROM comments
  WHERE content LIKE '%casino%'
);

Also, does anyone know how to prevent new spam users from simply registering? I understand how this can be done when they use direct words like “casino” in their spam, but not every link that is spam contains these words.