Exemplo n.º 1
0
 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();
 }
Exemplo n.º 2
0
 /**
  * @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;
 }