Beispiel #1
0
 /**
  * @param string $timeStamp
  * @return array<BOL_Attachment>
  */
 public function findExpiredInactiveItems($timeStamp)
 {
     $example = new OW_Example();
     $example->andFieldEqual(self::STATUS, 0);
     $example->andFieldLessThan(self::ADD_STAMP, $timeStamp);
     return $this->findListByExample($example);
 }
Beispiel #2
0
 public function processScheduler()
 {
     /**
      * following step to speed up & beat performance
      * 1. check album limit
      * 2. check quota limit
      * 3. get nodes of this schedulers
      * 4. get all items of current schedulers.
      * 5. process each node
      * 5.1 check required quota
      * 5.2 fetch data to pubic file
      * 5.3 store to file model
      * 6. check status of schedulers, if scheduler is completed == (remaining == 0)
      * 6.1 udpate feed and message.
      */
     /**
      * Unlimited time.
      */
     set_time_limit(0);
     /**
      * default 20
      * @var int
      */
     $configs = OW::getConfig()->getValues('ynmediaimporter');
     $limitUserPerCron = $configs['number_photo'] ? intval($configs['number_photo']) : 20;
     /**
      * default 20
      * @var int
      */
     $limitQueuePerCron = $configs['number_queue'] ? intval($configs['number_queue']) : 20;
     /**
      * process number queue.
      */
     /**
      * get scheduler from tables data.
      */
     $example = new OW_Example();
     $example->andFieldLessThan('status', '3');
     $example->setOrder('last_run');
     $example->setLimitClause($first, $count)->setLimitClause(0, $limitQueuePerCron);
     $schedulers = YNMEDIAIMPORTER_BOL_SchedulerDao::getInstance()->findListByExample($example);
     foreach ($schedulers as $scheduler) {
         Ynmediaimporter::processScheduler($scheduler, 0, $limitUserPerCron, 1, 1);
     }
     echo "success!";
     exit(0);
 }
Beispiel #3
0
 /**
  * Finds action list by type
  * 
  * @param string $type
  */
 public function findList($type)
 {
     $example = new OW_Example();
     if ($type == 'earn') {
         $example->andFieldGreaterThan('amount', 0);
     } else {
         if ($type == 'lose') {
             $example->andFieldLessThan('amount', 0);
         } else {
             if ($type == 'unset') {
                 $example->andFieldEqual('amount', 0);
             }
         }
     }
     $example->andFieldEqual('isHidden', 0);
     $example->andFieldEqual('active', 1);
     return $this->findListByExample($example);
 }
 public function findListAfterAvatarId($avatarId, $count, $includes = true)
 {
     $avatar = $this->findLastByAvatarId($avatarId);
     if ($avatar === null) {
         return array();
     }
     $example = new OW_Example();
     $example->andFieldEqual("userId", $avatar->userId);
     if ($includes) {
         $example->andFieldLessOrEqual("timeStamp", $avatar->timeStamp);
     } else {
         $example->andFieldLessThan("timeStamp", $avatar->timeStamp);
     }
     $example->setOrder("`timeStamp` DESC");
     $example->setLimitClause(0, $count);
     return $this->findListByExample($example);
 }
Beispiel #5
0
 public function findExpireFileList($expirationPeriod)
 {
     if (empty($entityId) || (int) $userId <= 0 || (int) $expirationPeriod < 0) {
         return array();
     }
     $example = new OW_Example();
     $example->andFieldLessThan('timestamp', time() - (int) $expirationPeriod);
     return $this->findListByExample($example);
 }
Beispiel #6
0
 public function getNextPhoto($albumId, $id)
 {
     if (!$id) {
         return false;
     }
     $example = new OW_Example();
     $example->andFieldEqual('albumId', $albumId);
     $example->andFieldLessThan('id', $id);
     $example->andFieldEqual('status', 'approved');
     $example->setOrder('`id` DESC');
     $example->setLimitClause(0, 1);
     return $this->findObjectByExample($example);
 }
 /**
  * Expire sales with 'prepared' status
  * 
  * @return boolean
  */
 public function expirePreparedSales()
 {
     $example = new OW_Example();
     $example->andFieldEqual('status', self::STATUS_PREPARED);
     $example->andFieldLessThan('timeStamp', time() - self::PREPARED_SALES_EXPIRE_INTERVAL);
     $this->deleteByExample($example);
 }
