Ejemplo n.º 1
0
function shellEncode($str)
{
    // Encodes shell command according to current system
    $os = detectOS();
    if ($os === 1) {
        $str = strtr($str, ['&' => '^&', '|' => '^|', '^|' => '^^']);
    } else {
        $str = strtr($str, ['&' => '\\&', "\\" => "\\\\", '|' => '\\|', '^|' => '^^']);
    }
    // escape other system characters
    return $str;
}
Ejemplo n.º 2
0
function showPreferencesDialog()
{
    global $dialogPreferences, $config, $radioGroup, $i18n, $langList, $gui;
    $dialogPreferences = new GladeXML(gtTranslateGlade('dialogPreferences'));
    $_btnSave = $dialogPreferences->get_widget('_btnSave');
    $_btnCancel = $dialogPreferences->get_widget('_btnCancel');
    $_btnRecognizeInkscape = $dialogPreferences->get_widget('_btnRecognizeInkscape');
    $_noticeLabel = $dialogPreferences->get_widget('_noticeLabel');
    $_prefDisplayPreview = $dialogPreferences->get_widget('_prefDisplayPreview');
    $_prefLanguageSelect = $dialogPreferences->get_widget('_prefLanguageSelect');
    $_prefUploadEnable = $dialogPreferences->get_widget('_prefUploadEnable');
    $_prefUploadTable = $dialogPreferences->get_widget('_prefUploadTable');
    $_prefInkscapePath = $dialogPreferences->get_widget('_prefInkscapePath');
    $_btnCancel->connect_simple('clicked', 'cancelPreferencesDialog');
    $_btnSave->connect_simple('clicked', 'savePreferencesDialog');
    $_btnRecognizeInkscape->connect_simple('clicked', 'recognizeInkscape');
    $_prefDisplayPreview->connect('toggled', 'setDisplayPreview');
    $_prefUploadEnable->connect_simple('toggled', 'gtToggler', $_prefUploadEnable, $_prefUploadTable);
    $dialogPreferences->get_widget('_prefUploadGetKey')->connect_simple('clicked', 'openURL', 'https://openclipart.org/manage/profile');
    gtIcon($_btnSave, Gtk::STOCK_SAVE);
    gtIcon($_btnCancel, Gtk::STOCK_CANCEL);
    gtIcon($_btnRecognizeInkscape, Gtk::STOCK_FIND);
    gtColor($_noticeLabel, 'fg', $gui['CNoticeBarFG']);
    gtFont($_noticeLabel, $gui['SNoticeBar']);
    gtFont($dialogPreferences->get_widget('_prefUploadGetKeyLBottom'), $gui['XSmallNote']);
    gtFont($dialogPreferences->get_widget('_prefUploadAPIWarn'), $gui['XSmallNote']);
    // Setting states/strings basing on config variable
    if ($config['firstTime']) {
        setPreferencesNoticeBox($i18n->_('prefNoticeFirstTime'));
    }
    // First time, autorun of preferences dialog
    $dialogPreferences->get_widget('_prefDisplayInfobar')->set_active($config['displayInfobar']);
    $dialogPreferences->get_widget('_prefDisplayNavbar')->set_active($config['displayNavbar']);
    $_prefDisplayPreview->set_active($config['displayPreview']);
    $dialogPreferences->get_widget('_prefPreviewAreaBox')->set_sensitive($config['displayPreview']);
    $dialogPreferences->get_widget($radioGroup['toolbarStyle'][$config['toolbarStyle']])->set_active(true);
    $dialogPreferences->get_widget($radioGroup['previewArea'][$config['previewArea']])->set_active(true);
    $_prefUploadEnable->set_active($config['enableUpload']);
    $dialogPreferences->get_widget('_prefUploadNSFW')->set_active($config['NSFWTagToFlag']);
    $_prefUploadTable->set_sensitive($config['enableUpload']);
    gtSetText($dialogPreferences->get_widget('_prefUploadUsername'), $config['uploadUsername']);
    gtSetText($dialogPreferences->get_widget('_prefUploadAPIKey'), $config['uploadAPIKey']);
    $dialogPreferences->get_widget('_prefTempPath')->select_uri($config['tempDirectory']);
    if ($config['inkscapePath']) {
        $_prefInkscapePath->select_uri($config['inkscapePath']);
    } else {
        $_prefInkscapePath->unselect_all();
    }
    // setting language combobox
    $comboIndex = 0;
    foreach ($langList as $code => $name) {
        $comboStr = "{$name} ({$code})";
        $_prefLanguageSelect->append_text($comboStr);
        if ($config['language'] === $code) {
            $_prefLanguageSelect->set_active($comboIndex);
        }
        $comboIndex++;
    }
    // signals that displays infobar notices; they have to be set after widget setup
    $_prefDisplayPreview->connect('toggled', 'setDisplayPreview');
    $dialogPreferences->get_widget('_prefPreviewPage')->connect_simple('toggled', 'setPreferencesNoticeBox', $i18n->_('prefNoticeRefresh'));
    $dialogPreferences->get_widget('_prefPreviewDrawing')->connect_simple('toggled', 'setPreferencesNoticeBox', $i18n->_('prefNoticeDrawingArea') . "\n" . $i18n->_('prefNoticeRefresh'), $gui['CNoticeBarWarnBG']);
    if (detectOS(HK_OS_WINDOWS)) {
        $_prefInkscapePath->connect_simple('file-set', 'checkInkscapePath');
    }
}
Ejemplo n.º 3
0
function readSVG($file)
{
    global $fields, $config, $timerSpin, $_navName, $_navIndex, $_btnNav, $fileList, $_btnNavRefresh, $i18n;
    if (is_dir($file)) {
        setTopBar($i18n->_('loadProblemsDir', basename($file)), Gtk::STOCK_DIALOG_WARNING);
        return;
    }
    if (!file_exists($file)) {
        setTopBar($i18n->_('loadProblems', basename($file)), Gtk::STOCK_DIALOG_WARNING);
        return;
    }
    resetFields();
    $_btnNavRefresh->set_sensitive(true);
    // Enable refresh button with first (and every other) reading file
    // Set navigation bar - it's done everytime file is loading to refresh directory, which could change meanwhile
    $fileList['directory'] = dirname($file);
    $fileList['currentFile'] = $file;
    $fileList['globFix'] = strtr($fileList['directory'], ['[' => '[[]', ']' => '[]]']);
    $fileList['list'] = glob($fileList['globFix'] . DIRECTORY_SEPARATOR . "*.[Ss][Vv][Gg]");
    $fileList['total'] = count($fileList['list']);
    $fileList['current'] = intval(array_search($file, $fileList['list'])) + 1;
    $fileList['isLast'] = $fileList['current'] === $fileList['total'];
    $fileList['isFirst'] = $fileList['current'] === 1;
    // As index is set during loading, the destination files for nav buttons are set same time, to avoid weird behavior on directory change
    if (!$fileList['isFirst']) {
        $fileList['nav'][-2] = $fileList['list'][0];
        $fileList['nav'][-1] = $fileList['list'][$fileList['current'] - 2];
    }
    if (!$fileList['isLast']) {
        $fileList['nav'][1] = $fileList['list'][$fileList['current']];
        $fileList['nav'][2] = $fileList['list'][$fileList['total'] - 1];
    }
    // For now navigation buttons don't loop, so turn off unusable and on usable
    $_btnNav[-2]->set_sensitive(!$fileList['isFirst']);
    $_btnNav[-1]->set_sensitive(!$fileList['isFirst']);
    $_btnNav[1]->set_sensitive(!$fileList['isLast']);
    $_btnNav[2]->set_sensitive(!$fileList['isLast']);
    gtSetText($_navName, basename($file));
    gtSetText($_navIndex, $fileList['current'] . '/' . $fileList['total']);
    // That's to be changed, as SVG with embedded raster files aren't recognized as image/svg+xml
    if (mime_content_type($file) === 'image/svg+xml') {
        $fileList['properSVG'] = true;
        if ($config['displayPreview']) {
            // display preview only when it's visible, so people without Inkscape won't get errors
            // Generate preview
            $outputFile = $config['tempDirectory'] . DIRECTORY_SEPARATOR . uniqid('preview', true) . '.png';
            $previewArea = ['page', 'drawing'];
            $cmdPreview = '--export-area-' . $previewArea[$config['previewArea']];
            if (!empty($timerSpin)) {
                Gtk::timeout_remove($timerSpin);
            }
            // needed for navigating to other file before preview is done
            $timerSpin = Gtk::timeout_add(250, 'timerSpin', $outputFile);
            // checking for Inkscape preview to be done
            spinnerToggle(true);
            // This command runs asynchronously two synchronous commands, so _after_ Inkscape is done it
            // creates an empty file, so app would know when file is ready.
            $asynchFix = detectOS(HK_OS_WINDOWS) ? "& type nul >>\"{$outputFile}.nul\"" : "&& touch \"{$outputFile}.nul\"";
            execQuiet("\"{$config['inkscapePath']}\" --file=\"{$file}\" -w=200 {$cmdPreview} --export-png=\"{$outputFile}\" {$asynchFix}", true);
        }
        // Get SVG metadata
        $meta = getSVGMetadata($file);
        if (!$meta) {
            // Parsing metadata error
            setTopBar(sprintf(_('%s metadata not found'), basename($file)), Gtk::STOCK_CAPS_LOCK_WARNING);
            return;
        }
        // Parsing metadata ok
        foreach ($fields as $id) {
            gtSetText("_entry{$id}", $meta[$id]);
        }
        setTopBar(sprintf(_('%s parsed'), basename($file)), Gtk::STOCK_APPLY);
    } else {
        // Not SVG file
        $fileList['properSVG'] = false;
        setTopBar($i18n->_('loadIncorrectSVG', basename($file)), Gtk::STOCK_DIALOG_WARNING);
    }
    $fileList['loadedFile'] = true;
}