function fetchNewsletterReadStat($newsletterID) { $newsletter = eZNewsletter::fetch($newsletterID); if (!$newsletter) { return array(); } $db = eZDB::instance(); // Get total send $totalSend = eZSendNewsletterItem::sendCount($newsletterID); // Get total read $totalRead = eZSendNewsletterItem::readCount($newsletterID); $objectStat = array(); foreach ($newsletter->attribute('object_relation_id_list') as $objectID) { $objectReadSQL = 'SELECT count(*) AS count FROM ezsendnewsletteritem WHERE newsletter_id = \'' . $db->escapeString($newsletterID) . '\' AND send_status = \'' . eZSendNewsletterItem::SendStatusSent . '\' AND object_read_ids like \'%/' . $db->escapeString($objectID) . '/%\''; $objectReadResult = $db->arrayQuery($objectReadSQL); $objectStat[(string) $objectID] = $objectReadResult[0]['count']; } return array('result' => array('num_sent' => $totalSend, 'num_read' => $totalRead, 'object_list' => $objectStat)); }
function attribute($attr, $noFunction = false) { $retVal = false; switch ($attr) { case 'send_year': $retVal = date('Y', $this->attribute('send_date')); break; case 'send_month': $retVal = date('m', $this->attribute('send_date')); break; case 'send_day': $retVal = date('d', $this->attribute('send_date')); break; case 'send_hour': $retVal = date('H', $this->attribute('send_date')); break; case 'send_minute': $retVal = date('i', $this->attribute('send_date')); break; case 'send_count': $retVal = eZSendNewsletterItem::sendCount($this->attribute('id')); break; case 'read_count': $retVal = eZSendNewsletterItem::readCount($this->attribute('id')); break; case 'output_format_list': $retVal = explode(',', $this->attribute('output_format')); break; case 'recurrence_value_list': $retVal = explode(',', $this->attribute('recurrence_value')); break; case 'object_relation_id_list': $retVal = explode('/', $this->attribute('object_relations')); array_pop($retVal); array_shift($retVal); break; default: $retVal = eZPersistentObject::attribute($attr); break; } return $retVal; }