Minahito
minah****@users*****
2006年 4月 27日 (木) 19:26:11 JST
Index: xoops2jp/html/modules/user/class/mailjob.php diff -u xoops2jp/html/modules/user/class/mailjob.php:1.1.2.3 xoops2jp/html/modules/user/class/mailjob.php:1.1.2.4 --- xoops2jp/html/modules/user/class/mailjob.php:1.1.2.3 Tue Mar 28 22:32:03 2006 +++ xoops2jp/html/modules/user/class/mailjob.php Thu Apr 27 19:26:11 2006 @@ -4,28 +4,147 @@ class UserMailjobObject extends XoopsSimpleObject { + var $mUsers = array(); + var $_mUsersLoadedFlag = false; + var $mUserCount = 0; + function UserMailjobObject() { - $this->initVar('id', XOBJ_DTYPE_INT, '', true); - $this->initVar('lastlogin', XOBJ_DTYPE_INT, '', false); - $this->initVar('lastlogin_flag', XOBJ_DTYPE_BOOL, '0', true); - $this->initVar('mailok', XOBJ_DTYPE_BOOL, '0', true); - $this->initVar('activeuser', XOBJ_DTYPE_BOOL, '0', true); - $this->initVar('registdate', XOBJ_DTYPE_INT, '0', false); - $this->initVar('registdate_flag', XOBJ_DTYPE_BOOL, '0', true); - $this->initVar('sender', XOBJ_DTYPE_STRING, '', false, 255); - $this->initVar('email', XOBJ_DTYPE_STRING, '', false, 255); - $this->initVar('subject', XOBJ_DTYPE_STRING, '', true, 255); + $this->initVar('mailjob_id', XOBJ_DTYPE_INT, '', false); + $this->initVar('title', XOBJ_DTYPE_STRING, '', true, 255); $this->initVar('body', XOBJ_DTYPE_TEXT, '', true); - $this->initVar('by_pm', XOBJ_DTYPE_BOOL, '0', true); - $this->initVar('by_email', XOBJ_DTYPE_BOOL, '0', true); + $this->initVar('from_name', XOBJ_DTYPE_STRING, '', false, 255); + $this->initVar('from_email', XOBJ_DTYPE_STRING, '', false, 255); + $this->initVar('is_pm', XOBJ_DTYPE_BOOL, '0', true); + $this->initVar('is_mail', XOBJ_DTYPE_BOOL, '0', true); + $this->initVar('create_unixtime', XOBJ_DTYPE_INT, time(), true); + } + + /** + * Count the number of target users, and set it to mUserCount. + */ + function loadUserCount() + { + $handler =& xoops_getmodulehandler('mailjob_link', 'user'); + $this->mUserCount = $handler->getCount(new Criteria('mailjob_id', $this->get('mailjob_id'))); + } + + /** + * Load the uid list of target users. + */ + function loadUser() + { + if (!$this->_mUsersLoadedFlag) { + $handler =& xoops_getmodulehandler('mailjob_link', 'user'); + $this->mUsers =& $handler->getObjects(new Criteria('mailjob_id', $this->get('mailjob_id'))); + $this->_mUsersLoadedFlag = true; + } + } + + function send($from_user) + { + $root =& XCube_Root::getSingleton(); + + $root->mEventManager->add("Module.User.Mailjob.ReplaceBody", new XCube_InstanceDelegate($this, "getReplaceBody")); + + if ($this->get('is_pm')) { + $root->mEventManager->add("Module.User.Mailjob.Send", new XCube_InstanceDelegate($this, "sendPM")); + } + + $this->loadUser(); + $handler =& xoops_getmodulehandler('mailjob_link', 'user'); + + $userHandler =& xoops_gethandler('user'); + + foreach ($this->mUsers as $link) { + $to_user =& $userHandler->get($link->get('uid')); + + if (is_object($to_user)) { + $eventArgs = array(); + $eventArgs['from_user'] =& $from_user; + $eventArgs['to_user'] =& $to_user; + $eventArgs['mailjob'] =& $this; + + $root->mEventManager->raiseEvent('Module.User.Mailjob.Send', $this, $eventArgs); + } + + $handler->delete($link); + } + } + + function getReplaceBody(&$sender, &$eventArgs) + { + // + // TODO Replace subject, too. (We wait new delegate class) + // + $eventArgs['body'] = str_replace('{X_UID}', $eventArgs['to_user']->get('uid'), $eventArgs['body']); + $eventArgs['body'] = str_replace('{X_UNAME}', $eventArgs['to_user']->get('uname'), $eventArgs['body']); + $eventArgs['body'] = str_replace('{X_UEMAIL}', $eventArgs['to_user']->get('email'), $eventArgs['body']); + $eventArgs['body'] = str_replace('{X_UEMAIL}', $eventArgs['to_user']->get('email'), $eventArgs['body']); + // TODO {X_UACTLINK} + } + + function sendPM(&$sender, &$eventArgs) + { + $root =& XCube_Root::getSingleton(); + $serviceMgr =& $root->getServiceManager(); + $pmService =& $serviceMgr->searchXCubeService('PrivateMessage'); + + $pmClient =& new XCube_ServiceClient($pmService); + + // + // Convert body message. + // + $replaceEventArgs = array(); + $replaceEventArgs['body'] = $eventArgs['mailjob']->get('body'); + $replaceEventArgs['to_user'] =& $eventArgs['to_user']; + $replaceEventArgs['from_user'] =& $eventArgs['from_user']; + $replaceEventArgs['mailjob'] =& $eventArgs['mailjob']; + $root->mEventManager->raiseEvent('Module.User.Mailjob.ReplaceBody', $this, $replaceEventArgs); + + $param = array( + 'to_uid' => $eventArgs['to_user']->get('uid'), + 'from_uid' => $eventArgs['from_user']->get('uid'), + 'subject' => $eventArgs['mailjob']->get('title'), + 'message' => $replaceEventArgs['body'] + ); + + $result =& $pmClient->call('send', $param); + } + + function sendMail(&$sender, &$eventArgs) + { + $root =& XCube_Root::getSingleton(); + $serviceMgr =& $root->getServiceManager(); + $pmService =& $serviceMgr->searchXCubeService('PrivateMessage'); + + $pmClient =& new XCube_ServiceClient($pmService); + + // + // Convert body message. + // + $replaceEventArgs = array(); + $replaceEventArgs['body'] = $eventArgs['mailjob']->get('body'); + $replaceEventArgs['to_user'] =& $eventArgs['to_user']; + $replaceEventArgs['from_user'] =& $eventArgs['from_user']; + $replaceEventArgs['mailjob'] =& $eventArgs['mailjob']; + $root->mEventManager->raiseEvent('Module.User.Mailjob.ReplaceBody', $this, $replaceEventArgs); + + $param = array( + 'to_uid' => $eventArgs['to_user']->get('uid'), + 'from_uid' => $eventArgs['from_user']->get('uid'), + 'subject' => $eventArgs['mailjob']->get('title'), + 'message' => $replaceEventArgs['body'] + ); + + $result =& $pmClient->call('send', $param); } } class UserMailjobHandler extends XoopsObjectGenericHandler { var $mTable = "user_mailjob"; - var $mPrimary = "id"; + var $mPrimary = "mailjob_id"; var $mClass = "UserMailjobObject"; }