get('database'); $db = new Core\Database\QueryBuilder( new PDO( "{$config['connection']};charset=utf8", $config['username'], $config['password'], $config['options'] ) ); $schema = file_get_contents('schema.sql'); $sql = $db->prepare($schema); $sql->execute(); $faker = Faker\Factory::create(); $rows = []; $holders = []; $usernames = []; for ($i = 0; $i < NUM_OF_USERS; $i += 1) { array_push($usernames, $faker->unique()->userName); } for ($i = 0; $i < NUM_OF_USERS; $i += 1) { array_push( $rows, $usernames[$i], $faker->unique()->freeEmail, password_hash(USER_PASSWORD, PASSWORD_DEFAULT) ); array_push($holders, '(NULL,?,?,?)'); } $sql = $db->prepare('INSERT INTO users VALUES ' . implode(', ', $holders)); $sql->execute($rows); $rows = []; $holders = []; $datetimes = []; $from = NUM_OF_POSTS + 3; for ($i = 0; $i < NUM_OF_POSTS; $i += 1) { array_push( $datetimes, $faker->unique() ->dateTimeBetween("-{$from} days", '-3 days') ->format('Y-m-d H:i:s') ); } sort($datetimes); $mh = curl_multi_init(); for ($i = 0; $i < NUM_OF_POSTS; $i += 1) { $fetchURL = 'https://jaspervdj.be/lorem-markdownum/markdown.txt'; $multiCurl[$i] = curl_init(); curl_setopt($multiCurl[$i], CURLOPT_URL, $fetchURL); curl_setopt($multiCurl[$i], CURLOPT_HEADER, 0); curl_setopt($multiCurl[$i], CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle($mh, $multiCurl[$i]); } $index = null; do { curl_multi_exec($mh, $index); } while ($index > 0); for ($i = 0; $i < NUM_OF_POSTS; $i += 1) { $r = $faker->numberBetween(0, 9); array_push( $rows, implode(' ', array_slice(explode(' ', $faker->unique()->realText()), 0, 6)), curl_multi_getcontent($multiCurl[$i]), $usernames[$r], $datetimes[$i], $datetimes[$i] ); array_push($holders, '(NULL,?,?,?,?,?)'); curl_multi_remove_handle($mh, $multiCurl[$i]); } curl_multi_close($mh); $sql = $db->prepare('INSERT INTO posts VALUES ' . implode(', ', $holders)); $sql->execute($rows); $rows = []; $holders = []; $cdatetimes = []; $cposts = []; for ($i = 0; $i < NUM_OF_COMMENTS; $i += 1) { $p = $faker->numberBetween(0, NUM_OF_POSTS - 1); $d = $faker->numberBetween(0, 1); $h = $faker->numberBetween(0, 23); $m = $faker->numberBetween(0, 59); $s = $faker->numberBetween(0, 59); array_push( $cdatetimes, date_create_from_format('Y-m-d H:i:s', $datetimes[$p]) ->add(new DateInterval("P{$d}DT{$h}H{$m}M{$s}S")) ->format('Y-m-d H:i:s') ); array_push($cposts, $p + 1); } array_multisort($cdatetimes, $cposts); for ($i = 0; $i < NUM_OF_COMMENTS; $i += 1) { $r = $faker->numberBetween(0, NUM_OF_USERS - 1); array_push( $rows, $faker->unique()->realText(100, 1), $usernames[$r], $cdatetimes[$i], $cdatetimes[$i], $cposts[$i] ); array_push($holders, '(NULL,?,?,?,?,?)'); } $sql = $db->prepare('INSERT INTO comments VALUES ' . implode(', ', $holders)); $sql->execute($rows); $rows = []; $holders = []; $tags = array_values(array_unique($faker->words(NUM_OF_TAGS_CANDIDATE))); $num_of_tags = count($tags); for ($i = 0; $i < $num_of_tags; $i += 1) { array_push($rows, null, $tags[$i]); array_push($holders, '(?,?)'); } $sql = $db->prepare('INSERT INTO tags VALUES ' . implode(', ', $holders)); $sql->execute($rows); $rows = []; $holders = []; $links = []; for ($i = 0; $i < 4 * NUM_OF_POSTS; $i += 1) { $p = $faker->numberBetween(1, NUM_OF_POSTS); $t = $faker->numberBetween(1, $num_of_tags); array_push($links, [$p, $t]); } $rows = array_values(array_unique($links, SORT_REGULAR)); sort($rows); for ($i = 0; $i < count($rows); $i += 1) { array_push($holders, '(?,?)'); } $sql = $db->prepare('INSERT INTO post_tag VALUES ' . implode(', ', $holders)); $sql->execute(call_user_func_array('array_merge', $rows)); echo "Done!\n";