42 public function accessRules()
47 'roles' => array(
'Admin')
63 $logRouter = Yii::app()->getComponent(
'log');
64 Yii::getLogger()->detachEventHandler(
'onFlush', array($logRouter,
'collectLogs'));
65 Yii::app()->detachEventHandler(
'onEndRequest', array($logRouter,
'processLogs'));
79 $usersQty =
User::model()->count(
'is_bulk = :is_bulk', array(
':is_bulk' =>
true));
81 $likesQty = Yii::app()->db->createCommand()
84 ->join(
User::model()->tableName() .
' as u',
'u.id = user_id')
85 ->where(
'is_bulk = :is_bulk', array(
':is_bulk' =>
true))
88 $commentsQty = Yii::app()->db->createCommand()
91 ->join(
User::model()->tableName() .
' as u',
'u.id = user_id')
92 ->where(
'is_bulk = :is_bulk', array(
':is_bulk' =>
true))
95 if (isset($_POST[
'GenerationForm'])) {
96 $model->attributes = $_POST[
'GenerationForm'];
97 if ($model->validate()) {
98 $this->redirect(
'/bulk/bulk/generate?' . http_build_query($_POST));
102 $this->render(
'index', array(
'model' => $model,
'usersQty' => $usersQty,
'likesQty' => $likesQty,
'commentsQty' => $commentsQty));
112 if (isset($_GET[
'GenerationForm'])) {
114 $model->attributes = $_GET[
'GenerationForm'];
116 $start = microtime(
true);
118 if (!empty($model->usersQty)) {
119 $usersCreated = $this->_generateUsers($model->usersQty);
123 if (!empty($model->likesQty)) {
124 if (($likesCreated = $this->_generateLikes($model->likesQty, $model->likesContentId)) ===
false) {
125 Yii::app()->user->setFlash(
'error',
BulkModule::t(
'There is no bulk users(free bulk users)! Cant create likes'));
129 $commentsCreated = 0;
130 if (!empty($model->commentsQty)) {
131 if (($commentsCreated = $this->_generateComments($model->commentsQty, $model->commentsContentId, $model->commentsForEach)) ===
false) {
132 Yii::app()->user->setFlash(
'error',
BulkModule::t(
'There is no bulk users! Cant create comments'));
136 $totalTime = round(microtime(
true) - $start, 4);
138 'bulk.views.bulk.generate',
139 array(
'usersCreated' => $usersCreated,
'likesCreated' => $likesCreated,
'commentsCreated' => $commentsCreated,
'time' => $totalTime)
142 $this->redirect(
'index');
153 private function _generateUsers($qty)
156 $db = Yii::app()->db->beginTransaction();
158 $faker =
new Faker();
159 $locale = include Yii::getPathOfAlias(
'system') .
'/i18n/data/en.php';
160 $countries = array_values($locale[
'territories']);
163 for ($i = 1; $i <= $qty; $i++) {
165 $user->is_bulk =
true;
166 $user->activkey = md5(
'user' . $i .
'_' . $stamp);
167 $user->attributes = array(
168 'username' =>
'user' . $i .
'_' . $stamp,
169 'password' => md5(
'user' . $i .
'_' . $stamp),
170 'email' =>
'user' . $i .
'_' . $stamp .
'@example.com',
174 $firstname = $faker->Name->prefix() . $faker->Name->first_name();
175 $lastname = $faker->Name->surname() .
' ' . $faker->Name->suffix();
177 $profile->setIsNewRecord(
true);
178 $profile->regMode =
true;
179 $profile->user_id = $user->id;
183 $pos = strpos($field->range,
'-');
184 if ($pos !==
false) {
185 $tag = substr($field->range, 0, $pos);
188 $field->range = substr($field->range, $pos + 1);
191 $field->range = substr($field->range, $pos + 1);
194 $field->range = substr($field->range, $pos + 1);
200 $value = array_rand(Profile::range($field->range));
201 } elseif ($field->field_type ==
'VARCHAR') {
202 $value = $this->_randStr(rand($field->field_size_min, $field->field_size));
203 } elseif ($field->field_type ==
'DATE') {
204 $value = date(
'Y-m-d', $stamp - 20 * 368 * 24 * 60 * 60);
206 $value = rand($field->field_size_min, $field->field_size);
208 $profile->{$field->varname} = $value;
211 $profile->attributes = array(
212 'firstname' => $firstname,
213 'lastname' => $lastname,
215 if ($profile->save()) {
238 private function _generateLikes($qty, $contentId = 0)
241 $bulkUsers = Yii::app()->db->createCommand()
246 'is_bulk = :is_bulk and id not in ( SELECT user_id from {{likes}} where content_id=:content_id)',
247 array(
':content_id' => $contentId,
':is_bulk' =>
true)
250 $bulkUsers->where(
'is_bulk = :is_bulk', array(
':is_bulk' =>
true));
252 $bulkUsers = $bulkUsers->queryAll();
253 if (!empty($bulkUsers)) {
254 $userIds = array_map(
262 $transaction = Yii::app()->db->beginTransaction();
265 $userCount = count($userIds);
266 for ($i = 0; $i < $qty; $i++) {
267 if (!empty($contentId) && $i >= $userCount) {
271 $like->setIsNewRecord(
true);
272 $like->user_id = $userIds[$i % $userCount];
273 $like->content_id = empty($contentId) ? uniqid(
'',
true) : $contentId;
274 $like->createdate = date(
'Y-m-d H:i:s');
279 $transaction->commit();
295 private function _generateComments($qty, $contentId = 0, $forEachUser =
false)
297 if ($users = $this->_getBulkUsers()) {
299 $userCount = count($users);
300 $faker =
new Faker();
302 foreach ($users as $u) {
303 for ($i = 0; $i < $qty; $i++) {
305 $comment->setIsNewRecord(
true);
306 $comment->content_id = empty($contentId) ? uniqid(
'',
true) : $contentId;
307 $comment->user_id = $u[
'id'];
308 $comment->email = $u[
'email'];
309 $comment->subject = $faker->Lorem->sentence(1);
310 $comment->description = $faker->Lorem->sentence(20);
311 $comment->language =
'en';
312 $comment->status = Comment::APPROVED;
313 $comment->notify_moderator =
true;
314 $comment->notify_user =
true;
315 if ($comment->save()) {
321 for ($i = 0; $i < $qty; $i++) {
323 $comment->setIsNewRecord(
true);
324 $comment->content_id = empty($contentId) ? uniqid(
'',
true) : $contentId;
325 $comment->user_id = $users[$i % $userCount][
'id'];
326 $comment->email = $users[$i % $userCount][
'email'];
327 $comment->subject = $faker->Lorem->sentence(1);
328 $comment->description = $faker->Lorem->sentence(20);
329 $comment->language =
'en';
330 $comment->status = Comment::APPROVED;
331 $comment->notify_moderator =
true;
332 $comment->notify_user =
true;
333 if ($comment->save()) {
349 private function _getBulkUsersIds()
351 $bulkUsers = Yii::app()->db->createCommand()
354 ->where(
'is_bulk = :is_bulk', array(
':is_bulk' =>
true))
356 if (!empty($bulkUsers)) {
357 $userIds = array_map(
372 private function _getBulkUsers()
374 $bulkUsers = Yii::app()->db->createCommand()
375 ->select(
'id, email')
377 ->where(
'is_bulk = :is_bulk', array(
':is_bulk' =>
true))
380 if (!empty($bulkUsers)) {
382 $usersData = array();
383 foreach ($bulkUsers as $user) {
384 $usersData[] = array(
'id' => $user[0],
'email' => $user[1]);
399 public function actionClear($type)
405 if ($userIds = $this->_getBulkUsersIds()) {
406 $userIdsStr = implode(
',', $userIds);
407 if ($type ==
'all') {
408 $likesQty = Yii::app()->db->createCommand()->delete(
Like::model()->tableName(),
"user_id in ($userIdsStr)");
409 $commentsQty = Yii::app()->db->createCommand()->delete(
Comment::model()->tableName(),
"user_id in ($userIdsStr)");
410 Yii::app()->db->createCommand()->delete(
Profile::model()->tableName(),
"user_id in ($userIdsStr)");
411 $usersQty = Yii::app()->db->createCommand()->delete(
User::model()->tableName(),
"is_bulk = :is_bulk", array(
':is_bulk' =>
true));
412 } elseif ($type ==
'likes') {
413 $likesQty = Yii::app()->db->createCommand()->delete(
Like::model()->tableName(),
"user_id in ($userIdsStr)");
414 } elseif ($type ==
'comments') {
415 $commentsQty = Yii::app()->db->createCommand()->delete(
Comment::model()->tableName(),
"user_id in ($userIdsStr)");
419 $this->render(
'bulk.views.bulk.clear', array(
'usersQty' => $usersQty,
'likesQty' => $likesQty,
'commentsQty' => $commentsQty));
430 private function _randStr($length = 0)
432 $characters =
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
434 for ($i = 0; $i < $length; $i++) {
435 $randomString .= $characters[rand(0, strlen($characters) - 1)];
437 return $randomString;