/** * Import images and other media file for products * * @return string */ public function generate() { $objTree = new \FileTree(\FileTree::getAttributesFromDca($GLOBALS['TL_DCA']['tl_iso_product']['fields']['source'], 'source', null, 'source', 'tl_iso_product')); // Import assets if (\Input::post('FORM_SUBMIT') == 'tl_iso_product_import' && \Input::post('source') != '') { $objFolder = \FilesModel::findByUuid(\StringUtil::uuidToBin(\Input::post('source'))); if (null !== $objFolder) { $this->importFromPath($objFolder->path); } } // Return form return ' <div id="tl_buttons"> <a href="' . ampersand(str_replace('&key=import', '', \Environment::get('request'))) . '" class="header_back" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['backBT']) . '">' . $GLOBALS['TL_LANG']['MSC']['backBT'] . '</a> </div> <h2 class="sub_headline">' . $GLOBALS['TL_LANG']['tl_iso_product']['import'][1] . '</h2> <div class="tl_message"><div class="tl_info">' . $GLOBALS['TL_LANG']['tl_iso_product']['importAssetsDescr'] . '</div></div> ' . \Message::generate() . ' <form action="' . ampersand(\Environment::get('request'), true) . '" id="tl_iso_product_import" class="tl_form" method="post"> <div class="tl_formbody_edit iso_importassets"> <input type="hidden" name="FORM_SUBMIT" value="tl_iso_product_import"> <input type="hidden" name="REQUEST_TOKEN" value="' . REQUEST_TOKEN . '"> <div class="tl_tbox block"> <h3><label for="source">' . $GLOBALS['TL_LANG']['tl_iso_product']['source'][0] . '</label></h3> ' . $objTree->generate() . (strlen($GLOBALS['TL_LANG']['tl_iso_product']['source'][1]) ? ' <p class="tl_help">' . $GLOBALS['TL_LANG']['tl_iso_product']['source'][1] . '</p>' : '') . ' </div> </div> <div class="tl_formbody_submit"> <div class="tl_submit_container"> <input type="submit" name="save" id="save" class="tl_submit" alt="import product assets" accesskey="s" value="' . specialchars($GLOBALS['TL_LANG']['tl_iso_product']['import'][0]) . '"> </div> </div> </form>'; }
/** * Import images and other media file for products * @param object * @param array * @return string */ public function importAssets($dc, $arrNewImages = array()) { $objTree = new FileTree($this->prepareForWidget($GLOBALS['TL_DCA']['tl_iso_products']['fields']['source'], 'source', null, 'source', 'tl_iso_products')); // Import assets if ($this->Input->post('FORM_SUBMIT') == 'tl_iso_products_import' && $this->Input->post('source') != '') { $this->import('Files'); $strPath = $this->Input->post('source'); $arrFiles = scan(TL_ROOT . '/' . $strPath); if (!count($arrFiles)) { $_SESSION['TL_ERROR'][] = $GLOBALS['ISO_LANG']['MSC']['noFilesInFolder']; $this->reload(); } $arrDelete = array(); $objProducts = $this->Database->prepare("SELECT * FROM tl_iso_products WHERE pid=0")->execute(); while ($objProducts->next()) { $arrImageNames = array(); $arrImages = deserialize($objProducts->images); if (!is_array($arrImages)) { $arrImages = array(); } else { foreach ($arrImages as $row) { if ($row['src']) { $arrImageNames[] = $row['src']; } } } $arrPattern = array(); $arrPattern[] = $objProducts->alias ? standardize($objProducts->alias, true) : null; $arrPattern[] = $objProducts->sku ? $objProducts->sku : null; $arrPattern[] = $objProducts->sku ? standardize($objProducts->sku, true) : null; $arrPattern[] = count($arrImageNames) ? implode('|', $arrImageNames) : null; // HOOK: add custom import regex patterns if (isset($GLOBALS['ISO_HOOKS']['addAssetImportRegexp']) && is_array($GLOBALS['ISO_HOOKS']['addAssetImportRegexp'])) { foreach ($GLOBALS['ISO_HOOKS']['addAssetImportRegexp'] as $callback) { $this->import($callback[0]); $arrPattern = $this->{$callback}[0]->{$callback}[1]($arrPattern, $objProducts); } } $strPattern = '@^(' . implode('|', array_filter($arrPattern)) . ')@i'; $arrMatches = preg_grep($strPattern, $arrFiles); if (count($arrMatches)) { $arrNewImages = array(); foreach ($arrMatches as $file) { if (is_dir(TL_ROOT . '/' . $strPath . '/' . $file)) { $arrSubfiles = scan(TL_ROOT . '/' . $strPath . '/' . $file); if (count($arrSubfiles)) { foreach ($arrSubfiles as $subfile) { if (is_file($strPath . '/' . $file . '/' . $subfile)) { $objFile = new File($strPath . '/' . $file . '/' . $subfile); if ($objFile->isGdImage) { $arrNewImages[] = $strPath . '/' . $file . '/' . $subfile; } } } } } elseif (is_file(TL_ROOT . '/' . $strPath . '/' . $file)) { $objFile = new File($strPath . '/' . $file); if ($objFile->isGdImage) { $arrNewImages[] = $strPath . '/' . $file; } } } if (count($arrNewImages)) { foreach ($arrNewImages as $strFile) { $pathinfo = pathinfo(TL_ROOT . '/' . $strFile); // Make sure directory exists $this->Files->mkdir('isotope/' . substr($pathinfo['filename'], 0, 1) . '/'); $strCacheName = $pathinfo['filename'] . '-' . substr(md5_file(TL_ROOT . '/' . $strFile), 0, 8) . '.' . $pathinfo['extension']; $this->Files->copy($strFile, 'isotope/' . substr($pathinfo['filename'], 0, 1) . '/' . $strCacheName); $arrImages[] = array('src' => $strCacheName); $arrDelete[] = $strFile; $_SESSION['TL_CONFIRM'][] = sprintf('Imported file %s for product "%s"', $pathinfo['filename'] . '.' . $pathinfo['extension'], $objProducts->name); } $this->Database->prepare("UPDATE tl_iso_products SET images=? WHERE id=?")->execute(serialize($arrImages), $objProducts->id); } } } if (count($arrDelete)) { $arrDelete = array_unique($arrDelete); foreach ($arrDelete as $file) { $this->Files->delete($file); } } $this->reload(); } // Return form return ' <div id="tl_buttons"> <a href="' . ampersand(str_replace('&key=import', '', $this->Environment->request)) . '" class="header_back" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['backBT']) . '">' . $GLOBALS['TL_LANG']['MSC']['backBT'] . '</a> </div> <h2 class="sub_headline">' . $GLOBALS['TL_LANG']['tl_iso_products']['import'][1] . '</h2>' . $this->getMessages() . ' <form action="' . ampersand($this->Environment->request, true) . '" id="tl_iso_products_import" class="tl_form" method="post"> <div class="tl_formbody_edit"> <input type="hidden" name="FORM_SUBMIT" value="tl_iso_products_import"> <input type="hidden" name="REQUEST_TOKEN" value="' . REQUEST_TOKEN . '"> <div class="tl_tbox block"> <h3><label for="source">' . $GLOBALS['TL_LANG']['tl_iso_products']['source'][0] . '</label> <a href="typolight/files.php" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['fileManager']) . '" onclick="Backend.getScrollOffset(); this.blur(); Backend.openWindow(this, 750, 500); return false;">' . $this->generateImage('filemanager.gif', $GLOBALS['TL_LANG']['MSC']['fileManager'], 'style="vertical-align:text-bottom;"') . '</a></h3> ' . $objTree->generate() . (strlen($GLOBALS['TL_LANG']['tl_iso_products']['source'][1]) ? ' <p class="tl_help">' . $GLOBALS['TL_LANG']['tl_iso_products']['source'][1] . '</p>' : '') . ' </div> </div> <div class="tl_formbody_submit"> <div class="tl_submit_container"> <input type="submit" name="save" id="save" class="tl_submit" alt="import product assets" accesskey="s" value="' . specialchars($GLOBALS['TL_LANG']['tl_iso_products']['import'][0]) . '"> </div> </div> </form>'; }
/** * Return a form to choose an existing style sheet and import it * @return string */ public function importStyleSheet() { if ($this->Input->get('key') != 'import') { return ''; } // Import CSS if ($this->Input->post('FORM_SUBMIT') == 'tl_style_sheet_import') { if (!$this->Input->post('source') || !is_array($this->Input->post('source'))) { $this->addErrorMessage($GLOBALS['TL_LANG']['ERR']['all_fields']); $this->reload(); } foreach ($this->Input->post('source') as $strCssFile) { // Folders cannot be imported if (is_dir(TL_ROOT . '/' . $strCssFile)) { $this->addErrorMessage(sprintf($GLOBALS['TL_LANG']['ERR']['importFolder'], basename($strCssFile))); continue; } $objFile = new File($strCssFile); // Check the file extension if ($objFile->extension != 'css') { $this->addErrorMessage(sprintf($GLOBALS['TL_LANG']['ERR']['filetype'], $objFile->extension)); continue; } $strFile = $objFile->getContent(); $strFile = str_replace("\r", '', $strFile); $strName = preg_replace('/\\.css$/i', '', basename($strCssFile)); $strName = $this->checkStyleSheetName($strName); // Create the new style sheet $objStyleSheet = $this->Database->prepare("INSERT INTO tl_style_sheet (pid, tstamp, name, media) VALUES (?, ?, ?, ?)")->execute($this->Input->get('id'), time(), $strName, array('all')); $insertId = $objStyleSheet->insertId; $intSorting = 0; $strComment = ''; $strCategory = ''; $arrChunks = array(); if (!is_numeric($insertId) || $insertId < 0) { throw new Exception('Invalid insert ID'); } $strFile = str_replace('/**/', '[__]', $strFile); $strFile = preg_replace(array('/\\/\\*\\*\\n( *\\*.*\\n){2,} *\\*\\//', '/\\/\\*[^\\*]+\\{[^\\}]+\\}[^\\*]+\\*\\//'), '', $strFile); $arrChunks = preg_split('/\\{([^\\}]*)\\}|\\*\\//U', $strFile, -1, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0; $i < count($arrChunks); $i++) { $strChunk = trim($arrChunks[$i]); if ($strChunk == '') { continue; } $strChunk = preg_replace('/[\\n\\r\\t]+/', ' ', $strChunk); // Category if (strncmp($strChunk, '/**', 3) === 0) { $strCategory = str_replace(array('/*', '*/', '*', '[__]'), '', $strChunk); $strCategory = trim(preg_replace('/\\s+/', ' ', $strCategory)); } elseif (strncmp($strChunk, '/*', 2) === 0) { $strComment = str_replace(array('/*', '*/', '*', '[__]'), '', $strChunk); $strComment = trim(preg_replace('/\\s+/', ' ', $strComment)); } else { $strNext = trim($arrChunks[$i + 1]); $strNext = preg_replace('/[\\n\\r\\t]+/', ' ', $strNext); $arrDefinition = array('pid' => $insertId, 'category' => $strCategory, 'comment' => $strComment, 'sorting' => $intSorting += 128, 'selector' => $strChunk, 'attributes' => $strNext); $this->createDefinition($arrDefinition); ++$i; $strComment = ''; } } // Write the style sheet $this->updateStyleSheet($insertId); // Notify the user if ($strName . '.css' != basename($strCssFile)) { $this->addInfoMessage(sprintf($GLOBALS['TL_LANG']['tl_style_sheet']['css_renamed'], basename($strCssFile), $strName . '.css')); } else { $this->addConfirmationMessage(sprintf($GLOBALS['TL_LANG']['tl_style_sheet']['css_imported'], $strName . '.css')); } } // Redirect setcookie('BE_PAGE_OFFSET', 0, 0, '/'); $this->redirect(str_replace('&key=import', '', $this->Environment->request)); } $objTree = new FileTree($this->prepareForWidget($GLOBALS['TL_DCA']['tl_style_sheet']['fields']['source'], 'source', null, 'source', 'tl_style_sheet')); // Return form return ' <div id="tl_buttons"> <a href="' . ampersand(str_replace('&key=import', '', $this->Environment->request)) . '" class="header_back" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['backBT']) . '" accesskey="b">' . $GLOBALS['TL_LANG']['MSC']['backBT'] . '</a> </div> <h2 class="sub_headline">' . $GLOBALS['TL_LANG']['tl_style_sheet']['import'][1] . '</h2> ' . $this->getMessages() . ' <form action="' . ampersand($this->Environment->request, true) . '" id="tl_style_sheet_import" class="tl_form" method="post"> <div class="tl_formbody_edit"> <input type="hidden" name="FORM_SUBMIT" value="tl_style_sheet_import"> <input type="hidden" name="REQUEST_TOKEN" value="' . REQUEST_TOKEN . '"> <div class="tl_tbox"> <h3><label for="source">' . $GLOBALS['TL_LANG']['tl_style_sheet']['source'][0] . '</label> <a href="contao/files.php" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['fileManager']) . '" data-lightbox="files 765 80%">' . $this->generateImage('filemanager.gif', $GLOBALS['TL_LANG']['MSC']['fileManager'], 'style="vertical-align:text-bottom"') . '</a></h3>' . $objTree->generate() . (strlen($GLOBALS['TL_LANG']['tl_style_sheet']['source'][1]) ? ' <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['tl_style_sheet']['source'][1] . '</p>' : '') . ' </div> </div> <div class="tl_formbody_submit"> <div class="tl_submit_container"> <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="' . specialchars($GLOBALS['TL_LANG']['tl_style_sheet']['import'][0]) . '"> </div> </div> </form>'; }
/** * Import a theme */ public function importTheme() { if ($this->Input->post('FORM_SUBMIT') == 'tl_theme_import') { $source = $this->Input->post('source', true); // Check the file names if (!$source || !is_array($source)) { $this->addErrorMessage($GLOBALS['TL_LANG']['ERR']['all_fields']); $this->reload(); } $arrFiles = array(); // Skip invalid entries foreach ($source as $strZipFile) { // Skip folders if (is_dir(TL_ROOT . '/' . $strZipFile)) { $this->addErrorMessage(sprintf($GLOBALS['TL_LANG']['ERR']['importFolder'], basename($strZipFile))); continue; } $objFile = new File($strZipFile); // Skip anything but .cto files if ($objFile->extension != 'cto') { $this->addErrorMessage(sprintf($GLOBALS['TL_LANG']['ERR']['filetype'], $objFile->extension)); continue; } $arrFiles[] = $strZipFile; } // Check wether there are any files left if (empty($arrFiles)) { $this->addErrorMessage($GLOBALS['TL_LANG']['ERR']['all_fields']); $this->reload(); } // Store the field names of the theme tables $arrDbFields = array ( 'tl_theme' => $this->Database->getFieldNames('tl_theme'), 'tl_style_sheet' => $this->Database->getFieldNames('tl_style_sheet'), 'tl_style' => $this->Database->getFieldNames('tl_style'), 'tl_module' => $this->Database->getFieldNames('tl_module'), 'tl_layout' => $this->Database->getFieldNames('tl_layout') ); // Proceed if ($this->Input->post('confirm') == 1) { return $this->extractThemeFiles($arrFiles, $arrDbFields); } else { return $this->compareThemeFiles($arrFiles, $arrDbFields); } } $objTree = new FileTree($this->prepareForWidget($GLOBALS['TL_DCA']['tl_theme']['fields']['source'], 'source', null, 'source', 'tl_theme')); // Return the form return ' <div id="tl_buttons"> <a href="'.ampersand(str_replace('&key=importTheme', '', $this->Environment->request)).'" class="header_back" title="'.specialchars($GLOBALS['TL_LANG']['MSC']['backBT']).'" accesskey="b">'.$GLOBALS['TL_LANG']['MSC']['backBT'].'</a> </div> <h2 class="sub_headline">'.$GLOBALS['TL_LANG']['tl_theme']['importTheme'][1].'</h2> '.$this->getMessages().' <form action="'.ampersand($this->Environment->request, true).'" id="tl_theme_import" class="tl_form" method="post"> <div class="tl_formbody_edit"> <input type="hidden" name="FORM_SUBMIT" value="tl_theme_import"> <input type="hidden" name="REQUEST_TOKEN" value="'.REQUEST_TOKEN.'"> <div class="tl_tbox"> <h3><label for="source">'.$GLOBALS['TL_LANG']['tl_theme']['source'][0].'</label> <a href="contao/files.php" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['fileManager']) . '" data-lightbox="files 765 80%">' . $this->generateImage('filemanager.gif', $GLOBALS['TL_LANG']['MSC']['fileManager'], 'style="vertical-align:text-bottom"') . '</a></h3>'.$objTree->generate().(strlen($GLOBALS['TL_LANG']['tl_theme']['source'][1]) ? ' <p class="tl_help tl_tip">'.$GLOBALS['TL_LANG']['tl_theme']['source'][1].'</p>' : '').' </div> </div> <div class="tl_formbody_submit"> <div class="tl_submit_container"> <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="'.specialchars($GLOBALS['TL_LANG']['tl_theme']['importTheme'][0]).'"> </div> </div> </form>'; }
/** * Return a form to choose a CSV file and import it * @param object * @return string */ public function importRecipients() { if ($this->Input->get('key') != 'import') { return ''; } // Import CSS if ($this->Input->post('FORM_SUBMIT') == 'tl_recipients_import') { if (!$this->Input->post('source') || !is_array($this->Input->post('source'))) { $_SESSION['TL_ERROR'][] = $GLOBALS['TL_LANG']['ERR']['all_fields']; $this->reload(); } $time = time(); $intTotal = 0; $intInvalid = 0; foreach ($this->Input->post('source') as $strCsvFile) { $objFile = new File($strCsvFile); if ($objFile->extension != 'csv') { $_SESSION['TL_ERROR'][] = sprintf($GLOBALS['TL_LANG']['ERR']['filetype'], $objFile->extension); continue; } // Get separator switch ($this->Input->post('separator')) { case 'semicolon': $strSeparator = ';'; break; case 'tabulator': $strSeparator = '\\t'; break; case 'linebreak': $strSeparator = '\\n'; break; default: $strSeparator = ','; break; } $arrRecipients = array(); $resFile = $objFile->handle; while (($arrRow = @fgetcsv($resFile, null, $strSeparator)) !== false) { $arrRecipients = array_merge($arrRecipients, $arrRow); } $arrRecipients = array_filter(array_unique($arrRecipients)); foreach ($arrRecipients as $strRecipient) { // Skip invalid entries if (!$this->isValidEmailAddress($strRecipient)) { $this->log('Recipient address "' . $strRecipient . '" seems to be invalid and has been skipped', 'Newsletter importRecipients()', TL_ERROR); ++$intInvalid; continue; } // Check whether the e-mail address exists $objRecipient = $this->Database->prepare("SELECT COUNT(*) AS total FROM tl_newsletter_recipients WHERE pid=? AND email=?")->execute($this->Input->get('id'), $strRecipient); if ($objRecipient->total < 1) { $this->Database->prepare("INSERT INTO tl_newsletter_recipients SET pid=?, tstamp={$time}, email=?, active=1")->execute($this->Input->get('id'), $strRecipient); ++$intTotal; } } } $_SESSION['TL_CONFIRM'][] = sprintf($GLOBALS['TL_LANG']['tl_newsletter_recipients']['confirm'], $intTotal); if ($intInvalid > 0) { $_SESSION['TL_INFO'][] = sprintf($GLOBALS['TL_LANG']['tl_newsletter_recipients']['invalid'], $intInvalid); } setcookie('BE_PAGE_OFFSET', 0, 0, '/'); $this->reload(); } $objTree = new FileTree($this->prepareForWidget($GLOBALS['TL_DCA']['tl_newsletter_recipients']['fields']['source'], 'source', null, 'source', 'tl_newsletter_recipients')); // Return form return ' <div id="tl_buttons"> <a href="' . ampersand(str_replace('&key=import', '', $this->Environment->request)) . '" class="header_back" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['backBT']) . '" accesskey="b">' . $GLOBALS['TL_LANG']['MSC']['backBT'] . '</a> </div> <h2 class="sub_headline">' . $GLOBALS['TL_LANG']['tl_newsletter_recipients']['import'][1] . '</h2> ' . $this->getMessages() . ' <form action="' . ampersand($this->Environment->request, true) . '" id="tl_recipients_import" class="tl_form" method="post"> <div class="tl_formbody_edit"> <input type="hidden" name="FORM_SUBMIT" value="tl_recipients_import"> <input type="hidden" name="REQUEST_TOKEN" value="' . REQUEST_TOKEN . '"> <div class="tl_tbox block"> <h3><label for="separator">' . $GLOBALS['TL_LANG']['MSC']['separator'][0] . '</label></h3> <select name="separator" id="separator" class="tl_select" onfocus="Backend.getScrollOffset();"> <option value="comma">' . $GLOBALS['TL_LANG']['MSC']['comma'] . '</option> <option value="semicolon">' . $GLOBALS['TL_LANG']['MSC']['semicolon'] . '</option> <option value="tabulator">' . $GLOBALS['TL_LANG']['MSC']['tabulator'] . '</option> <option value="linebreak">' . $GLOBALS['TL_LANG']['MSC']['linebreak'] . '</option> </select>' . ($GLOBALS['TL_LANG']['MSC']['separator'][1] != '' ? ' <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['MSC']['separator'][1] . '</p>' : '') . ' <h3><label for="source">' . $GLOBALS['TL_LANG']['MSC']['source'][0] . '</label> <a href="contao/files.php" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['fileManager']) . '" rel="lightbox[files 765 80%]">' . $this->generateImage('filemanager.gif', $GLOBALS['TL_LANG']['MSC']['fileManager'], 'style="vertical-align:text-bottom;"') . '</a></h3> ' . $objTree->generate() . ($GLOBALS['TL_LANG']['MSC']['source'][1] != '' ? ' <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['MSC']['source'][1] . '</p>' : '') . ' </div> </div> <div class="tl_formbody_submit"> <div class="tl_submit_container"> <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="' . specialchars($GLOBALS['TL_LANG']['tl_newsletter_recipients']['import'][0]) . '"> </div> </div> </form>'; }
/** * Generate the form to select import source and basic settings and return it as HTML string * @return string */ protected function formImportSource() { $arrSessionData = $this->Session->get('EFG'); $objTree = new FileTree($this->prepareForWidget($GLOBALS['TL_DCA']['tl_formdata']['fields']['import_source'], 'import_source', null, 'import_source', 'tl_formdata')); // Return form return ' <div id="tl_buttons"> <a href="' . ampersand(str_replace('&key=import', '', $this->Environment->request)) . '" class="header_back" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['backBT']) . '" accesskey="b">' . $GLOBALS['TL_LANG']['MSC']['backBT'] . '</a> </div> <h2 class="sub_headline">' . $GLOBALS['TL_LANG']['tl_formdata']['import'][1] . '</h2> ' . $this->getMessages() . ' <form action="' . ampersand($this->Environment->request, true) . '" id="tl_formdata_import" class="tl_form" method="post"> <div class="tl_formbody_edit"> <input type="hidden" name="FORM_SUBMIT" value="tl_formdata_import"> <input type="hidden" name="FORM_MODE" value="preview"> <input type="hidden" name="REQUEST_TOKEN" value="' . REQUEST_TOKEN . '"> <div class="tl_tbox block"> <div class="w50"> <h3><label for="separator">' . $GLOBALS['TL_LANG']['MSC']['separator'][0] . '</label></h3> <select name="separator" id="separator" class="tl_select" onfocus="Backend.getScrollOffset()"> <option value="comma"' . ($arrSessionData['import'][$this->strFormKey]['separator'] == 'comma' ? ' selected="selected"' : '') . '>' . $GLOBALS['TL_LANG']['MSC']['comma'] . '</option> <option value="semicolon"' . ($arrSessionData['import'][$this->strFormKey]['separator'] == 'semicolon' ? ' selected="selected"' : '') . '>' . $GLOBALS['TL_LANG']['MSC']['semicolon'] . '</option> <option value="tabulator"' . ($arrSessionData['import'][$this->strFormKey]['separator'] == 'tabulator' ? ' selected="selected"' : '') . '>' . $GLOBALS['TL_LANG']['MSC']['tabulator'] . '</option> </select>' . (strlen($GLOBALS['TL_LANG']['MSC']['separator'][1]) ? ' <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['MSC']['separator'][1] . '</p>' : '') . ' </div> <div class="w50 m12 cbx"> <div class="tl_checkbox_single_container"> <input name="csv_has_header" id="csv_has_header" type="checkbox" value="1"' . ($arrSessionData['import'][$this->strFormKey]['csv_has_header'] == '1' ? ' checked="checked"' : '') . '> <label for="csv_has_header">' . $GLOBALS['TL_LANG']['tl_formdata']['csv_has_header'][0] . '</label> </div> <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['tl_formdata']['csv_has_header'][1] . '</p> </div> <div class="clr"> <h3><label for="import_source">' . $GLOBALS['TL_LANG']['tl_formdata']['import_source'][0] . '</label> <a href="contao/files.php" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['fileManager']) . '" onclick="Backend.getScrollOffset(); Backend.openWindow(this, 750, 500); return false;">' . $this->generateImage('filemanager.gif', $GLOBALS['TL_LANG']['MSC']['fileManager'], 'style="vertical-align:text-bottom;"') . '</a></h3> ' . $objTree->generate() . (strlen($GLOBALS['TL_LANG']['tl_formdata']['import_source'][1]) ? ' <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['tl_formdata']['import_source'][1] . '</p>' : '') . ' </div> </div> </div> <div class="tl_formbody_submit"> <div class="tl_submit_container"> <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="' . specialchars($GLOBALS['TL_LANG']['tl_formdata']['import'][0]) . '" onfocus="document.cookie = \'BE_PAGE_OFFSET=0; path=/\';"> </div> </div> </form>'; }
/** * Return a form to choose a CSV file and import it * @param object * @return string */ public function importList(DataContainer $dc) { if ($this->Input->get('key') != 'list') { return ''; } // Import CSS if ($this->Input->post('FORM_SUBMIT') == 'tl_list_import') { if (!$this->Input->post('source') || !is_array($this->Input->post('source'))) { $_SESSION['TL_ERROR'][] = $GLOBALS['TL_LANG']['ERR']['all_fields']; $this->reload(); } $this->import('Database'); $arrList = array(); foreach ($this->Input->post('source') as $strCsvFile) { $objFile = new File($strCsvFile); if ($objFile->extension != 'csv') { $_SESSION['TL_ERROR'][] = sprintf($GLOBALS['TL_LANG']['ERR']['filetype'], $objFile->extension); continue; } // Get separator switch ($this->Input->post('separator')) { case 'semicolon': $strSeparator = ';'; break; case 'tabulator': $strSeparator = '\\t'; break; case 'linebreak': $strSeparator = '\\n'; break; default: $strSeparator = ','; break; } $resFile = $objFile->handle; while (($arrRow = @fgetcsv($resFile, null, $strSeparator)) !== false) { $arrList = array_merge($arrList, $arrRow); } } $this->createNewVersion($dc->table, $this->Input->get('id')); $this->Database->prepare("UPDATE " . $dc->table . " SET listitems=? WHERE id=?")->execute(serialize($arrList), $this->Input->get('id')); setcookie('BE_PAGE_OFFSET', 0, 0, '/'); $this->redirect(str_replace('&key=list', '', $this->Environment->request)); } $objTree = new FileTree($this->prepareForWidget($GLOBALS['TL_DCA'][$dc->table]['fields']['source'], 'source', null, 'source', $dc->table)); // Return form return ' <div id="tl_buttons"> <a href="' . ampersand(str_replace('&key=list', '', $this->Environment->request)) . '" class="header_back" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['backBT']) . '" accesskey="b">' . $GLOBALS['TL_LANG']['MSC']['backBT'] . '</a> </div> <h2 class="sub_headline">' . $GLOBALS['TL_LANG']['MSC']['lw_import'][1] . '</h2> ' . $this->getMessages() . ' <form action="' . ampersand($this->Environment->request, true) . '" id="tl_list_import" class="tl_form" method="post"> <div class="tl_formbody_edit"> <input type="hidden" name="FORM_SUBMIT" value="tl_list_import"> <input type="hidden" name="REQUEST_TOKEN" value="' . REQUEST_TOKEN . '"> <div class="tl_tbox block"> <h3><label for="separator">' . $GLOBALS['TL_LANG']['MSC']['separator'][0] . '</label></h3> <select name="separator" id="separator" class="tl_select" onfocus="Backend.getScrollOffset();"> <option value="comma">' . $GLOBALS['TL_LANG']['MSC']['comma'] . '</option> <option value="semicolon">' . $GLOBALS['TL_LANG']['MSC']['semicolon'] . '</option> <option value="tabulator">' . $GLOBALS['TL_LANG']['MSC']['tabulator'] . '</option> <option value="linebreak">' . $GLOBALS['TL_LANG']['MSC']['linebreak'] . '</option> </select>' . ($GLOBALS['TL_LANG']['MSC']['separator'][1] != '' ? ' <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['MSC']['separator'][1] . '</p>' : '') . ' <h3><label for="source">' . $GLOBALS['TL_LANG']['MSC']['source'][0] . '</label> <a href="contao/files.php" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['fileManager']) . '" rel="lightbox[files 765 80%]">' . $this->generateImage('filemanager.gif', $GLOBALS['TL_LANG']['MSC']['fileManager'], 'style="vertical-align:text-bottom;"') . '</a></h3> ' . $objTree->generate() . ($GLOBALS['TL_LANG']['MSC']['source'][1] != '' ? ' <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['MSC']['source'][1] . '</p>' : '') . ' </div> </div> <div class="tl_formbody_submit"> <div class="tl_submit_container"> <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="' . specialchars($GLOBALS['TL_LANG']['MSC']['lw_import'][0]) . '"> </div> </div> </form>'; }
/** * Import email template * @param object * @return string */ public function importMail($dc) { if ($this->Input->post('FORM_SUBMIT') == 'tl_mail_import') { $source = $this->Input->post('source', true); // Check the file names if (!$source || !is_array($source)) { $_SESSION['TL_ERROR'][] = $GLOBALS['TL_LANG']['ERR']['all_fields']; $this->reload(); } $arrFiles = array(); // Skip invalid entries foreach ($source as $strFile) { // Skip folders if (is_dir(TL_ROOT . '/' . $strFile)) { $_SESSION['TL_ERROR'][] = sprintf($GLOBALS['TL_LANG']['ERR']['importFolder'], basename($strFile)); continue; } $objFile = new File($strFile); // Skip anything but .imt files if ($objFile->extension != 'imt') { $_SESSION['TL_ERROR'][] = sprintf($GLOBALS['TL_LANG']['ERR']['filetype'], $objFile->extension); continue; } $arrFiles[] = $strFile; } // Check wether there are any files left if (count($arrFiles) < 1) { $_SESSION['TL_ERROR'][] = $GLOBALS['TL_LANG']['ERR']['all_fields']; $this->reload(); } return $this->importMailFiles($arrFiles); } $objTree = new FileTree($this->prepareForWidget($GLOBALS['TL_DCA']['tl_iso_mail']['fields']['source'], 'source', null, 'source', 'tl_iso_mail')); // Return the form return ' <div id="tl_buttons"> <a href="' . ampersand(str_replace('&key=importMail', '', $this->Environment->request)) . '" class="header_back" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['backBT']) . '" accesskey="b">' . $GLOBALS['TL_LANG']['MSC']['backBT'] . '</a> </div> <h2 class="sub_headline">' . $GLOBALS['TL_LANG']['tl_iso_mail']['importMail'][1] . '</h2>' . $this->getMessages() . ' <form action="' . ampersand($this->Environment->request, true) . '" id="tl_mail_import" class="tl_form" method="post"> <div class="tl_formbody_edit"> <input type="hidden" name="FORM_SUBMIT" value="tl_mail_import"> <input type="hidden" name="REQUEST_TOKEN" value="' . REQUEST_TOKEN . '"> <div class="tl_tbox block"> <h3><label for="source">' . $GLOBALS['TL_LANG']['tl_iso_mail']['source'][0] . '</label> <a href="contao/files.php" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['fileManager']) . '" onclick="Backend.getScrollOffset(); Backend.openWindow(this, 750, 500); return false;">' . $this->generateImage('filemanager.gif', $GLOBALS['TL_LANG']['MSC']['fileManager'], 'style="vertical-align:text-bottom;"') . '</a></h3>' . $objTree->generate() . (strlen($GLOBALS['TL_LANG']['tl_iso_mail']['source'][1]) ? ' <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['tl_iso_mail']['source'][1] . '</p>' : '') . ' </div> </div> <div class="tl_formbody_submit"> <div class="tl_submit_container"> <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="' . specialchars($GLOBALS['TL_LANG']['tl_iso_mail']['importMail'][0]) . '"> </div> </div> </form>'; }
/** * Generates a form to start import from csv file */ public function showImport() { if ($this->Input->post('FORM_SUBMIT') == 'tl_anystores_import') { $source = $this->Input->post('file', true); // check the file names if (!$source) { $this->addErrorMessage($GLOBALS['TL_LANG']['ERR']['all_fields']); $this->reload(); } // skip folders if (is_dir(TL_ROOT . '/' . $source)) { $this->addErrorMessage(sprintf($GLOBALS['TL_LANG']['ERR']['importFolder'], basename($source))); } $objFile = new \File($source); // skip anything but .csv files if ($objFile->extension != 'csv') { $this->addErrorMessage(sprintf($GLOBALS['TL_LANG']['ERR']['filetype'], $objFile->extension)); } ini_set("max_execution_time", 0); // read entries if ($objFile->handle !== FALSE) { $pid = $this->Input->get('id'); $count = 0; while (($data = fgetcsv($objFile->handle, 1000)) !== FALSE) { if (empty($data[0])) { continue; } $count++; // get coordinates $coords = AnyStores::getCoordinates($data[5], $data[6], $data[7], $data[8]); // add "http" in front of url $data[2] = $data[2] && strpos($data[2], 'http') === FALSE ? 'http://' . $data[2] : $data[2]; try { $this->Database->prepare("INSERT INTO `tl_anystores` (`pid`,`tstamp`,`name`,`email`,`url`,`phone`,`fax`,`street`,`postal`,`city`,`country`,`longitude`,`latitude`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)")->execute($pid, time(), $data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7], strtolower($data[8]), $coords ? $coords['longitude'] : '', $coords ? $coords['latitude'] : ''); } catch (Exception $e) { continue; } if ($count > 5) { sleep(2); $count = 0; } } $objFile->close(); // Redirect setcookie('BE_PAGE_OFFSET', 0, 0, '/'); $this->redirect(str_replace('&key=importStores', '', $this->Environment->request)); return; } } $objTree = new \FileTree($this->prepareForWidget($GLOBALS['TL_DCA']['tl_anystores']['fields']['file'], 'file', null, 'file', 'tl_anystores')); // Return the form return ' <div id="tl_buttons"> <a href="' . ampersand(str_replace('&key=importStores', '', $this->Environment->request)) . '" class="header_back" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['backBT']) . '" accesskey="b">' . $GLOBALS['TL_LANG']['MSC']['backBT'] . '</a> </div> <h2 class="sub_headline">' . $GLOBALS['TL_LANG']['tl_anystores']['import']['head'] . '</h2> ' . $this->getMessages() . ' <form action="' . ampersand($this->Environment->request, true) . '" id="tl_anystores_import" class="tl_form" method="post"> <div class="tl_formbody_edit"> <input type="hidden" name="FORM_SUBMIT" value="tl_anystores_import"> <input type="hidden" name="REQUEST_TOKEN" value="' . REQUEST_TOKEN . '"> <div class="tl_tbox"> <h3><label for="source">' . $GLOBALS['TL_LANG']['tl_anystores']['import']['file'][0] . '</label> <a href="contao/files.php" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['fileManager']) . '" data-lightbox="files 765 80%">' . $this->generateImage('filemanager.gif', $GLOBALS['TL_LANG']['MSC']['fileManager'], 'style="vertical-align:text-bottom"') . '</a></h3>' . $objTree->generate() . (strlen($GLOBALS['TL_LANG']['tl_anystores']['import']['file'][1]) ? ' <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['tl_anystores']['import']['file'][1] . '</p>' : '') . ' </div> </div> <div class="tl_formbody_submit"> <div class="tl_submit_container"> <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="' . specialchars($GLOBALS['TL_LANG']['tl_anystores']['import']['start']) . '"> </div> </div> </form> '; }
/** * Generate the form to select import source and basic settings and return it as HTML string * @return string */ protected function formImportSource() { $arrSessionData = $this->Session->get('EFG'); $objFileSelector = new \FileTree(\Widget::getAttributesFromDca($GLOBALS['TL_DCA']['tl_formdata']['fields']['import_source'], 'import_source', null, 'import_source', 'tl_formdata')); // Return form return ' <div id="tl_buttons"> <a href="' . ampersand(str_replace('&key=import', '', \Environment::get('request'))) . '" class="header_back" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['backBT']) . '" accesskey="b">' . $GLOBALS['TL_LANG']['MSC']['backBT'] . '</a> </div> <h2 class="sub_headline">' . $GLOBALS['TL_LANG']['tl_formdata']['import'][1] . '</h2> ' . \Message::generate() . ' <form action="' . ampersand(\Environment::get('request'), true) . '" id="tl_formdata_import" class="tl_form" method="post"> <div class="tl_formbody_edit"> <input type="hidden" name="FORM_SUBMIT" value="tl_formdata_import"> <input type="hidden" name="FORM_MODE" value="preview"> <input type="hidden" name="REQUEST_TOKEN" value="' . REQUEST_TOKEN . '"> <div class="tl_tbox block"> <div class="w50"> <h3><label for="separator">' . $GLOBALS['TL_LANG']['MSC']['separator'][0] . '</label></h3> <select name="separator" id="separator" class="tl_select" onfocus="Backend.getScrollOffset()"> <option value="comma"' . ($arrSessionData['import'][$this->strFormKey]['separator'] == 'comma' ? ' selected="selected"' : '') . '>' . $GLOBALS['TL_LANG']['MSC']['comma'] . '</option> <option value="semicolon"' . ($arrSessionData['import'][$this->strFormKey]['separator'] == 'semicolon' || !isset($arrSessionData['import'][$this->strFormKey]['separator']) ? ' selected="selected"' : '') . '>' . $GLOBALS['TL_LANG']['MSC']['semicolon'] . '</option> <option value="tabulator"' . ($arrSessionData['import'][$this->strFormKey]['separator'] == 'tabulator' ? ' selected="selected"' : '') . '>' . $GLOBALS['TL_LANG']['MSC']['tabulator'] . '</option> </select>' . (strlen($GLOBALS['TL_LANG']['MSC']['separator'][1]) ? ' <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['MSC']['separator'][1] . '</p>' : '') . ' </div> <div class="w50 m12 cbx"> <div class="tl_checkbox_single_container"> <input name="csv_has_header" id="csv_has_header" type="checkbox" value="1"' . ($arrSessionData['import'][$this->strFormKey]['csv_has_header'] == '1' ? ' checked="checked"' : '') . '> <label for="csv_has_header">' . $GLOBALS['TL_LANG']['tl_formdata']['csv_has_header'][0] . '</label> </div> <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['tl_formdata']['csv_has_header'][1] . '</p> </div> <div class="clr">' . $objFileSelector->parse() . (strlen($GLOBALS['TL_LANG']['tl_formdata']['import_source'][1]) ? ' <p class="tl_help tl_tip">' . $GLOBALS['TL_LANG']['tl_formdata']['import_source'][1] . '</p>' : '') . ' </div> </div> </div> <div class="tl_formbody_submit"> <div class="tl_submit_container"> <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="' . specialchars($GLOBALS['TL_LANG']['tl_formdata']['import'][0]) . '" onfocus="document.cookie = \'BE_PAGE_OFFSET=0; path=/\';"> </div> </div> </form>' . $this->getFilepickerJavascript('reloadEfgImportSource'); }
$file = substr($file, strlen($this->root)); } } $path = serialize($path); } else { $isDir = 'true'; if (strpos($path, $this->root, 0) === 0) { $path = substr($path, strlen($this->root)); } } $this->_cmd .= "addTree('{$placeholder}', '{$path}/', {$isDir}, '{$label}');"; return $this; } /** * * @return void */ public function exec($initialOpeningFile) { echo "\$(document).ready( function() {{$this->_cmd}load(\"{$initialOpeningFile}\")});"; } } $projectDir = ''; // Treeを描画 $tree = new FileTree($root); //$tree->tree('#container_id1', $files['page'], '<span class=\"tree_label\">Page</span>'); //$tree->tree('#container_id2', $files['ro'], '<span class=\"tree_label\">Resource</span>'); //$tree->tree('#container_id3', $files['view'], '<span class=\"tree_label\">View template</span>'); $tree->tree('#container_id', $projectDir, '<span class=\\"tree_label\\">Project</span>'); $initialOpeningFile = 'src.php'; $tree->exec($initialOpeningFile);
<?php load_class('FileTree'); $tree = new FileTree(); //$tree->print_tree(); echo "<!doctype html>\n<html>\n<head>\n\t<meta chrset=\"UTF-8\">\n\t<title>Andrzej Dąbski.pl</title>\n</head>\n<body bgcolor=\"black\" text=\"lightgreen\" >"; foreach ($tree->get_files() as $file) { echo "<fieldset>\n\t<legend><b>{$file->get_name()}</b></legend>\n\t <table>"; foreach ($file->get_files() as $file2) { echo "<tr><td> <a href=\"{$file2->get_url()}\"><img src=\"{$file2->get_pic_url()}\" width=150px ></a><font color=\"black\"> --- </font> </td> <td> <a href=\"{$file2->get_url()}\"><b>{$file2->get_name()}</b></a> </td></tr>"; } echo "</table><!-- Dodać blokowoścs na całej lini tabeli, żeby kliknąć gdziekolwiekss -->\n\t </fieldset>"; } echo "</body>\n</html>";