PageRenderTime 53ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/administrator/components/com_acymailing/helpers/import.php

https://github.com/srgg6701/auction-ruseasons
PHP | 1333 lines | 1053 code | 273 blank | 7 comment | 168 complexity | a080c23fffd6a0d9e44804fbec8e19e6 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-3.0, LGPL-2.1, BSD-3-Clause, JSON

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. /**
  3. * @package AcyMailing for Joomla!
  4. * @version 4.1.0
  5. * @author acyba.com
  6. * @copyright (C) 2009-2013 ACYBA S.A.R.L. All rights reserved.
  7. * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
  8. */
  9. defined('_JEXEC') or die('Restricted access');
  10. ?><?php
  11. class importHelper{
  12. var $importUserInLists = array();
  13. var $totalInserted = 0;
  14. var $totalTry = 0;
  15. var $totalValid = 0;
  16. var $allSubid = array();
  17. var $db;
  18. var $forceconfirm = false;
  19. var $charsetConvert;
  20. var $generatename = true;
  21. var $overwrite = false;
  22. var $removeSep = 0;
  23. var $dispresults = true;
  24. var $tablename = '';
  25. var $equFields = array();
  26. var $dbwhere = array(); //handle where on import via filter to only import new users for example
  27. var $subscribedUsers = array();
  28. function importHelper(){
  29. acymailing_increasePerf();
  30. $this->db = JFactory::getDBO();
  31. }
  32. function database($onlyimport = false){
  33. $app = JFactory::getApplication();
  34. $table = empty($this->tablename) ? trim(JRequest::getString('tablename')) : $this->tablename;
  35. if(empty($table)){
  36. $listTables = $this->db->getTableList();
  37. $app->enqueueMessage(JText::sprintf('SPECIFYTABLE',implode(' | ',$listTables)),'notice');
  38. return false;
  39. }
  40. if(empty($this->tablename)){
  41. $newConfig = new stdClass();
  42. $newConfig->import_db_table = trim(JRequest::getString('tablename'));
  43. $newConfig->import_db_fields = serialize(JRequest::getVar('fields',array()));
  44. $config = acymailing_config();
  45. $config->save($newConfig);
  46. }
  47. $fields = acymailing_getColumns($table);
  48. if(empty($fields)){
  49. $listTables = $this->db->getTableList();
  50. $app->enqueueMessage(JText::sprintf('SPECIFYTABLE',implode(' | ',$listTables)),'notice');
  51. return false;
  52. }
  53. $fields = array_keys($fields);
  54. $equivalentFields = empty($this->equFields) ? JRequest::getVar('fields',array()) : $this->equFields;
  55. if(empty($equivalentFields['email'])){
  56. $app->enqueueMessage(JText::_('SPECIFYFIELDEMAIL'),'notice');
  57. return false;
  58. }
  59. $select = array();
  60. foreach($equivalentFields as $acyField => $tableField){
  61. $tableField = trim($tableField);
  62. if(empty($tableField)) continue;
  63. if(!in_array($tableField,$fields)){
  64. $app->enqueueMessage(JText::sprintf('SPECIFYFIELD',$tableField,implode(' | ',$fields)),'notice');
  65. return false;
  66. }
  67. $select['`'.$acyField.'`'] = '`'.$tableField.'`';
  68. }
  69. if(empty($select['`created`'])){ $select['`created`'] = time(); }
  70. $query = 'INSERT IGNORE INTO `#__acymailing_subscriber` ('.implode(' , ',array_keys($select)).') SELECT '.implode(' , ',$select).' FROM '.$table.' WHERE '.$select['`email`'].' LIKE \'%@%\'';
  71. if(!empty($this->dbwhere)) $query .= ' AND ( '.implode(' ) AND (',$this->dbwhere).' )';
  72. $this->db->setQuery($query);
  73. $this->db->query();
  74. $affectedRows = $this->db->getAffectedRows();
  75. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$affectedRows));
  76. if($onlyimport) return true;
  77. $query = 'SELECT b.subid FROM '.$table.' as a JOIN '.acymailing_table('subscriber').' as b on a.'.$select['`email`'].' = b.`email`';
  78. $this->db->setQuery($query);
  79. $this->allSubid = acymailing_loadResultArray($this->db);
  80. $this->_subscribeUsers();
  81. $this->_displaySubscribedResult();
  82. return true;
  83. }
  84. function textarea(){
  85. $this->forceconfirm = JRequest::getInt('import_confirmed_textarea');
  86. $this->generatename = JRequest::getInt('generatename_textarea');
  87. $this->overwrite = JRequest::getInt('overwriteexisting_textarea');
  88. $content = JRequest::getString('textareaentries');
  89. $result = $this->_handleContent($content);
  90. $this->_displaySubscribedResult();
  91. return $result;
  92. }
  93. function file(){
  94. $app = JFactory::getApplication();
  95. $importFile = JRequest::getVar( 'importfile', array(), 'files','array');
  96. if(empty($importFile['name'])){
  97. $app->enqueueMessage(JText::_('BROWSE_FILE'),'notice');
  98. return false;
  99. }
  100. $this->forceconfirm = JRequest::getInt('import_confirmed');
  101. $this->charsetConvert = JRequest::getString('charsetconvert','');
  102. $this->generatename = JRequest::getInt('generatename');
  103. $this->overwrite = JRequest::getInt('overwriteexisting');
  104. jimport('joomla.filesystem.file');
  105. $config =& acymailing_config();
  106. $uploadFolder = JPath::clean(html_entity_decode($config->get('uploadfolder')));
  107. $uploadFolder = trim($uploadFolder,DS.' ').DS;
  108. $uploadPath = JPath::clean(ACYMAILING_ROOT.$uploadFolder);
  109. acymailing_createDir($uploadPath);
  110. if(!is_writable($uploadPath)){
  111. @chmod($uploadPath,'0755');
  112. if(!is_writable($uploadPath)){
  113. $app->enqueueMessage(JText::sprintf( 'WRITABLE_FOLDER',$uploadPath), 'notice');
  114. }
  115. }
  116. $attachment = new stdClass();
  117. $attachment->filename = strtolower(JFile::makeSafe($importFile['name']));
  118. $attachment->size = $importFile['size'];
  119. if(!preg_match('#\.('.str_replace(array(',','.'),array('|','\.'),$config->get('allowedfiles')).')$#Ui',$attachment->filename,$extension) || preg_match('#\.(php.?|.?htm.?|pl|py|jsp|asp|sh|cgi)$#Ui',$attachment->filename)){
  120. $app->enqueueMessage(JText::sprintf( 'ACCEPTED_TYPE',substr($attachment->filename,strrpos($attachment->filename,'.')+1),$config->get('allowedfiles')), 'notice');
  121. return false;
  122. }
  123. $attachment->filename = str_replace(array('.',' '),'_',substr($attachment->filename,0,strpos($attachment->filename,$extension[0]))).$extension[0];
  124. if(!JFile::upload($importFile['tmp_name'], $uploadPath . $attachment->filename)){
  125. if ( !move_uploaded_file($importFile['tmp_name'], $uploadPath . $attachment->filename)) {
  126. $app->enqueueMessage(JText::sprintf( 'FAIL_UPLOAD','<b><i>'.$importFile['tmp_name'].'</i></b>','<b><i>'.$uploadPath . $attachment->filename.'</i></b>'), 'error');
  127. }
  128. }
  129. $contentFile = file_get_contents($uploadPath . $attachment->filename);
  130. if(!$contentFile){
  131. $app->enqueueMessage(JText::sprintf( 'FAIL_OPEN','<b><i>'.$uploadPath . $attachment->filename.'</i></b>'), 'error');
  132. return false;
  133. };
  134. unlink($uploadPath . $attachment->filename);
  135. $toTest = array();
  136. if(empty($this->charsetConvert)){
  137. $encodingHelper = acymailing_get('helper.encoding');
  138. $this->charsetConvert = $encodingHelper->detectEncoding($contentFile);
  139. }
  140. $result = $this->_handleContent($contentFile);
  141. $this->_displaySubscribedResult();
  142. return $result;
  143. }
  144. function _handleContent(&$contentFile){
  145. $success = true;
  146. $app = JFactory::getApplication();
  147. $contentFile = str_replace(array("\r\n","\r"),"\n",$contentFile);
  148. $importLines = explode("\n", $contentFile);
  149. $i = 0;
  150. $this->header = '';
  151. $this->allSubid = array();
  152. while(empty($this->header) && $i < 10){
  153. $this->header = trim($importLines[$i]);
  154. $i++;
  155. }
  156. if(strpos($this->header,'@') && !strpos($this->header,',') && !strpos($this->header,';') && !strpos($this->header,"\t")){
  157. $this->header = 'email';
  158. $i--;
  159. }
  160. if(!$this->_autoDetectHeader()){
  161. $app->enqueueMessage(JText::sprintf('IMPORT_HEADER',$this->header),'error');
  162. $app->enqueueMessage(JText::_('IMPORT_EMAIL'),'error');
  163. $app->enqueueMessage(JText::_('IMPORT_EXAMPLE'),'error');
  164. return false;
  165. }
  166. $numberColumns = count($this->columns);
  167. $userHelper = acymailing_get('helper.user');
  168. $importUsers = array();
  169. $encodingHelper = acymailing_get('helper.encoding');
  170. while (isset($importLines[$i])) {
  171. if(!empty($this->charsetConvert)){
  172. $importLines[$i] = $encodingHelper->change($importLines[$i],$this->charsetConvert,'UTF-8');
  173. }
  174. $data = explode($this->separator,rtrim(trim($importLines[$i]),$this->separator));
  175. if(!empty($this->removeSep)){
  176. for($b = $numberColumns+$this->removeSep-1;$b >= $numberColumns;$b-- ){
  177. if(isset($data[$b]) AND (strlen($data[$b])==0 || $data[$b] == ' ')){
  178. unset($data[$b]);
  179. }
  180. }
  181. }
  182. $i++;
  183. if(empty($importLines[$i-1])) continue;
  184. $this->totalTry++;
  185. if(count($data) > $numberColumns){
  186. $copy = $data;
  187. foreach($copy as $oneelem => $oneval){
  188. if(!empty($oneval[0]) AND $oneval[0] == '"' AND $oneval[strlen($oneval)-1] != '"' AND isset($copy[$oneelem+1]) AND $copy[$oneelem+1][strlen($copy[$oneelem+1])-1] == '"'){
  189. $data[$oneelem] = $copy[$oneelem].$this->separator.$copy[$oneelem+1];
  190. unset($data[$oneelem+1]);
  191. }
  192. }
  193. $data = array_values($data);
  194. }
  195. if(count($data) < $numberColumns){
  196. for($a=count($data);$a<$numberColumns;$a++){
  197. $data[$a] = '';
  198. }
  199. }
  200. if(count($data) != $numberColumns){
  201. $success = false;
  202. static $errorcount = 0;
  203. if(empty($errorcount)){
  204. $app->enqueueMessage(JText::sprintf('IMPORT_ARGUMENTS',$numberColumns),'error');
  205. }
  206. $errorcount++;
  207. if($errorcount<20){
  208. $app->enqueueMessage(JText::sprintf('IMPORT_ERRORLINE','<b><i>'.$importLines[$i-1].'</i></b>'),'notice');
  209. }elseif($errorcount == 20){
  210. $app->enqueueMessage('...','notice');
  211. }
  212. if($this->totalTry == 1) return false;
  213. continue;
  214. }
  215. $newUser = new stdClass();
  216. foreach($data as $num => $value){
  217. $field = $this->columns[$num];
  218. if($field == 'listids'){
  219. $liststosub = explode('-',trim($value,'\'" '));
  220. foreach($liststosub as $onelistid){
  221. $this->importUserInLists[$onelistid][] = $this->db->Quote($newUser->email);
  222. }
  223. continue;
  224. }
  225. $newUser->$field = trim($value,'\'" ');
  226. }
  227. $newUser->email = trim(str_replace(array(' ',"\t"),'',$encodingHelper->change($newUser->email,'UTF-8','ISO-8859-1')));
  228. if(!$userHelper->validEmail($newUser->email)){
  229. $success = false;
  230. static $errorcountfail = 0;
  231. $errorcountfail++;
  232. if($errorcountfail<50){
  233. $app->enqueueMessage(JText::sprintf('NOT_VALID_EMAIL','<b><i>'.$newUser->email.'</i></b>').' | '.($i-1).' : '.$importLines[$i-1],'notice');
  234. }elseif($errorcountfail == 50){
  235. $app->enqueueMessage('...','notice');
  236. }
  237. continue;
  238. }
  239. unset($newUser->subid); unset($newUser->userid);
  240. $importUsers[] = $newUser;
  241. $this->totalValid++;
  242. if( $this->totalValid%50 == 0){
  243. $this->_insertUsers($importUsers);
  244. $importUsers = array();
  245. }
  246. }
  247. $this->_insertUsers($importUsers);
  248. if($this->dispresults){
  249. $app->enqueueMessage(JText::sprintf('IMPORT_REPORT',$this->totalTry,$this->totalInserted,$this->totalTry - $this->totalValid,$this->totalValid - $this->totalInserted));
  250. }
  251. $this->_subscribeUsers();
  252. return $success;
  253. }
  254. function _subscribeUsers(){
  255. if(empty($this->allSubid)) return true;
  256. $subdate = time();
  257. $listClass= acymailing_get('class.list');
  258. if(empty($this->importUserInLists)){
  259. $lists = JRequest::getVar('importlists',array());
  260. foreach($lists as $listid => $val){
  261. if(!empty($val)){
  262. $nbsubscribed = 0;
  263. $listid = (int) $listid;
  264. $query = 'INSERT IGNORE INTO '.acymailing_table('listsub').' (listid,subid,subdate,status) VALUES ';
  265. $b = 0;
  266. foreach($this->allSubid as $subid){
  267. $b++;
  268. if($b>200){
  269. $query = rtrim($query,',');
  270. $this->db->setQuery($query);
  271. $this->db->query();
  272. $nbsubscribed += $this->db->getAffectedRows();
  273. $b = 0;
  274. $query = 'INSERT IGNORE INTO '.acymailing_table('listsub').' (listid,subid,subdate,status) VALUES ';
  275. }
  276. $query .= "($listid,$subid,$subdate,1),";
  277. }
  278. $query = rtrim($query,',');
  279. $this->db->setQuery($query);
  280. $this->db->query();
  281. $nbsubscribed += $this->db->getAffectedRows();
  282. if(isset($this->subscribedUsers[$listid])){
  283. $this->subscribedUsers[$listid]->nbusers += $nbsubscribed;
  284. }else{
  285. $myList = $listClass->get($listid);
  286. $this->subscribedUsers[$listid] = $myList;
  287. $this->subscribedUsers[$listid]->nbusers = $nbsubscribed;
  288. }
  289. }
  290. }
  291. }else{
  292. foreach($this->importUserInLists as $listid => $arrayEmails){
  293. if(!empty($listid)){
  294. $listid = (int) $listid;
  295. $query = 'INSERT IGNORE INTO '.acymailing_table('listsub').' (listid,subid,subdate,status) ';
  296. $query .= "SELECT $listid,`subid`,$subdate,1 FROM ".acymailing_table('subscriber')." WHERE `email` IN (";
  297. $query .= implode(',',$arrayEmails).')';
  298. $this->db->setQuery($query);
  299. $this->db->query();
  300. $nbsubscribed = $this->db->getAffectedRows();
  301. if(isset($this->subscribedUsers[$listid])){
  302. $this->subscribedUsers[$listid]->nbusers += $nbsubscribed;
  303. }else{
  304. $myList = $listClass->get($listid);
  305. $this->subscribedUsers[$listid] = $myList;
  306. $this->subscribedUsers[$listid]->nbusers = $nbsubscribed;
  307. }
  308. }
  309. }
  310. }
  311. return true;
  312. }
  313. function _displaySubscribedResult(){
  314. $app = JFactory::getApplication();
  315. foreach($this->subscribedUsers as $myList){
  316. $app->enqueueMessage(JText::sprintf('IMPORT_SUBSCRIBE_CONFIRMATION',$myList->nbusers,'<b><i>'.$myList->name.'</i></b>'));
  317. }
  318. }
  319. function _insertUsers($users){
  320. if(empty($users)) return true;
  321. if($this->overwrite){
  322. $emailstoload = array();
  323. foreach($users as $a => $oneUser){
  324. $emailstoload[] = $this->db->Quote($oneUser->email);
  325. }
  326. $this->db->setQuery('SELECT * FROM `#__acymailing_subscriber` WHERE `email` IN ('.implode(',',$emailstoload).')');
  327. $subids = $this->db->loadObjectList('email');
  328. $dataoneuser = @array_keys(get_object_vars(reset($subids)));
  329. foreach($users as $a => $oneUser){
  330. $users[$a]->subid = (!empty($subids[$oneUser->email]->subid)) ? $subids[$oneUser->email]->subid : 'NULL';
  331. if(empty($dataoneuser)) continue;
  332. foreach($dataoneuser as $oneField){
  333. if(!isset($users[$a]->$oneField)) $users[$a]->$oneField = @$subids[$oneUser->email]->$oneField;
  334. }
  335. }
  336. $this->totalInserted -= (count($subids)*2);
  337. }
  338. foreach($users as $a => $oneUser){
  339. $this->_checkData($users[$a]);
  340. }
  341. $columns = reset($users);
  342. $query = $this->overwrite ? 'REPLACE' : 'INSERT IGNORE';
  343. $query .= ' INTO '.acymailing_table('subscriber').' (`'.implode('`,`',array_keys(get_object_vars($columns))).'`) VALUES (';
  344. $values = array();
  345. $allemails = array();
  346. foreach($users as $a => $oneUser){
  347. $value = array();
  348. foreach($oneUser as $map => $oneValue){
  349. if($map != 'subid'){
  350. $value[] = $this->db->Quote($oneValue);
  351. }else{
  352. $value[] = $oneValue;
  353. }
  354. if($map == 'email'){
  355. $allemails[] = $this->db->Quote($oneValue);
  356. }
  357. }
  358. $values[] = implode(',',$value);
  359. }
  360. $query .= implode('),(',$values).')';
  361. $this->db->setQuery($query);
  362. $this->db->query();
  363. $this->totalInserted += $this->db->getAffectedRows();
  364. $this->db->setQuery('SELECT subid FROM '.acymailing_table('subscriber').' WHERE email IN ('.implode(',',$allemails).')');
  365. $this->allSubid = array_merge($this->allSubid,acymailing_loadResultArray($this->db));
  366. return true;
  367. }
  368. function _checkData(&$user){
  369. if(empty($user->created)) $user->created = time();
  370. elseif(!is_numeric($user->created)) $user->created = strtotime($user->created);
  371. if(!isset($user->accept) || strlen($user->accept) == 0) $user->accept = 1;
  372. if(!isset($user->enabled) || strlen($user->enabled) == 0) $user->enabled = 1;
  373. if(!isset($user->html) || strlen($user->html) == 0) $user->html = 1;
  374. if(empty($user->name) AND $this->generatename) $user->name = ucwords(str_replace(array('.','_','-'),' ',substr($user->email,0,strpos($user->email,'@'))));
  375. if((!isset($user->confirmed) || strlen($user->confirmed) == 0 ) AND $this->forceconfirm) $user->confirmed = 1;
  376. if(empty($user->key)) $user->key = md5(substr($user->email,0,strpos($user->email,'@')).rand(0,10000000));
  377. }
  378. function _autoDetectHeader(){
  379. $app = JFactory::getApplication();
  380. $this->separator = ',';
  381. $this->header = str_replace("\xEF\xBB\xBF","",$this->header);
  382. $listSeparators = array("\t",';',',');
  383. foreach($listSeparators as $sep){
  384. if(strpos($this->header,$sep) !== false){
  385. $this->separator = $sep;
  386. break;
  387. }
  388. }
  389. $this->columns = explode($this->separator,$this->header);
  390. for($i=count($this->columns)-1;$i>=0;$i--){
  391. if(strlen($this->columns[$i]) == 0){
  392. unset($this->columns[$i]);
  393. $this->removeSep++;
  394. }
  395. }
  396. $columns = acymailing_getColumns('#__acymailing_subscriber');
  397. foreach($this->columns as $i => $oneColumn){
  398. $this->columns[$i] = strtolower(trim($oneColumn,'\'" '));
  399. if($this->columns[$i] == 'listids') continue;
  400. if(!isset($columns[$this->columns[$i]])){
  401. $app->enqueueMessage(JText::sprintf('IMPORT_ERROR_FIELD','<b><i>'.$this->columns[$i].'</i></b>',implode(' | ',array_diff(array_keys($columns),array('subid','userid','key')))),'error');
  402. return false;
  403. }
  404. }
  405. if(!in_array('email',$this->columns)) return false;
  406. return true;
  407. }
  408. function joomla(){
  409. $app = JFactory::getApplication();
  410. $query = 'UPDATE IGNORE '.acymailing_table('users',false).' as b, '.acymailing_table('subscriber').' as a SET a.email = b.email, a.name = b.name, a.enabled = 1 - b.block WHERE a.userid = b.id AND a.userid > 0';
  411. $this->db->setQuery($query);
  412. $this->db->query();
  413. $nbUpdated = $this->db->getAffectedRows();
  414. $query = 'UPDATE IGNORE '.acymailing_table('users',false).' as b, '.acymailing_table('subscriber').' as a SET a.userid = b.id WHERE a.email = b.email';
  415. $this->db->setQuery($query);
  416. $this->db->query();
  417. $nbUpdated += $this->db->getAffectedRows();
  418. $app->enqueueMessage(JText::sprintf('IMPORT_UPDATE',$nbUpdated));
  419. $query = 'SELECT subid FROM '.acymailing_table('subscriber').' as a LEFT JOIN '.acymailing_table('users',false).' as b on a.userid = b.id WHERE b.id IS NULL AND a.userid > 0';
  420. $this->db->setQuery($query);
  421. $deletedSubid = acymailing_loadResultArray($this->db);
  422. $query = 'SELECT subid FROM '.acymailing_table('subscriber').' as a LEFT JOIN '.acymailing_table('users',false).' as b on a.email = b.email WHERE b.id IS NULL AND a.userid > 0';
  423. $this->db->setQuery($query);
  424. $deletedSubid = array_merge(acymailing_loadResultArray($this->db),$deletedSubid);
  425. if(!empty($deletedSubid)){
  426. $userClass = acymailing_get('class.subscriber');
  427. $deletedUsers = $userClass->delete($deletedSubid);
  428. $app->enqueueMessage(JText::sprintf('IMPORT_DELETE',$deletedUsers));
  429. }
  430. $time = time();
  431. $query = 'INSERT IGNORE INTO '.acymailing_table('subscriber').' (`email`,`name`,`confirmed`,`userid`,`created`,`enabled`,`accept`,`html`) SELECT `email`,`name`,1-`block`,`id`,UNIX_TIMESTAMP(`registerDate`),1-`block`,1,1 FROM '.acymailing_table('users',false);
  432. $this->db->setQuery($query);
  433. $this->db->query();
  434. $insertedUsers = $this->db->getAffectedRows();
  435. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$insertedUsers));
  436. $lists = JRequest::getVar('importlists',array());
  437. $listsSubscribe = array();
  438. foreach($lists as $listid => $val){
  439. if(!empty($val)) $listsSubscribe[] = (int) $listid;
  440. }
  441. if(empty($listsSubscribe)) return true;
  442. $query = 'INSERT IGNORE INTO '.acymailing_table('listsub').' (`listid`,`subid`,`subdate`,`status`) ';
  443. $query.= 'SELECT a.`listid`, b.`subid` ,'.$time.',1 FROM '.acymailing_table('list').' as a, '.acymailing_table('subscriber').' as b WHERE a.`listid` IN ('.implode(',',$listsSubscribe).') AND b.`userid` > 0';
  444. $this->db->setQuery($query);
  445. $this->db->query();
  446. $nbsubscribed = $this->db->getAffectedRows();
  447. $app->enqueueMessage(JText::sprintf('IMPORT_SUBSCRIPTION',$nbsubscribed));
  448. return true;
  449. }
  450. function acajoom(){
  451. $app = JFactory::getApplication();
  452. $query = 'INSERT IGNORE INTO '.acymailing_table('subscriber').' (email,name,confirmed,created,enabled,accept,html) SELECT email,name,confirmed,UNIX_TIMESTAMP(`subscribe_date`),1-blacklist,1,receive_html FROM '.acymailing_table('acajoom_subscribers',false);
  453. $this->db->setQuery($query);
  454. $this->db->query();
  455. $insertedUsers = $this->db->getAffectedRows();
  456. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$insertedUsers));
  457. if(JRequest::getInt('acajoom_lists',0) == 1) $this->_importAcajoomLists();
  458. $query = 'SELECT b.subid FROM '.acymailing_table('acajoom_subscribers',false).' as a JOIN '.acymailing_table('subscriber').' as b on a.email = b.email';
  459. $this->db->setQuery($query);
  460. $this->allSubid = acymailing_loadResultArray($this->db);
  461. $this->_subscribeUsers();
  462. $this->_displaySubscribedResult();
  463. return true;
  464. }
  465. function _importYancLists(){
  466. $app = JFactory::getApplication();
  467. $query = 'SELECT `id`, `name`, `description`, `state` as `published` FROM `#__yanc_letters`';
  468. $this->db->setQuery($query);
  469. $yancLists = $this->db->loadObjectList('id');
  470. $user = JFactory::getUser();
  471. $query = 'SELECT `listid`, `alias` FROM '.acymailing_table('list').' WHERE `alias` IN (\'yanclist'.implode('\',\'yanclist',array_keys($yancLists)).'\')';
  472. $this->db->setQuery($query);
  473. $joomLists = $this->db->loadObjectList('alias');
  474. $listClass = acymailing_get('class.list');
  475. $time = time();
  476. foreach($yancLists as $oneList){
  477. $oneList->alias = 'yanclist'.$oneList->id;
  478. $oneList->userid = $user->id;
  479. $yancListId = $oneList->id;
  480. if(isset($joomLists[$oneList->alias])){
  481. $joomListId = $joomLists[$oneList->alias]->listid;
  482. }else{
  483. unset($oneList->id);
  484. $joomListId = $listClass->save($oneList);
  485. $app->enqueueMessage(JText::sprintf('IMPORT_LIST','<b><i>'.$oneList->name.'</i></b>'));
  486. }
  487. $querySelect = 'SELECT DISTINCT c.subid,'.$joomListId.','.$time.',1 FROM `#__yanc_subscribers` as a ';
  488. $querySelect .= 'JOIN '.acymailing_table('subscriber').' as c on a.email = c.email ';
  489. $querySelect .= 'WHERE a.lid = '.$yancListId.' AND a.state = 1 AND c.subid > 0';
  490. $queryInsert = 'INSERT IGNORE INTO '.acymailing_table('listsub').' (subid,listid,subdate,status) ';
  491. $this->db->setQuery($queryInsert.$querySelect);
  492. $this->db->query();
  493. $app->enqueueMessage(JText::sprintf('IMPORT_SUBSCRIBE_CONFIRMATION',$this->db->getAffectedRows(),'<b><i>'.$oneList->name.'</i></b>'));
  494. }
  495. return true;
  496. }
  497. function _importjnewsLists(){
  498. $app = JFactory::getApplication();
  499. $query = 'SELECT `id`, `list_name` as `name`, `hidden` as `visible`, `list_desc` as `description`, `published`, `owner` as `userid` FROM '.acymailing_table('jnews_lists',false);
  500. $this->db->setQuery($query);
  501. $jnewsLists = $this->db->loadObjectList('id');
  502. $query = 'SELECT `listid`, `alias` FROM '.acymailing_table('list').' WHERE `alias` IN (\'jnewslist'.implode('\',\'jnewslist',array_keys($jnewsLists)).'\')';
  503. $this->db->setQuery($query);
  504. $joomLists = $this->db->loadObjectList('alias');
  505. $listClass = acymailing_get('class.list');
  506. foreach($jnewsLists as $oneList){
  507. $oneList->alias = 'jnewslist'.$oneList->id;
  508. $jnewsListId = $oneList->id;
  509. if(isset($joomLists[$oneList->alias])){
  510. $joomListId = $joomLists[$oneList->alias]->listid;
  511. }else{
  512. unset($oneList->id);
  513. $joomListId = $listClass->save($oneList);
  514. $app->enqueueMessage(JText::sprintf('IMPORT_LIST','<b><i>'.$oneList->name.'</i></b>'));
  515. }
  516. $querySelect = 'SELECT DISTINCT c.subid,'.$joomListId.',a.subdate,a.unsubdate,1-(2*a.unsubscribe) FROM '.acymailing_table('jnews_listssubscribers',false).' as a ';
  517. $querySelect .= 'JOIN '.acymailing_table('jnews_subscribers',false).' as b on a.subscriber_id = b.id ';
  518. $querySelect .= 'JOIN '.acymailing_table('subscriber').' as c on b.email = c.email ';
  519. $querySelect .= 'WHERE a.list_id = '.$jnewsListId.' AND c.subid > 0';
  520. $queryInsert = 'INSERT IGNORE INTO '.acymailing_table('listsub').' (subid,listid,subdate,unsubdate,status) ';
  521. $this->db->setQuery($queryInsert.$querySelect);
  522. $this->db->query();
  523. $app->enqueueMessage(JText::sprintf('IMPORT_SUBSCRIBE_CONFIRMATION',$this->db->getAffectedRows(),'<b><i>'.$oneList->name.'</i></b>'));
  524. }
  525. return true;
  526. }
  527. function _importAcajoomLists(){
  528. $app = JFactory::getApplication();
  529. $query = 'SELECT `id`, `list_name` as `name`, `hidden` as `visible`, `list_desc` as `description`, `published`, `owner` as `userid` FROM '.acymailing_table('acajoom_lists',false);
  530. $this->db->setQuery($query);
  531. $acaLists = $this->db->loadObjectList('id');
  532. $query = 'SELECT `listid`, `alias` FROM '.acymailing_table('list').' WHERE `alias` IN (\'acajoomlist'.implode('\',\'acajoomlist',array_keys($acaLists)).'\')';
  533. $this->db->setQuery($query);
  534. $joomLists = $this->db->loadObjectList('alias');
  535. $listClass = acymailing_get('class.list');
  536. $time = time();
  537. foreach($acaLists as $oneList){
  538. $oneList->alias = 'acajoomlist'.$oneList->id;
  539. $acaListId = $oneList->id;
  540. if(isset($joomLists[$oneList->alias])){
  541. $joomListId = $joomLists[$oneList->alias]->listid;
  542. }else{
  543. unset($oneList->id);
  544. $joomListId = $listClass->save($oneList);
  545. $app->enqueueMessage(JText::sprintf('IMPORT_LIST','<b><i>'.$oneList->name.'</i></b>'));
  546. }
  547. $querySelect = 'SELECT DISTINCT c.subid,'.$joomListId.','.$time.',1 FROM '.acymailing_table('acajoom_queue',false).' as a ';
  548. $querySelect .= 'JOIN '.acymailing_table('acajoom_subscribers',false).' as b on a.subscriber_id = b.id ';
  549. $querySelect .= 'JOIN '.acymailing_table('subscriber').' as c on b.email = c.email ';
  550. $querySelect .= 'WHERE a.list_id = '.$acaListId.' AND c.subid > 0';
  551. $queryInsert = 'INSERT IGNORE INTO '.acymailing_table('listsub').' (subid,listid,subdate,status) ';
  552. $this->db->setQuery($queryInsert.$querySelect);
  553. $this->db->query();
  554. $app->enqueueMessage(JText::sprintf('IMPORT_SUBSCRIBE_CONFIRMATION',$this->db->getAffectedRows(),'<b><i>'.$oneList->name.'</i></b>'));
  555. }
  556. return true;
  557. }
  558. function letterman(){
  559. $app = JFactory::getApplication();
  560. $time = time();
  561. $query = 'INSERT IGNORE INTO '.acymailing_table('subscriber').' (`email`,`name`,`confirmed`,`created`,`enabled`,`accept`,`html`) SELECT `subscriber_email`,`subscriber_name`,`confirmed`,UNIX_TIMESTAMP(`subscribe_date`),1,1,1 FROM '.acymailing_table('letterman_subscribers',false);
  562. $this->db->setQuery($query);
  563. $this->db->query();
  564. $insertedUsers = $this->db->getAffectedRows();
  565. if($insertedUsers == -1){
  566. $query = 'INSERT IGNORE INTO '.acymailing_table('subscriber').' (`email`,`name`,`confirmed`,`created`,`enabled`,`accept`,`html`) SELECT `email`,`name`,`confirmed`,'.$time.',1,1,1 FROM '.acymailing_table('letterman_subscribers',false);
  567. $this->db->setQuery($query);
  568. $this->db->query();
  569. $insertedUsers = $this->db->getAffectedRows();
  570. $query = 'SELECT b.subid FROM '.acymailing_table('letterman_subscribers',false).' as a JOIN '.acymailing_table('subscriber').' as b on a.email = b.email';
  571. $this->db->setQuery($query);
  572. }else{
  573. $query = 'SELECT b.subid FROM '.acymailing_table('letterman_subscribers',false).' as a JOIN '.acymailing_table('subscriber').' as b on a.subscriber_email = b.email';
  574. $this->db->setQuery($query);
  575. }
  576. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$insertedUsers));
  577. $this->allSubid = acymailing_loadResultArray($this->db);
  578. $this->_subscribeUsers();
  579. $this->_displaySubscribedResult();
  580. return true;
  581. }
  582. function yanc(){
  583. $app = JFactory::getApplication();
  584. $this->db->setQuery('SELECT * FROM #__yanc_subscribers LIMIT 1');
  585. $oneSubscriber = $this->db->loadObject();
  586. if(!isset($oneSubscriber->state)){
  587. $this->db->setQuery("ALTER IGNORE TABLE `#__yanc_subscribers` ADD `state` INT NOT NULL DEFAULT '1'");
  588. $this->db->query();
  589. }
  590. $query = 'INSERT IGNORE INTO '.acymailing_table('subscriber').' (`email`,`name`,`confirmed`,`created`,`enabled`,`accept`,`html`, `ip`) SELECT `email`,`name`,`confirmed`,UNIX_TIMESTAMP(`date`),`state`,1,`html`,`ip` FROM '.acymailing_table('yanc_subscribers',false)." WHERE email LIKE '%@%'";
  591. $this->db->setQuery($query);
  592. $this->db->query();
  593. $insertedUsers = $this->db->getAffectedRows();
  594. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$insertedUsers));
  595. if(JRequest::getInt('yanc_lists',0) == 1) $this->_importYancLists();
  596. $query = 'SELECT b.subid FROM '.acymailing_table('yanc_subscribers',false).' as a JOIN '.acymailing_table('subscriber').' as b on a.email = b.email';
  597. $this->db->setQuery($query);
  598. $this->allSubid = acymailing_loadResultArray($this->db);
  599. $this->_subscribeUsers();
  600. $this->_displaySubscribedResult();
  601. return true;
  602. }
  603. function vemod(){
  604. $app = JFactory::getApplication();
  605. $time = time();
  606. $query = "INSERT IGNORE INTO ".acymailing_table('subscriber')." (`email`,`name`,`confirmed`,`created`,`enabled`,`accept`,`html`) SELECT `email`,`name`,1,'.$time.',1,1,`mailformat` FROM `#__vemod_news_mailer_users` WHERE `email` LIKE '%@%' ";
  607. $this->db->setQuery($query);
  608. $this->db->query();
  609. $insertedUsers = $this->db->getAffectedRows();
  610. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$insertedUsers));
  611. $query = 'SELECT b.subid FROM `#__vemod_news_mailer_users` as a JOIN '.acymailing_table('subscriber').' as b on a.email = b.email';
  612. $this->db->setQuery($query);
  613. $this->allSubid = acymailing_loadResultArray($this->db);
  614. $this->_subscribeUsers();
  615. $this->_displaySubscribedResult();
  616. return true;
  617. }
  618. function contact(){
  619. $app = JFactory::getApplication();
  620. $time = time();
  621. $query = 'INSERT IGNORE INTO '.acymailing_table('subscriber')." (`email`,`name`,`confirmed`,`created`,`enabled`,`accept`,`html`) SELECT `email_to`,`name`,1,'.$time.',1,1,1 FROM `#__contact_details` WHERE email_to LIKE '%@%'";
  622. $this->db->setQuery($query);
  623. $this->db->query();
  624. $insertedUsers = $this->db->getAffectedRows();
  625. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$insertedUsers));
  626. $query = 'SELECT b.subid FROM `#__contact_details` as a JOIN '.acymailing_table('subscriber').' as b on a.email_to = b.email';
  627. $this->db->setQuery($query);
  628. $this->allSubid = acymailing_loadResultArray($this->db);
  629. $this->_subscribeUsers();
  630. $this->_displaySubscribedResult();
  631. return true;
  632. }
  633. function ccnewsletter(){
  634. $app = JFactory::getApplication();
  635. $query = 'INSERT IGNORE INTO '.acymailing_table('subscriber').' (`email`,`name`,`confirmed`,`created`,`enabled`,`accept`,`html`) SELECT `email`,`name`,`enabled`,UNIX_TIMESTAMP(`sdate`),`enabled`,1,1-`plainText` FROM '.acymailing_table('ccnewsletter_subscribers',false);
  636. $this->db->setQuery($query);
  637. $this->db->query();
  638. $insertedUsers = $this->db->getAffectedRows();
  639. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$insertedUsers));
  640. $query = 'SELECT b.subid FROM '.acymailing_table('ccnewsletter_subscribers',false).' as a JOIN '.acymailing_table('subscriber').' as b on a.email = b.email WHERE b.subid > 0';
  641. $this->db->setQuery($query);
  642. $this->allSubid = acymailing_loadResultArray($this->db);
  643. $this->_subscribeUsers();
  644. $this->_displaySubscribedResult();
  645. return true;
  646. }
  647. function jnews(){
  648. $app = JFactory::getApplication();
  649. $time = time();
  650. $query = 'INSERT IGNORE INTO '.acymailing_table('subscriber').' (`email`,`name`,`confirmed`,`created`,`enabled`,`accept`,`html`) SELECT `email`,`name`,`confirmed`,`subscribe_date`, 1-`blacklist`,1,`receive_html` FROM '.acymailing_table('jnews_subscribers',false);
  651. $this->db->setQuery($query);
  652. $this->db->query();
  653. $insertedUsers = $this->db->getAffectedRows();
  654. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$insertedUsers));
  655. if(JRequest::getInt('jnews_lists',0) == 1) $this->_importjnewsLists();
  656. $query = 'SELECT b.subid FROM '.acymailing_table('jnews_subscribers',false).' as a JOIN '.acymailing_table('subscriber').' as b on a.email = b.email';
  657. $this->db->setQuery($query);
  658. $this->allSubid = acymailing_loadResultArray($this->db);
  659. $this->_subscribeUsers();
  660. $this->_displaySubscribedResult();
  661. return true;
  662. }
  663. function nspro(){
  664. $app = JFactory::getApplication();
  665. $time = time();
  666. $query = 'INSERT IGNORE INTO '.acymailing_table('subscriber').' (`email`,`name`,`confirmed`,`created`,`enabled`,`accept`,`html`) SELECT `email`,`name`,`confirmed`,UNIX_TIMESTAMP(`datetime`), 1,1,1 FROM '.acymailing_table('nspro_subs',false);
  667. $this->db->setQuery($query);
  668. $this->db->query();
  669. $insertedUsers = $this->db->getAffectedRows();
  670. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$insertedUsers));
  671. if(JRequest::getInt('nspro_lists',0) == 1) $this->_importnsproLists();
  672. $query = 'SELECT b.subid FROM '.acymailing_table('nspro_subs',false).' as a JOIN '.acymailing_table('subscriber').' as b on a.email = b.email';
  673. $this->db->setQuery($query);
  674. $this->allSubid = acymailing_loadResultArray($this->db);
  675. $this->_subscribeUsers();
  676. $this->_displaySubscribedResult();
  677. return true;
  678. }
  679. function _importnsproLists(){
  680. $app = JFactory::getApplication();
  681. $my = JFactory::getUser();
  682. $query = 'SELECT `id`, `lname` as `name`, 1 as `visible`, `notes` as `description`, `published`, '.intval($my->id).' as `userid` FROM '.acymailing_table('nspro_lists',false);
  683. $this->db->setQuery($query);
  684. $nsprolists = $this->db->loadObjectList('id');
  685. $query = 'SELECT `listid`, `alias` FROM '.acymailing_table('list').' WHERE `alias` IN (\'nsprolist'.implode('\',\'nsprolist',array_keys($nsprolists)).'\')';
  686. $this->db->setQuery($query);
  687. $joomLists = $this->db->loadObjectList('alias');
  688. $listClass = acymailing_get('class.list');
  689. foreach($nsprolists as $oneList){
  690. $oneList->alias = 'nsprolist'.$oneList->id;
  691. $nsproListId = $oneList->id;
  692. if(isset($joomLists[$oneList->alias])){
  693. $joomListId = $joomLists[$oneList->alias]->listid;
  694. }else{
  695. unset($oneList->id);
  696. $joomListId = $listClass->save($oneList);
  697. $app->enqueueMessage(JText::sprintf('IMPORT_LIST','<b><i>'.$oneList->name.'</i></b>'));
  698. }
  699. $querySelect = 'SELECT DISTINCT c.subid,'.$joomListId.',c.created,1 FROM '.acymailing_table('nspro_subs',false).' as a ';
  700. $querySelect .= 'JOIN '.acymailing_table('subscriber').' as c on a.email = c.email ';
  701. $querySelect .= 'WHERE a.mailing_lists LIKE "'.$nsproListId.'" OR a.mailing_lists LIKE "%,'.$nsproListId.',%" OR a.mailing_lists LIKE "'.$nsproListId.',%" OR a.mailing_lists LIKE "%,'.$nsproListId.'"';
  702. $queryInsert = 'INSERT IGNORE INTO '.acymailing_table('listsub').' (subid,listid,subdate,status) ';
  703. $this->db->setQuery($queryInsert.$querySelect);
  704. $this->db->query();
  705. $app->enqueueMessage(JText::sprintf('IMPORT_SUBSCRIBE_CONFIRMATION',$this->db->getAffectedRows(),'<b><i>'.$oneList->name.'</i></b>'));
  706. }
  707. return true;
  708. }
  709. function communicator(){
  710. $app = JFactory::getApplication();
  711. $time = time();
  712. $query = 'INSERT IGNORE INTO '.acymailing_table('subscriber').' (`email`,`name`,`confirmed`,`created`,`enabled`,`accept`,`html`) SELECT `subscriber_email`,`subscriber_name`,`confirmed`,'.$time.',1,1,1 FROM '.acymailing_table('communicator_subscribers',false);
  713. $this->db->setQuery($query);
  714. $this->db->query();
  715. $insertedUsers = $this->db->getAffectedRows();
  716. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$insertedUsers));
  717. $query = 'SELECT b.subid FROM '.acymailing_table('communicator_subscribers',false).' as a JOIN '.acymailing_table('subscriber').' as b on a.subscriber_email = b.email';
  718. $this->db->setQuery($query);
  719. $this->allSubid = acymailing_loadResultArray($this->db);
  720. $this->_subscribeUsers();
  721. $this->_displaySubscribedResult();
  722. return true;
  723. }
  724. function civi_import(){
  725. $query = 'INSERT IGNORE INTO '.acymailing_table('subscriber').' (`email`,`name`,`confirmed`,`created`,`enabled`,`accept`,`html`) ';
  726. $query .= 'SELECT CONVERT(civiemail.email USING utf8),CONVERT(civicontact.`first_name` USING utf8),1,'.time().', 1-`do_not_email`,1 - civicontact.is_opt_out,1 ';
  727. $query .= 'FROM `civicrm_email` as civiemail JOIN civicrm_contact as civicontact ON civicontact.id = civiemail.contact_id ';
  728. $query .= 'WHERE civicontact.is_deleted = 0 AND civiemail.is_primary = 1 AND civiemail.email LIKE \'%@%\'';
  729. $this->db->setQuery($query);
  730. $this->db->query();
  731. return $this->db->getAffectedRows();
  732. }
  733. function civi(){
  734. $app = JFactory::getApplication();
  735. $insertedUsers = $this->civi_import();
  736. $app->enqueueMessage(JText::sprintf('IMPORT_NEW',$insertedUsers));
  737. $query = 'SELECT b.subid FROM civicrm_email as a JOIN '.acymailing_table('subscriber').' as b on CONVERT(a.email USING utf8) = b.email';
  738. $this->db->setQuery($query);
  739. $this->allSubid = acymailing_loadResultArray($this->db);
  740. $this->_subscribeUsers();
  741. $this->_displaySubscribedResult();
  742. }
  743. function ldap(){
  744. $config = acymailing_config();
  745. $app = JFactory::getApplication();
  746. $db = JFactory::getDBO();
  747. $db->setQuery("DELETE FROM #__acymailing_config WHERE namekey LIKE 'ldapfield_%'");
  748. $db->query();
  749. if(!$this->ldap_init()) return false;
  750. $ldapfields = JRequest::getVar('ldapfield');
  751. if(empty($ldapfields)){
  752. $app->enqueueMessage(JText::_('SPECIFYFIELDEMAIL'),'notice');
  753. return false;
  754. }
  755. $newConfig = new stdClass();
  756. $this->dispresults = false;
  757. $newConfig->ldap_import_confirm = $this->forceconfirm = JRequest::getInt('ldap_import_confirm');
  758. $newConfig->ldap_generatename = $this->generatename = JRequest::getInt('ldap_generatename');
  759. $newConfig->ldap_overwriteexisting = $this->overwrite = JRequest::getInt('ldap_overwriteexisting');
  760. $newConfig->ldap_deletenotexists = $this->ldap_deletenotexists = JRequest::getInt('ldap_deletenotexists');
  761. if($this->ldap_deletenotexists){
  762. $subfields = array_keys(acymailing_getColumns('#__acymailing_subscriber'));
  763. if(!in_array('ldapentry',$subfields)){
  764. $db->setQuery("ALTER TABLE #__acymailing_subscriber ADD COLUMN ldapentry TINYINT UNSIGNED DEFAULT 0");
  765. $db->query();
  766. }else{
  767. $db->setQuery("UPDATE #__acymailing_subscriber SET ldapentry = 0");
  768. $db->query();
  769. }
  770. $this->overwrite = 1;
  771. }
  772. $newConfig->ldap_subfield = $this->ldap_subfield = JRequest::getString('ldap_subfield');
  773. if(!empty($this->ldap_subfield)){
  774. $allValues = JRequest::getVar('ldap_subcond');
  775. $allLists = JRequest::getVar('ldap_sublists');
  776. $this->ldap_subscribe = array();
  777. foreach($allValues as $i => $oneValue){
  778. $oneValue = strtolower(trim($oneValue));
  779. if(strlen($oneValue) <1) continue;
  780. if(isset($this->ldap_subscribe[$oneValue])){
  781. $this->ldap_subscribe[$oneValue] .= '-'.intval($allLists[$i]);
  782. }else{
  783. $this->ldap_subscribe[$oneValue] = intval($allLists[$i]);
  784. }
  785. $valcond = 'ldap_subcond_'.$i;
  786. $vallist = 'ldap_sublists_'.$i;
  787. $newConfig->$valcond = $allValues[$i];
  788. $newConfig->$vallist = $allLists[$i];
  789. }
  790. $db->setQuery("DELETE FROM #__acymailing_config WHERE namekey LIKE 'ldap_subcond%' OR namekey LIKE 'ldap_sublists%'");
  791. $db->query();
  792. }
  793. $this->ldap_equivalent = array();
  794. $this->ldap_selectedFields = array();
  795. foreach($ldapfields as $oneField => $acyField){
  796. if(empty($acyField)) continue;
  797. $configname = 'ldapfield_'.strtolower($oneField);
  798. $newConfig->$configname = $acyField;
  799. $this->ldap_equivalent[$acyField] = $oneField;
  800. $this->ldap_selectedFields[] = $oneField;
  801. }
  802. if(!empty($this->ldap_subfield) AND !in_array($this->ldap_subfield,$this->ldap_selectedFields)){
  803. $this->ldap_selectedFields[] = $this->ldap_subfield;
  804. }
  805. $config->save($newConfig);
  806. if(empty($this->ldap_equivalent['email'])){
  807. $app->enqueueMessage(JText::_('SPECIFYFIELDEMAIL'),'notice');
  808. return false;
  809. }
  810. $startChars = 'abcdefghijklmnopqrstuvwxyz0123456789_-+&.';
  811. $nbChars = strlen($startChars);
  812. $result = true;
  813. for($i = 0;$i<$nbChars;$i++){
  814. if(!$this->ldap_import($this->ldap_equivalent['email'].'='.$startChars[$i].'*@*')) $result = false;
  815. }
  816. $app->enqueueMessage(JText::sprintf('IMPORT_REPORT',$this->totalTry,$this->totalInserted,$this->totalTry - $this->totalValid,$this->totalValid - $this->totalInserted));
  817. if($this->ldap_deletenotexists){
  818. $db->setQuery("SELECT subid FROM #__acymailing_subscriber WHERE ldapentry = 0");
  819. $allSubids = acymailing_loadResultArray($db);
  820. $subscriberClass= acymailing_get('class.subscriber');
  821. $nbAffected = $subscriberClass->delete($allSubids);
  822. $app->enqueueMessage(JText::sprintf('IMPORT_DELETE',$nbAffected));
  823. $db->setQuery("ALTER TABLE #__acymailing_subscriber DROP COLUMN ldapentry");
  824. $db->query();
  825. }
  826. $this->_displaySubscribedResult();
  827. return $result;
  828. }
  829. function ldap_import($search){
  830. $searchResult = ldap_search($this->ldap_conn,$this->ldap_basedn,$search,$this->ldap_selectedFields);
  831. $app = JFactory::getApplication();
  832. if(!$searchResult){
  833. acymailing_display('Could not search for elements<br/>'.ldap_error($this->ldap_conn),'warning');
  834. return false;
  835. }
  836. $entries = ldap_get_entries($this->ldap_conn,$searchResult);
  837. if(empty($entries) || empty($entries['count'])) return true;
  838. $content = '"'.implode('","',array_keys($this->ldap_equivalent)).'"';
  839. if($this->ldap_deletenotexists) $content .= ',"ldapentry"';
  840. if(!empty($this->ldap_subfield)) $content .= ',"listids"';
  841. $content .= "\n";
  842. for($i=0;$i<$entries['count'];$i++){
  843. foreach($this->ldap_equivalent as $ldapField){
  844. $fieldVal = isset($entries[$i][$ldapField][0]) ? $entries[$i][$ldapField][0] : '';
  845. $content .= '"'.$fieldVal.'",';
  846. }
  847. if($this->ldap_deletenotexists) $content .= '"1",';
  848. if(!empty($this->ldap_subfield)){
  849. static $errorsLists = array();
  850. if(isset($entries[$i][$this->ldap_subfield][0])){
  851. $condvalue = strtolower(trim($entries[$i][$this->ldap_subfield][0]));
  852. if(isset($this->ldap_subscribe[$condvalue])){
  853. $content .= $this->ldap_subscribe[$condvalue].',';
  854. }else{
  855. if(!isset($errorsLists[$condvalue]) AND count($errorsLists) < 5){
  856. $errorsLists[$condvalue] = true;
  857. $app->enqueueMessage('Could not find a list for the value "'.$condvalue.'" of the field '.$this->ldap_subfield,'notice');
  858. }
  859. $content .= '"",';
  860. }
  861. }else{
  862. $content .= '"",';
  863. }
  864. }
  865. $content = rtrim($content,',');
  866. $content .= "\n";
  867. }
  868. return $this->_handleContent($content);
  869. }
  870. function ldap_init(){
  871. $config = acymailing_config();
  872. $newConfig = new stdClass();
  873. $newConfig->ldap_host = trim(JRequest::getString('ldap_host'));
  874. $newConfig->ldap_port = JRequest::getInt('ldap_port');
  875. if(empty($newConfig->ldap_port)) $newConfig->ldap_port = 389;
  876. $newConfig->ldap_basedn = trim(JRequest::getString('ldap_basedn'));
  877. $this->ldap_basedn = $newConfig->ldap_basedn;
  878. $newConfig->ldap_username = trim(JRequest::getString('ldap_username'));
  879. $newConfig->ldap_password = trim(JRequest::getString('ldap_password'));
  880. $config->save($newConfig);
  881. if(empty($newConfig->ldap_host)) return false;
  882. acymailing_displayErrors();
  883. $this->ldap_conn = ldap_connect($newConfig->ldap_host, $newConfig->ldap_port);
  884. if(!$this->ldap_conn){
  885. acymailing_display('Could not connect to LDAP server : '.$newConfig->ldap_host.':'.$newConfig->ldap_port,'warning');
  886. return false;
  887. }
  888. ldap_set_option($this->ldap_conn, LDAP_OPT_PROTOCOL_VERSION,3);
  889. ldap_set_option($this->ldap_conn, LDAP_OPT_REFERRALS,0);
  890. if(empty($newConfig->ldap_username)){
  891. $bindResult = ldap_bind($this->ldap_conn);
  892. }else{
  893. $bindResult = ldap_bind($this->ldap_conn,$newConfig->ldap_username,$newConfig->ldap_password);
  894. }
  895. if(!$bindResult){
  896. acymailing_display('Could not bind to the LDAP directory '.$newConfig->ldap_host.':'.$newConfig->ldap_port.' with specified username and password<br/>'.ldap_error($this->ldap_conn),'warning');
  897. return false;
  898. }
  899. acymailing_display('Successfully connected to '.$newConfig->ldap_host.':'.$newConfig->ldap_port,'success');
  900. return true;
  901. }
  902. function ldap_ajax(){
  903. if(!$this->ldap_init()) return;
  904. $config = acymailing_config();
  905. $searchResult = @ldap_search($this->ldap_conn,trim(JRequest::getString('ldap_basedn')),'mail=*@*',array(),0,5);
  906. if(!$searchResult){
  907. acymailing_display('Could not search for elements<br/>'.ldap_error($this->ldap_conn),'warning');
  908. return false;
  909. }
  910. $entries = ldap_get_entries($this->ldap_conn,$searchResult);
  911. $fields = array();
  912. $dropdown = array();
  913. $object = new stdClass();
  914. $object->text = ' - - - ';
  915. $object->value = 0;
  916. $dropdown[] = $object;
  917. foreach($entries as $oneEntry){
  918. if(!is_array($oneEntry)) continue;
  919. foreach($oneEntry as $field => $value){
  920. if(!is_numeric($field)) continue;
  921. $value = strtolower($value);
  922. if($value == 'objectclass') continue;
  923. $fields[$value] = $value;
  924. $object = new stdClass();
  925. $object->text = $value;
  926. $object->value = $value;
  927. $dropdown[$value] = $object;
  928. }
  929. }
  930. if(empty($fields)){
  931. acymailing_display('Could not load elements<br/>'.ldap_error($this->ldap_conn),'warning');
  932. return false;
  933. }
  934. $db = JFactory::getDBO();
  935. $subfields = acymailing_getColumns('#__acymailing_subscriber');
  936. $acyfields = array();
  937. $acyfields[] = JHTML::_('select.option', '',' - - - ');
  938. foreach($subfields as $oneField => $typefield){
  939. if(in_array($oneField,array('subid','confirmed','enabled','key','userid','accept','html','created'))) continue;
  940. $acyfields[] = JHTML::_('select.option', $oneField,$oneField);
  941. }
  942. echo '<table class="admintable" cellspacing="1">';
  943. foreach($fields as $oneField){
  944. echo '<tr><td class="key" >'.$oneField.'</td><td>'.JHTML::_('select.genericlist', $acyfields, 'ldapfield['.$oneField.']' , 'size="1"', 'value', 'text',$config->get('ldapfield_'.$oneField)).'</td></tr>';
  945. }
  946. echo '</table>';
  947. echo '<fieldset><legend>'.JText::_('SUBSCRIPTION').'</legend>';
  948. echo 'Subscribe the user based on the values of the field '.JHTML::_('select.genericlist',$dropdown,'ldap_subfield', 'size="1"', 'value', 'text',$config->get('ldap_subfield')).':';
  949. $listClass = acymailing_get('class.list');
  950. $lists = $listClass->getLists('listid');
  951. for($i=0;$i<5;$i++){
  952. echo '<br/>Subscribe to list '.JHTML::_('select.genericlist', $lists, 'ldap_sublists['.$i.']', 'class="inputbox" size="1" ', 'listid', 'name', (int) $config->get('ldap_sublists_'.$i)).' if the value is <input type="text" value="'.htmlspecialchars($config->get('ldap_subcond_'.$i),ENT_COMPAT, 'UTF-8').'" name="ldap_subcond['.$i.']" />';
  953. }
  954. echo '</fieldset>';
  955. }
  956. function zohocrm($action = ''){
  957. $app = JFactory::getApplication();
  958. $db = JFactory::getDBO();
  959. $zohoHelper = acymailing_get('helper.zoho');
  960. $listClass= acymailing_get('class.list');
  961. $subscriberClass = acymailing_get('class.subscriber');
  962. $tableInfos = array_keys(acymailing_getColumns('#__acymailing_subscriber'));
  963. $config =& acymailing_config();
  964. if(!in_array('zohoid',$tableInfos)){
  965. $query = 'ALTER TABLE #__acymailing_subscriber ADD COLUMN zohoid VARCHAR(255)';
  966. $db->setQuery($query);
  967. $db->query();
  968. }
  969. if(!in_array('zoholist',$tableInfos)){
  970. $query = 'ALTER TABLE #__acymailing_subscriber ADD COLUMN zoholist CHAR(1)';
  971. $db->setQuery($query);
  972. $db->query();
  973. }
  974. if($action == 'update'){
  975. $lists = unserialize($config->get('zoho_lists'));
  976. $zohoHelper->authtoken = $authtoken = $config->get('zoho_apikey');
  977. $fields = unserialize($config->get('zoho_fields'));
  978. $confirmedUsers = $config->get('zoho_confirmed');
  979. $delete = $config->get('zoho_delete');
  980. $importlists = array();
  981. }else{
  982. $lists = JRequest::getVar('zoho_lists');
  983. $fields = JRequest::getVar('zoho_fields');
  984. $zohoHelper->authtoken = $authtoken = JRequest::getVar('zoho_apikey');
  985. $importlists = JRequest::getVar('importlists');
  986. $overwrite = JRequest::getVar('zoho_overwrite');
  987. $confirmedUsers = JRequest::getVar('zoho_confirmed');
  988. $delete = JRequest::getVar('zoho_delete');
  989. $newConfig = new stdClass();
  990. $newConfig->zoho_fields = serialize($fields);
  991. $newConfig->zoho_lists = serialize($lists);
  992. $newConfig->zoho_apikey = $zohoHelper->authtoken;
  993. $newConfig->zoho_overwrite = $overwrite;
  994. $newConfig->zoho_confirmed = $confirmedUsers;
  995. $newConfig->zoho_delete = $delete;
  996. $config->save($newConfig);
  997. }
  998. if($config->get('zoho_overwrite',false)) $this->overwrite = true;
  999. if(empty($authtoken)){
  1000. $app->enqueueMessage('Pleaser enter a valid API key','notice');
  1001. return false;
  1002. }
  1003. $done = false;
  1004. foreach($lists as $list => $listid){
  1005. if(empty($listid)) continue;
  1006. $done = true;
  1007. $this->allSubid = array();
  1008. $res = $zohoHelper->sendInfo($list);
  1009. if(!empty($zohoHelper->conn)) $zohoHelper->close();
  1010. if($res != false) $zohoUsers = $zohoHelper->parseXML($res,$list,$fields,$confirmedUsers);
  1011. if (empty($zohoUsers)) continue;
  1012. $this->_insertUsers($zohoUsers);
  1013. $affectedUsers = $zohoHelper->subscribe($listid, $list);
  1014. if(empty($this->subscribedUsers[$listid])) $this->subscribedUsers[$listid] = $listClass->get($listid);
  1015. $this->subscribedUsers[$listid]->nbusers += $affectedUsers;
  1016. foreach($importlists as $importlistid => $selected)
  1017. if($selected == '1') $importUserInLists[] = $importlistid;
  1018. $this->_subscribeUsers();
  1019. if(JRequest::getInt('zoho_delete') == '1'){
  1020. $zohoHelper->deleteAddress($this->allSubid,$list);
  1021. }else{
  1022. $query = 'SELECT DISTINCT b.subid FROM #__acymailing_subscriber AS a JOIN #__acymailing_subscriber AS b ON a.zohoid = b.zohoid WHERE a.zohoid IS NOT NULL AND b.subid < a.subid';
  1023. $db->setQuery($query);
  1024. $result = acymailing_loadResultArray($db);
  1025. $subscriberClass->delete($result);
  1026. }
  1027. }
  1028. $this->_displaySubscribedResult();
  1029. if($don

Large files files are truncated, but you can click here to view the full file