Beispiel #8
0
 public function findNextSection($order)
 {
     if ($order === null) {
         return null;
     }
     $example = new OW_Example();
     $example->andFieldLessThan('sortOrder', (int) $order);
     return $this->findObjectByExample($example);
 }
Beispiel #9
0
 /**
  * @param $timestamp
  */
 public function deleteExpired($timestamp)
 {
     $example = new OW_Example();
     $example->andFieldLessThan('visitTimestamp', time() - $timestamp);
     $this->deleteByExample($example);
 }
Beispiel #10
0
 public function deleteExpiredList()
 {
     $example = new OW_Example();
     $example->andFieldLessThan('expireStamp', time());
     $this->deleteByExample($example);
 }
Beispiel #11
0
 /**
  * Finds previous post in the topic
  *
  * @param int $topicId
  * @param int $postId
  * @return FORUM_BOL_Post
  */
 public function findPreviousPost($topicId, $postId)
 {
     $example = new OW_Example();
     $example->andFieldEqual('topicId', $topicId);
     $example->andFieldLessThan('id', $postId);
     $example->setOrder('`id` DESC');
     $example->setLimitClause(0, 1);
     return $this->findObjectByExample($example);
 }
Beispiel #12
0
 public static function processScheduler($scheduler, $user_aid = null, $limit = 10, $sendNotification = false, $sendActivity = true)
 {
     //register_shutdown_function(array('Ynmediaimporter','handleShutdown'), $scheduler -> id);
     //ini_set('max_execution_time',1);
     $movedCount = 0;
     $movedArray = array();
     $photos = array();
     $schedulerId = $scheduler->id;
     $userId = $scheduler->user_id;
     $user = BOL_UserService::getInstance()->findUserById($userId);
     $album = null;
     $example = new OW_Example();
     $example->andFieldEqual('scheduler_id', $schedulerId);
     $example->andFieldLessThan('status', '3');
     $example->andFieldGreaterThan('status', '0');
     $example->setLimitClause(0, $limit);
     if ($user_aid) {
         $example->andFieldEqual('user_aid', intval($user_aid));
     }
     $nodeList = YNMEDIAIMPORTER_BOL_NodeDao::getInstance()->findListByExample($example);
     $order = 0;
     foreach ($nodeList as $node) {
         if ('photo' == $node->media && $node->user_aid > 0) {
             $album = PHOTO_BOL_PhotoAlbumDao::getInstance()->findById($node->user_aid);
             if (!is_object($album)) {
                 continue;
             }
             //download file
             $dir = Ynmediaimporter::getValidDir();
             $file = $dir . $node->getUUID();
             $privacy = OW::getEventManager()->call('plugin.privacy.get_privacy', array('ownerId' => $album->userId, 'action' => 'photo_view_album'));
             $photo = new PHOTO_BOL_Photo();
             $photo->description = '';
             $photo->albumId = $album->id;
             $photo->addDatetime = time();
             $photo->status = 'approved';
             $photo->hasFullsize = '1';
             $photo->privacy = mb_strlen($privacy) ? $privacy : 'everybody';
             $source = self::saveImageFromUrl($node->getDownloadFilename(), $file);
             $photo = self::__savePhoto($photo, $source, $userId);
             if ($photo) {
                 $photos[] = $photo;
                 $movedArray[] = array('addTimestamp' => time(), 'photoId' => $photo->id);
                 $movedCount++;
             }
             $node->status = 3;
             YNMEDIAIMPORTER_BOL_NodeDao::getInstance()->save($node);
         } else {
             if (in_array($node->media, array('album', 'photoset', 'gallery')) && 0 == $node->user_aid) {
                 // create new albums for this roles
                 $album = self::createPhotoAlbums($scheduler, $node);
                 // setup album and node.
                 // update all sub node of current scheduler to this albums.
                 $example = new OW_Example();
                 $example->andFieldEqual('scheduler_id', $schedulerId);
                 $example->andFieldEqual('aid', $node->aid);
                 $nodeTemp = YNMEDIAIMPORTER_BOL_NodeDao::getInstance()->findObjectByExample($example);
                 $nodeTemp->user_aid = $album->id;
                 $nodeTemp->status = '1';
                 YNMEDIAIMPORTER_BOL_NodeDao::getInstance()->save($nodeTemp);
                 $node->user_aid = $album->id;
                 $node->status = 1;
                 YNMEDIAIMPORTER_BOL_NodeDao::getInstance()->save($node);
                 self::processScheduler($scheduler, $album->id, 10, 0, 0);
                 break;
                 // force process this album to escape no value style.
             }
         }
     }
     $example = new OW_Example();
     $example->andFieldEqual('scheduler_id', $schedulerId);
     $example->andFieldEqual('media', 'photo');
     $example->andFieldLessThan('status', '3');
     $remain = intval(YNMEDIAIMPORTER_BOL_NodeDao::getInstance()->countByExample($example));
     // all scheduler is completed. send notification to users
     if (is_object($album) && $remain == 0) {
         // Send notification
         if ($sendNotification) {
             $actor = array('username' => BOL_UserService::getInstance()->getUserName($userId), 'name' => BOL_UserService::getInstance()->getDisplayName($userId), 'url' => BOL_UserService::getInstance()->getUserUrl($userId));
             $avatars = BOL_AvatarService::getInstance()->getDataForUserAvatars(array($userId));
             $event = new OW_Event('notifications.add', array('pluginKey' => 'ynmediaimporter', 'entityType' => 'ynmediaimporter_album', 'entityId' => (int) $album->id, 'action' => 'ynmediaimporter_album-added', 'userId' => $album->userId, 'time' => time()), array('avatar' => $avatars[$userId], 'string' => array('key' => 'ynmediaimporter+added_album_notification_string', 'vars' => array('actor' => $actor['name'], 'actorUrl' => $actor['url'], 'title' => $album->name, 'url' => OW::getRouter()->urlForRoute('photo_user_album', array('user' => $actor['username'], 'album' => $album->id)))), 'content' => $album->name, 'url' => OW::getRouter()->urlForRoute('photo_user_album', array('user' => $actor['username'], 'album' => $album->id))));
             OW::getEventManager()->trigger($event);
         }
         if ($sendActivity) {
             self::__sendActivity($album, $photos, $movedArray, $movedCount);
         }
     }
     $scheduler->status = $remain == 0 ? 3 : 1;
     $scheduler->last_run = time();
     YNMEDIAIMPORTER_BOL_SchedulerDao::getInstance()->save($scheduler);
     // and of process rec count all
     $tableName = OW_DB_PREFIX . 'ynmediaimporter_nodes';
     $sql = "SELECT\n\t\t\t\t  album.id,\n\t\t\t\t  (SELECT\n\t\t\t\t     COUNT( * )\n\t\t\t\t   FROM {$tableName} AS photo\n\t\t\t\t   WHERE photo.media = 'photo'\n\t\t\t\t       AND photo.aid = album.id\n\t\t\t\t       AND photo.status = 1) AS remaining\n\t\t\t\tFROM `{$tableName}` album\n\t\t\t\tWHERE album.media <> 'photo'\n\t\t\t\t    AND album.status = 1\n\t\t\t\tGROUP BY album.id\n\t\t\t\tHAVING remaining = 0";
     $completedList = OW::getDbo()->queryForColumnList($sql);
     if ($completedList) {
         $sql = "UPDATE `{$tableName}` SET `status` = '3' where `id` IN (" . implode(',', $completedList) . ")";
         OW::getDbo()->query($sql);
     }
     return array('remain' => $remain, 'scheduler_id' => $schedulerId);
 }