99defined ('_JEXEC ' ) or die ( 'Restricted access ' );
1010
1111jimport ('joomla.plugin.plugin ' );
12+ require_once JPATH_ROOT . '/components/com_akeebasubs/helpers/email.php ' ;
13+ $ jlang = JFactory::getLanguage ();
14+
1215
1316class AkeebasubsApiResourceSubscription extends ApiResource
1417{
15-
18+
1619 private $ vars = array (
1720 'firstrun ' =>'BOOLEAN ' ,
1821 'slug ' =>'STRING ' ,
@@ -40,9 +43,9 @@ class AkeebasubsApiResourceSubscription extends ApiResource
4043 'subcustom ' =>'RAW ' ,
4144 'opt ' =>'STRING '
4245 );
43-
46+
4447 public function post () {
45-
48+
4649 $ input = JFactory::getApplication ()->input ;
4750 $ user = $ this ->plugin ->getUser ();
4851
@@ -55,24 +58,24 @@ public function post() {
5558 $ override_users = $ this ->getOverrideUsers ();
5659 $ is_override = in_array ($ user ->id , array_keys ($ override_users ));
5760 $ allowed = $ authorised || $ is_override ;
58-
61+
5962 if (!$ allowed ) {
6063 $ this ->plugin ->setResponse ( $ this ->getErrorResponse (404 , JText::_ ('JERROR_ALERTNOAUTHOR ' )) );
6164 return ;
6265 }
63-
66+
6467 // Check/create user
6568 $ newuser ['name ' ] = $ input ->get ('name ' , '' , 'STRING ' );
6669 $ newuser ['email ' ] = $ input ->get ('email ' , '' , 'USERNAME ' );
6770 $ newuser ['username ' ] = $ newuser ['email ' ];
68-
71+
6972 $ subscriber_userid = $ this ->getSubscriberUserid ($ newuser );
7073 if (!$ subscriber_userid )
7174 {
7275 $ this ->plugin ->setResponse ( $ this ->getErrorResponse (404 , 'Problem creating user. Name and email are mandatory. Make sure you use a valid email ' ) );
7376 return ;
7477 }
75-
78+
7679 // Create subscription
7780 $ levelid = $ input ->get ('subscription ' , '' , 'INT ' );
7881 $ enabled = $ input ->get ('enabled ' , 0 , 'INT ' );
@@ -140,9 +143,9 @@ public function post() {
140143 $ mStartDate = $ jStartDate ->toSql ();
141144 $ jEndDate = new JDate ($ endDate );
142145 $ mEndDate = $ jEndDate ->toSql ();
143-
146+
144147 $ note = 'Subscription created via API. ' .PHP_EOL .'API User : %1$s ' .PHP_EOL .'API Userid : %2$s ' .PHP_EOL .'Subscriber Name : %3$s ' .PHP_EOL .'Subscriber Email : %4$s ' .PHP_EOL .'Date : %5$s ' .PHP_EOL .'Level id : %6$s ' ;
145-
148+
146149 $ subscription = FOFTable::getInstance ('Subscription ' , 'AkeebasubsTable ' );
147150 $ subscription ->user_id = (int ) $ subscriber_userid ;
148151 $ subscription ->akeebasubs_level_id = $ levelid ;
@@ -153,10 +156,13 @@ public function post() {
153156 $ subscription ->publish_up = $ mStartDate ;
154157 $ subscription ->publish_down = $ mEndDate ;
155158 $ subscription ->notes = sprintf ($ note , $ user ->name , $ user ->id , $ newuser ['name ' ], $ newuser ['email ' ], date ('Y-m-d H:i:s ' ), $ levelid );
156-
157- //$this->plugin->setResponse( $subscription ); return;
158-
159+
159160 if ($ subscription ->store ()) {
161+ // Send email
162+ //$mailer = AkeebasubsHelperEmail::getPreloadedMailer($subscription, 'plg_akeebasubs_subscriptionemails_new_active');
163+ //$mailer->addRecipient($newuser['email']);
164+ //$send = $mailer->Send();
165+
160166 $ this ->plugin ->setResponse ( array ('code ' => 200 , 'id ' => $ subscription ->akeebasubs_subscription_id ) );
161167 } else {
162168 $ this ->plugin ->setResponse ( $ this ->getErrorResponse (404 , 'There was a problem creating the subscription. Make sure you use a valid level id. Name and email are mandatory. ' ) );
@@ -167,48 +173,95 @@ public function get()
167173 {
168174 $ this ->plugin ->setResponse ();
169175 }
170-
176+
171177 private function getOverrideUsers () {
172178 $ plugin = JPluginHelper::getPlugin ('api ' , 'akeebasubs ' );
173179 $ params = new JRegistry ($ plugin ->params );
174-
180+
175181 $ users = explode ("\n" , $ params ->get ('override_create ' ));
176-
182+
177183 foreach ($ users as $ user ) {
178184 $ pcs = explode (': ' , $ user );
179185 $ uid = (int ) $ pcs [0 ];
180-
186+
181187 $ slugs = explode (', ' , $ pcs [1 ]);
182188 $ trimmed_slugs = array_map ('trim ' , $ slugs );
183189 $ override_users [$ uid ] = $ trimmed_slugs ;
184190 }
185191
186192 return $ override_users ;
187193 }
188-
194+
189195 private function getSubscriberUserid ($ newuser ) {
190-
196+
191197 $ db = JFactory::getDBO ();
198+ $ config = JFactory::getConfig ();
199+ $ jlang = JFactory::getLanguage ();
200+ $ jlang ->load ('com_users ' , JPATH_SITE , 'en-GB ' , true ); // Load English (British)
201+ $ jlang ->load ('com_users ' , JPATH_SITE , $ jlang ->getDefault (), true ); // Load the site's default language
202+ $ jlang ->load ('com_users ' , JPATH_SITE , null , true ); // Load the currently selected language
203+
192204 $ query = $ db ->getQuery (true );
193205 $ query ->select ('id ' );
194206 $ query ->from ('#__users ' );
195207 $ query ->where ('email = ' . $ db ->Quote ($ newuser ['email ' ]));
196208 $ db ->setQuery ($ query );
197-
209+
198210 if ($ uid = $ db ->loadResult ()) {
199211 return $ uid ;
200212 } else {
201- $ akeeba_user = FOFModel::getTmpInstance ('Jusers ' , 'AkeebasubsModel ' );
202- $ uid = $ akeeba_user ->createNewUser ($ newuser );
203-
213+ $ uid = 0 ;
214+ $ password_clear = JUserHelper::genRandomPassword ();
215+ $ salt = JUserHelper::genRandomPassword (32 );
216+ $ crypt = JUserHelper::getCryptedPassword ($ password_clear , $ salt );
217+ $ defaultUserGroup = 2 ;
218+
219+ $ password = "$ crypt: $ salt " ;
220+ $ instance = JUser::getInstance ();
221+ $ instance ->set ('id ' , 0 );
222+ $ instance ->set ('name ' , $ newuser ['name ' ]);
223+ $ instance ->set ('username ' , $ newuser ['email ' ]);
224+ $ instance ->set ('password ' , $ password );
225+ $ instance ->set ('password_clear ' , $ password_clear );
226+ $ instance ->set ('email ' , $ newuser ['email ' ]);
227+ $ instance ->set ('usertype ' , 'deprecated ' );
228+ $ instance ->set ('groups ' , array ($ defaultUserGroup ));
229+ // Here is possible set user profile details
230+ if ($ instance ->save ()) {
231+ $ uid = $ instance ->id ;
232+ }
233+
234+ $ data ['fromname ' ] = $ config ->get ('fromname ' );
235+ $ data ['mailfrom ' ] = $ config ->get ('mailfrom ' );
236+ $ data ['sitename ' ] = $ config ->get ('sitename ' );
237+ $ data ['siteurl ' ] = JUri::root ();
238+
239+ $ data = array_merge ($ newuser , $ data );
240+ $ emailSubject = JText::sprintf (
241+ 'COM_USERS_EMAIL_ACCOUNT_DETAILS ' ,
242+ $ data ['name ' ],
243+ $ data ['sitename ' ]
244+ );
245+
246+ $ emailBody = JText::sprintf (
247+ 'COM_USERS_EMAIL_REGISTERED_BODY ' ,
248+ $ data ['name ' ],
249+ $ data ['sitename ' ],
250+ $ data ['siteurl ' ],
251+ $ data ['username ' ],
252+ $ password_clear
253+ );
254+
255+ $ return = JFactory::getMailer ()->sendMail ($ data ['mailfrom ' ], $ data ['fromname ' ], $ data ['email ' ], $ emailSubject , $ emailBody );
256+
204257 if ($ uid ) {
205258 return $ uid ;
206259 } else {
207260 return false ;
208261 }
209262 }
210263 }
211-
264+
212265 private function checkLevel ($ level ) {
213266 $ akeeba_level = FOFModel::getTmpInstance ('Levels ' ,'AkeebasubsModel ' )
214267 ->only_once (1 )
0 commit comments