public function mergeUsers($user1, $user2) { //Merge old camdram auth tokens $tokens = $this->em->getRepository('ActsCamdramBundle:Access')->findBy(array('uid' => $user2->getId())); foreach ($tokens as $token) { $token->setUid($user1->getId()); } $this->em->flush(); $tokens = $this->em->getRepository('ActsCamdramBundle:Access')->findBy(array('issuer_id' => $user2->getId())); foreach ($tokens as $token) { $token->setIssuerId($user1->getId()); } $this->em->flush(); $tokens = $this->em->getRepository('ActsCamdramBundle:Access')->findBy(array('revoke_id' => $user2->getId())); foreach ($tokens as $token) { $token->setRevokeId($user1->getId()); } $this->em->flush(); //Merge emails $emails = $this->em->getRepository('ActsCamdramBundle:Email')->findBy(array('user_id' => $user2->getId())); foreach ($emails as $email) { $email->setUserId($user1->getId()); } $this->em->flush(); //Merge email aliases $aliases = $this->em->getRepository('ActsCamdramBundle:EmailAlias')->findBy(array('user_id' => $user2->getId())); foreach ($aliases as $alias) { $alias->setUserId($user1->getId()); } $this->em->flush(); //Merge email sigs $sigs = $this->em->getRepository('ActsCamdramBundle:EmailSig')->findBy(array('user_id' => $user2->getId())); foreach ($sigs as $sig) { $sig->setUserId($user1->getId()); } $this->em->flush(); //Merge forum messages $msgs = $this->em->getRepository('ActsCamdramBundle:EmailSig')->findBy(array('user_id' => $user2->getId())); foreach ($msgs as $msg) { $msg->setUserId($user1->getId()); } $this->em->flush(); //Merge knowledge base $kbs = $this->em->getRepository('ActsCamdramBundle:KnowledgeBaseRevision')->findBy(array('user_id' => $user2->getId())); foreach ($kbs as $kb) { $kb->setUserId($user1->getId()); } $this->em->flush(); //Merge mailing list members $r = $this->em->getRepository('ActsCamdramBundle:MailingListMember'); $members = $r->findBy(array('user_id' => $user2->getId())); foreach ($members as $member) { if ($r->findOneBy(array('list_id' => $member->getListId(), 'user_id' => $user1->getId()))) { $this->em->remove($member); } else { $member->setUserId($user1->getId()); } } $this->em->flush(); //Merge reviews $reviews = $this->em->getRepository('ActsCamdramBundle:Review')->findBy(array('user_id' => $user2->getId())); foreach ($reviews as $review) { $review->setUserId($user1->getId()); } $this->em->flush(); //Merge user identities $identities = $this->em->getRepository('ActsCamdramSecurityBundle:UserIdentity')->findBy(array('user' => $user2)); foreach ($identities as $identity) { $identity->setUser($user1); } $this->em->flush(); if ($user2->getPerson() && !$user1->getPerson()) { $user1->setPerson($user2->getPerson()); } $this->em->remove($user2); $this->em->flush(); }
/** * @param \Jcc\Bundle\AlbumBundle\Entity\Folder $folder * * @return array */ public function crawlFolderPictures(Entity\Folder $folder) { //Get all it's images and create a hashmap for matching (img > img path) $root = $this->parameters['album_root']; $all = $pictures = $saved = array(); foreach ($folder->getPictures() as $picture) { $saved[$picture->getHash()] = $picture; } foreach (new DirectoryIterator($root . '/' . $folder->getPath()) as $file) { $all[] = array('filename' => $file->getFilename(), 'pathname' => $file->getPathname()); } usort($all, function ($a, $b) { return strcmp($a['filename'], $b['filename']); }); foreach ($all as $file) { $extension = strtolower(pathinfo($file['filename'], PATHINFO_EXTENSION)); if ('jpg' != $extension && 'jpeg' != $extension) { continue; } if (strpos($file['filename'], '.') === 0) { continue; } $hash = substr(md5($file['pathname']), 0, 12); if (isset($saved[$hash])) { $picture = $saved[$hash]; unset($saved[$hash]); } else { $picture = new Entity\Picture(); $picture->setPath($file['filename']); $picture->setHash($hash); $picture->setFolder($folder); $date = null; $exif = @exif_read_data($file['pathname']); if (!empty($exif['FileDateTime'])) { $date = new DateTime("@" . $exif['FileDateTime']); } else { $output = array(); exec(sprintf('exiftool %s', escapeshellarg($file['pathname'])), $output, $error); foreach ($output ?: array() as $line) { if (strpos($line, 'Date/Time Original') === false) { continue; } list($key, $value) = preg_split('/\\s+:\\s+/', $line); if ($key == 'Date/Time Original') { $date = \DateTime::createFromFormat('Y:m:d h:i:s', $value); break; } } } if ($date) { $picture->setOriginalDate($date); } $this->em->persist($picture); } $pictures[] = $picture; } //Remove inexistant pictures foreach ($saved as $picture) { $this->em->remove($picture); } $this->em->flush(); //Sort pictures by date shot (EXIF) usort($pictures, function ($a, $b) { if (!$a->getOriginalDate() || !$b->getOriginalDate()) { return strcmp($a->getPath(), $b->getPath()); } return $a->getOriginalDate() > $b->getOriginalDate(); }); return $pictures; }