+ $ptag = Profile_tag::pkeyGet(array('tagger' => $tagger,
+ 'tagged' => $tagged,
+ 'tag' => $tag));
+
+ # if tag already exists, return it
+ if(!empty($ptag)) {
+ return $ptag;
+ }
+
+ $tagger_profile = Profile::getKV('id', $tagger);
+ $tagged_profile = Profile::getKV('id', $tagged);
+
+ if (Event::handle('StartTagProfile', array($tagger_profile, $tagged_profile, $tag))) {
+
+ if (!$tagger_profile->canTag($tagged_profile)) {
+ // TRANS: Client exception thrown trying to set a tag for a user that cannot be tagged.
+ throw new ClientException(_('You cannot tag this user.'));
+ return false;
+ }
+
+ $tags = new Profile_list();
+ $tags->tagger = $tagger;
+ $count = (int) $tags->count('distinct tag');
+
+ if ($count >= common_config('peopletag', 'maxtags')) {
+ // TRANS: Client exception thrown trying to set more tags than allowed.
+ throw new ClientException(sprintf(_('You already have created %d or more tags ' .
+ 'which is the maximum allowed number of tags. ' .
+ 'Try using or deleting some existing tags.'),
+ common_config('peopletag', 'maxtags')));
+ return false;
+ }
+
+ $plist = new Profile_list();
+ $plist->query('BEGIN');
+
+ $profile_list = Profile_list::ensureTag($tagger, $tag, $desc, $private);
+
+ if ($profile_list->taggedCount() >= common_config('peopletag', 'maxpeople')) {
+ // TRANS: Client exception thrown when trying to add more people than allowed to a list.
+ throw new ClientException(sprintf(_('You already have %1$d or more people in list %2$s, ' .
+ 'which is the maximum allowed number. ' .
+ 'Try unlisting others first.'),
+ common_config('peopletag', 'maxpeople'), $tag));
+ return false;
+ }
+
+ $newtag = new Profile_tag();
+
+ $newtag->tagger = $tagger;
+ $newtag->tagged = $tagged;
+ $newtag->tag = $tag;
+
+ $result = $newtag->insert();