Open Monograph Press  3.3.0
cleanReviewerInterests.php
1 <?php
2 
16 require(dirname(__FILE__) . '/bootstrap.inc.php');
17 
19 
24  public function __construct($argv = array()) {
25  parent::__construct($argv);
26 
27  if (!sizeof($this->argv)) {
28  $this->usage();
29  exit(1);
30  }
31 
32  $this->parameters = $this->argv;
33  }
34 
38  function usage() {
39  echo "Permanently removes user interests that are not referenced by any user accounts. USE WITH CARE.\n"
40  . "Usage:\n"
41  . "\t{$this->scriptName} --show : Display user interests not referenced\n"
42  . "\t{$this->scriptName} --remove : Permanently delete user interests not referenced\n";
43  }
44 
48  function execute() {
49 
50  $orphans = $this->_getOrphanVocabInterests();
51  if (!count($orphans)) {
52  echo "No user interests to remove.\n";
53  exit(0);
54  }
55 
56  $command = $this->parameters[0];
57  switch($command) {
58  case '--show':
59  $interests = array_map(function($entry) { return $entry->getData(CONTROLLED_VOCAB_INTEREST); }, $orphans);
60  echo "Below are the user interests that are not referenced by any user account.\n";
61  echo "\t" . join($interests, "\n\t") . "\n";
62  break;
63 
64  case '--remove':
65  $vocabEntryDao = DAORegistry::getDAO('ControlledVocabEntryDAO');
66  foreach ($orphans as $orphanVocab) {
67  $vocabEntryDao->deleteObject($orphanVocab);
68  }
69  echo count($orphans) . " entries deleted\n";
70  break;
71 
72  default:
73  echo "Invalid command.\n";
74  $this->usage();
75  exit(2);
76  }
77  }
78 
83  protected function _getOrphanVocabInterests() {
84 
85  $interestDao = DAORegistry::getDAO('InterestDAO');
86  $vocabDao = DAORegistry::getDAO('ControlledVocabDAO');
87  $vocabEntryDao = DAORegistry::getDAO('ControlledVocabEntryDAO');
88 
89  $interestVocab = $vocabDao->getBySymbolic(CONTROLLED_VOCAB_INTEREST);
90  $vocabEntryIterator = $vocabEntryDao->getByControlledVocabId($interestVocab->getId());
91  $vocabEntryList = $vocabEntryIterator->toArray();
92 
93  // list of vocab interests in db
94  $allInterestVocabIds = array_map(
95  function($entry) {
96  return $entry->getId();
97  },
98  $vocabEntryList
99  );
100 
101  // list of vocabs associated to users
102  $interests = $interestDao->getAllInterests();
103  $userInterestVocabIds = array_map(
104  function($interest) {
105  return $interest->getId();
106  },
107  $interests->toArray()
108  );
109 
110  // get the difference
111  $diff = array_diff($allInterestVocabIds, $userInterestVocabIds);
112 
113  $orphans = array_filter(
114  $vocabEntryList,
115  function($entry) use($diff) {
116  return in_array($entry->getId(), $diff);
117  }
118  );
119 
120  return $orphans;
121  }
122 }
123 
124 $tool = new ReviewerInterestsDeletionTool(isset($argv) ? $argv : array());
125 $tool->execute();
126 
127 
ReviewerInterestsDeletionTool\_getOrphanVocabInterests
_getOrphanVocabInterests()
Definition: cleanReviewerInterests.php:83
CommandLineTool
Initialization code for command-line scripts.
Definition: CliTool.inc.php:44
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
$tool
$tool
Definition: mergeCoverageReportTool.php:120
ReviewerInterestsDeletionTool\execute
execute()
Definition: cleanReviewerInterests.php:48
ReviewerInterestsDeletionTool\__construct
__construct($argv=array())
Definition: cleanReviewerInterests.php:24
ReviewerInterestsDeletionTool
CLI tool to remove user interests that are not referenced by any user accounts.
Definition: cleanReviewerInterests.php:18
CommandLineTool\$argv
$argv
Definition: CliTool.inc.php:53
ReviewerInterestsDeletionTool\usage
usage()
Definition: cleanReviewerInterests.php:38