function addToSugar( $uid ){ $user =& JFactory::getUser( $uid ); $db =& JFactory::getDBO(); $params =& JComponentHelper::getParams( 'com_joomailermailchimpintegration' ); $paramsPrefix = (version_compare(JVERSION,'1.6.0','ge')) ? 'params.' : ''; $sugar_name = $params->get( $paramsPrefix.'sugar_name' ); $sugar_pwd = $params->get( $paramsPrefix.'sugar_pwd' ); $sugar_url = $params->get( $paramsPrefix.'sugar_url' ); $config = $this->getCrmConfig( 'sugar' ); if( $config == NULL ){ jimport('joomla.filesystem.file'); if ( JFile::exists( JPATH_ADMINISTRATOR.'/components/com_comprofiler/admin.comprofiler.php') ) { jimport( 'joomla.application.component.helper' ); $cHelper = JComponentHelper::getComponent( 'com_comprofiler', true ); } else { $cHelper->enabled = false; } $config = new stdClass(); $config->first_name = ($cHelper->enabled) ? 'CB' : 'core'; } require_once(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomailermailchimpintegration'.DS.'libraries'.DS.'sugar.php'); $sugar = new SugarCRMWebServices; $sugar->SugarCRM( $sugar_name, $sugar_pwd, $sugar_url ); $sugar->login(); $queryJS = false; $queryCB = false; $JSand = array(); foreach( $config as $k => $v ){ if( $k != 'firstname' && $k != 'lastname' ){ $vEx = explode(';', $v); if($vEx[0] == 'js' ) { $queryJS = true; $JSand[] = $vEx[1]; } else { $queryCB = true; } } } $JSand = implode("','", array_unique($JSand) ); $userCB = false; if( $config->first_name == 'core' ){ $names = explode(' ', $user->name); $first_name = $names[0]; $last_name = ''; if(isset($names[1])){ for($i=1;$i<count($names);$i++){ $last_name .= $names[$i].' '; } } $last_name = trim($last_name); } else { $query = "SELECT * FROM #__comprofiler WHERE user_id = '$user->id'"; $db->setQuery($query); $userCB = $db->loadObjectList(); $first_name = $userCB[0]->firstname; $last_name = $userCB[0]->lastname; if( $userCB[0]->middlename != '' ){ $last_name = $userCB[0]->middlename.' '.$last_name; } } if( $queryJS ){ $query = "SELECT field_id, value FROM #__community_fields_values ". "WHERE user_id = '$user->id' ". "AND field_id IN ('$JSand')"; $db->setQuery($query); $JSfields = $db->loadObjectList(); $JSfieldsArray = array(); foreach($JSfields as $jsf){ $JSfieldsArray[$jsf->field_id] = $jsf->value; } } if( $queryCB ){ if( !$userCB ){ $query = "SELECT * FROM #__comprofiler WHERE user_id = '$user->id'"; $db->setQuery($query); $userCB = $db->loadObjectList(); } } $data = array('first_name' => $first_name, 'last_name' => $last_name, 'email1' => $user->email ); foreach( $config as $k => $v ){ if( $k != 'first_name' && $k != 'last_name' ){ if( $v ){ $vEx = explode(';', $v); if($vEx[0] == 'js' ) { $data[$k] = ( isset($JSfieldsArray[$vEx[1]]) ) ? $JSfieldsArray[$vEx[1]] : ''; } else { $data[$k] = ( isset( $userCB[0]->{$vEx[1]} ) ) ? str_replace('|*|',', ',$userCB[0]->{$vEx[1]}) : ''; } } } } $existing_user = $sugar->findUserByEmail( $user->email ); if( isset( $existing_users[ $data['email1'] ] ) ){ $data['id'] = $existing_user[ $d['email1'] ]; } $sendData = array( $data ); $result = $sugar->setContactMulti( $sendData ); return; }
function ajax_sync_sugar() { $db =& JFactory::getDBO(); $params =& JComponentHelper::getParams('com_joomailermailchimpintegration'); $paramsPrefix = version_compare(JVERSION, '1.6.0', 'ge') ? 'params.' : ''; $sugar_name = $params->get('params.sugar_name'); $sugar_pwd = $params->get('params.sugar_pwd'); $sugar_url = $params->get('params.sugar_url'); $config = $this->getModel('sync')->getConfig('sugar'); if ($config == NULL) { jimport('joomla.application.component.helper'); $cHelper = JComponentHelper::getComponent('com_comprofiler', true); $cbInstalled = $cHelper->enabled; $config = new stdClass(); $config->first_name = $cbInstalled ? 'CB' : 'core'; } $validator = new EmailAddressValidator(); require_once JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_joomailermailchimpintegration' . DS . 'libraries' . DS . 'sugar.php'; $sugar = new SugarCRMWebServices(); $sugar->SugarCRM($sugar_name, $sugar_pwd, $sugar_url); $sugar->login(); $elements = JRequest::getVar('elements', '', 'request', 'string'); $elements = json_decode($elements); if ($elements->done == 0) { $_SESSION['abortAJAX'] = 0; unset($_SESSION['addedUsers']); } $failed = $elements->errors; $errorMsg = $elements->errorMsg; $step = $elements->step; if ($_SESSION['abortAJAX'] != 1) { if (isset($_SESSION['addedUsers'])) { $exclude = $_SESSION['addedUsers']; } else { $exclude = array(); } $addedUsers = $exclude; if (isset($exclude[0])) { $exclude = implode('","', $exclude); $exclude = '"' . $exclude . '"'; $excludeCond = 'AND id NOT IN (' . $exclude . ') '; } else { $excludeCond = ''; } if ($elements->range == 'all') { $query = 'SELECT * FROM #__users ' . 'WHERE block = 0 ' . $excludeCond . 'ORDER BY id ' . 'LIMIT ' . $step; } else { $idList = implode(" OR id = ", $elements->cid); $query = 'SELECT * FROM #__users ' . 'WHERE block = 0 ' . $excludeCond . 'AND (id = ' . $idList . ') ' . 'ORDER BY id '; } $db->setQuery($query); $users = $db->loadObjectList(); $queryJS = false; $queryCB = false; $JSand = array(); foreach ($config as $k => $v) { if ($k != 'firstname' && $k != 'lastname') { $vEx = explode(';', $v); if ($vEx[0] == 'js') { $queryJS = true; $JSand[] = $vEx[1]; } else { if ($vEx[0] == 'CB') { $queryCB = true; } } } } $JSand = implode("','", array_unique($JSand)); $data = array(); $emails = array(); $x = 0; $new = $elements->new; $updated = $elements->updated; $userIDs = array(); foreach ($users as $user) { if ($validator->check_email_address($user->email)) { $userCB = false; if ($config->first_name == 'core') { $names = explode(' ', $user->name); $first_name = $names[0]; $last_name = ''; if (isset($names[1])) { for ($i = 1; $i < count($names); $i++) { $last_name .= $names[$i] . ' '; } } $last_name = trim($last_name); } else { $query = "SELECT * FROM #__comprofiler WHERE user_id = '{$user->id}'"; $db->setQuery($query); $userCB = $db->loadObjectList(); $first_name = $userCB[0]->firstname; $last_name = $userCB[0]->lastname; if ($userCB[0]->middlename != '') { $last_name = $userCB[0]->middlename . ' ' . $last_name; } } // var_dump($first_name, $last_name); if ($queryJS) { $query = "SELECT field_id, value FROM #__community_fields_values " . "WHERE user_id = '{$user->id}' " . "AND field_id IN ('{$JSand}')"; $db->setQuery($query); $JSfields = $db->loadObjectList(); $JSfieldsArray = array(); foreach ($JSfields as $jsf) { $JSfieldsArray[$jsf->field_id] = $jsf->value; } } if ($queryCB) { if (!$userCB) { $query = "SELECT * FROM #__comprofiler WHERE user_id = '{$user->id}'"; $db->setQuery($query); $userCB = $db->loadObjectList(); } } $data[$x] = array('first_name' => $first_name, 'last_name' => $last_name, 'email1' => $user->email); foreach ($config as $k => $v) { if ($k != 'first_name' && $k != 'last_name') { if ($v) { $vEx = explode(';', $v); if ($vEx[0] == 'js') { $data[$x][$k] = isset($JSfieldsArray[$vEx[1]]) ? $JSfieldsArray[$vEx[1]] : ''; } else { $data[$x][$k] = isset($userCB[0]->{$vEx[1]}) ? str_replace('|*|', ', ', $userCB[0]->{$vEx[1]}) : ''; } } } } $emails[$x] = $user->email; $userIDs[] = $user->id; $x++; } else { $errorMsg .= '"Invalid email => ' . $user->email . '", '; $failed++; } $addedUsers[] = $user->id; } if (isset($emails[0])) { $existing_users = $sugar->findUserByEmail($emails); } else { $existing_users = array(); } $sendData = array(); $x = 0; foreach ($data as $d) { $sendData[$x] = $d; if (isset($existing_users[$d['email1']])) { $sendData[$x]['id'] = $existing_users[$d['email1']]; $updated++; } else { $new++; } $x++; } $sugarResult = $sugar->setContactMulti($sendData); if ($sugarResult !== false && isset($userIDs[0])) { $userIDsInserts = array(); foreach ($userIDs as $uid) { $userIDsInserts[] = "('sugar', '{$uid}')"; } $userIDsInsert = implode(', ', $userIDsInserts); $query = "INSERT INTO #__joomailermailchimpintegration_crm_users " . "(crm, user_id) VALUES " . $userIDsInsert; $db->setQuery($query); $db->execute(); } } else { unset($_SESSION['addedUsers']); $response['finished'] = 1; $response['addedUsers'] = ''; $response['abortAJAX'] = $_SESSION['abortAJAX']; echo json_encode($response); } if (!count($users)) { $done = $elements->total; unset($_SESSION['addedUsers']); $percent = 100; } else { $done = count($addedUsers); $_SESSION['addedUsers'] = $addedUsers; $percent = $done / $elements->total * 100; } $response['msg'] = '<div id="bg"></div>' . '<div id="progressBarContainer">' . '<div id="progressBarTitle">' . JText::_('JM_ADDING_USERS') . ' (' . $done . '/' . $total . ' ' . JText::_('JM_DONE') . ')</div>' . '<div id="progressBarBg">' . '<div id="progressBarCompleted" style="width: ' . round($percent) . '%;"></div>' . '<div id="progressBarNumber">' . round($percent) . ' %</div>' . '</div>' . '<a id="sbox-btn-close" href="javascript:joomlamailerJS.sync.abortAJAX();">abort</a>' . '</div>'; $response['done'] = $elements->run++; $response['done'] = $done; $response['newUser'] = $new; $response['updated'] = $updated; $response['errors'] = $failed; $response['errorMsg'] = $errorMsg; if ($done + $failed >= $elements->total) { unset($_SESSION['addedUsers']); $response['finished'] = 1; if ($errorMsg) { $errorMsg = substr($errorMsg, 0, -2); $msgErrors = ' ; ' . $failed . ' ' . JText::_('JM_ERRORS') . ': ' . $errorMsg . ' '; } $msg = $done . ' ' . JText::_('JM_USERS_PROCESSED'); $msg .= ' (' . $new . ' ' . JText::_('JM_NEW') . ' ; ' . $updated . ' ' . JText::_('JM_UPDATED') . ' '; if (isset($msgErrors) && $msgErrors) { $msg .= $msgErrors; } $msg .= ')'; $response['finalMessage'] = $msg; } else { $response['finished'] = 0; $response['finalMessage'] = ''; } $response['abortAJAX'] = $_SESSION['abortAJAX']; echo json_encode($response); }