| Conditions | 3 |
| Paths | 3 |
| Total Lines | 80 |
| Code Lines | 70 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 1 | ||
| Bugs | 0 | Features | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | <?php |
||
| 20 | public function execute() |
||
| 21 | { |
||
| 22 | $database = $this->getDatabase(); |
||
| 23 | |||
| 24 | $query = $database->prepare(<<<'SQL' |
||
| 25 | select c.id, r.domain |
||
| 26 | from comment c |
||
| 27 | inner join request r on r.id = c.request |
||
| 28 | where ( |
||
| 29 | 1 = 0 |
||
| 30 | /* emails */ |
||
| 31 | or c.comment rlike '[^ @]+(?<!accounts-enwiki-l|unblock|functionaries-en|checkuser-l|info-en|enwiki-acc-admins|/|\\()@(?!lists.wikimedia.org|wikimedia.org|wikipedia.org|[a-z][a-z]wiki)[a-z\\.]+' |
||
| 32 | -- or c.comment rlike 'gmail|yahoo' -- to many FPs |
||
| 33 | -- ipv4 |
||
| 34 | OR c.comment rlike '[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]' |
||
| 35 | -- ipv6 |
||
| 36 | OR (lower(c.comment) rlike '[0-9a-f]{1,4}:[0-9a-f]{1,4}:[0-9a-f]{1,4}' and c.comment not rlike '[0-2]?[0-9]:[0-5][0-9]:[0-5][0-9]') |
||
| 37 | -- card pan |
||
| 38 | OR c.comment rlike '[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4}' |
||
| 39 | OR c.comment rlike '(?<!ticket|ticket#|OTRS|OTRS #) \\+?(?!20[0-2][0-9][01][0-9][0-3][0-9]100[0-9]{5})[0-9]{9,}' |
||
| 40 | -- phone numbers |
||
| 41 | OR c.comment like '%mobile no%' |
||
| 42 | OR c.comment like '%contact no%' |
||
| 43 | OR c.comment like '%phone no%' |
||
| 44 | OR c.comment like '%cell no%' |
||
| 45 | OR c.comment rlike '\\+[0-9]{1}[0-9 .-]{5}' |
||
| 46 | OR c.comment rlike '(?:phone(?: )?:|mobile(?: )?:|cell(?: )?:)[ 0-9+]' |
||
| 47 | OR c.comment rlike '(^|\\s)(contact|phone|cell|mobile)( no| number| nbr)?( is)? ?:? ?[0-9+][0-9]+' |
||
| 48 | OR c.comment rlike '[0-9]{3,} ?(ext|x)\\.? ?[0-9]{3,}' |
||
| 49 | -- OR c.comment like '%telephone%' -- too many FP |
||
| 50 | |||
| 51 | -- requested passwords |
||
| 52 | OR c.comment like '%my password to be %' |
||
| 53 | OR c.comment like '% password be %' |
||
| 54 | OR c.comment rlike '(my )password (to |should )?(be|as)(?! soon| quickly|ap|\\?)' |
||
| 55 | OR c.comment rlike '(as )(my )?password(?! reset)' |
||
| 56 | OR c.comment rlike 'password(?: )?:' |
||
| 57 | |||
| 58 | -- holy FP craziness, but full of matches. |
||
| 59 | -- OR (c.comment rlike 'password' and c.user is null) |
||
| 60 | |||
| 61 | -- banking |
||
| 62 | OR c.comment rlike ' (a/c|acct) (no|number|nbr)( |\\.)' |
||
| 63 | -- OR c.comment rlike '(?<!requested|conflicting|similar) acct' |
||
| 64 | |||
| 65 | -- OR c.comment rlike ' card ' -- too many FP |
||
| 66 | -- OR c.comment like '% bank %' -- too many FP |
||
| 67 | |||
| 68 | -- all of these have too many FPs |
||
| 69 | -- or c.comment rlike '(?<!ip )(?<!email )(?<!e-mail )(?<!this )address(?!ed)' |
||
| 70 | -- OR c.comment rlike ' (ave|st(?!\\w)|road|rd(?!\\w))' |
||
| 71 | -- or c.comment rlike ' (road|street|avenue) ' |
||
| 72 | -- or (c.comment rlike '(^|\\s)[0-9]{5,}\\s' and c.user is null) |
||
| 73 | -- or (c.comment rlike ' (?:Alabama|AL|Kentucky|KY|Ohio|Alaska|AK|Louisiana|LA|Oklahoma|Arizona|AZ|Maine|Oregon|Arkansas|AR|Maryland|MD|Pennsylvania|PA|Massachusetts|MA|California|CA|Michigan|MI|Rhode Island|RI|Colorado|Minnesota|MN|South Carolina|SC|Connecticut|CT|Mississippi|MS|South Dakota|SD|Delaware|DE|Missouri|MO|Tennessee|TN|DC|Montana|MT|Texas|TX|Florida|FL|Nebraska|NE|Georgia|GA|Nevada|NV|Utah|UT|New Hampshire|NH|Vermont|VT|Hawaii|New Jersey|NJ|Virginia|VA|Idaho|New Mexico|NM|Illinois|IL|New York|NY|Washington|WA|Indiana|North Carolina|NC|West Virginia|WV|Iowa|IA|North Dakota|ND|Wisconsin|WI|Kansas|KS|Wyoming|WY)(?: |\\.)' and c.user is null) |
||
| 74 | ) |
||
| 75 | -- only find comments which haven't previously been flagged |
||
| 76 | and not exists (select 1 from log l where l.objectid = c.id and action = 'UnflaggedComment') |
||
| 77 | -- only comments on closed requests (give humans a chance to flag these) |
||
| 78 | and exists (select 1 from request r where r.id = c.request and r.status = 'Closed') |
||
| 79 | and c.flagged <> 1 |
||
| 80 | -- not all edited comments have log entries (yay historical reasons!) |
||
| 81 | and c.comment not like '%[redacted]%' |
||
| 82 | ; |
||
| 83 | SQL |
||
| 84 | ); |
||
| 85 | |||
| 86 | $success = $query->execute(); |
||
| 87 | |||
| 88 | if (!$success) { |
||
| 89 | throw new Exception('Error in transaction: Could not load data.'); |
||
| 90 | } |
||
| 91 | |||
| 92 | $data = $query->fetchAll(PDO::FETCH_ASSOC); |
||
| 93 | foreach ($data as $row) { |
||
| 94 | /** @var Comment $dataObject */ |
||
| 95 | $dataObject = Comment::getById($row['id'], $database); |
||
| 96 | |||
| 97 | Logger::flaggedComment($database, $dataObject, $row['domain']); |
||
| 98 | $dataObject->setFlagged(true); |
||
| 99 | $dataObject->save(); |
||
| 100 | } |
||
| 102 | } |