/**
  * @covers \Pressbooks\Utility\scandir_by_date
  */
 public function test_scandir_by_date()
 {
     $files = \Pressbooks\Utility\scandir_by_date(__DIR__);
     $this->assertTrue(is_array($files));
     $this->assertContains(basename(__FILE__), $files);
     $this->assertNotContains('.htaccess', $files);
 }
 /**
  * Create $this->outputPath
  *
  * @return bool
  */
 function convert()
 {
     // Get most recent Epub file
     $input_folder = static::getExportFolder();
     $input_path = false;
     $files = \Pressbooks\Utility\scandir_by_date($input_folder);
     foreach ($files as $file) {
         if (preg_match('/\\.epub/i', $file)) {
             $input_path = $input_folder . $file;
             break;
         }
     }
     if (!$input_path) {
         $this->logError("Could not convert to MOBI because no EPUB file was found in {$input_folder}");
         return false;
     }
     // Convert
     $filename = $this->timestampedFileName('.mobi');
     $this->outputPath = $filename;
     $command = PB_KINDLEGEN_COMMAND . ' ' . escapeshellcmd($input_path) . ' -locale en -o ' . escapeshellcmd(basename($this->outputPath)) . ' 2>&1';
     $output = array();
     $return_var = 0;
     exec($command, $output, $return_var);
     // Check build results
     $last_line = array_filter($output);
     $last_line = strtolower(end($last_line));
     if (false !== strpos($last_line, 'mobi file built successfully')) {
         // Ok!
         return true;
     } elseif (false !== strpos($last_line, 'mobi file built with warnings')) {
         // Built, but has warnings
         $this->hasWarnings = true;
         $this->logError(implode("\n", $output));
         return true;
     } else {
         // Error
         $this->logError(implode("\n", $output));
         return false;
     }
 }
/**
 * Scan the export directory, return latest of each file type
 * 
 * @return array 
 */
function latest_exports()
{
    $suffix = array('._3.epub', '.epub', '.pdf', '.mobi', '.hpub', '.icml', '.html', '.xml', '._vanilla.xml', '._oss.pdf', '.odt');
    $dir = \Pressbooks\Modules\Export\Export::getExportFolder();
    $files = array();
    // group by extension, sort by date newest first
    foreach (\Pressbooks\Utility\scandir_by_date($dir) as $file) {
        // only interested in the part of filename starting with the timestamp
        preg_match('/-\\d{10,11}(.*)/', $file, $matches);
        // grab the first captured parenthisized subpattern
        $ext = $matches[1];
        $files[$ext][] = $file;
    }
    // get only one of the latest of each type
    $latest = array();
    foreach ($suffix as $value) {
        if (array_key_exists($value, $files)) {
            $latest[$value] = $files[$value][0];
        }
    }
    // @TODO filter these results against user prefs
    return $latest;
}