/**
  * Save changes to the galley.
  * @return int the galley ID
  */
 function execute($fileName = null)
 {
     import('classes.file.IssueFileManager');
     $issueFileManager = new IssueFileManager($this->getIssueId());
     $galleyDao =& DAORegistry::getDAO('IssueGalleyDAO');
     $fileName = isset($fileName) ? $fileName : 'galleyFile';
     $journal =& Request::getJournal();
     $galley =& $this->getGalley();
     // Update an existing galley
     if ($galley) {
         if ($issueFileManager->uploadedFileExists($fileName)) {
             // Galley has a file, delete it before uploading new one
             if ($galley->getFileId()) {
                 $issueFileManager->deleteFile($galley->getFileId());
             }
             // Upload new file
             $fileId = $issueFileManager->uploadPublicFile($fileName);
             $galley->setFileId($fileId);
         }
         $galley->setLabel($this->getData('label'));
         if ($journal->getSetting('enablePublicGalleyId')) {
             $galley->setPublicGalleyId($this->getData('publicGalleyId'));
         }
         $galley->setLocale($this->getData('galleyLocale'));
         // Update galley in the db
         $galleyDao->updateGalley($galley);
     } else {
         // Create a new galley
         // Upload galley file
         if ($issueFileManager->uploadedFileExists($fileName)) {
             $fileType = $issueFileManager->getUploadedFileType($fileName);
             $fileId = $issueFileManager->uploadPublicFile($fileName);
         } else {
             // No galley file uploaded
             $fileId = 0;
         }
         $galley = new IssueGalley();
         $galley->setIssueId($this->getIssueId());
         $galley->setFileId($fileId);
         if ($this->getData('label') == null) {
             // Generate initial label based on file type
             $enablePublicGalleyId = $journal->getSetting('enablePublicGalleyId');
             if (isset($fileType)) {
                 if (strstr($fileType, 'pdf')) {
                     $galley->setLabel('PDF');
                     if ($enablePublicGalleyId) {
                         $galley->setPublicGalleyId('pdf');
                     }
                 } else {
                     if (strstr($fileType, 'postscript')) {
                         $galley->setLabel('PostScript');
                         if ($enablePublicGalleyId) {
                             $galley->setPublicGalleyId('ps');
                         }
                     } else {
                         if (strstr($fileType, 'xml')) {
                             $galley->setLabel('XML');
                             if ($enablePublicGalleyId) {
                                 $galley->setPublicGalleyId('xml');
                             }
                         }
                     }
                 }
             }
             if ($galley->getLabel() == null) {
                 $galley->setLabel(Locale::translate('common.untitled'));
             }
         } else {
             $galley->setLabel($this->getData('label'));
         }
         $galley->setLocale($this->getData('galleyLocale'));
         if ($enablePublicGalleyId) {
             // Ensure the assigned public id doesn't already exist
             $publicGalleyId = $galley->getPublicGalleyId();
             $suffix = '';
             $i = 1;
             while ($galleyDao->publicGalleyIdExists($publicGalleyId . $suffix, 0, $galley->getIssueId())) {
                 $suffix = '_' . $i++;
             }
             $galley->setPublicGalleyId($publicGalleyId . $suffix);
         }
         // Insert new galley into the db
         $galleyDao->insertGalley($galley);
         $this->setGalley($galley);
     }
     return $this->getGalleyId();
 }