function doWork(&$context, Am_BatchProcessor $batch)
 {
     $pageCount = 5000;
     $q = Am_Di::getInstance()->db->queryResultOnly("\n            SELECT *\n            FROM ?_invoice\n            LIMIT ?d, ?d", (int) $context, $pageCount);
     $count = 0;
     while ($row = Am_Di::getInstance()->db->fetchRow($q)) {
         $count++;
         $invoice = $this->getDi()->invoiceRecord;
         $invoice->fromRow($row);
         $invoice->updateStatus();
         try {
             $invoice->recalculateRebillDate();
         } catch (Am_Exception_InternalError $e) {
         }
         // ignore error about empty period
         $context++;
         if (!$batch->checkLimits()) {
             return;
         }
     }
     if (!$count) {
         return true;
     }
     // finished!
 }
 function stepCopy(Am_BatchProcessor $batch)
 {
     @set_time_limit(600);
     $info = $this->loadRemoteAccess();
     $class = 'Am_FileConnector_' . ucfirst(toCamelCase($info['method']));
     $connector = new $class($info);
     if (!$connector->connect()) {
         $this->outText('Connection error: ' . Am_Controller::escape($connector->getMessage()));
         return false;
     }
     if (!$connector->chdir($info['root'])) {
         $this->outText('Could not chroot to root folder: [' . Am_Controller::escape($info['root']) . ']');
         return false;
     }
     foreach ($this->getSession()->upgrades as $k => $upgrade) {
         if (empty($upgrade->dir)) {
             continue;
         }
         $dir = $upgrade->dir . DIRECTORY_SEPARATOR . 'amember' . DIRECTORY_SEPARATOR;
         $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::SELF_FIRST);
         foreach ($iterator as $file) {
             if ($file->getFileName() == '.' || $file->getFileName() == '..') {
                 continue;
             }
             if (!strpos($file->getPathName(), $strip = $dir)) {
                 new Am_Exception_InputError(sprintf('Could not strip local root prefix: [%s] from fn [%s]', $strip, $file->getPathName()));
             }
             // path relative to amember root
             $path = substr($file->getPathName(), strlen($strip));
             if ($file->isDir()) {
                 if (!$connector->mkdir($path) && !$connector->ls($path)) {
                     $this->outText('Could not create folder [' . Am_Controller::escape($path) . ']<br />' . $connector->getError());
                     return false;
                 }
                 $this->outText('created folder ' . Am_Controller::escape($path) . "<br />\n");
             } else {
                 if (!$connector->put($file->getPathName(), $path)) {
                     $this->outText('Could not copy file [' . Am_Controller::escape($file->getPathName()) . '] to remote [' . Am_Controller::escape($path) . '] ' . $connector->getError());
                     return false;
                 }
                 $this->outText('copy file ' . Am_Controller::escape($path) . "<br />\n");
             }
         }
         // remove localdirectory and files
         $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::CHILD_FIRST);
         foreach ($iterator as $file) {
             if ($file->getFileName() == '.' || $file->getFileName() == '..') {
                 continue;
             }
             if ($file->isDir()) {
                 rmdir($file->getPathName());
             } else {
                 unlink($file->getPathName());
             }
         }
         rmdir($dir);
         rmdir($upgrade->dir);
         unset($upgrade->dir);
         if (!$batch->checkLimits()) {
             //                $batch->stop();
             //                return false;
         }
     }
     return true;
 }
