Open Journal Systems  3.3.0
InterestDAO.inc.php
1 <?php
2 
17 import('lib.pkp.classes.controlledVocab.ControlledVocabDAO');
18 
19 define('CONTROLLED_VOCAB_INTEREST', 'interest');
20 
22 
27  function build() {
28  return parent::_build(CONTROLLED_VOCAB_INTEREST);
29  }
30 
36  function getUserInterestIds($userId) {
37  $controlledVocab = $this->build();
38  $result = $this->retrieveRange(
39  'SELECT cve.controlled_vocab_entry_id FROM controlled_vocab_entries cve, user_interests ui WHERE cve.controlled_vocab_id = ? AND ui.controlled_vocab_entry_id = cve.controlled_vocab_entry_id AND ui.user_id = ?',
40  array((int) $controlledVocab->getId(), (int) $userId)
41  );
42 
43  $ids = array();
44  while (!$result->EOF) {
45  $row = $result->GetRowAssoc(false);
46  $ids[] = $row['controlled_vocab_entry_id'];
47  $result->MoveNext();
48  }
49  $result->Close();
50 
51  return $ids;
52  }
53 
59  function getUserIdsByInterest($interest) {
60  $result = $this->retrieve('
61  SELECT ui.user_id
62  FROM user_interests ui
63  INNER JOIN controlled_vocab_entry_settings cves ON (ui.controlled_vocab_entry_id = cves.controlled_vocab_entry_id)
64  WHERE cves.setting_name = ? AND cves.setting_value = ?',
65  array('interest', $interest)
66  );
67 
68  $returner = array();
69  while (!$result->EOF) {
70  $row = $result->GetRowAssoc(false);
71  $returner[] = $row['user_id'];
72  $result->MoveNext();
73  }
74  $result->Close();
75  return $returner;
76 
77  }
78 
84  function getAllInterests($filter = null) {
85  $controlledVocab = $this->build();
86  $interestEntryDao = DAORegistry::getDAO('InterestEntryDAO'); /* @var $interestEntryDao InterestEntryDAO */
87  $iterator = $interestEntryDao->getByControlledVocabId($controlledVocab->getId(), null, $filter);
88 
89  // Sort by name.
90  $interests = $iterator->toArray();
91  usort($interests, function($s1, $s2) {
92  return strcmp($s1->getInterest(), $s2->getInterest());
93  });
94 
95  // Turn back into an iterator.
96  import('lib.pkp.classes.core.ArrayItemIterator');
97  return new ArrayItemIterator($interests);
98  }
99 
105  function setUserInterests($interests, $userId) {
106  // Remove duplicates
107  $interests = isset($interests) ? $interests : array();
108  $interests = array_unique($interests);
109 
110  // Trim whitespace
111  $interests = array_map('trim', $interests);
112 
113  // Delete the existing interests association.
114  $this->update(
115  'DELETE FROM user_interests WHERE user_id = ?',
116  array((int) $userId)
117  );
118 
119  $interestEntryDao = DAORegistry::getDAO('InterestEntryDAO'); /* @var $interestEntryDao InterestEntryDAO */
120  $controlledVocab = $this->build();
121 
122  // Store the new interests.
123  foreach ((array) $interests as $interest) {
124  $interestEntry = $interestEntryDao->getBySetting($interest, $controlledVocab->getSymbolic(),
125  $controlledVocab->getAssocId(), $controlledVocab->getAssocType(), $controlledVocab->getSymbolic()
126  );
127 
128  if(!$interestEntry) {
129  $interestEntry = $interestEntryDao->newDataObject(); /* @var $interestEntry InterestEntry */
130  $interestEntry->setInterest($interest);
131  $interestEntry->setControlledVocabId($controlledVocab->getId());
132  $interestEntry->setId($interestEntryDao->insertObject($interestEntry));
133  }
134 
135  $this->update(
136  'INSERT INTO user_interests (user_id, controlled_vocab_entry_id) VALUES (?, ?)',
137  array((int) $userId, (int) $interestEntry->getId())
138  );
139  }
140  }
141 }
142 
143 
DAO\retrieveRange
& retrieveRange($sql, $params=false, $dbResultRange=null, $callHooks=true)
Definition: DAO.inc.php:176
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
InterestDAO
Operations for retrieving and modifying a user's review interests.
Definition: InterestDAO.inc.php:21
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
InterestDAO\getAllInterests
getAllInterests($filter=null)
Definition: InterestDAO.inc.php:84
InterestDAO\getUserIdsByInterest
getUserIdsByInterest($interest)
Definition: InterestDAO.inc.php:59
InterestDAO\setUserInterests
setUserInterests($interests, $userId)
Definition: InterestDAO.inc.php:105
ControlledVocabDAO
Operations for retrieving and modifying ControlledVocab objects.
Definition: ControlledVocabDAO.inc.php:19
ArrayItemIterator
Provides paging and iteration for arrays.
Definition: ArrayItemIterator.inc.php:19
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
InterestDAO\build
build()
Definition: InterestDAO.inc.php:27
InterestDAO\getUserInterestIds
getUserInterestIds($userId)
Definition: InterestDAO.inc.php:36