Beispiel #3
0
 public function batchSend(&$context, Am_BatchProcessor $batch)
 {
     if ($this->saved->count_users <= $this->saved->sent_users) {
         return true;
     }
     // we are done;
     $q = $this->searchUi->query($this->saved->sent_users, 10);
     $i = 0;
     $db = $this->getDi()->db;
     $foundrows = false;
     while ($r = $db->fetchRow($q)) {
         $foundrows = true;
         if (!$batch->checkLimits()) {
             return false;
         }
         $r['name'] = $r['name_f'] . ' ' . $r['name_l'];
         $this->saved->updateQuick(array('last_email' => $r['email'], 'sent_users' => $this->saved->sent_users + 1));
         if ($r['email'] == '') {
             continue;
         }
         $m = $this->getDi()->mail;
         $m->setPeriodic(Am_Mail::ADMIN_REQUESTED);
         $m->addHeader('X-Amember-Queue-Id', $this->_request->getFiltered('queue_id'));
         $m->addUnsubscribeLink(Am_Mail::LINK_USER);
         $m->addTo($r['email'], $r['name']);
         if ($reply_to = $this->getParam('reply_to')) {
             switch ($reply_to) {
                 case 'default':
                     $email = false;
                     break;
                 case 'other':
                     $email = $this->getParam('reply_to_other');
                     $name = null;
                     break;
                 default:
                     preg_match('/^admin-(\\d+)$/', $reply_to, $match);
                     $admin = $this->getDi()->adminTable->load($match[1], false);
                     if ($admin) {
                         $email = $admin->email;
                         $name = $admin->getName();
                     }
                     break;
             }
             if ($email = filter_var($email, FILTER_VALIDATE_EMAIL)) {
                 $m->setReplyTo($email, $name);
             }
         }
         $subject = $this->getParam('subject');
         $body = $this->getParam('body');
         $tpl = new Am_SimpleTemplate();
         $tpl->assignStdVars();
         if (strpos($body, '%user.unsubscribe_link%') !== false || strpos($subject, '%user.unsubscribe_link%') !== false) {
             $r['unsubscribe_link'] = Am_Mail::getUnsubscribeLink($r['email'], Am_Mail::LINK_USER);
         }
         $tpl->user = $r;
         $this->getDi()->hook->call(Am_Event::MAIL_SIMPLE_TEMPLATE_BEFORE_PARSE, array('template' => $tpl, 'body' => $body, 'subject' => $subject, 'mail' => $m, 'request' => $this->getRequest()));
         $subject = $tpl->render($subject);
         $body = $tpl->render($body);
         if ($this->getParam('email_template_layout_id') && ($layout = $this->getDi()->emailTemplateLayoutTable->load($this->getParam('email_template_layout_id', false)))) {
             $tpl->assign('content', $body);
             $body = $tpl->render($layout->layout);
         }
         $m->setSubject($subject);
         if ($this->getParam('format') == 'text') {
             $m->setBodyText($body);
         } else {
             $text = strip_tags($body);
             $html = strpos($body, '<html') === false ? "<html><head><title>{$subject}</title></head><body>{$body}</body></html>" : $body;
             $m->setBodyHtml($html);
             $m->setBodyText($text);
         }
         foreach ($this->getAttachments() as $at) {
             $m->addAttachment($at);
         }
         try {
             $m->send();
         } catch (Zend_Mail_Exception $e) {
             trigger_error("Error happened while sending e-mail to {$r['email']} : " . $e->getMessage(), E_USER_WARNING);
         }
     }
     $this->getDi()->db->freeResult($q);
     if (!$foundrows) {
         return true;
     }
     if ($this->saved->count_users <= $this->saved->sent_users) {
         return true;
     }
     // we are done;
 }
 function batchProcess(&$context, Am_BatchProcessor $batch)
 {
     $db = $this->getDi()->db;
     $q = $db->queryResultOnly("SELECT * FROM ?_user WHERE user_id > ?d", (int) $context);
     $userTable = $this->getDi()->userTable;
     $newsletterUserSubscriptionTable = $this->getDi()->newsletterUserSubscriptionTable;
     while ($r = $db->fetchRow($q)) {
         $u = $userTable->createRecord($r);
         $context = $r['user_id'];
         $newsletterUserSubscriptionTable->checkSubscriptions($u);
         if (!$batch->checkLimits()) {
             return;
         }
     }
     return true;
 }
Beispiel #5
0
 function batchProcess(&$context, Am_BatchProcessor $batch)
 {
     $db = $this->getDi()->db;
     $context = $context ? intval($context) : 0;
     $q = $db->queryResultOnly("SELECT DISTINCT subusers_parent_id\n            FROM ?_user\n            WHERE subusers_parent_id > ?d\n            ORDER BY subusers_parent_id", $context);
     $userTable = $this->getDi()->userTable;
     while ($r = $db->fetchRow($q)) {
         $context = $r['subusers_parent_id'];
         if ($u = $userTable->load($context, false)) {
             $this->checkAndUpdate($u);
         }
         if (!$batch->checkLimits()) {
             return;
         }
     }
     return true;
 }
Beispiel #6
0
 public function _handleAll(&$page, Am_BatchProcessor $batch)
 {
     $ds = $this->grid->getDataSource();
     $page = (int) $page;
     do {
         $done = 0;
         foreach ($ds->selectPageRecords($page++, $this->batchCount) as $record) {
             $id = $ds->getIdForRecord($record);
             $this->handleRecord($id, $record);
             $done++;
         }
         if (!$batch->checkLimits()) {
             return;
         }
     } while ($done > 0);
     if ($done == 0) {
         return true;
     }
     // no more records
 }
 function doWork(&$context, Am_BatchProcessor $batch)
 {
     $pageCount = 5000;
     $q = Am_Di::getInstance()->db->queryResultOnly("\n            SELECT *\n            FROM ?_invoice\n            LIMIT ?d, ?d", (int) $context, $pageCount);
     $count = 0;
     while ($row = Am_Di::getInstance()->db->fetchRow($q)) {
         $count++;
         $invoice = $this->getDi()->invoiceRecord;
         $invoice->fromRow($row);
         $invoice->updateStatus();
         $context++;
         if (!$batch->checkLimits()) {
             return;
         }
     }
     if (!$count) {
         return true;
     }
     // finished!
 }