WordPress.org

Plugin Directory

Changeset 493292


Ignore:
Timestamp:
01/21/12 18:11:44 (2 years ago)
Author:
merty
Message:
  • Explanation for Change Domain Name is rephrased.
  • Simple and Advanced Migration methods are merged.
  • Meta boxes are added to the migration page.
  • A database backup converter is integrated to convert WordPress-Move-only database backup files to generic SQL files.
  • Backup files to use for restoration can now be selected right on the Restore page.
  • Messages are now displayed in real-time on migration and restoration pages.
  • Empty HTML files are added to backup directories to prevent them being listed by people trying to access the directory via their browsers.
Location:
wordpress-move/trunk
Files:
4 added
8 edited

Legend:

Unmodified
Added
Removed
  • wordpress-move/trunk/docs/index.html

    r459287 r493292  
    1616                        <ul> 
    1717                            <li><a href="#domain" title="Changing Domain Name">Change Domain Name</a></li> 
    18                             <li><a href="#start" title="Start Migration">Start Migration</a></li> 
    19                             <li><a href="#complete" title="Complete Migration">Complete Migration</a></li> 
     18                            <li><a href="#migrate" title="Migrate">Migrate</a></li> 
     19                            <li><a href="#restore" title="Restore">Restore</a></li> 
    2020                        </ul> 
    2121                    </li> 
     
    4444    <p>Using the plugin is fairly simple. If you want to change your domain name, start migrating to another server or complete the migration you have already started from another server, you need to navigate to Migration Assistant page under the tools menu. However, if you want to manage the backup files under the backup directory, you need to navigate to Backup Manager page under the tools menu.</p> 
    4545    <h2 id="assistant">Migration Assistant</h2> 
    46     <p>Migration Assistant welcomes you with three different actions you may want to perform: Change Domain Name, Start Migration and Complete Migration. If you wish to only change the domain name of your current installation, you should click the Change Domain Name link. If you wish to migrate to another server, you should click the Start Migration link. Once again, do not forget that you need to configure the plugin by going to WordPress Move page under the Settings menu before starting the migration. And finally, if you wish to complete the migration process started from another server, click the Complete Migration link.</p> 
     46    <p>Migration Assistant welcomes you with three different actions you may want to perform: Change Domain Name, Start Migration and Restore. If you wish to only change the domain name of your current installation, you should click the Change Domain Name link. If you wish to migrate to another server, you should click the Start Migration link. Once again, do not forget that you need to configure the plugin by going to WordPress Move page under the Settings menu before starting the migration. And finally, if you wish to complete the migration process started from another server, click the Complete Migration link.</p> 
    4747        <h3 id="domain">Change Domain Name</h3> 
    4848        <p>Changing the domain name that your current installation operates on is quite easy. Just type in the new domain name you want to use instead of the current domain name and click the Change button. Plugin will immediately change all instances of your old domain name in the database with your new domain name. WordPress Move also backups your database before starting the operation so if something goes wrong, it rolls back all the changes made. Of course, rolling back may also fail under some circumstances so creating a backup of your database manually beforehand is always a good idea. WordPress Move actually saves the backup file it creates beforehand to the old backup directory in case something goes wrong either during the domain name changing procedure or afterwards. Note that database backup files WordPress Move creates are not like normal database backup files, so you will need a working instance of WordPress Move on that server to be able to restore using those backup files. Still, creating a backup file yourself is highly encouraged. Do not forget that WordPress Move only replaces instances of your old domain name in the database with your new domain name and does not make any further configurations needed to make your domain work on your host. Please refer to the question in the FAQ section for some additional information about this.</p> 
    49         <h3 id="start">Start Migration</h3> 
    50         <p>Start Migration page provides two different types of migration: Simple Migration and Advanced Migration.</p> 
    51         <ul> 
    52             <li><strong>Simple Migration:</strong> Simple Migration creates the backup of your files and database, and uploads them to the remote server right after you click the Start Migration button on the confirmation page. Therefore, Simple Migration requires no extra input.</li> 
    53             <li><strong>Advanced Migration:</strong> Advanced Migration displays all the files under your WordPress installation directory and asks you the files to backup. Once you click the Start Migration button, it creates the backup of your database and the files you selected, and uploads them to the remote server. If you do not select any files, only a backup of your database will be uploaded to the server you want to migrate to.</li> 
    54         </ul> 
    55         <p>Both of these methods creates backup files in chunks if you set a Chunk Size on the settings page of the plugin and also provides you the option to change the domain name that will be used on your new server. When starting the migration succeeds, you can run WordPress Move on the remote server in Complete Migration mode to complete the migration process.</p> 
    56         <h3 id="complete">Complete Migration</h3> 
    57         <p>Complete Migration basically imports database backups and extracts filesystem backups, created and uploaded by WordPress Move on the server you want to migrate from. When you navigate to Complete Migration page, it lists all the backup files that are going to be imported or extracted once you click the Complete Migration button. To select which files to import or extract, please navigate to Backup Manager page under the Tools menu. Do not forget that this process does not create a backup of your existing installation so if something goes wrong, it will not be possible to rollback the changes. It is your responsibility to backup your files and the database before clicking the Complete Migration button. If there are no files listed on the Complete Migration page, please make sure you started the migration successfully using WordPress Move on the server you want to migrate from.</p> 
     49        <h3 id="migrate">Migrate</h3> 
     50        <p>Migration page displays all the files under your WordPress installation directory and asks you which files to backup. Once you click the Start Migration button, it creates the backup of your database and the files (in chunks if you set a Chunk Size on the settings page of the plugin) you selected, and uploads them to the remote server. If you do not select any files, only a backup of your database will be uploaded to the server you want to migrate to. Also, the option to change the domain name that will be used on your new server is provided as well. It only changes the domain name that will be used by the installation in the receiving end. When starting the migration succeeds, you can run WordPress Move on the remote server in Complete Migration mode to complete the migration process.</p> 
     51        <h3 id="restore">Restore</h3> 
     52        <p>Restore option basically imports database backups and extracts filesystem backups, created and uploaded by WordPress Move on the server you want to migrate from. When you navigate to Restore page, it lists all the backup files inside the main backup directory aka Current Backups that you can choose from to complete the migration. Do not forget that this process does not create a backup of your existing installation so if something goes wrong, it will not be possible to rollback the changes. It is your responsibility to backup your files and the database before clicking the Complete Migration button. If there are no files listed on the Complete Migration page, please make sure you started the migration successfully using WordPress Move on the server you are migrating from.</p> 
    5853    <h2 id="backup">Backup Manager</h2> 
    59     <p>Backup Manager is the place to organize the backup files either created by the plugin on the same server, or uploaded by the server you want to migrate from. If this is the server you want to migrate from, you can delete backup files after the Migration Assistant completes uploading them to the remote server. If you do not want to delete them, you can Archive them which basically means moving them to a sub-directory called <code>old</code>. You can always Unarchive the files you Archived using the Backup Manager. Files listed under Current Backups are the files that will be used by the Complete Migration mode so you can either delete or achive the files you do not want Complete Migration to use. Files listed under the Old Backups section are not used for anything so you can safely Archive the backup files you do not want to use but also do not want to delete.</p> 
     54    <p>Backup Manager is the place to organize the backup files either created by the plugin on the same server, or uploaded by the server you are migrating from. If this is the server you want to migrate from, you can delete backup files after the Migration Assistant completes uploading them to the remote server. If you do not want to delete them, you can Archive them which basically means moving them to a sub-directory called <code>old</code>. You can always Unarchive the files you Archived using the Backup Manager. Files listed under Current Backups are the files that will be used by the Complete Migration mode so you can either delete or achive the files you do not want Complete Migration to use. Files listed under the Old Backups section are not used for anything so you can safely Archive the backup files you do not want to use but also do not want to delete.</p> 
     55    <p>Since version 1.3, there is also Converted Database Backups section where which lists the database backup files that can be used outside the WordPress Move. As you might have noticed, database backups generated by WordPress Move have a different structure than normal database backup files which is the reason why you cannot use them outside the WordPress Move. To use database backup file outside the WordPress Move, simply find it in either Current Backups or Old Backups section, select the checkbox on the left, select the Convert option from the dropdown and click the Apply button. This will convert the files you have selected into generic SQL files that you can use outside the plugin. This feature is particularly useful if the plugin fails to migrate your installation properly or if you need to use the database backup file outside the plugin.</p> 
    6056    <h2 id="faq">Frequently Asked Questions</h2> 
    6157    <ol> 
     
    7268        <li><strong>Plugin fails to create backup files because it says my backup directory is not writable. How can I fix this?</strong> 
    7369        <br>As the warning suggests, you need to make the backup directory writable by the plugin. Permission settings vary from server to server so there is no specific value to set the directory permissions to. The easiest way to fix this problem yourself is using an FTP client to alter permission settings of the backup directory until plugin successfully creates backup files. You may also prefer requesting assistance from your hosting company.</li> 
    74         <li><strong>What will happen to the FTP Password that is already stored in my database?</strong> 
     70        <li><strong>I am a pre-1.2 user, what will happen to the FTP Password that is already stored in my database?</strong> 
    7571        <br>Visiting the WordPress Move Settings page any time after updating the plugin will remove it from the database permanently.</li> 
     72        <li><strong>Can I use the database backup files that WordPress Move generates with phpMyAdmin?</strong> 
     73        <br>You can convert a database backup file using the Convert option in the Backup Manager to use it outside the plugin. So, yes, you can use the <strong>converted</strong> database backup files with phpMyAdmin or any other script.</li> 
    7674    </ol> 
    7775    <p class="credits"><small>Project sponsored by <a href="http://code.google.com/soc/" title="Google Summer of Code">Google</a>, developed by <a href="http://twitter.com/_mert" title="Mert Yazicioglu">Mert Yazicioglu</a> and mentored by <a href="http://twitter.com/petemall" title="Pete Mall">Pete Mall</a> and <a href="http://twitter.com/brianlayman" title="Brian Layman">Brian Layman</a>.</small></p> 
  • wordpress-move/trunk/lang/wpmove.pot

    r459287 r493292  
    33"Project-Id-Version: WPMove\n" 
    44"Report-Msgid-Bugs-To: \n" 
    5 "POT-Creation-Date: 2011-11-04 02:10+0200\n" 
    6 "PO-Revision-Date: 2011-11-04 02:11+0200\n" 
     5"POT-Creation-Date: 2012-01-21 19:57+0200\n" 
     6"PO-Revision-Date: 2012-01-21 19:57+0200\n" 
    77"Last-Translator: Mert Yazicioglu <mert@mertyazicioglu.com>\n" 
    88"Language-Team: \n" 
     
    1414"X-Poedit-SearchPath-0: C:\\xampp\\htdocs\\wp\\wp-content\\plugins\\wordpress-move\n" 
    1515 
    16 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:141 
    17 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:957 
    18 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1104 
     16#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:131 
     17#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:955 
    1918msgid "Change Domain Name" 
    2019msgstr "" 
    2120 
    22 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:142 
     21#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:132 
    2322msgid "Migrate" 
    2423msgstr "" 
    2524 
    26 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:143 
     25#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:133 
    2726msgid "Restore" 
    2827msgstr "" 
    2928 
    30 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:177 
     29#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:134 
     30msgid "FTP Settings" 
     31msgstr "" 
     32 
     33#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:135 
     34msgid "Change Domain Name (Optional)" 
     35msgstr "" 
     36 
     37#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:136 
     38msgid "Files to Transfer" 
     39msgstr "" 
     40 
     41#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:170 
    3142msgid "FTP Connection Details" 
    3243msgstr "" 
    3344 
    34 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:178 
     45#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:171 
    3546msgid "Database Backup Settings" 
    3647msgstr "" 
    3748 
    38 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:179 
     49#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:172 
    3950msgid "File Backup Settings" 
    4051msgstr "" 
    4152 
    42 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:257 
     53#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:254 
    4354msgid "Settings saved." 
    4455msgstr "" 
    4556 
    46 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:263 
     57#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:260 
    4758msgid "Please fill in FTP Connection Details in order to start the migration process." 
    4859msgstr "" 
    4960 
    50 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:270 
     61#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:267 
    5162msgid "WordPress Move Settings" 
    5263msgstr "" 
    5364 
    54 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:272 
     65#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:269 
    5566msgid "Please configure the plugin using the settings below before starting to use the Migration Assistant under the Tools menu. If connecting to the remote server fails, please toggle the Passive Mode setting and try again." 
    5667msgstr "" 
    5768 
    58 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:313 
     69#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:310 
    5970msgid "These are the FTP connection details of your new server." 
    6071msgstr "" 
    6172 
     73#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:316 
     74msgid "Hostname" 
     75msgstr "" 
     76 
    6277#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:319 
    63 msgid "Hostname" 
    64 msgstr "" 
    65  
    66 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:322 
    6778msgid "The hostname you use to establish an FTP connection to the remote server. Might be an IP address or a domain name." 
    6879msgstr "" 
    6980 
     81#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:324 
     82msgid "Port" 
     83msgstr "" 
     84 
    7085#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:327 
    71 msgid "Port" 
    72 msgstr "" 
    73  
    74 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:330 
    7586msgid "If you do not know what to write, it is most probably 21." 
    7687msgstr "" 
    7788 
     89#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:332 
     90msgid "Username" 
     91msgstr "" 
     92 
    7893#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:335 
    79 msgid "Username" 
    80 msgstr "" 
    81  
    82 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:338 
    8394msgid "The username you use to establish an FTP connection to the remote server." 
    8495msgstr "" 
    8596 
     97#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:340 
     98msgid "Password" 
     99msgstr "" 
     100 
    86101#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:343 
    87 msgid "Password" 
    88 msgstr "" 
    89  
    90 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:346 
    91102msgid "You will be asked to enter your FTP Password you use to establish an FTP connection to the remote server, right before starting the migration process." 
    92103msgstr "" 
    93104 
     105#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:348 
     106msgid "Remote Backup Path" 
     107msgstr "" 
     108 
    94109#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:351 
    95 msgid "Remote Backup Path" 
    96 msgstr "" 
    97  
    98 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:354 
    99110msgid "Path from the top directory that your FTP account has access to, to the backup directory of the WordPress Move plugin on the remote server. For instance:" 
    100111msgstr "" 
    101112 
    102 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:359 
     113#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:356 
    103114msgid "Use Passive Mode" 
    104115msgstr "" 
    105116 
    106 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:364 
     117#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:361 
    107118msgid "Yes" 
    108119msgstr "" 
    109120 
    110 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:369 
     121#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:366 
    111122msgid "No" 
    112123msgstr "" 
    113124 
    114 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:389 
     125#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:386 
    115126msgid "The size of each chunk of your database backup. Actual sizes of chunks may exceed this size limit. 0 means unlimited." 
    116127msgstr "" 
    117128 
    118 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:395 
    119 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:423 
     129#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:392 
     130#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:420 
    120131msgid "Chunk Size" 
    121132msgstr "" 
    122133 
    123 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:417 
     134#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:414 
    124135msgid "The size of files to compress per filesystem backup chunk. Sizes of chunks will be less than or equal to this size limit, depending on the compression ratio. 0 means unlimited." 
    125136msgstr "" 
    126137 
    127 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:461 
    128 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:795 
    129 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1818 
     138#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:458 
     139#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:783 
     140#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:867 
     141#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1825 
    130142msgid "Migration Assistant" 
    131143msgstr "" 
    132144 
    133 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:463 
     145#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:460 
    134146msgid "Please make sure you read the documentation carefully, before selecting an action to proceed..." 
    135147msgstr "" 
    136148 
     149#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:503 
     150msgid "If you wish to do the following..." 
     151msgstr "" 
     152 
    137153#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:506 
    138 msgid "If you wish to do the following..." 
     154msgid "Just change the domain name this installation uses." 
    139155msgstr "" 
    140156 
    141157#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:509 
    142 msgid "Use this installation with a different domain name while staying on this server." 
     158#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:553 
     159#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:594 
     160msgid "Do not forget that..." 
    143161msgstr "" 
    144162 
    145163#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:512 
     164msgid "Your files and database will not be transferred to another server." 
     165msgstr "" 
     166 
     167#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:513 
     168msgid "Only instances of your old domain name in the database will be replaced." 
     169msgstr "" 
     170 
     171#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:514 
     172msgid "You need to manually configure your server and new domain name to use it on this server." 
     173msgstr "" 
     174 
     175#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:515 
     176msgid "A backup of your database will be made available under the backup directory." 
     177msgstr "" 
     178 
     179#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:516 
     180msgid "Creating a manual backup of your database is still highly encouraged." 
     181msgstr "" 
     182 
     183#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:521 
     184#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:563 
     185#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:602 
     186msgid "Begin" 
     187msgstr "" 
     188 
     189#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:539 
     190#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:581 
     191msgid "If you wish to do one or more of the following..." 
     192msgstr "" 
     193 
     194#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:542 
     195msgid "Transfer your database to another server.\t" 
     196msgstr "" 
     197 
     198#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:543 
     199msgid "Transfer some/all of your files to another server." 
     200msgstr "" 
     201 
     202#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:544 
     203msgid "Use a different domain name on the target server." 
     204msgstr "" 
     205 
     206#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:547 
     207#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:588 
     208msgid "Make sure that..." 
     209msgstr "" 
     210 
     211#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:550 
     212msgid "WordPress and WordPress Move are installed on the target server." 
     213msgstr "" 
     214 
    146215#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:556 
     216msgid "This installation will stay as-is after the operation." 
     217msgstr "" 
     218 
     219#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:557 
     220msgid "You need to configure the plugin using the WordPress Move page under the Settings menu." 
     221msgstr "" 
     222 
     223#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:558 
     224msgid "You need to manually configure your existing domain to use it on the target server." 
     225msgstr "" 
     226 
     227#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:584 
     228msgid "Complete migrating to this server." 
     229msgstr "" 
     230 
     231#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:585 
     232msgid "Restore backup files listed under the Current Backups section of the Backup Manager." 
     233msgstr "" 
     234 
     235#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:591 
     236msgid "You have backup files to use for this process under the backup directory." 
     237msgstr "" 
     238 
    147239#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:597 
    148 msgid "Do not forget that..." 
    149 msgstr "" 
    150  
    151 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:515 
    152 msgid "Your files and database will not be transferred to another server." 
    153 msgstr "" 
    154  
    155 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:516 
    156 msgid "Only instances of your old domain name in the database will be replaced." 
    157 msgstr "" 
    158  
    159 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:517 
    160 msgid "You need to manually configure your server and new domain name to use it on this server." 
    161 msgstr "" 
    162  
    163 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:518 
    164 msgid "A backup of your database will be made available under the backup directory." 
    165 msgstr "" 
    166  
    167 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:519 
    168 msgid "Creating a manual backup of your database is still highly encouraged." 
    169 msgstr "" 
    170  
    171 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:524 
    172 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:566 
    173 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:606 
    174 msgid "Begin" 
    175 msgstr "" 
    176  
    177 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:542 
    178 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:584 
    179 msgid "If you wish to do one or more of the following..." 
    180 msgstr "" 
    181  
    182 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:545 
    183 msgid "Transfer your database to another server.\t" 
    184 msgstr "" 
    185  
    186 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:546 
    187 msgid "Transfer some/all of your files to another server." 
    188 msgstr "" 
    189  
    190 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:547 
    191 msgid "Use a different domain name on the target server." 
    192 msgstr "" 
    193  
    194 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:550 
    195 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:591 
    196 msgid "Make sure that..." 
    197 msgstr "" 
    198  
    199 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:553 
    200 msgid "WordPress and WordPress Move are installed on the target server." 
    201 msgstr "" 
    202  
    203 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:559 
    204 msgid "This installation will stay as-is after the operation." 
    205 msgstr "" 
    206  
    207 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:560 
    208 msgid "You need to configure the plugin using the WordPress Move page under the Settings menu." 
    209 msgstr "" 
    210  
    211 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:561 
    212 msgid "You need to manually configure your existing domain to use it on the target server." 
    213 msgstr "" 
    214  
    215 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:587 
    216 msgid "Complete migrating to this server." 
    217 msgstr "" 
    218  
    219 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:588 
    220 msgid "Restore backup files listed under the Current Backups section of the Backup Manager." 
    221 msgstr "" 
    222  
    223 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:594 
    224 msgid "You have backup files to use for this process under the backup directory." 
    225 msgstr "" 
    226  
    227 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:600 
    228 msgid "You can select which files to use in this method by visiting the Backup Manager." 
    229 msgstr "" 
    230  
    231 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:601 
    232240msgid "Backups will be processed starting from old to new." 
    233241msgstr "" 
    234242 
    235 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:664 
    236 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1179 
    237 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1190 
    238 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1272 
    239 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1286 
     243#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:660 
     244#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1027 
     245#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1041 
     246#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1133 
     247#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1149 
    240248msgid "Success!" 
    241249msgstr "" 
    242250 
    243 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:666 
     251#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:662 
    244252msgid "Your domain name has been changed successfully." 
    245253msgstr "" 
    246254 
    247 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:667 
     255#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:663 
    248256#, php-format 
    249257msgid "<a href=\"%s\">Click here</a> to go to your site using your new domain." 
    250258msgstr "" 
    251259 
     260#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:676 
     261msgid "Failure!" 
     262msgstr "" 
     263 
    252264#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:680 
    253 msgid "Failure!" 
    254 msgstr "" 
    255  
    256 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:684 
    257265msgid "An error occured while changing instances of your domain name." 
    258266msgstr "" 
    259267 
    260 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:704 
     268#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:700 
    261269msgid "Changes on your domain has been rolled back automatically." 
    262270msgstr "" 
    263271 
    264 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:712 
     272#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:708 
    265273msgid "Rolling back to the previous state also failed. Please try importing the database backup stored under the backup folder manually." 
    266274msgstr "" 
    267275 
    268 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:731 
     276#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:727 
    269277msgid "Changing Domain Name" 
    270278msgstr "" 
    271279 
    272 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:733 
     280#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:729 
    273281msgid "Please enter exact paths to your WordPress installations on both domains without the trailing slash. After replacing instances of your old domain name in the database with the new one completes, please do not forget to update your nameservers." 
    274282msgstr "" 
    275283 
    276 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:739 
    277 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:935 
    278 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1082 
     284#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:735 
     285#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:923 
    279286msgid "Old Domain Name" 
    280287msgstr "" 
    281288 
    282 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:747 
    283 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:943 
    284 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1090 
     289#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:743 
     290#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:931 
    285291msgid "New Domain Name" 
    286292msgstr "" 
    287293 
    288 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:756 
     294#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:752 
    289295msgid "Change" 
    290296msgstr "" 
    291297 
    292 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:797 
    293 msgid "Please select a migration type to proceed..." 
    294 msgstr "" 
    295  
    296 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:803 
    297 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:839 
    298 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:916 
    299 msgid "Simple Migration" 
    300 msgstr "" 
    301  
    302 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:806 
    303 msgid "Simple Migration creates a backup of your database and files excluding the plugin directory. Uploading backup files to the remote server starts once the backup files are created." 
    304 msgstr "" 
    305  
    306 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:811 
    307 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:979 
    308 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1063 
    309 msgid "Advanced Migration" 
    310 msgstr "" 
    311  
    312 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:814 
    313 msgid "Advanced Migration creates a backup of the database but lets you select the files to backup. Uploading backup files to the remote server starts once the backup files are created." 
    314 msgstr "" 
    315  
    316 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:885 
    317 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1031 
     298#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:835 
    318299msgid "Could not create backup files. Please make sure the backup directory is writable. For further info, please refer to the documentation." 
    319300msgstr "" 
    320301 
    321 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:893 
    322 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1039 
     302#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:843 
    323303msgid "Creating and uploading backups have been completed. You can now go to your new installation and run the migration assistant in Complete Migration mode." 
    324304msgstr "" 
    325305 
    326 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:902 
    327 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1048 
     306#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:852 
    328307msgid "Please check your FTP connection details on the settings page." 
    329308msgstr "" 
    330309 
    331 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:918 
    332 msgid "This will backup your database and files as is and upload them to the server you want to migrate to." 
    333 msgstr "" 
    334  
    335 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:922 
    336 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1069 
     310#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:869 
     311msgid "Please select the files you want to include in the backup from the list below." 
     312msgstr "" 
     313 
     314#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:878 
     315msgid "Start Migration" 
     316msgstr "" 
     317 
     318#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:898 
    337319msgid "If your FTP account uses a password, please enter it below." 
    338320msgstr "" 
    339321 
    340 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:924 
    341 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1071 
     322#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:900 
    342323msgid "FTP Password:" 
    343324msgstr "" 
    344325 
    345 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:929 
    346 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1076 
     326#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:917 
    347327msgid "Please enter the exact path to your WordPress installation on your new domain name without the trailing slash and then click Start Migration button to start the migration process." 
    348328msgstr "" 
    349329 
    350 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:955 
    351 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1142 
    352 msgid "Start Migration" 
    353 msgstr "" 
    354  
    355 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1065 
    356 msgid "Please select the files you want to include in the backup from the list below." 
    357 msgstr "" 
    358  
    359 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1102 
     330#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:953 
    360331msgid "Select All" 
    361332msgstr "" 
    362333 
    363 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1103 
     334#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:954 
    364335msgid "Unselect All" 
    365336msgstr "" 
    366337 
    367 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1123 
     338#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:974 
    368339msgid "Loading..." 
    369340msgstr "" 
    370341 
    371 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1171 
     342#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1018 
    372343#, php-format 
    373344msgid "Connecting to %s:%d..." 
    374345msgstr "" 
    375346 
    376 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1183 
     347#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1032 
    377348#, php-format 
    378349msgid "Logging in as %s using password..." 
    379350msgstr "" 
    380351 
    381 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1185 
     352#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1034 
    382353#, php-format 
    383354msgid "Logging in as %s without a password..." 
    384355msgstr "" 
    385356 
    386 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1190 
     357#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1041 
    387358msgid "Starting uploading files..." 
    388359msgstr "" 
    389360 
    390 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1200 
     361#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1053 
    391362#, php-format 
    392363msgid "%s is being uploaded..." 
    393364msgstr "" 
    394365 
     366#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1056 
     367msgid " Success!" 
     368msgstr "" 
     369 
     370#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1058 
     371#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1087 
     372msgid " Failed!" 
     373msgstr "" 
     374 
     375#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1066 
     376#, php-format 
     377msgid "Uploading files is completed with %d error..." 
     378msgstr "" 
     379 
     380#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1068 
     381msgid "Uploading files is completed without an error..." 
     382msgstr "" 
     383 
     384#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1073 
     385msgid "Closing the FTP connection..." 
     386msgstr "" 
     387 
     388#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1087 
     389msgid "Operation terminated..." 
     390msgstr "" 
     391 
     392#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1109 
     393#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1178 
     394msgid "Completing Migration" 
     395msgstr "" 
     396 
     397#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1128 
     398#, php-format 
     399msgid "%s is being imported... " 
     400msgstr "" 
     401 
     402#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1136 
     403#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1152 
     404msgid "Failed!" 
     405msgstr "" 
     406 
     407#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1144 
     408#, php-format 
     409msgid "%s is being extracted... " 
     410msgstr "" 
     411 
     412#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1160 
     413msgid "Please select files to migrate before proceeding!" 
     414msgstr "" 
     415 
     416#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1164 
     417#, php-format 
     418msgid "Migration has been completed but with %d error." 
     419msgstr "" 
     420 
     421#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1166 
     422msgid "Migration has been completed successfully!" 
     423msgstr "" 
     424 
     425#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1192 
     426msgid "Below are the files stored under the main backup directory. Please select backup files below to proceed." 
     427msgstr "" 
     428 
    395429#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1202 
    396 msgid " Success!" 
    397 msgstr "" 
    398  
    399 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1204 
    400 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1230 
    401 msgid " Failed!" 
    402 msgstr "" 
    403  
    404 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1211 
    405 #, php-format 
    406 msgid "Uploading files is completed with %d error..." 
    407 msgstr "" 
    408  
    409 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1213 
    410 msgid "Uploading files is completed without an error..." 
    411 msgstr "" 
    412  
    413 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1216 
    414 msgid "Closing the FTP connection..." 
    415 msgstr "" 
    416  
    417 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1230 
    418 msgid "Operation terminated..." 
    419 msgstr "" 
    420  
    421 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1252 
    422 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1310 
    423 msgid "Completing Migration" 
    424 msgstr "" 
    425  
    426 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1269 
    427 #, php-format 
    428 msgid "%s is being imported... " 
    429 msgstr "" 
    430  
    431 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1275 
    432 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1289 
    433 msgid "Failed!" 
    434 msgstr "" 
    435  
    436 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1283 
    437 #, php-format 
    438 msgid "%s is being extracted... " 
    439 msgstr "" 
    440  
    441 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1297 
    442 #, php-format 
    443 msgid "Migration has been completed but with %d error." 
    444 msgstr "" 
    445  
    446 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1299 
    447 msgid "Migration has been completed successfully!" 
    448 msgstr "" 
    449  
    450 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1324 
    451 msgid "Proceeding will use the following files and database backups. You can choose which files to use by going to the Backup Manager." 
    452 msgstr "" 
    453  
    454 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1333 
    455 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1352 
    456 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1553 
    457 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1572 
    458 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1679 
    459 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1698 
    460 msgid "Name" 
    461 msgstr "" 
    462  
    463 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1336 
    464 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1355 
     430#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1221 
     431#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1429 
     432#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1448 
    465433#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1556 
    466434#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1575 
    467 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1682 
    468 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1701 
    469 msgid "Type" 
    470 msgstr "" 
    471  
    472 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1339 
    473 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1358 
     435#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1681 
     436#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1700 
     437msgid "Name" 
     438msgstr "" 
     439 
     440#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1205 
     441#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1224 
     442#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1432 
     443#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1451 
    474444#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1559 
    475445#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1578 
    476 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1685 
    477 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1704 
    478 msgid "Size" 
    479 msgstr "" 
    480  
    481 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1342 
    482 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1361 
     446#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1684 
     447#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1703 
     448msgid "Type" 
     449msgstr "" 
     450 
     451#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1208 
     452#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1227 
     453#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1435 
     454#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1454 
    483455#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1562 
    484456#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1581 
    485 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1688 
    486 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1707 
     457#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1687 
     458#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1706 
     459msgid "Size" 
     460msgstr "" 
     461 
     462#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1211 
     463#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1230 
     464#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1438 
     465#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1457 
     466#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1565 
     467#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1584 
     468#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1690 
     469#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1709 
    487470msgid "Date Created" 
    488471msgstr "" 
    489472 
    490 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1379 
    491 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1605 
     473#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1248 
     474#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1481 
     475#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1608 
    492476#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1731 
    493477msgid "Database Backup" 
    494478msgstr "" 
    495479 
    496 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1382 
    497 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1608 
    498 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1734 
     480#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1251 
     481#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1484 
     482#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1611 
    499483msgid "Filesystem Backup" 
    500484msgstr "" 
    501485 
    502 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1422 
     486#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1290 
    503487msgid "Complete Migration" 
    504488msgstr "" 
    505489 
    506 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1427 
     490#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1295 
    507491msgid "There are no backup files to use to complete the migration. Please start the migration using WordPress Move on the server you want to migrate from." 
    508492msgstr "" 
    509493 
    510 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1504 
    511 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1819 
     494#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1375 
     495#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1826 
    512496msgid "Backup Manager" 
    513497msgstr "" 
    514498 
    515 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1504 
    516 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1505 
     499#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1375 
     500#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1376 
    517501msgid "Backup Now" 
    518502msgstr "" 
    519503 
    520 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1507 
     504#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1378 
    521505msgid "You can always create backups of your WordPress installation to use as restoration points. Select one of the methods below to create a quick backup." 
    522506msgstr "" 
    523507 
    524 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1513 
     508#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1384 
    525509msgid "Create a Database Backup" 
    526510msgstr "" 
    527511 
    528 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1515 
     512#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1386 
    529513msgid "Create a Full Backup" 
    530514msgstr "" 
    531515 
    532 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1519 
     516#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1390 
    533517msgid "Current Backups" 
    534518msgstr "" 
    535519 
    536 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1521 
     520#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1392 
    537521msgid "Below are the files stored under your backup directory. These files will be used if you choose to complete the migration." 
    538522msgstr "" 
    539523 
    540 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1540 
     524#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1415 
    541525msgid "Archive" 
    542526msgstr "" 
    543527 
    544 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1541 
    545 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1667 
     528#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1416 
     529#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1543 
     530msgid "Convert" 
     531msgstr "" 
     532 
     533#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1417 
     534#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1544 
     535#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1669 
    546536msgid "Delete" 
    547537msgstr "" 
    548538 
    549 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1543 
    550 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1669 
     539#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1419 
     540#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1546 
     541#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1671 
    551542msgid "Apply" 
    552543msgstr "" 
    553544 
    554 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1647 
    555 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1773 
     545#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1523 
     546#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1650 
    556547msgid "No backup files found." 
    557548msgstr "" 
    558549 
    559 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1656 
     550#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1532 
    560551msgid "Old Backups" 
    561552msgstr "" 
    562553 
    563 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1658 
     554#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1534 
    564555msgid "Below are the files stored under your old backup directory. These files will not be used while completing the migration unless you unarchive them." 
    565556msgstr "" 
    566557 
    567 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1666 
     558#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1542 
    568559msgid "Unarchive" 
    569560msgstr "" 
    570561 
    571 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1822 
     562#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1659 
     563msgid "Converted Database Backups" 
     564msgstr "" 
     565 
     566#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1661 
     567msgid "Below are the converted database backup files which, unlike the files listed above, can be used outside WordPress Move. You may need the converted versions of your databsae backups if the plugin fails to migrate your installation properly. These files will not be used by the plugin at any stage." 
     568msgstr "" 
     569 
     570#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1769 
     571msgid "No converted database backup files found. You can convert a database backup file using the Convert option from the dropdown lists above." 
     572msgstr "" 
     573 
     574#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1829 
    572575msgid "Settings" 
    573576msgstr "" 
    574577 
    575 #: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1822 
     578#: C:\xampp\htdocs\wp\wp-content\plugins\wordpress-move/wordpress-move.php:1829 
    576579msgid "WordPress Move" 
    577580msgstr "" 
  • wordpress-move/trunk/libs/functions-database-backup.php

    r459287 r493292  
    66 * @date 2011-11-04 02:42:00 +02:00 
    77 */ 
     8 
     9/** 
     10 * Converts the database backup to an SQL file. 
     11 * 
     12 * @param   string  $filename   Filename of the backup file 
     13 * @param   string  $directory  Directory the file is inside of (optional) 
     14 * @return  void 
     15 */ 
     16function wpmove_convert_db_backup( $filename ) { 
     17 
     18    if ( file_exists( $filename ) && preg_match( '/DBBackup-([0-9]*).sql/', basename( $filename ) ) ) { 
     19 
     20        // Read the whole database backup file into a variable 
     21        if ( $f = fopen( $filename, 'r' ) ) { 
     22            $serialized = fread( $f, filesize( $filename ) ); 
     23            fclose( $f ); 
     24        } else { 
     25            return false; 
     26        } 
     27 
     28        // Unserialize the queries 
     29        $queries = unserialize( $serialized ); 
     30 
     31        // Create an output file 
     32        $output = touch( trailingslashit( WPMOVE_CONVERTED_BACKUP_DIR ) . 'Converted-' . basename( $filename ) ); 
     33 
     34        // Display an error message if creating an output file fails 
     35        if ( ! $output ) 
     36            return false; 
     37 
     38        // Open the output file and write each query one by one 
     39        if ( $f = fopen( trailingslashit( WPMOVE_CONVERTED_BACKUP_DIR ) . 'Converted-' . basename( $filename ), 'w' ) ) { 
     40            foreach ( $queries as $q ) 
     41                fwrite( $f, $q, strlen( $q ) ); 
     42            fclose( $f ); 
     43        } else { 
     44            return false; 
     45        } 
     46 
     47        return true; 
     48    } 
     49 
     50    return false; 
     51} 
    852 
    953/** 
  • wordpress-move/trunk/libs/js/jquery.jstree.js

    r426854 r493292  
    1212 * $Revision: 236 $ 
    1313 */ 
    14  
    15 /*jslint browser: true, onevar: true, undef: true, bitwise: true, strict: true */ 
    16 /*global window : false, clearInterval: false, clearTimeout: false, document: false, setInterval: false, setTimeout: false, jQuery: false, navigator: false, XSLTProcessor: false, DOMParser: false, XMLSerializer: false*/ 
    17  
    18 "use strict"; 
    19  
    20 // top wrapper to prevent multiple inclusion (is this OK?) 
    21 (function () { if(jQuery && jQuery.jstree) { return; } 
    22     var is_ie6 = false, is_ie7 = false, is_ff2 = false; 
    23  
    24 /*  
    25  * jsTree core 
    26  */ 
    27 (function ($) { 
    28     // Common functions not related to jsTree  
    29     // decided to move them to a `vakata` "namespace" 
    30     $.vakata = {}; 
    31     // CSS related functions 
    32     $.vakata.css = { 
    33         get_css : function(rule_name, delete_flag, sheet) { 
    34             rule_name = rule_name.toLowerCase(); 
    35             var css_rules = sheet.cssRules || sheet.rules, 
    36                 j = 0; 
    37             do { 
    38                 if(css_rules.length && j > css_rules.length + 5) { return false; } 
    39                 if(css_rules[j].selectorText && css_rules[j].selectorText.toLowerCase() == rule_name) { 
    40                     if(delete_flag === true) { 
    41                         if(sheet.removeRule) { sheet.removeRule(j); } 
    42                         if(sheet.deleteRule) { sheet.deleteRule(j); } 
    43                         return true; 
    44                     } 
    45                     else { return css_rules[j]; } 
    46                 } 
    47             } 
    48             while (css_rules[++j]); 
    49             return false; 
    50         }, 
    51         add_css : function(rule_name, sheet) { 
    52             if($.jstree.css.get_css(rule_name, false, sheet)) { return false; } 
    53             if(sheet.insertRule) { sheet.insertRule(rule_name + ' { }', 0); } else { sheet.addRule(rule_name, null, 0); } 
    54             return $.vakata.css.get_css(rule_name); 
    55         }, 
    56         remove_css : function(rule_name, sheet) {  
    57             return $.vakata.css.get_css(rule_name, true, sheet);  
    58         }, 
    59         add_sheet : function(opts) { 
    60             var tmp = false, is_new = true; 
    61             if(opts.str) { 
    62                 if(opts.title) { tmp = $("style[id='" + opts.title + "-stylesheet']")[0]; } 
    63                 if(tmp) { is_new = false; } 
    64                 else { 
    65                     tmp = document.createElement("style"); 
    66                     tmp.setAttribute('type',"text/css"); 
    67                     if(opts.title) { tmp.setAttribute("id", opts.title + "-stylesheet"); } 
    68                 } 
    69                 if(tmp.styleSheet) { 
    70                     if(is_new) {  
    71                         document.getElementsByTagName("head")[0].appendChild(tmp);  
    72                         tmp.styleSheet.cssText = opts.str;  
    73                     } 
    74                     else { 
    75                         tmp.styleSheet.cssText = tmp.styleSheet.cssText + " " + opts.str;  
    76                     } 
    77                 } 
    78                 else { 
    79                     tmp.appendChild(document.createTextNode(opts.str)); 
    80                     document.getElementsByTagName("head")[0].appendChild(tmp); 
    81                 } 
    82                 return tmp.sheet || tmp.styleSheet; 
    83             } 
    84             if(opts.url) { 
    85                 if(document.createStyleSheet) { 
    86                     try { tmp = document.createStyleSheet(opts.url); } catch (e) { } 
    87                 } 
    88                 else { 
    89                     tmp         = document.createElement('link'); 
    90                     tmp.rel     = 'stylesheet'; 
    91                     tmp.type    = 'text/css'; 
    92                     tmp.media   = "all"; 
    93                     tmp.href    = opts.url; 
    94                     document.getElementsByTagName("head")[0].appendChild(tmp); 
    95                     return tmp.styleSheet; 
    96                 } 
    97             } 
    98         } 
    99     }; 
    100  
    101     // private variables  
    102     var instances = [],         // instance array (used by $.jstree.reference/create/focused) 
    103         focused_instance = -1,  // the index in the instance array of the currently focused instance 
    104         plugins = {},           // list of included plugins 
    105         prepared_move = {};     // for the move_node function 
    106  
    107     // jQuery plugin wrapper (thanks to jquery UI widget function) 
    108     $.fn.jstree = function (settings) { 
    109         var isMethodCall = (typeof settings == 'string'), // is this a method call like $().jstree("open_node") 
    110             args = Array.prototype.slice.call(arguments, 1),  
    111             returnValue = this; 
    112  
    113         // if a method call execute the method on all selected instances 
    114         if(isMethodCall) { 
    115             if(settings.substring(0, 1) == '_') { return returnValue; } 
    116             this.each(function() { 
    117                 var instance = instances[$.data(this, "jstree_instance_id")], 
    118                     methodValue = (instance && $.isFunction(instance[settings])) ? instance[settings].apply(instance, args) : instance; 
    119                     if(typeof methodValue !== "undefined" && (settings.indexOf("is_") === 0 || (methodValue !== true && methodValue !== false))) { returnValue = methodValue; return false; } 
    120             }); 
    121         } 
    122         else { 
    123             this.each(function() { 
    124                 // extend settings and allow for multiple hashes and $.data 
    125                 var instance_id = $.data(this, "jstree_instance_id"), 
    126                     a = [], 
    127                     b = settings ? $.extend({}, true, settings) : {}, 
    128                     c = $(this),  
    129                     s = false,  
    130                     t = []; 
    131                 a = a.concat(args); 
    132                 if(c.data("jstree")) { a.push(c.data("jstree")); } 
    133                 b = a.length ? $.extend.apply(null, [true, b].concat(a)) : b; 
    134  
    135                 // if an instance already exists, destroy it first 
    136                 if(typeof instance_id !== "undefined" && instances[instance_id]) { instances[instance_id].destroy(); } 
    137                 // push a new empty object to the instances array 
    138                 instance_id = parseInt(instances.push({}),10) - 1; 
    139                 // store the jstree instance id to the container element 
    140                 $.data(this, "jstree_instance_id", instance_id); 
    141                 // clean up all plugins 
    142                 b.plugins = $.isArray(b.plugins) ? b.plugins : $.jstree.defaults.plugins.slice(); 
    143                 b.plugins.unshift("core"); 
    144                 // only unique plugins 
    145                 b.plugins = b.plugins.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(","); 
    146  
    147                 // extend defaults with passed data 
    148                 s = $.extend(true, {}, $.jstree.defaults, b); 
    149                 s.plugins = b.plugins; 
    150                 $.each(plugins, function (i, val) {  
    151                     if($.inArray(i, s.plugins) === -1) { s[i] = null; delete s[i]; }  
    152                     else { t.push(i); } 
    153                 }); 
    154                 s.plugins = t; 
    155  
    156                 // push the new object to the instances array (at the same time set the default classes to the container) and init 
    157                 instances[instance_id] = new $.jstree._instance(instance_id, $(this).addClass("jstree jstree-" + instance_id), s);  
    158                 // init all activated plugins for this instance 
    159                 $.each(instances[instance_id]._get_settings().plugins, function (i, val) { instances[instance_id].data[val] = {}; }); 
    160                 $.each(instances[instance_id]._get_settings().plugins, function (i, val) { if(plugins[val]) { plugins[val].__init.apply(instances[instance_id]); } }); 
    161                 // initialize the instance 
    162                 setTimeout(function() { if(instances[instance_id]) { instances[instance_id].init(); } }, 0); 
    163             }); 
    164         } 
    165         // return the jquery selection (or if it was a method call that returned a value - the returned value) 
    166         return returnValue; 
    167     }; 
    168     // object to store exposed functions and objects 
    169     $.jstree = { 
    170         defaults : { 
    171             plugins : [] 
    172         }, 
    173         _focused : function () { return instances[focused_instance] || null; }, 
    174         _reference : function (needle) {  
    175             // get by instance id 
    176             if(instances[needle]) { return instances[needle]; } 
    177             // get by DOM (if still no luck - return null 
    178             var o = $(needle);  
    179             if(!o.length && typeof needle === "string") { o = $("#" + needle); } 
    180             if(!o.length) { return null; } 
    181             return instances[o.closest(".jstree").data("jstree_instance_id")] || null;  
    182         }, 
    183         _instance : function (index, container, settings) {  
    184             // for plugins to store data in 
    185             this.data = { core : {} }; 
    186             this.get_settings   = function () { return $.extend(true, {}, settings); }; 
    187             this._get_settings  = function () { return settings; }; 
    188             this.get_index      = function () { return index; }; 
    189             this.get_container  = function () { return container; }; 
    190             this.get_container_ul = function () { return container.children("ul:eq(0)"); }; 
    191             this._set_settings  = function (s) {  
    192                 settings = $.extend(true, {}, settings, s); 
    193             }; 
    194         }, 
    195         _fn : { }, 
    196         plugin : function (pname, pdata) { 
    197             pdata = $.extend({}, { 
    198                 __init      : $.noop,  
    199                 __destroy   : $.noop, 
    200                 _fn         : {}, 
    201                 defaults    : false 
    202             }, pdata); 
    203             plugins[pname] = pdata; 
    204  
    205             $.jstree.defaults[pname] = pdata.defaults; 
    206             $.each(pdata._fn, function (i, val) { 
    207                 val.plugin      = pname; 
    208                 val.old         = $.jstree._fn[i]; 
    209                 $.jstree._fn[i] = function () { 
    210                     var rslt, 
    211                         func = val, 
    212                         args = Array.prototype.slice.call(arguments), 
    213                         evnt = new $.Event("before.jstree"), 
    214                         rlbk = false; 
    215  
    216                     if(this.data.core.locked === true && i !== "unlock" && i !== "is_locked") { return; } 
    217  
    218                     // Check if function belongs to the included plugins of this instance 
    219                     do { 
    220                         if(func && func.plugin && $.inArray(func.plugin, this._get_settings().plugins) !== -1) { break; } 
    221                         func = func.old; 
    222                     } while(func); 
    223                     if(!func) { return; } 
    224  
    225                     // context and function to trigger events, then finally call the function 
    226                     if(i.indexOf("_") === 0) { 
    227                         rslt = func.apply(this, args); 
    228                     } 
    229                     else { 
    230                         rslt = this.get_container().triggerHandler(evnt, { "func" : i, "inst" : this, "args" : args, "plugin" : func.plugin }); 
    231                         if(rslt === false) { return; } 
    232                         if(typeof rslt !== "undefined") { args = rslt; } 
    233  
    234                         rslt = func.apply( 
    235                             $.extend({}, this, {  
    236                                 __callback : function (data) {  
    237                                     this.get_container().triggerHandler( i + '.jstree', { "inst" : this, "args" : args, "rslt" : data, "rlbk" : rlbk }); 
    238                                 }, 
    239                                 __rollback : function () {  
    240                                     rlbk = this.get_rollback(); 
    241                                     return rlbk; 
    242                                 }, 
    243                                 __call_old : function (replace_arguments) { 
    244                                     return func.old.apply(this, (replace_arguments ? Array.prototype.slice.call(arguments, 1) : args ) ); 
    245                                 } 
    246                             }), args); 
    247                     } 
    248  
    249                     // return the result 
    250                     return rslt; 
    251                 }; 
    252                 $.jstree._fn[i].old = val.old; 
    253                 $.jstree._fn[i].plugin = pname; 
    254             }); 
    255         }, 
    256         rollback : function (rb) { 
    257             if(rb) { 
    258                 if(!$.isArray(rb)) { rb = [ rb ]; } 
    259                 $.each(rb, function (i, val) { 
    260                     instances[val.i].set_rollback(val.h, val.d); 
    261                 }); 
    262             } 
    263         } 
    264     }; 
    265     // set the prototype for all instances 
    266     $.jstree._fn = $.jstree._instance.prototype = {}; 
    267  
    268     // load the css when DOM is ready 
    269     $(function() { 
    270         // code is copied from jQuery ($.browser is deprecated + there is a bug in IE) 
    271         var u = navigator.userAgent.toLowerCase(), 
    272             v = (u.match( /.+?(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1], 
    273             css_string = '' +  
    274                 '.jstree ul, .jstree li { display:block; margin:0 0 0 0; padding:0 0 0 0; list-style-type:none; } ' +  
    275                 '.jstree li { display:block; min-height:18px; line-height:18px; white-space:nowrap; margin-left:18px; min-width:18px; } ' +  
    276                 '.jstree-rtl li { margin-left:0; margin-right:18px; } ' +  
    277                 '.jstree > ul > li { margin-left:0px; } ' +  
    278                 '.jstree-rtl > ul > li { margin-right:0px; } ' +  
    279                 '.jstree ins { display:inline-block; text-decoration:none; width:18px; height:18px; margin:0 0 0 0; padding:0; } ' +  
    280                 '.jstree a { display:inline-block; line-height:16px; height:16px; color:black; white-space:nowrap; text-decoration:none; padding:1px 2px; margin:0; } ' +  
    281                 '.jstree a:focus { outline: none; } ' +  
    282                 '.jstree a > ins { height:16px; width:16px; } ' +  
    283                 '.jstree a > .jstree-icon { margin-right:3px; } ' +  
    284                 '.jstree-rtl a > .jstree-icon { margin-left:3px; margin-right:0; } ' +  
    285                 'li.jstree-open > ul { display:block; } ' +  
    286                 'li.jstree-closed > ul { display:none; } '; 
    287         // Correct IE 6 (does not support the > CSS selector) 
    288         if(/msie/.test(u) && parseInt(v, 10) == 6) {  
    289             is_ie6 = true; 
    290  
    291             // fix image flicker and lack of caching 
    292             try { 
    293                 document.execCommand("BackgroundImageCache", false, true); 
    294             } catch (err) { } 
    295  
    296             css_string += '' +  
    297                 '.jstree li { height:18px; margin-left:0; margin-right:0; } ' +  
    298                 '.jstree li li { margin-left:18px; } ' +  
    299                 '.jstree-rtl li li { margin-left:0px; margin-right:18px; } ' +  
    300                 'li.jstree-open ul { display:block; } ' +  
    301                 'li.jstree-closed ul { display:none !important; } ' +  
    302                 '.jstree li a { display:inline; border-width:0 !important; padding:0px 2px !important; } ' +  
    303                 '.jstree li a ins { height:16px; width:16px; margin-right:3px; } ' +  
    304                 '.jstree-rtl li a ins { margin-right:0px; margin-left:3px; } '; 
    305         } 
    306         // Correct IE 7 (shifts anchor nodes onhover) 
    307         if(/msie/.test(u) && parseInt(v, 10) == 7) {  
    308             is_ie7 = true; 
    309             css_string += '.jstree li a { border-width:0 !important; padding:0px 2px !important; } '; 
    310         } 
    311         // correct ff2 lack of display:inline-block 
    312         if(!/compatible/.test(u) && /mozilla/.test(u) && parseFloat(v, 10) < 1.9) { 
    313             is_ff2 = true; 
    314             css_string += '' +  
    315                 '.jstree ins { display:-moz-inline-box; } ' +  
    316                 '.jstree li { line-height:12px; } ' + // WHY?? 
    317                 '.jstree a { display:-moz-inline-box; } ' +  
    318                 '.jstree .jstree-no-icons .jstree-checkbox { display:-moz-inline-stack !important; } '; 
    319                 /* this shouldn't be here as it is theme specific */ 
    320         } 
    321         // the default stylesheet 
    322         $.vakata.css.add_sheet({ str : css_string, title : "jstree" }); 
    323     }); 
    324  
    325     // core functions (open, close, create, update, delete) 
    326     $.jstree.plugin("core", { 
    327         __init : function () { 
    328             this.data.core.locked = false; 
    329             this.data.core.to_open = this.get_settings().core.initially_open; 
    330             this.data.core.to_load = this.get_settings().core.initially_load; 
    331         }, 
    332         defaults : {  
    333             html_titles : false, 
    334             animation   : 500, 
    335             initially_open : [], 
    336             initially_load : [], 
    337             open_parents : true, 
    338             notify_plugins : true, 
    339             rtl         : false, 
    340             load_open   : false, 
    341             strings     : { 
    342                 loading     : "Loading ...", 
    343                 new_node    : "New node", 
    344                 multiple_selection : "Multiple selection" 
    345             } 
    346         }, 
    347         _fn : {  
    348             init    : function () {  
    349                 this.set_focus();  
    350                 if(this._get_settings().core.rtl) { 
    351                     this.get_container().addClass("jstree-rtl").css("direction", "rtl"); 
    352                 } 
    353                 this.get_container().html("<ul><li class='jstree-last jstree-leaf'><ins>&#160;</ins><a class='jstree-loading' href='#'><ins class='jstree-icon'>&#160;</ins>" + this._get_string("loading") + "</a></li></ul>"); 
    354                 this.data.core.li_height = this.get_container_ul().find("li.jstree-closed, li.jstree-leaf").eq(0).height() || 18; 
    355  
    356                 this.get_container() 
    357                     .delegate("li > ins", "click.jstree", $.proxy(function (event) { 
    358                             var trgt = $(event.target); 
    359                             // if(trgt.is("ins") && event.pageY - trgt.offset().top < this.data.core.li_height) { this.toggle_node(trgt); } 
    360                             this.toggle_node(trgt); 
    361                         }, this)) 
    362                     .bind("mousedown.jstree", $.proxy(function () {  
    363                             this.set_focus(); // This used to be setTimeout(set_focus,0) - why? 
    364                         }, this)) 
    365                     .bind("dblclick.jstree", function (event) {  
    366                         var sel; 
    367                         if(document.selection && document.selection.empty) { document.selection.empty(); } 
    368                         else { 
    369                             if(window.getSelection) { 
    370                                 sel = window.getSelection(); 
    371                                 try {  
    372                                     sel.removeAllRanges(); 
    373                                     sel.collapse(); 
    374                                 } catch (err) { } 
    375                             } 
    376                         } 
    377                     }); 
    378                 if(this._get_settings().core.notify_plugins) { 
    379                     this.get_container() 
    380                         .bind("load_node.jstree", $.proxy(function (e, data) {  
    381                                 var o = this._get_node(data.rslt.obj), 
    382                                     t = this; 
    383                                 if(o === -1) { o = this.get_container_ul(); } 
    384                                 if(!o.length) { return; } 
    385                                 o.find("li").each(function () { 
    386                                     var th = $(this); 
    387                                     if(th.data("jstree")) { 
    388                                         $.each(th.data("jstree"), function (plugin, values) { 
    389                                             if(t.data[plugin] && $.isFunction(t["_" + plugin + "_notify"])) { 
    390                                                 t["_" + plugin + "_notify"].call(t, th, values); 
    391                                             } 
    392                                         }); 
    393                                     } 
    394                                 }); 
    395                             }, this)); 
    396                 } 
    397                 if(this._get_settings().core.load_open) { 
    398                     this.get_container() 
    399                         .bind("load_node.jstree", $.proxy(function (e, data) {  
    400                                 var o = this._get_node(data.rslt.obj), 
    401                                     t = this; 
    402                                 if(o === -1) { o = this.get_container_ul(); } 
    403                                 if(!o.length) { return; } 
    404                                 o.find("li.jstree-open:not(:has(ul))").each(function () { 
    405                                     t.load_node(this, $.noop, $.noop); 
    406                                 }); 
    407                             }, this)); 
    408                 } 
    409                 this.__callback(); 
    410                 this.load_node(-1, function () { this.loaded(); this.reload_nodes(); }); 
    411             }, 
    412             destroy : function () {  
    413                 var i, 
    414                     n = this.get_index(), 
    415                     s = this._get_settings(), 
    416                     _this = this; 
    417  
    418                 $.each(s.plugins, function (i, val) { 
    419                     try { plugins[val].__destroy.apply(_this); } catch(err) { } 
    420                 }); 
    421                 this.__callback(); 
    422                 // set focus to another instance if this one is focused 
    423                 if(this.is_focused()) {  
    424                     for(i in instances) {  
    425                         if(instances.hasOwnProperty(i) && i != n) {  
    426                             instances[i].set_focus();  
    427                             break;  
    428                         }  
    429                     } 
    430                 } 
    431                 // if no other instance found 
    432                 if(n === focused_instance) { focused_instance = -1; } 
    433                 // remove all traces of jstree in the DOM (only the ones set using jstree*) and cleans all events 
    434                 this.get_container() 
    435                     .unbind(".jstree") 
    436                     .undelegate(".jstree") 
    437                     .removeData("jstree_instance_id") 
    438                     .find("[class^='jstree']") 
    439                         .andSelf() 
    440                         .attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); }); 
    441                 $(document) 
    442                     .unbind(".jstree-" + n) 
    443                     .undelegate(".jstree-" + n); 
    444                 // remove the actual data 
    445                 instances[n] = null; 
    446                 delete instances[n]; 
    447             }, 
    448  
    449             _core_notify : function (n, data) { 
    450                 if(data.opened) { 
    451                     this.open_node(n, false, true); 
    452                 } 
    453             }, 
    454  
    455             lock : function () { 
    456                 this.data.core.locked = true; 
    457                 this.get_container().children("ul").addClass("jstree-locked").css("opacity","0.7"); 
    458                 this.__callback({}); 
    459             }, 
    460             unlock : function () { 
    461                 this.data.core.locked = false; 
    462                 this.get_container().children("ul").removeClass("jstree-locked").css("opacity","1"); 
    463                 this.__callback({}); 
    464             }, 
    465             is_locked : function () { return this.data.core.locked; }, 
    466             save_opened : function () { 
    467                 var _this = this; 
    468                 this.data.core.to_open = []; 
    469                 this.get_container_ul().find("li.jstree-open").each(function () {  
    470                     if(this.id) { _this.data.core.to_open.push("#" + this.id.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:")); } 
    471                 }); 
    472                 this.__callback(_this.data.core.to_open); 
    473             }, 
    474             save_loaded : function () { }, 
    475             reload_nodes : function (is_callback) { 
    476                 var _this = this, 
    477                     done = true, 
    478                     current = [], 
    479                     remaining = []; 
    480                 if(!is_callback) {  
    481                     this.data.core.reopen = false;  
    482                     this.data.core.refreshing = true;  
    483                     this.data.core.to_open = $.map($.makeArray(this.data.core.to_open), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); }); 
    484                     this.data.core.to_load = $.map($.makeArray(this.data.core.to_load), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); }); 
    485                     if(this.data.core.to_open.length) { 
    486                         this.data.core.to_load = this.data.core.to_load.concat(this.data.core.to_open); 
    487                     } 
    488                 } 
    489                 if(this.data.core.to_load.length) { 
    490                     $.each(this.data.core.to_load, function (i, val) { 
    491                         if(val == "#") { return true; } 
    492                         if($(val).length) { current.push(val); } 
    493                         else { remaining.push(val); } 
    494                     }); 
    495                     if(current.length) { 
    496                         this.data.core.to_load = remaining; 
    497                         $.each(current, function (i, val) {  
    498                             if(!_this._is_loaded(val)) { 
    499                                 _this.load_node(val, function () { _this.reload_nodes(true); }, function () { _this.reload_nodes(true); }); 
    500                                 done = false; 
    501                             } 
    502                         }); 
    503                     } 
    504                 } 
    505                 if(this.data.core.to_open.length) { 
    506                     $.each(this.data.core.to_open, function (i, val) { 
    507                         _this.open_node(val, false, true);  
    508                     }); 
    509                 } 
    510                 if(done) {  
    511                     // TODO: find a more elegant approach to syncronizing returning requests 
    512                     if(this.data.core.reopen) { clearTimeout(this.data.core.reopen); } 
    513                     this.data.core.reopen = setTimeout(function () { _this.__callback({}, _this); }, 50); 
    514                     this.data.core.refreshing = false; 
    515                     this.reopen(); 
    516                 } 
    517             }, 
    518             reopen : function () { 
    519                 var _this = this; 
    520                 if(this.data.core.to_open.length) { 
    521                     $.each(this.data.core.to_open, function (i, val) { 
    522                         _this.open_node(val, false, true);  
    523                     }); 
    524                 } 
    525                 this.__callback({}); 
    526             }, 
    527             refresh : function (obj) { 
    528                 var _this = this; 
    529                 this.save_opened(); 
    530                 if(!obj) { obj = -1; } 
    531                 obj = this._get_node(obj); 
    532                 if(!obj) { obj = -1; } 
    533                 if(obj !== -1) { obj.children("UL").remove(); } 
    534                 else { this.get_container_ul().empty(); } 
    535                 this.load_node(obj, function () { _this.__callback({ "obj" : obj}); _this.reload_nodes(); }); 
    536             }, 
    537             // Dummy function to fire after the first load (so that there is a jstree.loaded event) 
    538             loaded  : function () {  
    539                 this.__callback();  
    540             }, 
    541             // deal with focus 
    542             set_focus   : function () {  
    543                 if(this.is_focused()) { return; } 
    544                 var f = $.jstree._focused(); 
    545                 if(f) { f.unset_focus(); } 
    546  
    547                 this.get_container().addClass("jstree-focused");  
    548                 focused_instance = this.get_index();  
    549                 this.__callback(); 
    550             }, 
    551             is_focused  : function () {  
    552                 return focused_instance == this.get_index();  
    553             }, 
    554             unset_focus : function () { 
    555                 if(this.is_focused()) { 
    556                     this.get_container().removeClass("jstree-focused");  
    557                     focused_instance = -1;  
    558                 } 
    559                 this.__callback(); 
    560             }, 
    561  
    562             // traverse 
    563             _get_node       : function (obj) {  
    564                 var $obj = $(obj, this.get_container());  
    565                 if($obj.is(".jstree") || obj == -1) { return -1; }  
    566                 $obj = $obj.closest("li", this.get_container());  
    567                 return $obj.length ? $obj : false;  
    568             }, 
    569             _get_next       : function (obj, strict) { 
    570                 obj = this._get_node(obj); 
    571                 if(obj === -1) { return this.get_container().find("> ul > li:first-child"); } 
    572                 if(!obj.length) { return false; } 
    573                 if(strict) { return (obj.nextAll("li").size() > 0) ? obj.nextAll("li:eq(0)") : false; } 
    574  
    575                 if(obj.hasClass("jstree-open")) { return obj.find("li:eq(0)"); } 
    576                 else if(obj.nextAll("li").size() > 0) { return obj.nextAll("li:eq(0)"); } 
    577                 else { return obj.parentsUntil(".jstree","li").next("li").eq(0); } 
    578             }, 
    579             _get_prev       : function (obj, strict) { 
    580                 obj = this._get_node(obj); 
    581                 if(obj === -1) { return this.get_container().find("> ul > li:last-child"); } 
    582                 if(!obj.length) { return false; } 
    583                 if(strict) { return (obj.prevAll("li").length > 0) ? obj.prevAll("li:eq(0)") : false; } 
    584  
    585                 if(obj.prev("li").length) { 
    586                     obj = obj.prev("li").eq(0); 
    587                     while(obj.hasClass("jstree-open")) { obj = obj.children("ul:eq(0)").children("li:last"); } 
    588                     return obj; 
    589                 } 
    590                 else { var o = obj.parentsUntil(".jstree","li:eq(0)"); return o.length ? o : false; } 
    591             }, 
    592             _get_parent     : function (obj) { 
    593                 obj = this._get_node(obj); 
    594                 if(obj == -1 || !obj.length) { return false; } 
    595                 var o = obj.parentsUntil(".jstree", "li:eq(0)"); 
    596                 return o.length ? o : -1; 
    597             }, 
    598             _get_children   : function (obj) { 
    599                 obj = this._get_node(obj); 
    600                 if(obj === -1) { return this.get_container().children("ul:eq(0)").children("li"); } 
    601                 if(!obj.length) { return false; } 
    602                 return obj.children("ul:eq(0)").children("li"); 
    603             }, 
    604             get_path        : function (obj, id_mode) { 
    605                 var p = [], 
    606                     _this = this; 
    607                 obj = this._get_node(obj); 
    608                 if(obj === -1 || !obj || !obj.length) { return false; } 
    609                 obj.parentsUntil(".jstree", "li").each(function () { 
    610                     p.push( id_mode ? this.id : _this.get_text(this) ); 
    611                 }); 
    612                 p.reverse(); 
    613                 p.push( id_mode ? obj.attr("id") : this.get_text(obj) ); 
    614                 return p; 
    615             }, 
    616  
    617             // string functions 
    618             _get_string : function (key) { 
    619                 return this._get_settings().core.strings[key] || key; 
    620             }, 
    621  
    622             is_open     : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-open"); }, 
    623             is_closed   : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-closed"); }, 
    624             is_leaf     : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-leaf"); }, 
    625             correct_state   : function (obj) { 
    626                 obj = this._get_node(obj); 
    627                 if(!obj || obj === -1) { return false; } 
    628                 obj.removeClass("jstree-closed jstree-open").addClass("jstree-leaf").children("ul").remove(); 
    629                 this.__callback({ "obj" : obj }); 
    630             }, 
    631             // open/close 
    632             open_node   : function (obj, callback, skip_animation) { 
    633                 obj = this._get_node(obj); 
    634                 if(!obj.length) { return false; } 
    635                 if(!obj.hasClass("jstree-closed")) { if(callback) { callback.call(); } return false; } 
    636                 var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation, 
    637                     t = this; 
    638                 if(!this._is_loaded(obj)) { 
    639                     obj.children("a").addClass("jstree-loading"); 
    640                     this.load_node(obj, function () { t.open_node(obj, callback, skip_animation); }, callback); 
    641                 } 
    642                 else { 
    643                     if(this._get_settings().core.open_parents) { 
    644                         obj.parentsUntil(".jstree",".jstree-closed").each(function () { 
    645                             t.open_node(this, false, true); 
    646                         }); 
    647                     } 
    648                     if(s) { obj.children("ul").css("display","none"); } 
    649                     obj.removeClass("jstree-closed").addClass("jstree-open").children("a").removeClass("jstree-loading"); 
    650                     if(s) { obj.children("ul").stop(true, true).slideDown(s, function () { this.style.display = ""; t.after_open(obj); }); } 
    651                     else { t.after_open(obj); } 
    652                     this.__callback({ "obj" : obj }); 
    653                     if(callback) { callback.call(); } 
    654                 } 
    655             }, 
    656             after_open  : function (obj) { this.__callback({ "obj" : obj }); }, 
    657             close_node  : function (obj, skip_animation) { 
    658                 obj = this._get_node(obj); 
    659                 var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation, 
    660                     t = this; 
    661                 if(!obj.length || !obj.hasClass("jstree-open")) { return false; } 
    662                 if(s) { obj.children("ul").attr("style","display:block !important"); } 
    663                 obj.removeClass("jstree-open").addClass("jstree-closed"); 
    664                 if(s) { obj.children("ul").stop(true, true).slideUp(s, function () { this.style.display = ""; t.after_close(obj); }); } 
    665                 else { t.after_close(obj); } 
    666                 this.__callback({ "obj" : obj }); 
    667             }, 
    668             after_close : function (obj) { this.__callback({ "obj" : obj }); }, 
    669             toggle_node : function (obj) { 
    670                 obj = this._get_node(obj); 
    671                 if(obj.hasClass("jstree-closed")) { return this.open_node(obj); } 
    672                 if(obj.hasClass("jstree-open")) { return this.close_node(obj); } 
    673             }, 
    674             open_all    : function (obj, do_animation, original_obj) { 
    675                 obj = obj ? this._get_node(obj) : -1; 
    676                 if(!obj || obj === -1) { obj = this.get_container_ul(); } 
    677                 if(original_obj) {  
    678                     obj = obj.find("li.jstree-closed"); 
    679                 } 
    680                 else { 
    681                     original_obj = obj; 
    682                     if(obj.is(".jstree-closed")) { obj = obj.find("li.jstree-closed").andSelf(); } 
    683                     else { obj = obj.find("li.jstree-closed"); } 
    684                 } 
    685                 var _this = this; 
    686                 obj.each(function () {  
    687                     var __this = this;  
    688                     if(!_this._is_loaded(this)) { _this.open_node(this, function() { _this.open_all(__this, do_animation, original_obj); }, !do_animation); } 
    689                     else { _this.open_node(this, false, !do_animation); } 
    690                 }); 
    691                 // so that callback is fired AFTER all nodes are open 
    692                 if(original_obj.find('li.jstree-closed').length === 0) { this.__callback({ "obj" : original_obj }); } 
    693             }, 
    694             close_all   : function (obj, do_animation) { 
    695                 var _this = this; 
    696                 obj = obj ? this._get_node(obj) : this.get_container(); 
    697                 if(!obj || obj === -1) { obj = this.get_container_ul(); } 
    698                 obj.find("li.jstree-open").andSelf().each(function () { _this.close_node(this, !do_animation); }); 
    699                 this.__callback({ "obj" : obj }); 
    700             }, 
    701             clean_node  : function (obj) { 
    702                 obj = obj && obj != -1 ? $(obj) : this.get_container_ul(); 
    703                 obj = obj.is("li") ? obj.find("li").andSelf() : obj.find("li"); 
    704                 obj.removeClass("jstree-last") 
    705                     .filter("li:last-child").addClass("jstree-last").end() 
    706                     .filter(":has(li)") 
    707                         .not(".jstree-open").removeClass("jstree-leaf").addClass("jstree-closed"); 
    708                 obj.not(".jstree-open, .jstree-closed").addClass("jstree-leaf").children("ul").remove(); 
    709                 this.__callback({ "obj" : obj }); 
    710             }, 
    711             // rollback 
    712             get_rollback : function () {  
    713                 this.__callback(); 
    714                 return { i : this.get_index(), h : this.get_container().children("ul").clone(true), d : this.data };  
    715             }, 
    716             set_rollback : function (html, data) { 
    717                 this.get_container().empty().append(html); 
    718                 this.data = data; 
    719                 this.__callback(); 
    720             }, 
    721             // Dummy functions to be overwritten by any datastore plugin included 
    722             load_node   : function (obj, s_call, e_call) { this.__callback({ "obj" : obj }); }, 
    723             _is_loaded  : function (obj) { return true; }, 
    724  
    725             // Basic operations: create 
    726             create_node : function (obj, position, js, callback, is_loaded) { 
    727                 obj = this._get_node(obj); 
    728                 position = typeof position === "undefined" ? "last" : position; 
    729                 var d = $("<li />"), 
    730                     s = this._get_settings().core, 
    731                     tmp; 
    732  
    733                 if(obj !== -1 && !obj.length) { return false; } 
    734                 if(!is_loaded && !this._is_loaded(obj)) { this.load_node(obj, function () { this.create_node(obj, position, js, callback, true); }); return false; } 
    735  
    736                 this.__rollback(); 
    737  
    738                 if(typeof js === "string") { js = { "data" : js }; } 
    739                 if(!js) { js = {}; } 
    740                 if(js.attr) { d.attr(js.attr); } 
    741                 if(js.metadata) { d.data(js.metadata); } 
    742                 if(js.state) { d.addClass("jstree-" + js.state); } 
    743                 if(!js.data) { js.data = this._get_string("new_node"); } 
    744                 if(!$.isArray(js.data)) { tmp = js.data; js.data = []; js.data.push(tmp); } 
    745                 $.each(js.data, function (i, m) { 
    746                     tmp = $("<a />"); 
    747                     if($.isFunction(m)) { m = m.call(this, js); } 
    748                     if(typeof m == "string") { tmp.attr('href','#')[ s.html_titles ? "html" : "text" ](m); } 
    749                     else { 
    750                         if(!m.attr) { m.attr = {}; } 
    751                         if(!m.attr.href) { m.attr.href = '#'; } 
    752                         tmp.attr(m.attr)[ s.html_titles ? "html" : "text" ](m.title); 
    753                         if(m.language) { tmp.addClass(m.language); } 
    754                     } 
    755                     tmp.prepend("<ins class='jstree-icon'>&#160;</ins>"); 
    756                     if(!m.icon && js.icon) { m.icon = js.icon; } 
    757                     if(m.icon) {  
    758                         if(m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); } 
    759                         else { tmp.children("ins").css("background","url('" + m.icon + "') center center no-repeat"); } 
    760                     } 
    761                     d.append(tmp); 
    762                 }); 
    763                 d.prepend("<ins class='jstree-icon'>&#160;</ins>"); 
    764                 if(obj === -1) { 
    765                     obj = this.get_container(); 
    766                     if(position === "before") { position = "first"; } 
    767                     if(position === "after") { position = "last"; } 
    768                 } 
    769                 switch(position) { 
    770                     case "before": obj.before(d); tmp = this._get_parent(obj); break; 
    771                     case "after" : obj.after(d);  tmp = this._get_parent(obj); break; 
    772                     case "inside": 
    773                     case "first" : 
    774                         if(!obj.children("ul").length) { obj.append("<ul />"); } 
    775                         obj.children("ul").prepend(d); 
    776                         tmp = obj; 
    777                         break; 
    778                     case "last": 
    779                         if(!obj.children("ul").length) { obj.append("<ul />"); } 
    780                         obj.children("ul").append(d); 
    781                         tmp = obj; 
    782                         break; 
    783                     default: 
    784                         if(!obj.children("ul").length) { obj.append("<ul />"); } 
    785                         if(!position) { position = 0; } 
    786                         tmp = obj.children("ul").children("li").eq(position); 
    787                         if(tmp.length) { tmp.before(d); } 
    788                         else { obj.children("ul").append(d); } 
    789                         tmp = obj; 
    790                         break; 
    791                 } 
    792                 if(tmp === -1 || tmp.get(0) === this.get_container().get(0)) { tmp = -1; } 
    793                 this.clean_node(tmp); 
    794                 this.__callback({ "obj" : d, "parent" : tmp }); 
    795                 if(callback) { callback.call(this, d); } 
    796                 return d; 
    797             }, 
    798             // Basic operations: rename (deal with text) 
    799             get_text    : function (obj) { 
    800                 obj = this._get_node(obj); 
    801                 if(!obj.length) { return false; } 
    802                 var s = this._get_settings().core.html_titles; 
    803                 obj = obj.children("a:eq(0)"); 
    804                 if(s) { 
    805                     obj = obj.clone(); 
    806                     obj.children("INS").remove(); 
    807                     return obj.html(); 
    808                 } 
    809                 else { 
    810                     obj = obj.contents().filter(function() { return this.nodeType == 3; })[0]; 
    811                     return obj.nodeValue; 
    812                 } 
    813             }, 
    814             set_text    : function (obj, val) { 
    815                 obj = this._get_node(obj); 
    816                 if(!obj.length) { return false; } 
    817                 obj = obj.children("a:eq(0)"); 
    818                 if(this._get_settings().core.html_titles) { 
    819                     var tmp = obj.children("INS").clone(); 
    820                     obj.html(val).prepend(tmp); 
    821                     this.__callback({ "obj" : obj, "name" : val }); 
    822                     return true; 
    823                 } 
    824                 else { 
    825                     obj = obj.contents().filter(function() { return this.nodeType == 3; })[0]; 
    826                     this.__callback({ "obj" : obj, "name" : val }); 
    827                     return (obj.nodeValue = val); 
    828                 } 
    829             }, 
    830             rename_node : function (obj, val) { 
    831                 obj = this._get_node(obj); 
    832                 this.__rollback(); 
    833                 if(obj && obj.length && this.set_text.apply(this, Array.prototype.slice.call(arguments))) { this.__callback({ "obj" : obj, "name" : val }); } 
    834             }, 
    835             // Basic operations: deleting nodes 
    836             delete_node : function (obj) { 
    837                 obj = this._get_node(obj); 
    838                 if(!obj.length) { return false; } 
    839                 this.__rollback(); 
    840                 var p = this._get_parent(obj), prev = $([]), t = this; 
    841                 obj.each(function () { 
    842                     prev = prev.add(t._get_prev(this)); 
    843                 }); 
    844                 obj = obj.detach(); 
    845                 if(p !== -1 && p.find("> ul > li").length === 0) { 
    846                     p.removeClass("jstree-open jstree-closed").addClass("jstree-leaf"); 
    847                 } 
    848                 this.clean_node(p); 
    849                 this.__callback({ "obj" : obj, "prev" : prev, "parent" : p }); 
    850                 return obj; 
    851             }, 
    852             prepare_move : function (o, r, pos, cb, is_cb) { 
    853                 var p = {}; 
    854  
    855                 p.ot = $.jstree._reference(o) || this; 
    856                 p.o = p.ot._get_node(o); 
    857                 p.r = r === - 1 ? -1 : this._get_node(r); 
    858                 p.p = (typeof pos === "undefined" || pos === false) ? "last" : pos; // TODO: move to a setting 
    859                 if(!is_cb && prepared_move.o && prepared_move.o[0] === p.o[0] && prepared_move.r[0] === p.r[0] && prepared_move.p === p.p) { 
    860                     this.__callback(prepared_move); 
    861                     if(cb) { cb.call(this, prepared_move); } 
    862                     return; 
    863                 } 
    864                 p.ot = $.jstree._reference(p.o) || this; 
    865                 p.rt = $.jstree._reference(p.r) || this; // r === -1 ? p.ot : $.jstree._reference(p.r) || this 
    866                 if(p.r === -1 || !p.r) { 
    867                     p.cr = -1; 
    868                     switch(p.p) { 
    869                         case "first": 
    870                         case "before": 
    871                         case "inside": 
    872                             p.cp = 0;  
    873                             break; 
    874                         case "after": 
    875                         case "last": 
    876                             p.cp = p.rt.get_container().find(" > ul > li").length;  
    877                             break; 
    878                         default: 
    879                             p.cp = p.p; 
    880                             break; 
    881                     } 
    882                 } 
    883                 else { 
    884                     if(!/^(before|after)$/.test(p.p) && !this._is_loaded(p.r)) { 
    885                         return this.load_node(p.r, function () { this.prepare_move(o, r, pos, cb, true); }); 
    886                     } 
    887                     switch(p.p) { 
    888                         case "before": 
    889                             p.cp = p.r.index(); 
    890                             p.cr = p.rt._get_parent(p.r); 
    891                             break; 
    892                         case "after": 
    893                             p.cp = p.r.index() + 1; 
    894                             p.cr = p.rt._get_parent(p.r); 
    895                             break; 
    896                         case "inside": 
    897                         case "first": 
    898                             p.cp = 0; 
    899                             p.cr = p.r; 
    900                             break; 
    901                         case "last": 
    902                             p.cp = p.r.find(" > ul > li").length;  
    903                             p.cr = p.r; 
    904                             break; 
    905                         default:  
    906                             p.cp = p.p; 
    907                             p.cr = p.r; 
    908                             break; 
    909                     } 
    910                 } 
    911                 p.np = p.cr == -1 ? p.rt.get_container() : p.cr; 
    912                 p.op = p.ot._get_parent(p.o); 
    913                 p.cop = p.o.index(); 
    914                 if(p.op === -1) { p.op = p.ot ? p.ot.get_container() : this.get_container(); } 
    915                 if(!/^(before|after)$/.test(p.p) && p.op && p.np && p.op[0] === p.np[0] && p.o.index() < p.cp) { p.cp++; } 
    916                 //if(p.p === "before" && p.op && p.np && p.op[0] === p.np[0] && p.o.index() < p.cp) { p.cp--; } 
    917                 p.or = p.np.find(" > ul > li:nth-child(" + (p.cp + 1) + ")"); 
    918                 prepared_move = p; 
    919                 this.__callback(prepared_move); 
    920                 if(cb) { cb.call(this, prepared_move); } 
    921             }, 
    922             check_move : function () { 
    923                 var obj = prepared_move, ret = true, r = obj.r === -1 ? this.get_container() : obj.r; 
    924                 if(!obj || !obj.o || obj.or[0] === obj.o[0]) { return false; } 
    925                 if(obj.op && obj.np && obj.op[0] === obj.np[0] && obj.cp - 1 === obj.o.index()) { return false; } 
    926                 obj.o.each(function () {  
    927                     if(r.parentsUntil(".jstree", "li").andSelf().index(this) !== -1) { ret = false; return false; } 
    928                 }); 
    929                 return ret; 
    930             }, 
    931             move_node : function (obj, ref, position, is_copy, is_prepared, skip_check) { 
    932                 if(!is_prepared) {  
    933                     return this.prepare_move(obj, ref, position, function (p) { 
    934                         this.move_node(p, false, false, is_copy, true, skip_check); 
    935                     }); 
    936                 } 
    937                 if(is_copy) {  
    938                     prepared_move.cy = true; 
    939                 } 
    940                 if(!skip_check && !this.check_move()) { return false; } 
    941  
    942                 this.__rollback(); 
    943                 var o = false; 
    944                 if(is_copy) { 
    945                     o = obj.o.clone(true); 
    946                     o.find("*[id]").andSelf().each(function () { 
    947                         if(this.id) { this.id = "copy_" + this.id; } 
    948                     }); 
    949                 } 
    950                 else { o = obj.o; } 
    951  
    952                 if(obj.or.length) { obj.or.before(o); } 
    953                 else {  
    954                     if(!obj.np.children("ul").length) { $("<ul />").appendTo(obj.np); } 
    955                     obj.np.children("ul:eq(0)").append(o);  
    956                 } 
    957  
    958                 try {  
    959                     obj.ot.clean_node(obj.op); 
    960                     obj.rt.clean_node(obj.np); 
    961                     if(!obj.op.find("> ul > li").length) { 
    962                         obj.op.removeClass("jstree-open jstree-closed").addClass("jstree-leaf").children("ul").remove(); 
    963                     } 
    964                 } catch (e) { } 
    965  
    966                 if(is_copy) {  
    967                     prepared_move.cy = true; 
    968                     prepared_move.oc = o;  
    969                 } 
    970                 this.__callback(prepared_move); 
    971                 return prepared_move; 
    972             }, 
    973             _get_move : function () { return prepared_move; } 
    974         } 
    975     }); 
    976 })(jQuery); 
    977 //*/ 
    978  
    979 /*  
    980  * jsTree themes plugin 
    981  * Handles loading and setting themes, as well as detecting path to themes, etc. 
    982  */ 
    983 (function ($) { 
    984     var themes_loaded = []; 
    985     // this variable stores the path to the themes folder - if left as false - it will be autodetected 
    986     $.jstree._themes = false; 
    987     $.jstree.plugin("themes", { 
    988         __init : function () {  
    989             this.get_container() 
    990                 .bind("init.jstree", $.proxy(function () { 
    991                         var s = this._get_settings().themes; 
    992                         this.data.themes.dots = s.dots;  
    993                         this.data.themes.icons = s.icons;  
    994                         this.set_theme(s.theme, s.url); 
    995                     }, this)) 
    996                 .bind("loaded.jstree", $.proxy(function () { 
    997                         // bound here too, as simple HTML tree's won't honor dots & icons otherwise 
    998                         if(!this.data.themes.dots) { this.hide_dots(); } 
    999                         else { this.show_dots(); } 
    1000                         if(!this.data.themes.icons) { this.hide_icons(); } 
    1001                         else { this.show_icons(); } 
    1002                     }, this)); 
    1003         }, 
    1004         defaults : {  
    1005             theme : "default",  
    1006             url : false, 
    1007             dots : true, 
    1008             icons : true 
    1009         }, 
    1010         _fn : { 
    1011             set_theme : function (theme_name, theme_url) { 
    1012                 if(!theme_name) { return false; } 
    1013                 if(!theme_url) { theme_url = $.jstree._themes + theme_name + '/style.css'; } 
    1014                 if($.inArray(theme_url, themes_loaded) == -1) { 
    1015                     $.vakata.css.add_sheet({ "url" : theme_url }); 
    1016                     themes_loaded.push(theme_url); 
    1017                 } 
    1018                 if(this.data.themes.theme != theme_name) { 
    1019                     this.get_container().removeClass('jstree-' + this.data.themes.theme); 
    1020                     this.data.themes.theme = theme_name; 
    1021                 } 
    1022                 this.get_container().addClass('jstree-' + theme_name); 
    1023                 if(!this.data.themes.dots) { this.hide_dots(); } 
    1024                 else { this.show_dots(); } 
    1025                 if(!this.data.themes.icons) { this.hide_icons(); } 
    1026                 else { this.show_icons(); } 
    1027                 this.__callback(); 
    1028             }, 
    1029             get_theme   : function () { return this.data.themes.theme; }, 
    1030  
    1031             show_dots   : function () { this.data.themes.dots = true; this.get_container().children("ul").removeClass("jstree-no-dots"); }, 
    1032             hide_dots   : function () { this.data.themes.dots = false; this.get_container().children("ul").addClass("jstree-no-dots"); }, 
    1033             toggle_dots : function () { if(this.data.themes.dots) { this.hide_dots(); } else { this.show_dots(); } }, 
    1034  
    1035             show_icons  : function () { this.data.themes.icons = true; this.get_container().children("ul").removeClass("jstree-no-icons"); }, 
    1036             hide_icons  : function () { this.data.themes.icons = false; this.get_container().children("ul").addClass("jstree-no-icons"); }, 
    1037             toggle_icons: function () { if(this.data.themes.icons) { this.hide_icons(); } else { this.show_icons(); } } 
    1038         } 
    1039     }); 
    1040     // autodetect themes path 
    1041     $(function () { 
    1042         if($.jstree._themes === false) { 
    1043             $("script").each(function () {  
    1044                 if(this.src.toString().match(/jquery\.jstree[^\/]*?\.js(\?.*)?$/)) {  
    1045                     $.jstree._themes = this.src.toString().replace(/jquery\.jstree[^\/]*?\.js(\?.*)?$/, "") + 'themes/';  
    1046                     return false;  
    1047                 } 
    1048             }); 
    1049         } 
    1050         if($.jstree._themes === false) { $.jstree._themes = "themes/"; } 
    1051     }); 
    1052     // include the themes plugin by default 
    1053     $.jstree.defaults.plugins.push("themes"); 
    1054 })(jQuery); 
    1055 //*/ 
    1056  
    1057 /* 
    1058  * jsTree checkbox plugin 
    1059  * Inserts checkboxes in front of every node 
    1060  * Depends on the ui plugin 
    1061  * DOES NOT WORK NICELY WITH MULTITREE DRAG'N'DROP 
    1062  */ 
    1063 (function ($) { 
    1064     $.jstree.plugin("checkbox", { 
    1065         __init : function () { 
    1066             this.data.checkbox.noui = this._get_settings().checkbox.override_ui; 
    1067             if(this.data.ui && this.data.checkbox.noui) { 
    1068                 this.select_node = this.deselect_node = this.deselect_all = $.noop; 
    1069                 this.get_selected = this.get_checked; 
    1070             } 
    1071  
    1072             this.get_container() 
    1073                 .bind("open_node.jstree create_node.jstree clean_node.jstree refresh.jstree", $.proxy(function (e, data) {  
    1074                         this._prepare_checkboxes(data.rslt.obj); 
    1075                     }, this)) 
    1076                 .bind("loaded.jstree", $.proxy(function (e) { 
    1077                         this._prepare_checkboxes(); 
    1078                     }, this)) 
    1079                 .delegate( (this.data.ui && this.data.checkbox.noui ? "a" : "ins.jstree-checkbox") , "click.jstree", $.proxy(function (e) { 
    1080                         e.preventDefault(); 
    1081                         if(this._get_node(e.target).hasClass("jstree-checked")) { this.uncheck_node(e.target); } 
    1082                         else { this.check_node(e.target); } 
    1083                         if(this.data.ui && this.data.checkbox.noui) { 
    1084                             this.save_selected(); 
    1085                             if(this.data.cookies) { this.save_cookie("select_node"); } 
    1086                         } 
    1087                         else { 
    1088                             e.stopImmediatePropagation(); 
    1089                             return false; 
    1090                         } 
    1091                     }, this)); 
    1092         }, 
    1093         defaults : { 
    1094             override_ui : false, 
    1095             two_state : false, 
    1096             real_checkboxes : false, 
    1097             checked_parent_open : true, 
    1098             real_checkboxes_names : function (n) { return [ ("check_" + (n[0].id || Math.ceil(Math.random() * 10000))) , 1]; } 
    1099         }, 
    1100         __destroy : function () { 
    1101             this.get_container() 
    1102                 .find("input.jstree-real-checkbox").removeClass("jstree-real-checkbox").end() 
    1103                 .find("ins.jstree-checkbox").remove(); 
    1104         }, 
    1105         _fn : { 
    1106             _checkbox_notify : function (n, data) { 
    1107                 if(data.checked) { 
    1108                     this.check_node(n, false); 
    1109                 } 
    1110             }, 
    1111             _prepare_checkboxes : function (obj) { 
    1112                 obj = !obj || obj == -1 ? this.get_container().find("> ul > li") : this._get_node(obj); 
    1113                 if(obj === false) { return; } // added for removing root nodes 
    1114                 var c, _this = this, t, ts = this._get_settings().checkbox.two_state, rc = this._get_settings().checkbox.real_checkboxes, rcn = this._get_settings().checkbox.real_checkboxes_names; 
    1115                 obj.each(function () { 
    1116                     t = $(this); 
    1117                     c = t.is("li") && (t.hasClass("jstree-checked") || (rc && t.children(":checked").length)) ? "jstree-checked" : "jstree-unchecked"; 
    1118                     t.find("li").andSelf().each(function () { 
    1119                         var $t = $(this), nm; 
    1120                         $t.children("a" + (_this.data.languages ? "" : ":eq(0)") ).not(":has(.jstree-checkbox)").prepend("<ins class='jstree-checkbox'>&#160;</ins>").parent().not(".jstree-checked, .jstree-unchecked").addClass( ts ? "jstree-unchecked" : c ); 
    1121                         if(rc) { 
    1122                             if(!$t.children(":checkbox").length) { 
    1123                                 nm = rcn.call(_this, $t); 
    1124                                 $t.prepend("<input type='checkbox' class='jstree-real-checkbox' id='" + nm[0] + "' name='" + nm[0] + "' value='" + nm[1] + "' />"); 
    1125                             } 
    1126                             else { 
    1127                                 $t.children(":checkbox").addClass("jstree-real-checkbox"); 
    1128                             } 
    1129                         } 
    1130                         if(!ts) { 
    1131                             if(c === "jstree-checked" || $t.hasClass("jstree-checked") || $t.children(':checked').length) { 
    1132                                 $t.find("li").andSelf().addClass("jstree-checked").children(":checkbox").prop("checked", true); 
    1133                             } 
    1134                         } 
    1135                         else { 
    1136                             if($t.hasClass("jstree-checked") || $t.children(':checked').length) { 
    1137                                 $t.addClass("jstree-checked").children(":checkbox").prop("checked", true); 
    1138                             } 
    1139                         } 
    1140                     }); 
    1141                 }); 
    1142                 if(!ts) { 
    1143                     obj.find(".jstree-checked").parent().parent().each(function () { _this._repair_state(this); });  
    1144                 } 
    1145             }, 
    1146             change_state : function (obj, state) { 
    1147                 obj = this._get_node(obj); 
    1148                 var coll = false, rc = this._get_settings().checkbox.real_checkboxes; 
    1149                 if(!obj || obj === -1) { return false; } 
    1150                 state = (state === false || state === true) ? state : obj.hasClass("jstree-checked"); 
    1151                 if(this._get_settings().checkbox.two_state) { 
    1152                     if(state) {  
    1153                         obj.removeClass("jstree-checked").addClass("jstree-unchecked");  
    1154                         if(rc) { obj.children(":checkbox").prop("checked", false); } 
    1155                     } 
    1156                     else {  
    1157                         obj.removeClass("jstree-unchecked").addClass("jstree-checked");  
    1158                         if(rc) { obj.children(":checkbox").prop("checked", true); } 
    1159                     } 
    1160                 } 
    1161                 else { 
    1162                     if(state) {  
    1163                         coll = obj.find("li").andSelf(); 
    1164                         if(!coll.filter(".jstree-checked, .jstree-undetermined").length) { return false; } 
    1165                         coll.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked");  
    1166                         if(rc) { coll.children(":checkbox").prop("checked", false); } 
    1167                     } 
    1168                     else {  
    1169                         coll = obj.find("li").andSelf(); 
    1170                         if(!coll.filter(".jstree-unchecked, .jstree-undetermined").length) { return false; } 
    1171                         coll.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked");  
    1172                         if(rc) { coll.children(":checkbox").prop("checked", true); } 
    1173                         if(this.data.ui) { this.data.ui.last_selected = obj; } 
    1174                         this.data.checkbox.last_selected = obj; 
    1175                     } 
    1176                     obj.parentsUntil(".jstree", "li").each(function () { 
    1177                         var $this = $(this); 
    1178                         if(state) { 
    1179                             if($this.children("ul").children("li.jstree-checked, li.jstree-undetermined").length) { 
    1180                                 $this.parentsUntil(".jstree", "li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined"); 
    1181                                 if(rc) { $this.parentsUntil(".jstree", "li").andSelf().children(":checkbox").prop("checked", false); } 
    1182                                 return false; 
    1183                             } 
    1184                             else { 
    1185                                 $this.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked"); 
    1186                                 if(rc) { $this.children(":checkbox").prop("checked", false); } 
    1187                             } 
    1188                         } 
    1189                         else { 
    1190                             if($this.children("ul").children("li.jstree-unchecked, li.jstree-undetermined").length) { 
    1191                                 $this.parentsUntil(".jstree", "li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined"); 
    1192                                 if(rc) { $this.parentsUntil(".jstree", "li").andSelf().children(":checkbox").prop("checked", false); } 
    1193                                 return false; 
    1194                             } 
    1195                             else { 
    1196                                 $this.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked"); 
    1197                                 if(rc) { $this.children(":checkbox").prop("checked", true); } 
    1198                             } 
    1199                         } 
    1200                     }); 
    1201                 } 
    1202                 if(this.data.ui && this.data.checkbox.noui) { this.data.ui.selected = this.get_checked(); } 
    1203                 this.__callback(obj); 
    1204                 return true; 
    1205             }, 
    1206             check_node : function (obj) { 
    1207                 if(this.change_state(obj, false)) {  
    1208                     obj = this._get_node(obj); 
    1209                     if(this._get_settings().checkbox.checked_parent_open) { 
    1210                         var t = this; 
    1211                         obj.parents(".jstree-closed").each(function () { t.open_node(this, false, true); }); 
    1212                     } 
    1213                     this.__callback({ "obj" : obj });  
    1214                 } 
    1215             }, 
    1216             uncheck_node : function (obj) { 
    1217                 if(this.change_state(obj, true)) { this.__callback({ "obj" : this._get_node(obj) }); } 
    1218             }, 
    1219             check_all : function () { 
    1220                 var _this = this,  
    1221                     coll = this._get_settings().checkbox.two_state ? this.get_container_ul().find("li") : this.get_container_ul().children("li"); 
    1222                 coll.each(function () { 
    1223                     _this.change_state(this, false); 
    1224                 }); 
    1225                 this.__callback(); 
    1226             }, 
    1227             uncheck_all : function () { 
    1228                 var _this = this, 
    1229                     coll = this._get_settings().checkbox.two_state ? this.get_container_ul().find("li") : this.get_container_ul().children("li"); 
    1230                 coll.each(function () { 
    1231                     _this.change_state(this, true); 
    1232                 }); 
    1233                 this.__callback(); 
    1234             }, 
    1235  
    1236             is_checked : function(obj) { 
    1237                 obj = this._get_node(obj); 
    1238                 return obj.length ? obj.is(".jstree-checked") : false; 
    1239             }, 
    1240             get_checked : function (obj, get_all) { 
    1241                 obj = !obj || obj === -1 ? this.get_container() : this._get_node(obj); 
    1242                 return get_all || this._get_settings().checkbox.two_state ? obj.find(".jstree-checked") : obj.find("> ul > .jstree-checked, .jstree-undetermined > ul > .jstree-checked"); 
    1243             }, 
    1244             get_unchecked : function (obj, get_all) {  
    1245                 obj = !obj || obj === -1 ? this.get_container() : this._get_node(obj); 
    1246                 return get_all || this._get_settings().checkbox.two_state ? obj.find(".jstree-unchecked") : obj.find("> ul > .jstree-unchecked, .jstree-undetermined > ul > .jstree-unchecked"); 
    1247             }, 
    1248  
    1249             show_checkboxes : function () { this.get_container().children("ul").removeClass("jstree-no-checkboxes"); }, 
    1250             hide_checkboxes : function () { this.get_container().children("ul").addClass("jstree-no-checkboxes"); }, 
    1251  
    1252             _repair_state : function (obj) { 
    1253                 obj = this._get_node(obj); 
    1254                 if(!obj.length) { return; } 
    1255                 if(this._get_settings().checkbox.two_state) { 
    1256                     obj.find('li').andSelf().not('.jstree-checked').removeClass('jstree-undetermined').addClass('jstree-unchecked').children(':checkbox').prop('checked', true); 
    1257                     return; 
    1258                 } 
    1259                 var rc = this._get_settings().checkbox.real_checkboxes, 
    1260                     a = obj.find("> ul > .jstree-checked").length, 
    1261                     b = obj.find("> ul > .jstree-undetermined").length, 
    1262                     c = obj.find("> ul > li").length; 
    1263                 if(c === 0) { if(obj.hasClass("jstree-undetermined")) { this.change_state(obj, false); } } 
    1264                 else if(a === 0 && b === 0) { this.change_state(obj, true); } 
    1265                 else if(a === c) { this.change_state(obj, false); } 
    1266                 else {  
    1267                     obj.parentsUntil(".jstree","li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined"); 
    1268                     if(rc) { obj.parentsUntil(".jstree", "li").andSelf().children(":checkbox").prop("checked", false); } 
    1269                 } 
    1270             }, 
    1271             reselect : function () { 
    1272                 if(this.data.ui && this.data.checkbox.noui) {  
    1273                     var _this = this, 
    1274                         s = this.data.ui.to_select; 
    1275                     s = $.map($.makeArray(s), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); }); 
    1276                     this.deselect_all(); 
    1277                     $.each(s, function (i, val) { _this.check_node(val); }); 
    1278                     this.__callback(); 
    1279                 } 
    1280                 else {  
    1281                     this.__call_old();  
    1282                 } 
    1283             }, 
    1284             save_loaded : function () { 
    1285                 var _this = this; 
    1286                 this.data.core.to_load = []; 
    1287                 this.get_container_ul().find("li.jstree-closed.jstree-undetermined").each(function () { 
    1288                     if(this.id) { _this.data.core.to_load.push("#" + this.id); } 
    1289                 }); 
    1290             } 
    1291         } 
    1292     }); 
    1293     $(function() { 
    1294         var css_string = '.jstree .jstree-real-checkbox { display:none; } '; 
    1295         $.vakata.css.add_sheet({ str : css_string, title : "jstree" }); 
    1296     }); 
    1297 })(jQuery); 
    1298 //*/ 
    1299  
    1300 /*  
    1301  * jsTree types plugin 
    1302  * Adds support types of nodes 
    1303  * You can set an attribute on each li node, that represents its type. 
    1304  * According to the type setting the node may get custom icon/validation rules 
    1305  */ 
    1306 (function ($) { 
    1307     $.jstree.plugin("types", { 
    1308         __init : function () { 
    1309             var s = this._get_settings().types; 
    1310             this.data.types.attach_to = []; 
    1311             this.get_container() 
    1312                 .bind("init.jstree", $.proxy(function () {  
    1313                         var types = s.types,  
    1314                             attr  = s.type_attr,  
    1315                             icons_css = "",  
    1316                             _this = this; 
    1317  
    1318                         $.each(types, function (i, tp) { 
    1319                             $.each(tp, function (k, v) {  
    1320                                 if(!/^(max_depth|max_children|icon|valid_children)$/.test(k)) { _this.data.types.attach_to.push(k); } 
    1321                             }); 
    1322                             if(!tp.icon) { return true; } 
    1323                             if( tp.icon.image || tp.icon.position) { 
    1324                                 if(i == "default")  { icons_css += '.jstree-' + _this.get_index() + ' a > .jstree-icon { '; } 
    1325                                 else                { icons_css += '.jstree-' + _this.get_index() + ' li[' + attr + '="' + i + '"] > a > .jstree-icon { '; } 
    1326                                 if(tp.icon.image)   { icons_css += ' background-image:url(' + tp.icon.image + '); '; } 
    1327                                 if(tp.icon.position){ icons_css += ' background-position:' + tp.icon.position + '; '; } 
    1328                                 else                { icons_css += ' background-position:0 0; '; } 
    1329                                 icons_css += '} '; 
    1330                             } 
    1331                         }); 
    1332                         if(icons_css !== "") { $.vakata.css.add_sheet({ 'str' : icons_css, title : "jstree-types" }); } 
    1333                     }, this)) 
    1334                 .bind("before.jstree", $.proxy(function (e, data) {  
    1335                         var s, t,  
    1336                             o = this._get_settings().types.use_data ? this._get_node(data.args[0]) : false,  
    1337                             d = o && o !== -1 && o.length ? o.data("jstree") : false; 
    1338                         if(d && d.types && d.types[data.func] === false) { e.stopImmediatePropagation(); return false; } 
    1339                         if($.inArray(data.func, this.data.types.attach_to) !== -1) { 
    1340                             if(!data.args[0] || (!data.args[0].tagName && !data.args[0].jquery)) { return; } 
    1341                             s = this._get_settings().types.types; 
    1342                             t = this._get_type(data.args[0]); 
    1343                             if( 
    1344                                 (  
    1345                                     (s[t] && typeof s[t][data.func] !== "undefined") ||  
    1346                                     (s["default"] && typeof s["default"][data.func] !== "undefined")  
    1347                                 ) && this._check(data.func, data.args[0]) === false 
    1348                             ) { 
    1349                                 e.stopImmediatePropagation(); 
    1350                                 return false; 
    1351                             } 
    1352                         } 
    1353                     }, this)); 
    1354             if(is_ie6) { 
    1355                 this.get_container() 
    1356                     .bind("load_node.jstree set_type.jstree", $.proxy(function (e, data) { 
    1357                             var r = data && data.rslt && data.rslt.obj && data.rslt.obj !== -1 ? this._get_node(data.rslt.obj).parent() : this.get_container_ul(), 
    1358                                 c = false, 
    1359                                 s = this._get_settings().types; 
    1360                             $.each(s.types, function (i, tp) { 
    1361                                 if(tp.icon && (tp.icon.image || tp.icon.position)) { 
    1362                                     c = i === "default" ? r.find("li > a > .jstree-icon") : r.find("li[" + s.type_attr + "='" + i + "'] > a > .jstree-icon"); 
    1363                                     if(tp.icon.image) { c.css("backgroundImage","url(" + tp.icon.image + ")"); } 
    1364                                     c.css("backgroundPosition", tp.icon.position || "0 0"); 
    1365                                 } 
    1366                             }); 
    1367                         }, this)); 
    1368             } 
    1369         }, 
    1370         defaults : { 
    1371             // defines maximum number of root nodes (-1 means unlimited, -2 means disable max_children checking) 
    1372             max_children        : -1, 
    1373             // defines the maximum depth of the tree (-1 means unlimited, -2 means disable max_depth checking) 
    1374             max_depth           : -1, 
    1375             // defines valid node types for the root nodes 
    1376             valid_children      : "all", 
    1377  
    1378             // whether to use $.data 
    1379             use_data : false,  
    1380             // where is the type stores (the rel attribute of the LI element) 
    1381             type_attr : "rel", 
    1382             // a list of types 
    1383             types : { 
    1384                 // the default type 
    1385                 "default" : { 
    1386                     "max_children"  : -1, 
    1387                     "max_depth"     : -1, 
    1388                     "valid_children": "all" 
    1389  
    1390                     // Bound functions - you can bind any other function here (using boolean or function) 
    1391                     //"select_node" : true 
    1392                 } 
    1393             } 
    1394         }, 
    1395         _fn : { 
    1396             _types_notify : function (n, data) { 
    1397                 if(data.type && this._get_settings().types.use_data) { 
    1398                     this.set_type(data.type, n); 
    1399                 } 
    1400             }, 
    1401             _get_type : function (obj) { 
    1402                 obj = this._get_node(obj); 
    1403                 return (!obj || !obj.length) ? false : obj.attr(this._get_settings().types.type_attr) || "default"; 
    1404             }, 
    1405             set_type : function (str, obj) { 
    1406                 obj = this._get_node(obj); 
    1407                 var ret = (!obj.length || !str) ? false : obj.attr(this._get_settings().types.type_attr, str); 
    1408                 if(ret) { this.__callback({ obj : obj, type : str}); } 
    1409                 return ret; 
    1410             }, 
    1411             _check : function (rule, obj, opts) { 
    1412                 obj = this._get_node(obj); 
    1413                 var v = false, t = this._get_type(obj), d = 0, _this = this, s = this._get_settings().types, data = false; 
    1414                 if(obj === -1) {  
    1415                     if(!!s[rule]) { v = s[rule]; } 
    1416                     else { return; } 
    1417                 } 
    1418                 else { 
    1419                     if(t === false) { return; } 
    1420                     data = s.use_data ? obj.data("jstree") : false; 
    1421                     if(data && data.types && typeof data.types[rule] !== "undefined") { v = data.types[rule]; } 
    1422                     else if(!!s.types[t] && typeof s.types[t][rule] !== "undefined") { v = s.types[t][rule]; } 
    1423                     else if(!!s.types["default"] && typeof s.types["default"][rule] !== "undefined") { v = s.types["default"][rule]; } 
    1424                 } 
    1425                 if($.isFunction(v)) { v = v.call(this, obj); } 
    1426                 if(rule === "max_depth" && obj !== -1 && opts !== false && s.max_depth !== -2 && v !== 0) { 
    1427                     // also include the node itself - otherwise if root node it is not checked 
    1428                     obj.children("a:eq(0)").parentsUntil(".jstree","li").each(function (i) { 
    1429                         // check if current depth already exceeds global tree depth 
    1430                         if(s.max_depth !== -1 && s.max_depth - (i + 1) <= 0) { v = 0; return false; } 
    1431                         d = (i === 0) ? v : _this._check(rule, this, false); 
    1432                         // check if current node max depth is already matched or exceeded 
    1433                         if(d !== -1 && d - (i + 1) <= 0) { v = 0; return false; } 
    1434                         // otherwise - set the max depth to the current value minus current depth 
    1435                         if(d >= 0 && (d - (i + 1) < v || v < 0) ) { v = d - (i + 1); } 
    1436                         // if the global tree depth exists and it minus the nodes calculated so far is less than `v` or `v` is unlimited 
    1437                         if(s.max_depth >= 0 && (s.max_depth - (i + 1) < v || v < 0) ) { v = s.max_depth - (i + 1); } 
    1438                     }); 
    1439                 } 
    1440                 return v; 
    1441             }, 
    1442             check_move : function () { 
    1443                 if(!this.__call_old()) { return false; } 
    1444                 var m  = this._get_move(), 
    1445                     s  = m.rt._get_settings().types, 
    1446                     mc = m.rt._check("max_children", m.cr), 
    1447                     md = m.rt._check("max_depth", m.cr), 
    1448                     vc = m.rt._check("valid_children", m.cr), 
    1449                     ch = 0, d = 1, t; 
    1450  
    1451                 if(vc === "none") { return false; }  
    1452                 if($.isArray(vc) && m.ot && m.ot._get_type) { 
    1453                     m.o.each(function () { 
    1454                         if($.inArray(m.ot._get_type(this), vc) === -1) { d = false; return false; } 
    1455                     }); 
    1456                     if(d === false) { return false; } 
    1457                 } 
    1458                 if(s.max_children !== -2 && mc !== -1) { 
    1459                     ch = m.cr === -1 ? this.get_container().find("> ul > li").not(m.o).length : m.cr.find("> ul > li").not(m.o).length; 
    1460                     if(ch + m.o.length > mc) { return false; } 
    1461                 } 
    1462                 if(s.max_depth !== -2 && md !== -1) { 
    1463                     d = 0; 
    1464                     if(md === 0) { return false; } 
    1465                     if(typeof m.o.d === "undefined") { 
    1466                         // TODO: deal with progressive rendering and async when checking max_depth (how to know the depth of the moved node) 
    1467                         t = m.o; 
    1468                         while(t.length > 0) { 
    1469                             t = t.find("> ul > li"); 
    1470                             d ++; 
    1471                         } 
    1472                         m.o.d = d; 
    1473                     } 
    1474                     if(md - m.o.d < 0) { return false; } 
    1475                 } 
    1476                 return true; 
    1477             }, 
    1478             create_node : function (obj, position, js, callback, is_loaded, skip_check) { 
    1479                 if(!skip_check && (is_loaded || this._is_loaded(obj))) { 
    1480                     var p  = (typeof position == "string" && position.match(/^before|after$/i) && obj !== -1) ? this._get_parent(obj) : this._get_node(obj), 
    1481                         s  = this._get_settings().types, 
    1482                         mc = this._check("max_children", p), 
    1483                         md = this._check("max_depth", p), 
    1484                         vc = this._check("valid_children", p), 
    1485                         ch; 
    1486                     if(typeof js === "string") { js = { data : js }; } 
    1487                     if(!js) { js = {}; } 
    1488                     if(vc === "none") { return false; }  
    1489                     if($.isArray(vc)) { 
    1490                         if(!js.attr || !js.attr[s.type_attr]) {  
    1491                             if(!js.attr) { js.attr = {}; } 
    1492                             js.attr[s.type_attr] = vc[0];  
    1493                         } 
    1494                         else { 
    1495                             if($.inArray(js.attr[s.type_attr], vc) === -1) { return false; } 
    1496                         } 
    1497                     } 
    1498                     if(s.max_children !== -2 && mc !== -1) { 
    1499                         ch = p === -1 ? this.get_container().find("> ul > li").length : p.find("> ul > li").length; 
    1500                         if(ch + 1 > mc) { return false; } 
    1501                     } 
    1502                     if(s.max_depth !== -2 && md !== -1 && (md - 1) < 0) { return false; } 
    1503                 } 
    1504                 return this.__call_old(true, obj, position, js, callback, is_loaded, skip_check); 
    1505             } 
    1506         } 
    1507     }); 
    1508 })(jQuery); 
    1509 //*/ 
    1510  
    1511 /*  
    1512  * jsTree HTML plugin 
    1513  * The HTML data store. Datastores are build by replacing the `load_node` and `_is_loaded` functions. 
    1514  */ 
    1515 (function ($) { 
    1516     $.jstree.plugin("html_data", { 
    1517         __init : function () {  
    1518             // this used to use html() and clean the whitespace, but this way any attached data was lost 
    1519             this.data.html_data.original_container_html = this.get_container().find(" > ul > li").clone(true); 
    1520             // remove white space from LI node - otherwise nodes appear a bit to the right 
    1521             this.data.html_data.original_container_html.find("li").andSelf().contents().filter(function() { return this.nodeType == 3; }).remove(); 
    1522         }, 
    1523         defaults : {  
    1524             data : false, 
    1525             ajax : false, 
    1526             correct_state : true 
    1527         }, 
    1528         _fn : { 
    1529             load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_html(obj, function () { _this.__callback({ "obj" : _this._get_node(obj) }); s_call.call(this); }, e_call); }, 
    1530             _is_loaded : function (obj) {  
    1531                 obj = this._get_node(obj);  
    1532                 return obj == -1 || !obj || (!this._get_settings().html_data.ajax && !$.isFunction(this._get_settings().html_data.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0; 
    1533             }, 
    1534             load_node_html : function (obj, s_call, e_call) { 
    1535                 var d, 
    1536                     s = this.get_settings().html_data, 
    1537                     error_func = function () {}, 
    1538                     success_func = function () {}; 
    1539                 obj = this._get_node(obj); 
    1540                 if(obj && obj !== -1) { 
    1541                     if(obj.data("jstree_is_loading")) { return; } 
    1542                     else { obj.data("jstree_is_loading",true); } 
    1543                 } 
    1544                 switch(!0) { 
    1545                     case ($.isFunction(s.data)): 
    1546                         s.data.call(this, obj, $.proxy(function (d) { 
    1547                             if(d && d !== "" && d.toString && d.toString().replace(/^[\s\n]+$/,"") !== "") { 
    1548                                 d = $(d); 
    1549                                 if(!d.is("ul")) { d = $("<ul />").append(d); } 
    1550                                 if(obj == -1 || !obj) { this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); } 
    1551                                 else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); obj.removeData("jstree_is_loading"); } 
    1552                                 this.clean_node(obj); 
    1553                                 if(s_call) { s_call.call(this); } 
    1554                             } 
    1555                             else { 
    1556                                 if(obj && obj !== -1) { 
    1557                                     obj.children("a.jstree-loading").removeClass("jstree-loading"); 
    1558                                     obj.removeData("jstree_is_loading"); 
    1559                                     if(s.correct_state) {  
    1560                                         this.correct_state(obj); 
    1561                                         if(s_call) { s_call.call(this); }  
    1562                                     } 
    1563                                 } 
    1564                                 else { 
    1565                                     if(s.correct_state) {  
    1566                                         this.get_container().children("ul").empty(); 
    1567                                         if(s_call) { s_call.call(this); }  
    1568                                     } 
    1569                                 } 
    1570                             } 
    1571                         }, this)); 
    1572                         break; 
    1573                     case (!s.data && !s.ajax): 
    1574                         if(!obj || obj == -1) { 
    1575                             this.get_container() 
    1576                                 .children("ul").empty() 
    1577                                 .append(this.data.html_data.original_container_html) 
    1578                                 .find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end() 
    1579                                 .filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); 
    1580                             this.clean_node(); 
    1581                         } 
    1582                         if(s_call) { s_call.call(this); } 
    1583                         break; 
    1584                     case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)): 
    1585                         if(!obj || obj == -1) { 
    1586                             d = $(s.data); 
    1587                             if(!d.is("ul")) { d = $("<ul />").append(d); } 
    1588                             this.get_container() 
    1589                                 .children("ul").empty().append(d.children()) 
    1590                                 .find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end() 
    1591                                 .filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); 
    1592                             this.clean_node(); 
    1593                         } 
    1594                         if(s_call) { s_call.call(this); } 
    1595                         break; 
    1596                     case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1): 
    1597                         obj = this._get_node(obj); 
    1598                         error_func = function (x, t, e) { 
    1599                             var ef = this.get_settings().html_data.ajax.error;  
    1600                             if(ef) { ef.call(this, x, t, e); } 
    1601                             if(obj != -1 && obj.length) { 
    1602                                 obj.children("a.jstree-loading").removeClass("jstree-loading"); 
    1603                                 obj.removeData("jstree_is_loading"); 
    1604                                 if(t === "success" && s.correct_state) { this.correct_state(obj); } 
    1605                             } 
    1606                             else { 
    1607                                 if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); } 
    1608                             } 
    1609                             if(e_call) { e_call.call(this); } 
    1610                         }; 
    1611                         success_func = function (d, t, x) { 
    1612                             var sf = this.get_settings().html_data.ajax.success;  
    1613                             if(sf) { d = sf.call(this,d,t,x) || d; } 
    1614                             if(d === "" || (d && d.toString && d.toString().replace(/^[\s\n]+$/,"") === "")) { 
    1615                                 return error_func.call(this, x, t, ""); 
    1616                             } 
    1617                             if(d) { 
    1618                                 d = $(d); 
    1619                                 if(!d.is("ul")) { d = $("<ul />").append(d); } 
    1620                                 if(obj == -1 || !obj) { this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); } 
    1621                                 else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); obj.removeData("jstree_is_loading"); } 
    1622                                 this.clean_node(obj); 
    1623                                 if(s_call) { s_call.call(this); } 
    1624                             } 
    1625                             else { 
    1626                                 if(obj && obj !== -1) { 
    1627                                     obj.children("a.jstree-loading").removeClass("jstree-loading"); 
    1628                                     obj.removeData("jstree_is_loading"); 
    1629                                     if(s.correct_state) {  
    1630                                         this.correct_state(obj); 
    1631                                         if(s_call) { s_call.call(this); }  
    1632                                     } 
    1633                                 } 
    1634                                 else { 
    1635                                     if(s.correct_state) {  
    1636                                         this.get_container().children("ul").empty(); 
    1637                                         if(s_call) { s_call.call(this); }  
    1638                                     } 
    1639                                 } 
    1640                             } 
    1641                         }; 
    1642                         s.ajax.context = this; 
    1643                         s.ajax.error = error_func; 
    1644                         s.ajax.success = success_func; 
    1645                         if(!s.ajax.dataType) { s.ajax.dataType = "html"; } 
    1646                         if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); } 
    1647                         if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); } 
    1648                         $.ajax(s.ajax); 
    1649                         break; 
    1650                 } 
    1651             } 
    1652         } 
    1653     }); 
    1654     // include the HTML data plugin by default 
    1655     $.jstree.defaults.plugins.push("html_data"); 
    1656 })(jQuery); 
    1657 //*/ 
    1658  
    1659 })(); 
     14"use strict";(function(){if(jQuery&&jQuery.jstree){return}var c=false,b=false,a=false;(function(g){g.vakata={};g.vakata.css={get_css:function(n,k,l){n=n.toLowerCase();var m=l.cssRules||l.rules,i=0;do{if(m.length&&i>m.length+5){return false}if(m[i].selectorText&&m[i].selectorText.toLowerCase()==n){if(k===true){if(l.removeRule){l.removeRule(i)}if(l.deleteRule){l.deleteRule(i)}return true}else{return m[i]}}}while(m[++i]);return false},add_css:function(j,i){if(g.jstree.css.get_css(j,false,i)){return false}if(i.insertRule){i.insertRule(j+" { }",0)}else{i.addRule(j,null,0)}return g.vakata.css.get_css(j)},remove_css:function(j,i){return g.vakata.css.get_css(j,true,i)},add_sheet:function(j){var i=false,l=true;if(j.str){if(j.title){i=g("style[id='"+j.title+"-stylesheet']")[0]}if(i){l=false}else{i=document.createElement("style");i.setAttribute("type","text/css");if(j.title){i.setAttribute("id",j.title+"-stylesheet")}}if(i.styleSheet){if(l){document.getElementsByTagName("head")[0].appendChild(i);i.styleSheet.cssText=j.str}else{i.styleSheet.cssText=i.styleSheet.cssText+" "+j.str}}else{i.appendChild(document.createTextNode(j.str));document.getElementsByTagName("head")[0].appendChild(i)}return i.sheet||i.styleSheet}if(j.url){if(document.createStyleSheet){try{i=document.createStyleSheet(j.url)}catch(k){}}else{i=document.createElement("link");i.rel="stylesheet";i.type="text/css";i.media="all";i.href=j.url;document.getElementsByTagName("head")[0].appendChild(i);return i.styleSheet}}}};var h=[],f=-1,e={},d={};g.fn.jstree=function(l){var i=(typeof l=="string"),j=Array.prototype.slice.call(arguments,1),k=this;if(i){if(l.substring(0,1)=="_"){return k}this.each(function(){var m=h[g.data(this,"jstree_instance_id")],n=(m&&g.isFunction(m[l]))?m[l].apply(m,j):m;if(typeof n!=="undefined"&&(l.indexOf("is_")===0||(n!==true&&n!==false))){k=n;return false}})}else{this.each(function(){var q=g.data(this,"jstree_instance_id"),n=[],m=l?g.extend({},true,l):{},r=g(this),p=false,o=[];n=n.concat(j);if(r.data("jstree")){n.push(r.data("jstree"))}m=n.length?g.extend.apply(null,[true,m].concat(n)):m;if(typeof q!=="undefined"&&h[q]){h[q].destroy()}q=parseInt(h.push({}),10)-1;g.data(this,"jstree_instance_id",q);m.plugins=g.isArray(m.plugins)?m.plugins:g.jstree.defaults.plugins.slice();m.plugins.unshift("core");m.plugins=m.plugins.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",");p=g.extend(true,{},g.jstree.defaults,m);p.plugins=m.plugins;g.each(e,function(s,t){if(g.inArray(s,p.plugins)===-1){p[s]=null;delete p[s]}else{o.push(s)}});p.plugins=o;h[q]=new g.jstree._instance(q,g(this).addClass("jstree jstree-"+q),p);g.each(h[q]._get_settings().plugins,function(s,t){h[q].data[t]={}});g.each(h[q]._get_settings().plugins,function(s,t){if(e[t]){e[t].__init.apply(h[q])}});setTimeout(function(){if(h[q]){h[q].init()}},0)})}return k};g.jstree={defaults:{plugins:[]},_focused:function(){return h[f]||null},_reference:function(i){if(h[i]){return h[i]}var j=g(i);if(!j.length&&typeof i==="string"){j=g("#"+i)}if(!j.length){return null}return h[j.closest(".jstree").data("jstree_instance_id")]||null},_instance:function(j,i,k){this.data={core:{}};this.get_settings=function(){return g.extend(true,{},k)};this._get_settings=function(){return k};this.get_index=function(){return j};this.get_container=function(){return i};this.get_container_ul=function(){return i.children("ul:eq(0)")};this._set_settings=function(l){k=g.extend(true,{},k,l)}},_fn:{},plugin:function(i,j){j=g.extend({},{__init:g.noop,__destroy:g.noop,_fn:{},defaults:false},j);e[i]=j;g.jstree.defaults[i]=j.defaults;g.each(j._fn,function(k,l){l.plugin=i;l.old=g.jstree._fn[k];g.jstree._fn[k]=function(){var m,o=l,n=Array.prototype.slice.call(arguments),q=new g.Event("before.jstree"),p=false;if(this.data.core.locked===true&&k!=="unlock"&&k!=="is_locked"){return}do{if(o&&o.plugin&&g.inArray(o.plugin,this._get_settings().plugins)!==-1){break}o=o.old}while(o);if(!o){return}if(k.indexOf("_")===0){m=o.apply(this,n)}else{m=this.get_container().triggerHandler(q,{func:k,inst:this,args:n,plugin:o.plugin});if(m===false){return}if(typeof m!=="undefined"){n=m}m=o.apply(g.extend({},this,{__callback:function(r){this.get_container().triggerHandler(k+".jstree",{inst:this,args:n,rslt:r,rlbk:p})},__rollback:function(){p=this.get_rollback();return p},__call_old:function(r){return o.old.apply(this,(r?Array.prototype.slice.call(arguments,1):n))}}),n)}return m};g.jstree._fn[k].old=l.old;g.jstree._fn[k].plugin=i})},rollback:function(i){if(i){if(!g.isArray(i)){i=[i]}g.each(i,function(j,k){h[k.i].set_rollback(k.h,k.d)})}}};g.jstree._fn=g.jstree._instance.prototype={};g(function(){var k=navigator.userAgent.toLowerCase(),j=(k.match(/.+?(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],i=".jstree ul, .jstree li { display:block; margin:0 0 0 0; padding:0 0 0 0; list-style-type:none; } .jstree li { display:block; min-height:18px; line-height:18px; white-space:nowrap; margin-left:18px; min-width:18px; } .jstree-rtl li { margin-left:0; margin-right:18px; } .jstree > ul > li { margin-left:0px; } .jstree-rtl > ul > li { margin-right:0px; } .jstree ins { display:inline-block; text-decoration:none; width:18px; height:18px; margin:0 0 0 0; padding:0; } .jstree a { display:inline-block; line-height:16px; height:16px; color:black; white-space:nowrap; text-decoration:none; padding:1px 2px; margin:0; } .jstree a:focus { outline: none; } .jstree a > ins { height:16px; width:16px; } .jstree a > .jstree-icon { margin-right:3px; } .jstree-rtl a > .jstree-icon { margin-left:3px; margin-right:0; } li.jstree-open > ul { display:block; } li.jstree-closed > ul { display:none; } ";if(/msie/.test(k)&&parseInt(j,10)==6){c=true;try{document.execCommand("BackgroundImageCache",false,true)}catch(l){}i+=".jstree li { height:18px; margin-left:0; margin-right:0; } .jstree li li { margin-left:18px; } .jstree-rtl li li { margin-left:0px; margin-right:18px; } li.jstree-open ul { display:block; } li.jstree-closed ul { display:none !important; } .jstree li a { display:inline; border-width:0 !important; padding:0px 2px !important; } .jstree li a ins { height:16px; width:16px; margin-right:3px; } .jstree-rtl li a ins { margin-right:0px; margin-left:3px; } "}if(/msie/.test(k)&&parseInt(j,10)==7){b=true;i+=".jstree li a { border-width:0 !important; padding:0px 2px !important; } "}if(!/compatible/.test(k)&&/mozilla/.test(k)&&parseFloat(j,10)<1.9){a=true;i+=".jstree ins { display:-moz-inline-box; } .jstree li { line-height:12px; } .jstree a { display:-moz-inline-box; } .jstree .jstree-no-icons .jstree-checkbox { display:-moz-inline-stack !important; } "}g.vakata.css.add_sheet({str:i,title:"jstree"})});g.jstree.plugin("core",{__init:function(){this.data.core.locked=false;this.data.core.to_open=this.get_settings().core.initially_open;this.data.core.to_load=this.get_settings().core.initially_load},defaults:{html_titles:false,animation:500,initially_open:[],initially_load:[],open_parents:true,notify_plugins:true,rtl:false,load_open:false,strings:{loading:"Loading ...",new_node:"New node",multiple_selection:"Multiple selection"}},_fn:{init:function(){this.set_focus();if(this._get_settings().core.rtl){this.get_container().addClass("jstree-rtl").css("direction","rtl")}this.get_container().html("<ul><li class='jstree-last jstree-leaf'><ins>&#160;</ins><a class='jstree-loading' href='#'><ins class='jstree-icon'>&#160;</ins>"+this._get_string("loading")+"</a></li></ul>");this.data.core.li_height=this.get_container_ul().find("li.jstree-closed, li.jstree-leaf").eq(0).height()||18;this.get_container().delegate("li > ins","click.jstree",g.proxy(function(j){var i=g(j.target);this.toggle_node(i)},this)).bind("mousedown.jstree",g.proxy(function(){this.set_focus()},this)).bind("dblclick.jstree",function(j){var k;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(window.getSelection){k=window.getSelection();try{k.removeAllRanges();k.collapse()}catch(i){}}}});if(this._get_settings().core.notify_plugins){this.get_container().bind("load_node.jstree",g.proxy(function(k,j){var l=this._get_node(j.rslt.obj),i=this;if(l===-1){l=this.get_container_ul()}if(!l.length){return}l.find("li").each(function(){var m=g(this);if(m.data("jstree")){g.each(m.data("jstree"),function(o,n){if(i.data[o]&&g.isFunction(i["_"+o+"_notify"])){i["_"+o+"_notify"].call(i,m,n)}})}})},this))}if(this._get_settings().core.load_open){this.get_container().bind("load_node.jstree",g.proxy(function(k,j){var l=this._get_node(j.rslt.obj),i=this;if(l===-1){l=this.get_container_ul()}if(!l.length){return}l.find("li.jstree-open:not(:has(ul))").each(function(){i.load_node(this,g.noop,g.noop)})},this))}this.__callback();this.load_node(-1,function(){this.loaded();this.reload_nodes()})},destroy:function(){var j,m=this.get_index(),k=this._get_settings(),l=this;g.each(k.plugins,function(n,p){try{e[p].__destroy.apply(l)}catch(o){}});this.__callback();if(this.is_focused()){for(j in h){if(h.hasOwnProperty(j)&&j!=m){h[j].set_focus();break}}}if(m===f){f=-1}this.get_container().unbind(".jstree").undelegate(".jstree").removeData("jstree_instance_id").find("[class^='jstree']").andSelf().attr("class",function(){return this.className.replace(/jstree[^ ]*|$/ig,"")});g(document).unbind(".jstree-"+m).undelegate(".jstree-"+m);h[m]=null;delete h[m]},_core_notify:function(j,i){if(i.opened){this.open_node(j,false,true)}},lock:function(){this.data.core.locked=true;this.get_container().children("ul").addClass("jstree-locked").css("opacity","0.7");this.__callback({})},unlock:function(){this.data.core.locked=false;this.get_container().children("ul").removeClass("jstree-locked").css("opacity","1");this.__callback({})},is_locked:function(){return this.data.core.locked},save_opened:function(){var i=this;this.data.core.to_open=[];this.get_container_ul().find("li.jstree-open").each(function(){if(this.id){i.data.core.to_open.push("#"+this.id.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"))}});this.__callback(i.data.core.to_open)},save_loaded:function(){},reload_nodes:function(j){var m=this,i=true,l=[],k=[];if(!j){this.data.core.reopen=false;this.data.core.refreshing=true;this.data.core.to_open=g.map(g.makeArray(this.data.core.to_open),function(o){return"#"+o.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:")});this.data.core.to_load=g.map(g.makeArray(this.data.core.to_load),function(o){return"#"+o.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:")});if(this.data.core.to_open.length){this.data.core.to_load=this.data.core.to_load.concat(this.data.core.to_open)}}if(this.data.core.to_load.length){g.each(this.data.core.to_load,function(n,o){if(o=="#"){return true}if(g(o).length){l.push(o)}else{k.push(o)}});if(l.length){this.data.core.to_load=k;g.each(l,function(n,o){if(!m._is_loaded(o)){m.load_node(o,function(){m.reload_nodes(true)},function(){m.reload_nodes(true)});i=false}})}}if(this.data.core.to_open.length){g.each(this.data.core.to_open,function(n,o){m.open_node(o,false,true)})}if(i){if(this.data.core.reopen){clearTimeout(this.data.core.reopen)}this.data.core.reopen=setTimeout(function(){m.__callback({},m)},50);this.data.core.refreshing=false;this.reopen()}},reopen:function(){var i=this;if(this.data.core.to_open.length){g.each(this.data.core.to_open,function(j,k){i.open_node(k,false,true)})}this.__callback({})},refresh:function(i){var j=this;this.save_opened();if(!i){i=-1}i=this._get_node(i);if(!i){i=-1}if(i!==-1){i.children("UL").remove()}else{this.get_container_ul().empty()}this.load_node(i,function(){j.__callback({obj:i});j.reload_nodes()})},loaded:function(){this.__callback()},set_focus:function(){if(this.is_focused()){return}var i=g.jstree._focused();if(i){i.unset_focus()}this.get_container().addClass("jstree-focused");f=this.get_index();this.__callback()},is_focused:function(){return f==this.get_index()},unset_focus:function(){if(this.is_focused()){this.get_container().removeClass("jstree-focused");f=-1}this.__callback()},_get_node:function(i){var j=g(i,this.get_container());if(j.is(".jstree")||i==-1){return -1}j=j.closest("li",this.get_container());return j.length?j:false},_get_next:function(j,i){j=this._get_node(j);if(j===-1){return this.get_container().find("> ul > li:first-child")}if(!j.length){return false}if(i){return(j.nextAll("li").size()>0)?j.nextAll("li:eq(0)"):false}if(j.hasClass("jstree-open")){return j.find("li:eq(0)")}else{if(j.nextAll("li").size()>0){return j.nextAll("li:eq(0)")}else{return j.parentsUntil(".jstree","li").next("li").eq(0)}}},_get_prev:function(j,i){j=this._get_node(j);if(j===-1){return this.get_container().find("> ul > li:last-child")}if(!j.length){return false}if(i){return(j.prevAll("li").length>0)?j.prevAll("li:eq(0)"):false}if(j.prev("li").length){j=j.prev("li").eq(0);while(j.hasClass("jstree-open")){j=j.children("ul:eq(0)").children("li:last")}return j}else{var k=j.parentsUntil(".jstree","li:eq(0)");return k.length?k:false}},_get_parent:function(i){i=this._get_node(i);if(i==-1||!i.length){return false}var j=i.parentsUntil(".jstree","li:eq(0)");return j.length?j:-1},_get_children:function(i){i=this._get_node(i);if(i===-1){return this.get_container().children("ul:eq(0)").children("li")}if(!i.length){return false}return i.children("ul:eq(0)").children("li")},get_path:function(k,i){var j=[],l=this;k=this._get_node(k);if(k===-1||!k||!k.length){return false}k.parentsUntil(".jstree","li").each(function(){j.push(i?this.id:l.get_text(this))});j.reverse();j.push(i?k.attr("id"):this.get_text(k));return j},_get_string:function(i){return this._get_settings().core.strings[i]||i},is_open:function(i){i=this._get_node(i);return i&&i!==-1&&i.hasClass("jstree-open")},is_closed:function(i){i=this._get_node(i);return i&&i!==-1&&i.hasClass("jstree-closed")},is_leaf:function(i){i=this._get_node(i);return i&&i!==-1&&i.hasClass("jstree-leaf")},correct_state:function(i){i=this._get_node(i);if(!i||i===-1){return false}i.removeClass("jstree-closed jstree-open").addClass("jstree-leaf").children("ul").remove();this.__callback({obj:i})},open_node:function(l,m,j){l=this._get_node(l);if(!l.length){return false}if(!l.hasClass("jstree-closed")){if(m){m.call()}return false}var k=j||c?0:this._get_settings().core.animation,i=this;if(!this._is_loaded(l)){l.children("a").addClass("jstree-loading");this.load_node(l,function(){i.open_node(l,m,j)},m)}else{if(this._get_settings().core.open_parents){l.parentsUntil(".jstree",".jstree-closed").each(function(){i.open_node(this,false,true)})}if(k){l.children("ul").css("display","none")}l.removeClass("jstree-closed").addClass("jstree-open").children("a").removeClass("jstree-loading");if(k){l.children("ul").stop(true,true).slideDown(k,function(){this.style.display="";i.after_open(l)})}else{i.after_open(l)}this.__callback({obj:l});if(m){m.call()}}},after_open:function(i){this.__callback({obj:i})},close_node:function(l,j){l=this._get_node(l);var k=j||c?0:this._get_settings().core.animation,i=this;if(!l.length||!l.hasClass("jstree-open")){return false}if(k){l.children("ul").attr("style","display:block !important")}l.removeClass("jstree-open").addClass("jstree-closed");if(k){l.children("ul").stop(true,true).slideUp(k,function(){this.style.display="";i.after_close(l)})}else{i.after_close(l)}this.__callback({obj:l})},after_close:function(i){this.__callback({obj:i})},toggle_node:function(i){i=this._get_node(i);if(i.hasClass("jstree-closed")){return this.open_node(i)}if(i.hasClass("jstree-open")){return this.close_node(i)}},open_all:function(k,j,i){k=k?this._get_node(k):-1;if(!k||k===-1){k=this.get_container_ul()}if(i){k=k.find("li.jstree-closed")}else{i=k;if(k.is(".jstree-closed")){k=k.find("li.jstree-closed").andSelf()}else{k=k.find("li.jstree-closed")}}var l=this;k.each(function(){var m=this;if(!l._is_loaded(this)){l.open_node(this,function(){l.open_all(m,j,i)},!j)}else{l.open_node(this,false,!j)}});if(i.find("li.jstree-closed").length===0){this.__callback({obj:i})}},close_all:function(j,i){var k=this;j=j?this._get_node(j):this.get_container();if(!j||j===-1){j=this.get_container_ul()}j.find("li.jstree-open").andSelf().each(function(){k.close_node(this,!i)});this.__callback({obj:j})},clean_node:function(i){i=i&&i!=-1?g(i):this.get_container_ul();i=i.is("li")?i.find("li").andSelf():i.find("li");i.removeClass("jstree-last").filter("li:last-child").addClass("jstree-last").end().filter(":has(li)").not(".jstree-open").removeClass("jstree-leaf").addClass("jstree-closed");i.not(".jstree-open, .jstree-closed").addClass("jstree-leaf").children("ul").remove();this.__callback({obj:i})},get_rollback:function(){this.__callback();return{i:this.get_index(),h:this.get_container().children("ul").clone(true),d:this.data}},set_rollback:function(i,j){this.get_container().empty().append(i);this.data=j;this.__callback()},load_node:function(k,i,j){this.__callback({obj:k})},_is_loaded:function(i){return true},create_node:function(n,i,m,p,j){n=this._get_node(n);i=typeof i==="undefined"?"last":i;var o=g("<li />"),l=this._get_settings().core,k;if(n!==-1&&!n.length){return false}if(!j&&!this._is_loaded(n)){this.load_node(n,function(){this.create_node(n,i,m,p,true)});return false}this.__rollback();if(typeof m==="string"){m={data:m}}if(!m){m={}}if(m.attr){o.attr(m.attr)}if(m.metadata){o.data(m.metadata)}if(m.state){o.addClass("jstree-"+m.state)}if(!m.data){m.data=this._get_string("new_node")}if(!g.isArray(m.data)){k=m.data;m.data=[];m.data.push(k)}g.each(m.data,function(r,q){k=g("<a />");if(g.isFunction(q)){q=q.call(this,m)}if(typeof q=="string"){k.attr("href","#")[l.html_titles?"html":"text"](q)}else{if(!q.attr){q.attr={}}if(!q.attr.href){q.attr.href="#"}k.attr(q.attr)[l.html_titles?"html":"text"](q.title);if(q.language){k.addClass(q.language)}}k.prepend("<ins class='jstree-icon'>&#160;</ins>");if(!q.icon&&m.icon){q.icon=m.icon}if(q.icon){if(q.icon.indexOf("/")===-1){k.children("ins").addClass(q.icon)}else{k.children("ins").css("background","url('"+q.icon+"') center center no-repeat")}}o.append(k)});o.prepend("<ins class='jstree-icon'>&#160;</ins>");if(n===-1){n=this.get_container();if(i==="before"){i="first"}if(i==="after"){i="last"}}switch(i){case"before":n.before(o);k=this._get_parent(n);break;case"after":n.after(o);k=this._get_parent(n);break;case"inside":case"first":if(!n.children("ul").length){n.append("<ul />")}n.children("ul").prepend(o);k=n;break;case"last":if(!n.children("ul").length){n.append("<ul />")}n.children("ul").append(o);k=n;break;default:if(!n.children("ul").length){n.append("<ul />")}if(!i){i=0}k=n.children("ul").children("li").eq(i);if(k.length){k.before(o)}else{n.children("ul").append(o)}k=n;break}if(k===-1||k.get(0)===this.get_container().get(0)){k=-1}this.clean_node(k);this.__callback({obj:o,parent:k});if(p){p.call(this,o)}return o},get_text:function(j){j=this._get_node(j);if(!j.length){return false}var i=this._get_settings().core.html_titles;j=j.children("a:eq(0)");if(i){j=j.clone();j.children("INS").remove();return j.html()}else{j=j.contents().filter(function(){return this.nodeType==3})[0];return j.nodeValue}},set_text:function(j,k){j=this._get_node(j);if(!j.length){return false}j=j.children("a:eq(0)");if(this._get_settings().core.html_titles){var i=j.children("INS").clone();j.html(k).prepend(i);this.__callback({obj:j,name:k});return true}else{j=j.contents().filter(function(){return this.nodeType==3})[0];this.__callback({obj:j,name:k});return(j.nodeValue=k)}},rename_node:function(i,j){i=this._get_node(i);this.__rollback();if(i&&i.length&&this.set_text.apply(this,Array.prototype.slice.call(arguments))){this.__callback({obj:i,name:j})}},delete_node:function(l){l=this._get_node(l);if(!l.length){return false}this.__rollback();var k=this._get_parent(l),j=g([]),i=this;l.each(function(){j=j.add(i._get_prev(this))});l=l.detach();if(k!==-1&&k.find("> ul > li").length===0){k.removeClass("jstree-open jstree-closed").addClass("jstree-leaf")}this.clean_node(k);this.__callback({obj:l,prev:j,parent:k});return l},prepare_move:function(m,k,n,i,j){var l={};l.ot=g.jstree._reference(m)||this;l.o=l.ot._get_node(m);l.r=k===-1?-1:this._get_node(k);l.p=(typeof n==="undefined"||n===false)?"last":n;if(!j&&d.o&&d.o[0]===l.o[0]&&d.r[0]===l.r[0]&&d.p===l.p){this.__callback(d);if(i){i.call(this,d)}return}l.ot=g.jstree._reference(l.o)||this;l.rt=g.jstree._reference(l.r)||this;if(l.r===-1||!l.r){l.cr=-1;switch(l.p){case"first":case"before":case"inside":l.cp=0;break;case"after":case"last":l.cp=l.rt.get_container().find(" > ul > li").length;break;default:l.cp=l.p;break}}else{if(!/^(before|after)$/.test(l.p)&&!this._is_loaded(l.r)){return this.load_node(l.r,function(){this.prepare_move(m,k,n,i,true)})}switch(l.p){case"before":l.cp=l.r.index();l.cr=l.rt._get_parent(l.r);break;case"after":l.cp=l.r.index()+1;l.cr=l.rt._get_parent(l.r);break;case"inside":case"first":l.cp=0;l.cr=l.r;break;case"last":l.cp=l.r.find(" > ul > li").length;l.cr=l.r;break;default:l.cp=l.p;l.cr=l.r;break}}l.np=l.cr==-1?l.rt.get_container():l.cr;l.op=l.ot._get_parent(l.o);l.cop=l.o.index();if(l.op===-1){l.op=l.ot?l.ot.get_container():this.get_container()}if(!/^(before|after)$/.test(l.p)&&l.op&&l.np&&l.op[0]===l.np[0]&&l.o.index()<l.cp){l.cp++}l.or=l.np.find(" > ul > li:nth-child("+(l.cp+1)+")");d=l;this.__callback(d);if(i){i.call(this,d)}},check_move:function(){var k=d,i=true,j=k.r===-1?this.get_container():k.r;if(!k||!k.o||k.or[0]===k.o[0]){return false}if(k.op&&k.np&&k.op[0]===k.np[0]&&k.cp-1===k.o.index()){return false}k.o.each(function(){if(j.parentsUntil(".jstree","li").andSelf().index(this)!==-1){i=false;return false}});return i},move_node:function(p,l,i,k,j,n){if(!j){return this.prepare_move(p,l,i,function(o){this.move_node(o,false,false,k,true,n)})}if(k){d.cy=true}if(!n&&!this.check_move()){return false}this.__rollback();var q=false;if(k){q=p.o.clone(true);q.find("*[id]").andSelf().each(function(){if(this.id){this.id="copy_"+this.id}})}else{q=p.o}if(p.or.length){p.or.before(q)}else{if(!p.np.children("ul").length){g("<ul />").appendTo(p.np)}p.np.children("ul:eq(0)").append(q)}try{p.ot.clean_node(p.op);p.rt.clean_node(p.np);if(!p.op.find("> ul > li").length){p.op.removeClass("jstree-open jstree-closed").addClass("jstree-leaf").children("ul").remove()}}catch(m){}if(k){d.cy=true;d.oc=q}this.__callback(d);return d},_get_move:function(){return d}}})})(jQuery);(function(d){var e=[];d.jstree._themes=false;d.jstree.plugin("themes",{__init:function(){this.get_container().bind("init.jstree",d.proxy(function(){var f=this._get_settings().themes;this.data.themes.dots=f.dots;this.data.themes.icons=f.icons;this.set_theme(f.theme,f.url)},this)).bind("loaded.jstree",d.proxy(function(){if(!this.data.themes.dots){this.hide_dots()}else{this.show_dots()}if(!this.data.themes.icons){this.hide_icons()}else{this.show_icons()}},this))},defaults:{theme:"default",url:false,dots:true,icons:true},_fn:{set_theme:function(g,f){if(!g){return false}if(!f){f=d.jstree._themes+g+"/style.css"}if(d.inArray(f,e)==-1){d.vakata.css.add_sheet({url:f});e.push(f)}if(this.data.themes.theme!=g){this.get_container().removeClass("jstree-"+this.data.themes.theme);this.data.themes.theme=g}this.get_container().addClass("jstree-"+g);if(!this.data.themes.dots){this.hide_dots()}else{this.show_dots()}if(!this.data.themes.icons){this.hide_icons()}else{this.show_icons()}this.__callback()},get_theme:function(){return this.data.themes.theme},show_dots:function(){this.data.themes.dots=true;this.get_container().children("ul").removeClass("jstree-no-dots")},hide_dots:function(){this.data.themes.dots=false;this.get_container().children("ul").addClass("jstree-no-dots")},toggle_dots:function(){if(this.data.themes.dots){this.hide_dots()}else{this.show_dots()}},show_icons:function(){this.data.themes.icons=true;this.get_container().children("ul").removeClass("jstree-no-icons")},hide_icons:function(){this.data.themes.icons=false;this.get_container().children("ul").addClass("jstree-no-icons")},toggle_icons:function(){if(this.data.themes.icons){this.hide_icons()}else{this.show_icons()}}}});d(function(){if(d.jstree._themes===false){d("script").each(function(){if(this.src.toString().match(/jquery\.jstree[^\/]*?\.js(\?.*)?$/)){d.jstree._themes=this.src.toString().replace(/jquery\.jstree[^\/]*?\.js(\?.*)?$/,"")+"themes/";return false}})}if(d.jstree._themes===false){d.jstree._themes="themes/"}});d.jstree.defaults.plugins.push("themes")})(jQuery);(function(d){d.jstree.plugin("checkbox",{__init:function(){this.data.checkbox.noui=this._get_settings().checkbox.override_ui;if(this.data.ui&&this.data.checkbox.noui){this.select_node=this.deselect_node=this.deselect_all=d.noop;this.get_selected=this.get_checked}this.get_container().bind("open_node.jstree create_node.jstree clean_node.jstree refresh.jstree",d.proxy(function(g,f){this._prepare_checkboxes(f.rslt.obj)},this)).bind("loaded.jstree",d.proxy(function(f){this._prepare_checkboxes()},this)).delegate((this.data.ui&&this.data.checkbox.noui?"a":"ins.jstree-checkbox"),"click.jstree",d.proxy(function(f){f.preventDefault();if(this._get_node(f.target).hasClass("jstree-checked")){this.uncheck_node(f.target)}else{this.check_node(f.target)}if(this.data.ui&&this.data.checkbox.noui){this.save_selected();if(this.data.cookies){this.save_cookie("select_node")}}else{f.stopImmediatePropagation();return false}},this))},defaults:{override_ui:false,two_state:false,real_checkboxes:false,checked_parent_open:true,real_checkboxes_names:function(e){return[("check_"+(e[0].id||Math.ceil(Math.random()*10000))),1]}},__destroy:function(){this.get_container().find("input.jstree-real-checkbox").removeClass("jstree-real-checkbox").end().find("ins.jstree-checkbox").remove()},_fn:{_checkbox_notify:function(f,e){if(e.checked){this.check_node(f,false)}},_prepare_checkboxes:function(i){i=!i||i==-1?this.get_container().find("> ul > li"):this._get_node(i);if(i===false){return}var k,j=this,e,g=this._get_settings().checkbox.two_state,h=this._get_settings().checkbox.real_checkboxes,f=this._get_settings().checkbox.real_checkboxes_names;i.each(function(){e=d(this);k=e.is("li")&&(e.hasClass("jstree-checked")||(h&&e.children(":checked").length))?"jstree-checked":"jstree-unchecked";e.find("li").andSelf().each(function(){var m=d(this),l;m.children("a"+(j.data.languages?"":":eq(0)")).not(":has(.jstree-checkbox)").prepend("<ins class='jstree-checkbox'>&#160;</ins>").parent().not(".jstree-checked, .jstree-unchecked").addClass(g?"jstree-unchecked":k);if(h){if(!m.children(":checkbox").length){l=f.call(j,m);m.prepend("<input type='checkbox' class='jstree-real-checkbox' id='"+l[0]+"' name='"+l[0]+"' value='"+l[1]+"' />")}else{m.children(":checkbox").addClass("jstree-real-checkbox")}}if(!g){if(k==="jstree-checked"||m.hasClass("jstree-checked")||m.children(":checked").length){m.find("li").andSelf().addClass("jstree-checked").children(":checkbox").prop("checked",true)}}else{if(m.hasClass("jstree-checked")||m.children(":checked").length){m.addClass("jstree-checked").children(":checkbox").prop("checked",true)}}})});if(!g){i.find(".jstree-checked").parent().parent().each(function(){j._repair_state(this)})}},change_state:function(h,g){h=this._get_node(h);var e=false,f=this._get_settings().checkbox.real_checkboxes;if(!h||h===-1){return false}g=(g===false||g===true)?g:h.hasClass("jstree-checked");if(this._get_settings().checkbox.two_state){if(g){h.removeClass("jstree-checked").addClass("jstree-unchecked");if(f){h.children(":checkbox").prop("checked",false)}}else{h.removeClass("jstree-unchecked").addClass("jstree-checked");if(f){h.children(":checkbox").prop("checked",true)}}}else{if(g){e=h.find("li").andSelf();if(!e.filter(".jstree-checked, .jstree-undetermined").length){return false}e.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked");if(f){e.children(":checkbox").prop("checked",false)}}else{e=h.find("li").andSelf();if(!e.filter(".jstree-unchecked, .jstree-undetermined").length){return false}e.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked");if(f){e.children(":checkbox").prop("checked",true)}if(this.data.ui){this.data.ui.last_selected=h}this.data.checkbox.last_selected=h}h.parentsUntil(".jstree","li").each(function(){var i=d(this);if(g){if(i.children("ul").children("li.jstree-checked, li.jstree-undetermined").length){i.parentsUntil(".jstree","li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");if(f){i.parentsUntil(".jstree","li").andSelf().children(":checkbox").prop("checked",false)}return false}else{i.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked");if(f){i.children(":checkbox").prop("checked",false)}}}else{if(i.children("ul").children("li.jstree-unchecked, li.jstree-undetermined").length){i.parentsUntil(".jstree","li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");if(f){i.parentsUntil(".jstree","li").andSelf().children(":checkbox").prop("checked",false)}return false}else{i.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked");if(f){i.children(":checkbox").prop("checked",true)}}}})}if(this.data.ui&&this.data.checkbox.noui){this.data.ui.selected=this.get_checked()}this.__callback(h);return true},check_node:function(f){if(this.change_state(f,false)){f=this._get_node(f);if(this._get_settings().checkbox.checked_parent_open){var e=this;f.parents(".jstree-closed").each(function(){e.open_node(this,false,true)})}this.__callback({obj:f})}},uncheck_node:function(e){if(this.change_state(e,true)){this.__callback({obj:this._get_node(e)})}},check_all:function(){var f=this,e=this._get_settings().checkbox.two_state?this.get_container_ul().find("li"):this.get_container_ul().children("li");e.each(function(){f.change_state(this,false)});this.__callback()},uncheck_all:function(){var f=this,e=this._get_settings().checkbox.two_state?this.get_container_ul().find("li"):this.get_container_ul().children("li");e.each(function(){f.change_state(this,true)});this.__callback()},is_checked:function(e){e=this._get_node(e);return e.length?e.is(".jstree-checked"):false},get_checked:function(f,e){f=!f||f===-1?this.get_container():this._get_node(f);return e||this._get_settings().checkbox.two_state?f.find(".jstree-checked"):f.find("> ul > .jstree-checked, .jstree-undetermined > ul > .jstree-checked")},get_unchecked:function(f,e){f=!f||f===-1?this.get_container():this._get_node(f);return e||this._get_settings().checkbox.two_state?f.find(".jstree-unchecked"):f.find("> ul > .jstree-unchecked, .jstree-undetermined > ul > .jstree-unchecked")},show_checkboxes:function(){this.get_container().children("ul").removeClass("jstree-no-checkboxes")},hide_checkboxes:function(){this.get_container().children("ul").addClass("jstree-no-checkboxes")},_repair_state:function(h){h=this._get_node(h);if(!h.length){return}if(this._get_settings().checkbox.two_state){h.find("li").andSelf().not(".jstree-checked").removeClass("jstree-undetermined").addClass("jstree-unchecked").children(":checkbox").prop("checked",true);return}var g=this._get_settings().checkbox.real_checkboxes,f=h.find("> ul > .jstree-checked").length,e=h.find("> ul > .jstree-undetermined").length,i=h.find("> ul > li").length;if(i===0){if(h.hasClass("jstree-undetermined")){this.change_state(h,false)}}else{if(f===0&&e===0){this.change_state(h,true)}else{if(f===i){this.change_state(h,false)}else{h.parentsUntil(".jstree","li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");if(g){h.parentsUntil(".jstree","li").andSelf().children(":checkbox").prop("checked",false)}}}}},reselect:function(){if(this.data.ui&&this.data.checkbox.noui){var f=this,e=this.data.ui.to_select;e=d.map(d.makeArray(e),function(g){return"#"+g.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:")});this.deselect_all();d.each(e,function(g,h){f.check_node(h)});this.__callback()}else{this.__call_old()}},save_loaded:function(){var e=this;this.data.core.to_load=[];this.get_container_ul().find("li.jstree-closed.jstree-undetermined").each(function(){if(this.id){e.data.core.to_load.push("#"+this.id)}})}}});d(function(){var e=".jstree .jstree-real-checkbox { display:none; } ";d.vakata.css.add_sheet({str:e,title:"jstree"})})})(jQuery);(function(d){d.jstree.plugin("types",{__init:function(){var e=this._get_settings().types;this.data.types.attach_to=[];this.get_container().bind("init.jstree",d.proxy(function(){var h=e.types,g=e.type_attr,f="",i=this;d.each(h,function(j,k){d.each(k,function(m,l){if(!/^(max_depth|max_children|icon|valid_children)$/.test(m)){i.data.types.attach_to.push(m)}});if(!k.icon){return true}if(k.icon.image||k.icon.position){if(j=="default"){f+=".jstree-"+i.get_index()+" a > .jstree-icon { "}else{f+=".jstree-"+i.get_index()+" li["+g+'="'+j+'"] > a > .jstree-icon { '}if(k.icon.image){f+=" background-image:url("+k.icon.image+"); "}if(k.icon.position){f+=" background-position:"+k.icon.position+"; "}else{f+=" background-position:0 0; "}f+="} "}});if(f!==""){d.vakata.css.add_sheet({str:f,title:"jstree-types"})}},this)).bind("before.jstree",d.proxy(function(i,h){var g,f,k=this._get_settings().types.use_data?this._get_node(h.args[0]):false,j=k&&k!==-1&&k.length?k.data("jstree"):false;if(j&&j.types&&j.types[h.func]===false){i.stopImmediatePropagation();return false}if(d.inArray(h.func,this.data.types.attach_to)!==-1){if(!h.args[0]||(!h.args[0].tagName&&!h.args[0].jquery)){return}g=this._get_settings().types.types;f=this._get_type(h.args[0]);if(((g[f]&&typeof g[f][h.func]!=="undefined")||(g["default"]&&typeof g["default"][h.func]!=="undefined"))&&this._check(h.func,h.args[0])===false){i.stopImmediatePropagation();return false}}},this));if(c){this.get_container().bind("load_node.jstree set_type.jstree",d.proxy(function(i,h){var g=h&&h.rslt&&h.rslt.obj&&h.rslt.obj!==-1?this._get_node(h.rslt.obj).parent():this.get_container_ul(),j=false,f=this._get_settings().types;d.each(f.types,function(k,l){if(l.icon&&(l.icon.image||l.icon.position)){j=k==="default"?g.find("li > a > .jstree-icon"):g.find("li["+f.type_attr+"='"+k+"'] > a > .jstree-icon");if(l.icon.image){j.css("backgroundImage","url("+l.icon.image+")")}j.css("backgroundPosition",l.icon.position||"0 0")}})},this))}},defaults:{max_children:-1,max_depth:-1,valid_children:"all",use_data:false,type_attr:"rel",types:{"default":{max_children:-1,max_depth:-1,valid_children:"all"}}},_fn:{_types_notify:function(f,e){if(e.type&&this._get_settings().types.use_data){this.set_type(e.type,f)}},_get_type:function(e){e=this._get_node(e);return(!e||!e.length)?false:e.attr(this._get_settings().types.type_attr)||"default"},set_type:function(g,f){f=this._get_node(f);var e=(!f.length||!g)?false:f.attr(this._get_settings().types.type_attr,g);if(e){this.__callback({obj:f,type:g})}return e},_check:function(j,g,e){g=this._get_node(g);var k=false,l=this._get_type(g),i=0,h=this,m=this._get_settings().types,f=false;if(g===-1){if(!!m[j]){k=m[j]}else{return}}else{if(l===false){return}f=m.use_data?g.data("jstree"):false;if(f&&f.types&&typeof f.types[j]!=="undefined"){k=f.types[j]}else{if(!!m.types[l]&&typeof m.types[l][j]!=="undefined"){k=m.types[l][j]}else{if(!!m.types["default"]&&typeof m.types["default"][j]!=="undefined"){k=m.types["default"][j]}}}}if(d.isFunction(k)){k=k.call(this,g)}if(j==="max_depth"&&g!==-1&&e!==false&&m.max_depth!==-2&&k!==0){g.children("a:eq(0)").parentsUntil(".jstree","li").each(function(n){if(m.max_depth!==-1&&m.max_depth-(n+1)<=0){k=0;return false}i=(n===0)?k:h._check(j,this,false);if(i!==-1&&i-(n+1)<=0){k=0;return false}if(i>=0&&(i-(n+1)<k||k<0)){k=i-(n+1)}if(m.max_depth>=0&&(m.max_depth-(n+1)<k||k<0)){k=m.max_depth-(n+1)}})}return k},check_move:function(){if(!this.__call_old()){return false}var e=this._get_move(),i=e.rt._get_settings().types,k=e.rt._check("max_children",e.cr),j=e.rt._check("max_depth",e.cr),g=e.rt._check("valid_children",e.cr),h=0,l=1,f;if(g==="none"){return false}if(d.isArray(g)&&e.ot&&e.ot._get_type){e.o.each(function(){if(d.inArray(e.ot._get_type(this),g)===-1){l=false;return false}});if(l===false){return false}}if(i.max_children!==-2&&k!==-1){h=e.cr===-1?this.get_container().find("> ul > li").not(e.o).length:e.cr.find("> ul > li").not(e.o).length;if(h+e.o.length>k){return false}}if(i.max_depth!==-2&&j!==-1){l=0;if(j===0){return false}if(typeof e.o.d==="undefined"){f=e.o;while(f.length>0){f=f.find("> ul > li");l++}e.o.d=l}if(j-e.o.d<0){return false}}return true},create_node:function(h,i,f,o,k,n){if(!n&&(k||this._is_loaded(h))){var g=(typeof i=="string"&&i.match(/^before|after$/i)&&h!==-1)?this._get_parent(h):this._get_node(h),q=this._get_settings().types,m=this._check("max_children",g),l=this._check("max_depth",g),j=this._check("valid_children",g),e;if(typeof f==="string"){f={data:f}}if(!f){f={}}if(j==="none"){return false}if(d.isArray(j)){if(!f.attr||!f.attr[q.type_attr]){if(!f.attr){f.attr={}}f.attr[q.type_attr]=j[0]}else{if(d.inArray(f.attr[q.type_attr],j)===-1){return false}}}if(q.max_children!==-2&&m!==-1){e=g===-1?this.get_container().find("> ul > li").length:g.find("> ul > li").length;if(e+1>m){return false}}if(q.max_depth!==-2&&l!==-1&&(l-1)<0){return false}}return this.__call_old(true,h,i,f,o,k,n)}}})})(jQuery);(function(d){d.jstree.plugin("html_data",{__init:function(){this.data.html_data.original_container_html=this.get_container().find(" > ul > li").clone(true);this.data.html_data.original_container_html.find("li").andSelf().contents().filter(function(){return this.nodeType==3}).remove()},defaults:{data:false,ajax:false,correct_state:true},_fn:{load_node:function(g,e,f){var h=this;this.load_node_html(g,function(){h.__callback({obj:h._get_node(g)});e.call(this)},f)},_is_loaded:function(e){e=this._get_node(e);return e==-1||!e||(!this._get_settings().html_data.ajax&&!d.isFunction(this._get_settings().html_data.data))||e.is(".jstree-open, .jstree-leaf")||e.children("ul").children("li").size()>0},load_node_html:function(i,e,g){var k,h=this.get_settings().html_data,f=function(){},j=function(){};i=this._get_node(i);if(i&&i!==-1){if(i.data("jstree_is_loading")){return}else{i.data("jstree_is_loading",true)}}switch(!0){case (d.isFunction(h.data)):h.data.call(this,i,d.proxy(function(l){if(l&&l!==""&&l.toString&&l.toString().replace(/^[\s\n]+$/,"")!==""){l=d(l);if(!l.is("ul")){l=d("<ul />").append(l)}if(i==-1||!i){this.get_container().children("ul").empty().append(l.children()).find("li, a").filter(function(){return !this.firstChild||!this.firstChild.tagName||this.firstChild.tagName!=="INS"}).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon")}else{i.children("a.jstree-loading").removeClass("jstree-loading");i.append(l).children("ul").find("li, a").filter(function(){return !this.firstChild||!this.firstChild.tagName||this.firstChild.tagName!=="INS"}).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");i.removeData("jstree_is_loading")}this.clean_node(i);if(e){e.call(this)}}else{if(i&&i!==-1){i.children("a.jstree-loading").removeClass("jstree-loading");i.removeData("jstree_is_loading");if(h.correct_state){this.correct_state(i);if(e){e.call(this)}}}else{if(h.correct_state){this.get_container().children("ul").empty();if(e){e.call(this)}}}}},this));break;case (!h.data&&!h.ajax):if(!i||i==-1){this.get_container().children("ul").empty().append(this.data.html_data.original_container_html).find("li, a").filter(function(){return !this.firstChild||!this.firstChild.tagName||this.firstChild.tagName!=="INS"}).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");this.clean_node()}if(e){e.call(this)}break;case (!!h.data&&!h.ajax)||(!!h.data&&!!h.ajax&&(!i||i===-1)):if(!i||i==-1){k=d(h.data);if(!k.is("ul")){k=d("<ul />").append(k)}this.get_container().children("ul").empty().append(k.children()).find("li, a").filter(function(){return !this.firstChild||!this.firstChild.tagName||this.firstChild.tagName!=="INS"}).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");this.clean_node()}if(e){e.call(this)}break;case (!h.data&&!!h.ajax)||(!!h.data&&!!h.ajax&&i&&i!==-1):i=this._get_node(i);f=function(m,n,o){var l=this.get_settings().html_data.ajax.error;if(l){l.call(this,m,n,o)}if(i!=-1&&i.length){i.children("a.jstree-loading").removeClass("jstree-loading");i.removeData("jstree_is_loading");if(n==="success"&&h.correct_state){this.correct_state(i)}}else{if(n==="success"&&h.correct_state){this.get_container().children("ul").empty()}}if(g){g.call(this)}};j=function(o,m,l){var n=this.get_settings().html_data.ajax.success;if(n){o=n.call(this,o,m,l)||o}if(o===""||(o&&o.toString&&o.toString().replace(/^[\s\n]+$/,"")==="")){return f.call(this,l,m,"")}if(o){o=d(o);if(!o.is("ul")){o=d("<ul />").append(o)}if(i==-1||!i){this.get_container().children("ul").empty().append(o.children()).find("li, a").filter(function(){return !this.firstChild||!this.firstChild.tagName||this.firstChild.tagName!=="INS"}).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon")}else{i.children("a.jstree-loading").removeClass("jstree-loading");i.append(o).children("ul").find("li, a").filter(function(){return !this.firstChild||!this.firstChild.tagName||this.firstChild.tagName!=="INS"}).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");i.removeData("jstree_is_loading")}this.clean_node(i);if(e){e.call(this)}}else{if(i&&i!==-1){i.children("a.jstree-loading").removeClass("jstree-loading");i.removeData("jstree_is_loading");if(h.correct_state){this.correct_state(i);if(e){e.call(this)}}}else{if(h.correct_state){this.get_container().children("ul").empty();if(e){e.call(this)}}}}};h.ajax.context=this;h.ajax.error=f;h.ajax.success=j;if(!h.ajax.dataType){h.ajax.dataType="html"}if(d.isFunction(h.ajax.url)){h.ajax.url=h.ajax.url.call(this,i)}if(d.isFunction(h.ajax.data)){h.ajax.data=h.ajax.data.call(this,i)}d.ajax(h.ajax);break}}}});d.jstree.defaults.plugins.push("html_data")})(jQuery)})(); 
  • wordpress-move/trunk/libs/js/themes/default/style.css

    r426854 r493292  
    4646 
    4747.jstree-default.jstree-focused { 
    48     background: #ffffff; 
     48    background: #f7f7f7; 
    4949} 
    5050 
  • wordpress-move/trunk/readme.txt

    r470144 r493292  
    44Tags: domain, migrate, migration, move 
    55Requires at least: 3.2 
    6 Tested up to: 3.3 
    7 Stable tag: 1.2 
     6Tested up to: 3.3.1 
     7Stable tag: 1.3 
    88 
    99A migration assistant for WordPress capable of changing the domain name in use and/or migrating your installation to another server. 
     
    4848As the warning suggests, you need to make the backup directory writable by the plugin. Permission settings vary from server to server so there is no specific value to set the directory permissions to. The easiest way to fix this problem yourself is using an FTP client to alter permission settings of the backup directory until plugin successfully creates backup files. You may also prefer requesting assistance from your hosting company. 
    4949 
    50 = What will happen to the FTP Password that is already stored in my database? = 
     50= I am a pre-1.2 user, what will happen to the FTP Password that is already stored in my database? = 
    5151 
    5252Visiting the WordPress Move Settings page any time after updating the plugin will remove it from the database permanently. 
    5353 
     54= Can I use the database backup files that WordPress Move generates with phpMyAdmin? 
     55 
     56You can convert a database backup file using the Convert option in the Backup Manager to use it outside the plugin. So, yes, you can use the *converted* database backup files with phpMyAdmin or any other script. 
     57 
    5458== Changelog == 
     59 
     60= 1.3 = 
     61* Explanation for Change Domain Name is rephrased. 
     62* Simple and Advanced Migration methods are merged. 
     63* Meta boxes are added to the migration page. 
     64* A database backup converter is integrated to convert WordPress-Move-only database backup files to generic SQL files. 
     65* Backup files to use for restoration can now be selected right on the Restore page. 
     66* Messages are now displayed in real-time on migration and restoration pages. 
     67* Empty HTML files are added to backup directories to prevent them being listed by people trying to access the directory via their browsers. 
    5568 
    5669= 1.2 = 
     
    7790== Upgrade Notice == 
    7891 
     92= 1.3 = 
     93Simple and Advanced Migration methods are merged and a database backup converter is integrated into the Backup Manager. 
     94 
    7995= 1.2 = 
    80  
    8196FTP Passwords are no longer stored in the database, for security reasons. It is now possible to create either a full backup or a database backup, using Backup Manager. Explanations on the Migration Assistant page are replaced with more clear ones. 
    8297 
  • wordpress-move/trunk/wordpress-move.php

    r460783 r493292  
    44Plugin URI: http://www.mertyazicioglu.com/wordpress-move/ 
    55Description: WordPress Move is a migration assistant for WordPress that can take care of changing your domain name and/or moving your database and files to another server. After activating the plugin, please navigate to WordPress Move page under the Settings menu to configure it. Then, you can start using the Migration Assistant under the Tools menu. 
    6 Version: 1.2 
     6Version: 1.3 
    77Author: Mert Yazicioglu 
    88Author URI: http://www.mertyazicioglu.com 
     
    2929define( 'WPMOVE_DIR', WP_PLUGIN_DIR . '/' . basename( dirname( __FILE__ ) ) ); 
    3030define( 'WPMOVE_BACKUP_DIR', WPMOVE_DIR . '/backup' ); 
     31define( 'WPMOVE_CONVERTED_BACKUP_DIR', WPMOVE_BACKUP_DIR . '/converted' ); 
    3132define( 'WPMOVE_OLD_BACKUP_DIR', WPMOVE_BACKUP_DIR . '/old' ); 
    3233define( 'WPMOVE_URL', WP_PLUGIN_URL . '/' . basename( dirname( __FILE__ ) ) ); 
     
    8687                    $( "#wpmove-ma-domain-desc" ).css( 'min-height', $( "#wpmove-ma-migrate-desc" ).css( 'height' ) ); 
    8788                    $( "#wpmove-ma-restore-desc" ).css( 'min-height', $( "#wpmove-ma-migrate-desc" ).css( 'height' ) ); 
    88                     $( "#wpmove_change_domain_name" ).css( 'display', 'none' ); 
    89                     $( "#wpmove_change_domain_name_br" ).css( 'display', 'none' ); 
    90                     $( "#wpmove_toggle_change_domain_name" ).css( 'display', 'inline' ); 
    91                     $( "#wpmove_toggle_change_domain_name" ).click( function () { 
    92                         if ( $( "#wpmove_change_domain_name" ).css( 'display' ) ==  "none" ) { 
    93                             $( "#wpmove_change_domain_name" ).css( 'display', 'block' ); 
    94                             $( "#wpmove_change_domain_name_br" ).css( 'display', 'block' ); 
    95                         } else { 
    96                             $( "#wpmove_change_domain_name" ).css( 'display', 'none' ); 
    97                             $( "#wpmove_change_domain_name_br" ).css( 'display', 'none' ); 
    98                         } 
    99                     } ); 
    10089                    if ( $( "#wpmove_file_tree" ).length ) { 
    10190                        $( "#wpmove_file_tree_loading" ).css( 'display', 'block' ); 
     
    10695                            $( "#wpmove_file_tree_check_all" ).click( function () { $( "#wpmove_file_tree" ).jstree( "check_all" ); } ); 
    10796                            $( "#wpmove_file_tree_uncheck_all" ).click( function () { $( "#wpmove_file_tree" ).jstree( "uncheck_all" ); } ); 
     97                            $( "#wpmove_file_tree" ).jstree( "check_all" ); 
    10898                        }).jstree( { 
    10999                            "themes" : { "dots" : false }, 
     
    114104                    } 
    115105                    $( '.if-js-closed' ).removeClass( 'if-js-closed' ).addClass( 'closed' ); 
    116                     postboxes.add_postbox_toggles( 'wpmove-domain' ); 
    117                     postboxes.add_postbox_toggles( 'wpmove-migrate' ); 
    118                     postboxes.add_postbox_toggles( 'wpmove-restore' ); 
     106                    postboxes.add_postbox_toggles( 'wpmove-ma-domain' ); 
     107                    postboxes.add_postbox_toggles( 'wpmove-ma-migrate' ); 
     108                    postboxes.add_postbox_toggles( 'wpmove-ma-restore' ); 
    119109                } ); 
    120110            </script> 
     
    142132            add_meta_box( 'wpmove-ma-migrate', __( 'Migrate', 'WPMove' ), array( $this, 'metabox_ma_migrate' ), 'wpmove-migrate' ); 
    143133            add_meta_box( 'wpmove-ma-restore', __( 'Restore', 'WPMove' ), array( $this, 'metabox_ma_restore' ), 'wpmove-restore' ); 
     134            add_meta_box( 'wpmove-ma-migrate-ftp', __( 'FTP Settings', 'WPMove' ), array( $this, 'metabox_ma_migrate_ftp' ), 'wpmove-ma-migrate' ); 
     135            add_meta_box( 'wpmove-ma-migrate-domain', __( 'Change Domain Name (Optional)', 'WPMove' ), array( $this, 'metabox_ma_migrate_domain' ), 'wpmove-ma-migrate' ); 
     136            add_meta_box( 'wpmove-ma-migrate-filetree', __( 'Files to Transfer', 'WPMove' ), array( $this, 'metabox_ma_migrate_filetree' ), 'wpmove-ma-migrate' ); 
    144137        } 
    145138 
     
    452445                    case 'domain':      $this->print_change_domain_name_page(); 
    453446                                        break; 
    454                     case 'migrate':     $this->print_start_migration_page(); 
     447                    case 'migrate':     $this->print_migration_page(); 
    455448                                        break; 
    456449                    case 'complete':    $this->print_complete_migration_page(); 
     
    511504                    </p> 
    512505                    <p> 
    513                         &nbsp;&nbsp;&nbsp;<strong>&bull;</strong> <?php _e( 'Use this installation with a different domain name while staying on this server.', 'WPMove' ); ?><br> 
     506                        &nbsp;&nbsp;&nbsp;<strong>&bull;</strong> <?php _e( 'Just change the domain name this installation uses.', 'WPMove' ); ?><br> 
    514507                    </p> 
    515508                    <p> 
     
    602595                    </p> 
    603596                    <p> 
    604                         &nbsp;&nbsp;&nbsp;<strong>&bull;</strong> <?php _e( 'You can select which files to use in this method by visiting the Backup Manager.', 'WPMove' ); ?><br> 
    605597                        &nbsp;&nbsp;&nbsp;<strong>&bull;</strong> <?php _e( 'Backups will be processed starting from old to new.', 'WPMove' ); ?><br> 
    606598                    </p> 
     
    767759 
    768760        /** 
    769          * Handles the migration starting process. 
     761         * Handles the advanced migration process. 
    770762         * 
    771763         * @param void 
    772764         * @return void 
    773765         */ 
    774         function print_start_migration_page() { 
     766        function print_migration_page() { 
    775767 
    776768            // Load plugin settings 
     
    782774            } 
    783775 
    784             // Call the requested function if there's any 
    785             if ( isset( $_GET['type'] ) ) { 
    786  
    787                 if ( $_GET['type'] == 'simple' ) 
    788                     $this->print_simple_migration_page(); 
    789                 elseif ( $_GET['type'] == 'advanced' ) 
    790                     $this->print_advanced_migration_page(); 
    791  
    792             } else { 
     776            if ( $_POST && check_admin_referer( 'wpmove_advanced_migration_start' ) ) { 
    793777 
    794778                ?> 
     
    799783                    <h2><?php _e( 'Migration Assistant', 'WPMove' ); ?></h2> 
    800784                    <p> 
    801                         <?php _e( 'Please select a migration type to proceed...', 'WPMove' ); ?> 
    802                     </p> 
    803                     <table class="widefat" cellspacing="0"> 
    804                         <tbody> 
    805                             <tr class="alternate"> 
    806                                 <td class="row-title" style="width: 10%;"> 
    807                                     <a href="<?php echo esc_url( admin_url( 'tools.php?page=wpmove&do=migrate&type=simple' ) ); ?>"><?php _e( 'Simple Migration', 'WPMove' ); ?></a> 
    808                                 </td> 
    809                                 <td class="desc"> 
    810                                     <?php _e( 'Simple Migration creates a backup of your database and files excluding the plugin directory. Uploading backup files to the remote server starts once the backup files are created.', 'WPMove' ); ?> 
    811                                 </th> 
    812                             </tr> 
    813                             <tr> 
    814                                 <td class="row-title"> 
    815                                     <a href="<?php echo esc_url( admin_url( 'tools.php?page=wpmove&do=migrate&type=advanced' ) ); ?>"><?php _e( 'Advanced Migration', 'WPMove' ); ?></a> 
    816                                 </td> 
    817                                 <td class="desc"> 
    818                                     <?php _e( 'Advanced Migration creates a backup of the database but lets you select the files to backup. Uploading backup files to the remote server starts once the backup files are created.', 'WPMove' ); ?> 
    819                                 </td> 
    820                             </tr> 
    821                         </tbody> 
    822                     </table> 
    823                 </div> 
    824                 <?php 
    825             } 
    826         } 
    827  
    828         /** 
    829          * Handles the simple migration process. 
    830          * 
    831          * @param void 
    832          * @return void 
    833          */ 
    834         function print_simple_migration_page() { 
    835  
    836             if ( $_POST && check_admin_referer( 'wpmove_simple_migration_start' ) ) { 
    837  
    838             ?> 
    839                 <div class="wrap"> 
    840                     <div id="icon-tools" class="icon32"> 
    841                         <br> 
    842                     </div> 
    843                     <h2><?php _e( 'Simple Migration', 'WPMove' ); ?></h2> 
    844                     <p> 
    845785                    <?php 
    846786 
     
    848788                    $wpmove_options = $this->get_admin_options(); 
    849789 
    850                     // An array to hold backup files that will be uploaded 
     790                    // Create an array to hold backup files that will be uploaded 
    851791                    $backups = array(); 
    852792 
     
    871811                    $backups = array_merge( $backups, $db_backups ); 
    872812 
    873                     // List all of the files inside the main directory 
    874                     $abspath = substr( ABSPATH, 0, strlen( ABSPATH ) - 1 ); 
    875                     $files = wpmove_list_all_files( $abspath, FALSE, array( WPMOVE_DIR, WPMOVE_BACKUP_DIR, WPMOVE_OLD_BACKUP_DIR ) ); 
    876  
    877                     // Create chunks from the selected files 
    878                     $chunks = wpmove_divide_into_chunks( $files, $wpmove_options['fs_chunk_size'] ); 
    879  
    880                     // To prevent overwriting archives created in the same second 
    881                     $chunk_id = 1; 
    882  
    883                     // Create an archive of the each chunk 
    884                     foreach ( $chunks as $chunk ) 
    885                         array_push( $backups, wpmove_create_archive( $chunk, ABSPATH, $chunk_id++ ) ); 
     813                    // Check whether an array is actually posted or not 
     814                    if ( isset( $_POST['files'] ) && is_array( $_POST['files'] ) ) { 
     815 
     816                        // Use the POST data directly, if the fallback method is being used 
     817                        $files = array_map( 'sanitize_text_field', $_POST['files'] ); 
     818 
     819                        // Remove non-empty directories from the array 
     820                        $files = array_filter( $files ); 
     821 
     822                        // Create chunks from the selected files 
     823                        $chunks = wpmove_divide_into_chunks( $files, $wpmove_options['fs_chunk_size'] ); 
     824 
     825                        // To prevent overwriting archives created in the same second 
     826                        $chunk_id = 1; 
     827 
     828                        // Create an archive of the each chunk 
     829                        foreach ( $chunks as $chunk ) 
     830                            array_push( $backups, wpmove_create_archive( $chunk, ABSPATH, $chunk_id++ ) );               
     831                    } 
    886832 
    887833                    // Check whether creating backups files succeeded or not 
     
    890836                    } else { 
    891837 
    892                         // Upload files to the new server and display a success message on success 
     838                        // Upload files and display a success message on success 
    893839                        if ( $this->upload_files( $backups, sanitize_text_field( $_POST['ftp_password'] ) ) ) { 
    894840 
     
    911857                        } 
    912858                    } 
    913      
     859 
    914860            } else { 
    915             ?> 
    916                 <div class="wrap"> 
    917                     <div id="icon-tools" class="icon32"> 
    918                         <br> 
    919                     </div> 
    920                     <h2><?php _e( 'Simple Migration', 'WPMove' ); ?></h2> 
    921                     <p> 
    922                         <?php _e( 'This will backup your database and files as is and upload them to the server you want to migrate to.', 'WPMove' ); ?> 
    923                     </p> 
    924                     <form method="post" action="<?php echo esc_url( admin_url( 'tools.php?page=wpmove&do=migrate&type=simple' ) ); ?>"> 
    925                     <p> 
    926                         <?php _e( 'If your FTP account uses a password, please enter it below.', 'WPMove' ); ?><br> 
    927                         <blockquote> 
    928                         <b><?php _e( 'FTP Password:', 'WPMove' ); ?></b> <input id="ftp_password" name="ftp_password" type="password" /><br> 
    929                         </blockquote> 
    930                     </p> 
    931                         <div id="wpmove_change_domain_name"> 
    932                             <p> 
    933                                 <?php _e( 'Please enter the exact path to your WordPress installation on your new domain name without the trailing slash and then click Start Migration button to start the migration process.', 'WPMove' ); ?><br> 
    934                             </p> 
    935                             <table class="form-table"> 
    936                                 <tbody> 
    937                                     <tr valign="top"> 
    938                                         <th scope="row"> 
    939                                             <label for="old_domain_name"><?php _e( 'Old Domain Name', 'WPMove' ); ?></label> 
    940                                         </th> 
    941                                         <td> 
    942                                             <input class="regular-text code" id="old_domain_name" name="old_domain_name" type="text" value="<?php echo home_url(); ?>" /> 
    943                                         </td> 
    944                                     </tr> 
    945                                     <tr valign="top"> 
    946                                         <th scope="row"> 
    947                                             <label for="new_domain_name"><?php _e( 'New Domain Name', 'WPMove' ); ?></label> 
    948                                         </th> 
    949                                         <td> 
    950                                             <input class="regular-text code" id="new_domain_name" name="new_domain_name" type="text" /> 
    951                                         </td> 
    952                                     </tr> 
    953                                 </tbody> 
    954                             </table> 
    955                             <br> 
    956                         </div> 
    957                         <?php 
    958                             wp_nonce_field( 'wpmove_simple_migration_start' ); 
    959                             submit_button( __( 'Start Migration', 'WPMove' ), 'primary', 'submit', FALSE ); 
    960                         ?> 
    961                             <input type="button" name="wpmove_toggle_change_domain_name" id="wpmove_toggle_change_domain_name" class="button-secondary" value="<?php _e( 'Change Domain Name', 'WPMove' ); ?>" style="display:none;" /> 
    962                     </form> 
    963                 </div> 
    964             <?php 
    965             } 
    966         } 
    967  
    968         /** 
    969          * Handles the advanced migration process. 
    970          * 
    971          * @param void 
    972          * @return void 
    973          */ 
    974         function print_advanced_migration_page() { 
    975  
    976             if ( $_POST && check_admin_referer( 'wpmove_advanced_migration_start' ) ) { 
    977861 
    978862                ?> 
     
    981865                        <br> 
    982866                    </div> 
    983                     <h2><?php _e( 'Advanced Migration', 'WPMove' ); ?></h2> 
    984                     <p> 
    985                     <?php 
    986  
    987                     // Load plugin settings 
    988                     $wpmove_options = $this->get_admin_options(); 
    989  
    990                     // Create an array to hold backup files that will be uploaded 
    991                     $backups = array(); 
    992  
    993                     // If changing the current domain name is also requested... 
    994                     if ( ! empty( $_POST['old_domain_name'] ) && ! empty( $_POST['new_domain_name'] ) ) { 
    995  
    996                         // Apply filters to the given domain names 
    997                         $old_domain_name = esc_url_raw( $_POST['old_domain_name'] ); 
    998                         $new_domain_name = esc_url_raw( $_POST['new_domain_name'] ); 
    999  
    1000                         // Create a backup of the database by changing instances of the old domain name with the newer one 
    1001                         $db_backups = wpmove_create_db_backup( $wpmove_options['db_chunk_size'], 1, $old_domain_name, $new_domain_name ); 
    1002  
    1003                     } else { 
    1004  
    1005                         // Create a backup of the database 
    1006                         $db_backups = wpmove_create_db_backup( $wpmove_options['db_chunk_size'] ); 
    1007                      
    1008                     } 
    1009  
    1010                     // Add names of database backup files to the array of backup files 
    1011                     $backups = array_merge( $backups, $db_backups ); 
    1012  
    1013                     // Check whether an array is actually posted or not 
    1014                     if ( isset( $_POST['files'] ) && is_array( $_POST['files'] ) ) { 
    1015  
    1016                         // Use the POST data directly, if the fallback method is being used 
    1017                         $files = array_map( 'sanitize_text_field', $_POST['files'] ); 
    1018  
    1019                         // Remove non-empty directories from the array 
    1020                         $files = array_filter( $files ); 
    1021  
    1022                         // Create chunks from the selected files 
    1023                         $chunks = wpmove_divide_into_chunks( $files, $wpmove_options['fs_chunk_size'] ); 
    1024  
    1025                         // To prevent overwriting archives created in the same second 
    1026                         $chunk_id = 1; 
    1027  
    1028                         // Create an archive of the each chunk 
    1029                         foreach ( $chunks as $chunk ) 
    1030                             array_push( $backups, wpmove_create_archive( $chunk, ABSPATH, $chunk_id++ ) );               
    1031                     } 
    1032  
    1033                     // Check whether creating backups files succeeded or not 
    1034                     if ( ! file_exists( trailingslashit( WPMOVE_BACKUP_DIR ) . $backups['0'] ) ) { 
    1035                         _e( 'Could not create backup files. Please make sure the backup directory is writable. For further info, please refer to the documentation.', 'WPMove' ); 
    1036                     } else { 
    1037  
    1038                         // Upload files and display a success message on success 
    1039                         if ( $this->upload_files( $backups, sanitize_text_field( $_POST['ftp_password'] ) ) ) { 
    1040  
    1041                         ?> 
    1042                         <br> 
    1043                         <?php _e( 'Creating and uploading backups have been completed. You can now go to your new installation and run the migration assistant in Complete Migration mode.', 'WPMove' ); ?> 
    1044                     </p> 
    1045                 </div> 
    1046                         <?php 
    1047  
    1048                         } else { 
    1049  
    1050                         ?> 
    1051                         <br> 
    1052                         <?php _e( 'Please check your FTP connection details on the settings page.', 'WPMove' ); ?> 
    1053                     </p> 
    1054                 </div> 
    1055                         <?php 
    1056  
    1057                         } 
    1058                     } 
    1059  
    1060             } else { 
    1061  
    1062                 ?> 
    1063                 <div class="wrap"> 
    1064                     <div id="icon-tools" class="icon32"> 
    1065                         <br> 
    1066                     </div> 
    1067                     <h2><?php _e( 'Advanced Migration', 'WPMove' ); ?></h2> 
     867                    <h2><?php _e( 'Migration Assistant', 'WPMove' ); ?></h2> 
    1068868                    <p> 
    1069869                        <?php _e( 'Please select the files you want to include in the backup from the list below.', 'WPMove' ); ?> 
    1070870                    </p> 
    1071                     <form method="post" action="<?php echo esc_url( admin_url( 'tools.php?page=wpmove&do=migrate&type=advanced' ) ); ?>"> 
    1072                         <p> 
    1073                             <?php _e( 'If your FTP account uses a password, please enter it below.', 'WPMove' ); ?><br> 
    1074                             <blockquote> 
    1075                             <b><?php _e( 'FTP Password:', 'WPMove' ); ?></b> <input id="ftp_password" name="ftp_password" type="password" /><br> 
    1076                             </blockquote> 
    1077                         </p> 
    1078                         <div id="wpmove_change_domain_name"> 
    1079                             <p> 
    1080                                 <?php _e( 'Please enter the exact path to your WordPress installation on your new domain name without the trailing slash and then click Start Migration button to start the migration process.', 'WPMove' ); ?><br> 
    1081                             </p> 
    1082                             <table class="form-table"> 
    1083                                 <tbody> 
    1084                                     <tr valign="top"> 
    1085                                         <th scope="row"> 
    1086                                             <label for="old_domain_name"><?php _e( 'Old Domain Name', 'WPMove' ); ?></label> 
    1087                                         </th> 
    1088                                         <td> 
    1089                                             <input class="regular-text code" id="old_domain_name" name="old_domain_name" type="text" value="<?php echo home_url(); ?>" /> 
    1090                                         </td> 
    1091                                     </tr> 
    1092                                     <tr valign="top"> 
    1093                                         <th scope="row"> 
    1094                                             <label for="new_domain_name"><?php _e( 'New Domain Name', 'WPMove' ); ?></label> 
    1095                                         </th> 
    1096                                         <td> 
    1097                                             <input class="regular-text code" id="new_domain_name" name="new_domain_name" type="text" /> 
    1098                                         </td> 
    1099                                     </tr> 
    1100                                 </tbody> 
    1101                             </table> 
    1102                             <br> 
    1103                         </div> 
    1104                         <?php wp_nonce_field( 'wpmove_advanced_migration_start' ); ?> 
    1105                         <div id="wpmove_file_tree_buttons" style="display: none;"> 
    1106                             <input type="button" name="wpmove_file_tree_check_all" id="wpmove_file_tree_check_all" class="button-secondary" value="<?php _e( 'Select All', 'WPMove' ); ?>" /> 
    1107                             <input type="button" name="wpmove_file_tree_uncheck_all" id="wpmove_file_tree_uncheck_all" class="button-secondary" value="<?php _e( 'Unselect All', 'WPMove' ); ?>" /> 
    1108                             <input type="button" name="wpmove_toggle_change_domain_name" id="wpmove_toggle_change_domain_name" class="button-secondary" value="<?php _e( 'Change Domain Name', 'WPMove' ); ?>" style="display:none;" /> 
    1109                         </div> 
    1110                         <blockquote> 
     871                    <div id="poststuff" class="metabox-holder"> 
     872                        <form method="post" action="<?php echo esc_url( admin_url( 'tools.php?page=wpmove&do=migrate&type=advanced' ) ); ?>"> 
    1111873                            <?php 
    1112  
    1113                                 // To use as a file ID 
    1114                                 $i = 0; 
    1115  
    1116                                 // List all of the files inside the main directory 
    1117                                 $abspath = substr( ABSPATH, 0, strlen( ABSPATH ) - 1 ); 
    1118                                 $files = wpmove_generate_file_tree( $abspath, FALSE, array( WPMOVE_DIR, WPMOVE_BACKUP_DIR, WPMOVE_OLD_BACKUP_DIR ) ); 
    1119  
     874                                wp_nonce_field( 'wpmove_advanced_migration_start' ); 
     875                                wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); 
     876                                wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); 
     877                                do_meta_boxes( 'wpmove-ma-migrate', 'advanced', null ); 
     878                                submit_button( __( 'Start Migration', 'WPMove' ), 'primary', 'submit', FALSE ); 
    1120879                            ?> 
    1121                             <div id="wpmove_file_tree" style="display:none;"> 
    1122                                 <ul> 
    1123                                     <?php wpmove_display_file_tree( $files ); ?> 
    1124                                 </ul> 
    1125                             </div> 
    1126                             <div id="wpmove_file_tree_loading" style="display:none;"> 
    1127                                 <?php echo '<img src="' . WPMOVE_URL . '/libs/js/themes/default/throbber.gif" alt="' . __( 'Loading...', 'WPMove' ) . '" style="vertical-align:middle;" /> <strong>' . __( 'Loading...', 'WPMove' ) . '</strong>'; ?> 
    1128                             </div> 
    1129                             <noscript> 
    1130                                 <?php 
    1131  
    1132                                     // Prepare the file list 
    1133                                     $files = wpmove_list_all_files( $abspath, FALSE, array( WPMOVE_DIR, WPMOVE_BACKUP_DIR, WPMOVE_OLD_BACKUP_DIR ) ); 
    1134  
    1135                                     // Display each file with a checked checkbox 
    1136                                     foreach ( $files as $file ) { 
    1137                                         if ( is_file( $file ) ) { 
    1138                                             $short_path = str_replace( ABSPATH, '', $file ); 
    1139                                             echo '<input id="file-' . $i . '" name="files[]" type="checkbox" value="' . $file . '" checked> <label for="file-' . $i++ . '"><span class="code">' . $short_path . '</span></label><br>'; 
    1140                                         } 
    1141                                     } 
    1142  
    1143                                 ?> 
    1144                             </noscript> 
    1145                         </blockquote> 
    1146                         <?php submit_button( __( 'Start Migration', 'WPMove' ), 'primary', 'submit', FALSE ); ?> 
    1147                     </form> 
     880                        </form> 
     881                    </div> 
    1148882                    <br> 
    1149883                </div> 
     
    1153887 
    1154888        /** 
     889         * Callback function for the Migration FTP Settings meta box. 
     890         * 
     891         * @param $wpmove_options Plugin settings array 
     892         * @return void 
     893         */ 
     894        function metabox_ma_migrate_ftp() { 
     895 
     896            ?> 
     897            <p> 
     898                <?php _e( 'If your FTP account uses a password, please enter it below.', 'WPMove' ); ?><br> 
     899                <blockquote> 
     900                    <b><?php _e( 'FTP Password:', 'WPMove' ); ?></b> <input id="ftp_password" name="ftp_password" type="password" /><br> 
     901                </blockquote> 
     902            </p> 
     903            <?php 
     904 
     905        } 
     906 
     907        /** 
     908         * Callback function for the Migration Change Domain Name meta box. 
     909         * 
     910         * @param $wpmove_options Plugin settings array 
     911         * @return void 
     912         */ 
     913        function metabox_ma_migrate_domain() { 
     914 
     915            ?> 
     916            <p> 
     917                <?php _e( 'Please enter the exact path to your WordPress installation on your new domain name without the trailing slash and then click Start Migration button to start the migration process.', 'WPMove' ); ?><br> 
     918            </p> 
     919            <table class="form-table"> 
     920                <tbody> 
     921                    <tr valign="top"> 
     922                        <th scope="row"> 
     923                            <label for="old_domain_name"><?php _e( 'Old Domain Name', 'WPMove' ); ?></label> 
     924                        </th> 
     925                        <td> 
     926                            <input class="regular-text code" id="old_domain_name" name="old_domain_name" type="text" value="<?php echo home_url(); ?>" /> 
     927                        </td> 
     928                    </tr> 
     929                    <tr valign="top"> 
     930                        <th scope="row"> 
     931                            <label for="new_domain_name"><?php _e( 'New Domain Name', 'WPMove' ); ?></label> 
     932                        </th> 
     933                        <td> 
     934                            <input class="regular-text code" id="new_domain_name" name="new_domain_name" type="text" /> 
     935                        </td> 
     936                    </tr> 
     937                </tbody> 
     938            </table> 
     939            <?php 
     940 
     941        } 
     942 
     943        /** 
     944         * Callback function for the Migration Files to Transfer meta box. 
     945         * 
     946         * @param $wpmove_options Plugin settings array 
     947         * @return void 
     948         */ 
     949        function metabox_ma_migrate_filetree() { 
     950 
     951            ?> 
     952            <p id="wpmove_file_tree_buttons" style="display: none;"> 
     953                <input type="button" name="wpmove_file_tree_check_all" id="wpmove_file_tree_check_all" class="button-secondary" value="<?php _e( 'Select All', 'WPMove' ); ?>" /> 
     954                <input type="button" name="wpmove_file_tree_uncheck_all" id="wpmove_file_tree_uncheck_all" class="button-secondary" value="<?php _e( 'Unselect All', 'WPMove' ); ?>" /> 
     955                <input type="button" name="wpmove_toggle_change_domain_name" id="wpmove_toggle_change_domain_name" class="button-secondary" value="<?php _e( 'Change Domain Name', 'WPMove' ); ?>" style="display:none;" /> 
     956            </p> 
     957            <blockquote> 
     958                <?php 
     959 
     960                // To use as a file ID 
     961                $i = 0; 
     962 
     963                // List all of the files inside the main directory 
     964                $abspath = substr( ABSPATH, 0, strlen( ABSPATH ) - 1 ); 
     965                $files = wpmove_generate_file_tree( $abspath, FALSE, array( WPMOVE_DIR, WPMOVE_BACKUP_DIR, WPMOVE_OLD_BACKUP_DIR ) ); 
     966 
     967                ?> 
     968                <div id="wpmove_file_tree" style="display:none;"> 
     969                    <ul> 
     970                        <?php wpmove_display_file_tree( $files ); ?> 
     971                    </ul> 
     972                </div> 
     973                <div id="wpmove_file_tree_loading" style="display:none;"> 
     974                    <?php echo '<img src="' . WPMOVE_URL . '/libs/js/themes/default/throbber.gif" alt="' . __( 'Loading...', 'WPMove' ) . '" style="vertical-align:middle;" /> <strong>' . __( 'Loading...', 'WPMove' ) . '</strong>'; ?> 
     975                </div> 
     976                <noscript> 
     977                    <?php 
     978 
     979                        // Prepare the file list 
     980                        $files = wpmove_list_all_files( $abspath, FALSE, array( WPMOVE_DIR, WPMOVE_BACKUP_DIR, WPMOVE_OLD_BACKUP_DIR ) ); 
     981 
     982                        // Display each file with a checked checkbox 
     983                        foreach ( $files as $file ) { 
     984                            if ( is_file( $file ) ) { 
     985                                $short_path = str_replace( ABSPATH, '', $file ); 
     986                                echo '<input id="file-' . $i . '" name="files[]" type="checkbox" value="' . $file . '" checked> <label for="file-' . $i++ . '"><span class="code">' . $short_path . '</span></label><br>'; 
     987                            } 
     988                        } 
     989 
     990                    ?> 
     991                </noscript> 
     992            </blockquote> 
     993            <?php 
     994 
     995        } 
     996 
     997        /** 
    1155998         * Handles uploading processes of the migration 
    1156999         * 
     
    11741017 
    11751018                printf( __( 'Connecting to %s:%d...', 'WPMove' ), $wpmove_options['ftp_hostname'], $wpmove_options['ftp_port'] ); 
     1019                $this->flush_output(); 
    11761020 
    11771021                // Set the hostname and the port 
     
    11821026 
    11831027                    echo ' <strong>' . __( 'Success!', 'WPMove' ) . '</strong><br>'; 
     1028                    $this->flush_output(); 
    11841029 
    11851030                    // Display a different message if no password is given 
     
    11891034                        printf( __( 'Logging in as %s without a password...', 'WPMove' ), $wpmove_options['ftp_username'] ); 
    11901035 
     1036                    $this->flush_output(); 
     1037 
    11911038                    // Login to the server using the supplied credentials 
    11921039                    if ( $ftp->login( $wpmove_options['ftp_username'], $ftp_password ) ) { 
    11931040 
    11941041                        echo ' <strong>' . __( 'Success!', 'WPMove' ) . '</strong><br>' . __( 'Starting uploading files...', 'WPMove' ) . '<br>'; 
     1042 
     1043                        $this->flush_output(); 
    11951044 
    11961045                        // Changes the present working directory to the backup directory on the remote server 
     
    12031052                        foreach ( $files as $file ) { 
    12041053                            printf( __( '%s is being uploaded...', 'WPMove' ), basename( $file ) ); 
     1054                            $this->flush_output(); 
    12051055                            if ( FALSE !== ( $ftp->put( trailingslashit( WPMOVE_BACKUP_DIR ) . $file, basename( $file ) ) ) ) { 
    12061056                                echo '<strong>' . __( ' Success!', 'WPMove' ) . '</strong><br>'; 
     
    12091059                                $error_count++; 
    12101060                            } 
     1061                            $this->flush_output(); 
    12111062                        } 
    12121063 
     
    12161067                        else 
    12171068                            _e( 'Uploading files is completed without an error...', 'WPMove' ); 
     1069 
     1070                        $this->flush_output(); 
    12181071 
    12191072                        echo '<br>'; 
     
    12571110                    <br> 
    12581111                    <?php 
    1259  
    1260                         // Create a list of all the files inside the backup directory 
    1261                         $files = wpmove_list_all_files( WPMOVE_BACKUP_DIR, TRUE ); 
    1262  
    1263                         // Categorize the files listed 
    1264                         $backups = $this->categorize_files( $files ); 
    1265  
    1266                         // Set the error counter to zero 
    1267                         $errors_occured = 0; 
    1268  
    1269                         // Import every single database backup one by one 
    1270                         foreach ( $backups['db'] as $file ) { 
    1271  
    1272                             echo '<span class="code">'; 
    1273                             printf( __( '%s is being imported... ', 'WPMove' ), basename( $file ) ); 
    1274                              
    1275                             if ( wpmove_import_db_backup( basename( $file ) ) ) { 
    1276                                 echo '<b>' . __( 'Success!', 'WPMove' ) . '</b></span><br>'; 
    1277                             } else { 
    1278                                 $errors_occured++; 
    1279                                 echo '<b>' . __( 'Failed!', 'WPMove' ) . '</b></span><br>'; 
     1112                        // If there's an actual array sent 
     1113                        if ( isset( $_POST['files'] ) && is_array( $_POST['files'] ) ) { 
     1114 
     1115                            // Sanitize the POST data 
     1116                            $files = array_map( 'sanitize_text_field', $_POST['files'] ); 
     1117 
     1118                            // Categorize the files listed 
     1119                            $backups = $this->categorize_files( $files ); 
     1120 
     1121                            // Set the error counter to zero 
     1122                            $errors_occured = 0; 
     1123 
     1124                            // Import every single database backup one by one 
     1125                            foreach ( $backups['db'] as $file ) { 
     1126 
     1127                                echo '<span class="code">'; 
     1128                                printf( __( '%s is being imported... ', 'WPMove' ), basename( $file ) ); 
     1129 
     1130                                $this->flush_output(); 
     1131                                 
     1132                                if ( wpmove_import_db_backup( basename( $file ) ) ) { 
     1133                                    echo '<b>' . __( 'Success!', 'WPMove' ) . '</b></span><br>'; 
     1134                                } else { 
     1135                                    $errors_occured++; 
     1136                                    echo '<b>' . __( 'Failed!', 'WPMove' ) . '</b></span><br>'; 
     1137                                } 
    12801138                            } 
     1139 
     1140                            // Extract every single file system backup one by one 
     1141                            foreach ( $backups['fs'] as $file ) { 
     1142 
     1143                                echo '<span class="code">'; 
     1144                                printf( __( '%s is being extracted... ', 'WPMove' ), basename( $file ) ); 
     1145 
     1146                                $this->flush_output(); 
     1147 
     1148                                if ( wpmove_extract_archive( basename( $file ), ABSPATH ) ) { 
     1149                                    echo '<b>' . __( 'Success!', 'WPMove' ) . '</b></span><br>'; 
     1150                                } else { 
     1151                                    $errors_occured++; 
     1152                                    echo '<b>' . __( 'Failed!', 'WPMove' ) . '</b></span><br>'; 
     1153                                } 
     1154                            } 
     1155 
    12811156                        } 
    12821157 
    1283                         // Extract every single file system backup one by one 
    1284                         foreach ( $backups['fs'] as $file ) { 
    1285  
    1286                             echo '<span class="code">'; 
    1287                             printf( __( '%s is being extracted... ', 'WPMove' ), basename( $file ) ); 
    1288  
    1289                             if ( wpmove_extract_archive( basename( $file ), ABSPATH ) ) { 
    1290                                 echo '<b>' . __( 'Success!', 'WPMove' ) . '</b></span><br>'; 
    1291                             } else { 
    1292                                 $errors_occured++; 
    1293                                 echo '<b>' . __( 'Failed!', 'WPMove' ) . '</b></span><br>'; 
    1294                             } 
     1158                        // If there were errors, notify the user 
     1159                        if ( ! isset( $errors_occured ) ) 
     1160                            _e( 'Please select files to migrate before proceeding!', 'WPMove' ); 
     1161                        else { 
     1162                            echo '<br />'; 
     1163                            if ( $errors_occured > 0 ) 
     1164                                printf( _n( 'Migration has been completed but with %d error.', 'Migration has been completed but with %d errors.', $errors_occured, 'WPMove' ), $errors_occured ); 
     1165                            else 
     1166                                _e( 'Migration has been completed successfully!', 'WPMove' ); 
    12951167                        } 
    1296  
    1297                         echo '<br>'; 
    1298  
    1299                         // If there were errors, notify the user 
    1300                         if ( $errors_occured > 0 ) 
    1301                             printf( _n( 'Migration has been completed but with %d error.', 'Migration has been completed but with %d errors.', $errors_occured, 'WPMove' ), $errors_occured ); 
    1302                         else 
    1303                             _e( 'Migration has been completed successfully!', 'WPMove' ); 
    13041168 
    13051169                    ?> 
     
    13261190 
    13271191                        ?> 
    1328                         <?php _e( 'Proceeding will use the following files and database backups. You can choose which files to use by going to the Backup Manager.', 'WPMove' ); ?> 
     1192                        <?php _e( 'Below are the files stored under the main backup directory. Please select backup files below to proceed.', 'WPMove' ); ?> 
    13291193                        <br><br> 
    1330                         <table class="wp-list-table widefat fixed" cellspacing="0"> 
    1331                             <thead> 
    1332                                 <tr> 
    1333                                     <th scope="col" id="cb" class="manage-column column-cb check-column" style> 
    1334                                         <input type="checkbox" checked disabled> 
    1335                                     </th> 
    1336                                     <th scope="col" id="name" class="manage-column column-name" style> 
    1337                                         <a href="#"><?php _e( 'Name', 'WPMove' ); ?></a> 
    1338                                     </th> 
    1339                                     <th scope="col" id="type" class="manage-column column-type" style> 
    1340                                         <a href="#"><?php _e( 'Type', 'WPMove' ); ?></a> 
    1341                                     </th> 
    1342                                     <th scope="col" id="size" class="manage-column column-size" style> 
    1343                                         <a href="#"><?php _e( 'Size', 'WPMove' ); ?></a> 
    1344                                     </th> 
    1345                                     <th scope="col" id="date" class="manage-column column-date" style> 
    1346                                         <a href="#"><?php _e( 'Date Created', 'WPMove' ); ?></a> 
    1347                                     </th> 
    1348                                 </tr> 
    1349                             </thead> 
    1350                             <tfoot> 
    1351                                 <tr> 
    1352                                     <th scope="col" id="cb" class="manage-column column-cb check-column" style> 
    1353                                         <input type="checkbox" checked disabled> 
    1354                                     </th> 
    1355                                     <th scope="col" id="name" class="manage-column column-name" style> 
    1356                                         <a href="#"><?php _e( 'Name', 'WPMove' ); ?></a> 
    1357                                     </th> 
    1358                                     <th scope="col" id="type" class="manage-column column-type" style> 
    1359                                         <a href="#"><?php _e( 'Type', 'WPMove' ); ?></a> 
    1360                                     </th> 
    1361                                     <th scope="col" id="size" class="manage-column column-size" style> 
    1362                                         <a href="#"><?php _e( 'Size', 'WPMove' ); ?></a> 
    1363                                     </th> 
    1364                                     <th scope="col" id="date" class="manage-column column-date" style> 
    1365                                         <a href="#"><?php _e( 'Date Created', 'WPMove' ); ?></a> 
    1366                                     </th> 
    1367                                 </tr> 
    1368                             </tfoot> 
    1369                             <tbody id="the-list"> 
    1370                                 <?php 
    1371  
    1372                                     // For zebra striping 
    1373                                     $i = 0; 
    1374  
    1375                                     foreach ( $files as $file ) { 
    1376  
    1377                                         // Get the file extension 
    1378                                         $ext = substr( $file, -3, 3 ); 
    1379  
    1380                                         // Decide the type of the backup 
    1381                                         if ( 'sql' == $ext ) { 
    1382                                             preg_match( '/DBBackup-([0-9]*).sql/', basename( $file ), $timestamp ); 
    1383                                             $type = __( 'Database Backup', 'WPMove' ); 
    1384                                         } else if ( 'zip' == $ext ) { 
    1385                                             preg_match( '/Backup-([0-9]*).zip/', basename( $file ), $timestamp ); 
    1386                                             $type = __( 'Filesystem Backup', 'WPMove' ); 
     1194                        <form method="post" action="<?php echo esc_url( admin_url( 'tools.php?page=wpmove&do=complete' ) ); ?>"> 
     1195                            <table class="wp-list-table widefat fixed" cellspacing="0"> 
     1196                                <thead> 
     1197                                    <tr> 
     1198                                        <th scope="col" id="cb" class="manage-column column-cb check-column" style> 
     1199                                            <input type="checkbox" checked> 
     1200                                        </th> 
     1201                                        <th scope="col" id="name" class="manage-column column-name" style> 
     1202                                            <a href="#"><?php _e( 'Name', 'WPMove' ); ?></a> 
     1203                                        </th> 
     1204                                        <th scope="col" id="type" class="manage-column column-type" style> 
     1205                                            <a href="#"><?php _e( 'Type', 'WPMove' ); ?></a> 
     1206                                        </th> 
     1207                                        <th scope="col" id="size" class="manage-column column-size" style> 
     1208                                            <a href="#"><?php _e( 'Size', 'WPMove' ); ?></a> 
     1209                                        </th> 
     1210                                        <th scope="col" id="date" class="manage-column column-date" style> 
     1211                                            <a href="#"><?php _e( 'Date Created', 'WPMove' ); ?></a> 
     1212                                        </th> 
     1213                                    </tr> 
     1214                                </thead> 
     1215                                <tfoot> 
     1216                                    <tr> 
     1217                                        <th scope="col" id="cb" class="manage-column column-cb check-column" style> 
     1218                                            <input type="checkbox" checked> 
     1219                                        </th> 
     1220                                        <th scope="col" id="name" class="manage-column column-name" style> 
     1221                                            <a href="#"><?php _e( 'Name', 'WPMove' ); ?></a> 
     1222                                        </th> 
     1223                                        <th scope="col" id="type" class="manage-column column-type" style> 
     1224                                            <a href="#"><?php _e( 'Type', 'WPMove' ); ?></a> 
     1225                                        </th> 
     1226                                        <th scope="col" id="size" class="manage-column column-size" style> 
     1227                                            <a href="#"><?php _e( 'Size', 'WPMove' ); ?></a> 
     1228                                        </th> 
     1229                                        <th scope="col" id="date" class="manage-column column-date" style> 
     1230                                            <a href="#"><?php _e( 'Date Created', 'WPMove' ); ?></a> 
     1231                                        </th> 
     1232                                    </tr> 
     1233                                </tfoot> 
     1234                                <tbody id="the-list"> 
     1235                                    <?php 
     1236 
     1237                                        // For zebra striping 
     1238                                        $i = 0; 
     1239 
     1240                                        foreach ( $files as $file ) { 
     1241 
     1242                                            // Get the file extension 
     1243                                            $ext = substr( $file, -3, 3 ); 
     1244 
     1245                                            // Decide the type of the backup 
     1246                                            if ( 'sql' == $ext ) { 
     1247                                                preg_match( '/DBBackup-([0-9]*).sql/', basename( $file ), $timestamp ); 
     1248                                                $type = __( 'Database Backup', 'WPMove' ); 
     1249                                            } else if ( 'zip' == $ext ) { 
     1250                                                preg_match( '/Backup-([0-9]*).zip/', basename( $file ), $timestamp ); 
     1251                                                $type = __( 'Filesystem Backup', 'WPMove' ); 
     1252                                            } 
     1253 
     1254                                            // For zebra striping 
     1255                                            if ( $i % 2 !== 0 ) 
     1256                                                $class = ' class="alternate"'; 
     1257                                            else 
     1258                                                $class = ''; 
     1259 
     1260                                            // Display the row 
     1261                                            echo '  <tr id="file-' . $i . '" valign="middle"' . $class . '> 
     1262                                                        <th scope="row" class="check-column"> 
     1263                                                            <input id="file-' . $i . '" name="files[]" type="checkbox" value="' . $file . '" checked> 
     1264                                                        </th> 
     1265                                                        <td class="column-name"> 
     1266                                                            <strong> 
     1267                                                                <a href="#">' . esc_html( basename( $file ) ) . '</a> 
     1268                                                            </strong> 
     1269                                                        </td> 
     1270                                                        <td class="column-type"> 
     1271                                                            <a href="#">' . esc_html( $type ) . '</a> 
     1272                                                        </td> 
     1273                                                        <td class="column-size"> 
     1274                                                            ' . esc_html( round( filesize( $file ) / 1024, 2 ) ) . ' KB 
     1275                                                        </td> 
     1276                                                        <td class="column-date"> 
     1277                                                            ' . esc_html( date( 'd.m.Y H:i:s', substr( $timestamp['1'], 0, 10 )  ) ) . ' 
     1278                                                        </td> 
     1279                                                    </tr>'; 
     1280 
     1281                                            // Increase the counter for zebra striping 
     1282                                            $i++; 
    13871283                                        } 
    13881284 
    1389                                         // For zebra striping 
    1390                                         if ( $i % 2 !== 0 ) 
    1391                                             $class = ' class="alternate"'; 
    1392                                         else 
    1393                                             $class = ''; 
    1394  
    1395                                         // Display the row 
    1396                                         echo '  <tr id="file-' . $i . '" valign="middle"' . $class . '> 
    1397                                                     <th scope="row" class="check-column"> 
    1398                                                         <input id="file-' . $i . '" name="files[]" type="checkbox" value="' . $file . '" checked disabled> 
    1399                                                     </th> 
    1400                                                     <td class="column-name"> 
    1401                                                         <strong> 
    1402                                                             <a href="#">' . esc_html( basename( $file ) ) . '</a> 
    1403                                                         </strong> 
    1404                                                     </td> 
    1405                                                     <td class="column-type"> 
    1406                                                         <a href="#">' . esc_html( $type ) . '</a> 
    1407                                                     </td> 
    1408                                                     <td class="column-size"> 
    1409                                                         ' . esc_html( round( filesize( $file ) / 1024, 2 ) ) . ' KB 
    1410                                                     </td> 
    1411                                                     <td class="column-date"> 
    1412                                                         ' . esc_html( date( 'd.m.Y H:i:s', substr( $timestamp['1'], 0, 10 )  ) ) . ' 
    1413                                                     </td> 
    1414                                                 </tr>'; 
    1415  
    1416                                         // Increase the counter for zebra striping 
    1417                                         $i++; 
    1418                                     } 
    1419  
    1420                                 ?> 
    1421                             </tbody> 
    1422                         </table> 
    1423                         <br> 
    1424                         <form method="post" action="<?php echo esc_url( admin_url( 'tools.php?page=wpmove&do=complete' ) ); ?>"> 
     1285                                    ?> 
     1286                                </tbody> 
     1287                            </table> 
     1288                            <br> 
    14251289                            <?php wp_nonce_field( 'wpmove_complete_migration_start' ); ?> 
    14261290                            <input class="button-primary" type="submit" name="wpmove_complete_migration" value="<?php _e( 'Complete Migration', 'WPMove' ); ?>" /> 
     
    14681332                        foreach ( $files as $file ) 
    14691333                            rename( $file, trailingslashit( $move_target ) . basename( $file ) ); 
     1334                    else if ( 'convert' == $action ) 
     1335                        foreach ( $files as $file ) 
     1336                            wpmove_convert_db_backup( $file ); 
    14701337                } 
    14711338 
     
    15351402                    $old_backups = $this->categorize_files( $old_files ); 
    15361403 
     1404                    // List all converted database backup files 
     1405                    $converted_files = wpmove_list_all_files( WPMOVE_CONVERTED_BACKUP_DIR ); 
     1406                    $converted_backups = $this->categorize_files( $converted_files ); 
     1407 
    15371408                ?> 
    15381409                <form method="post" action="<?php echo esc_url( admin_url( 'tools.php?page=wpmove-backup-manager' ) ); ?>"> 
     
    15431414                            <select name="action" size="1" height="1"> 
    15441415                                <option value="toggle"><?php _e( 'Archive', 'WPMove' ); ?></option> 
     1416                                <option value="convert"><?php _e( 'Convert', 'WPMove' ); ?></option> 
    15451417                                <option value="delete"><?php _e( 'Delete', 'WPMove' ); ?></option> 
    15461418                            </select> 
     
    16691541                            <select name="action" size="1" height="1"> 
    16701542                                <option value="toggle"><?php _e( 'Unarchive', 'WPMove' ); ?></option> 
     1543                                <option value="convert"><?php _e( 'Convert', 'WPMove' ); ?></option> 
    16711544                                <option value="delete"><?php _e( 'Delete', 'WPMove' ); ?></option> 
    16721545                            </select> 
     
    17831656                    </table> 
    17841657                </form> 
     1658                <br> 
     1659                <h3><?php _e( 'Converted Database Backups', 'WPMove' ); ?></h3> 
     1660                <p> 
     1661                    <?php _e( 'Below are the converted database backup files which, unlike the files listed above, can be used outside WordPress Move. You may need the converted versions of your databsae backups if the plugin fails to migrate your installation properly. These files will not be used by the plugin at any stage.', 'WPMove' ); ?> 
     1662                </p> 
     1663                <form method="post" action="<?php echo esc_url( admin_url( 'tools.php?page=wpmove-backup-manager' ) ); ?>"> 
     1664                    <?php wp_nonce_field( 'wpmove_backup_manager_submit' ); ?> 
     1665                    <input name="act" type="hidden" value="manage" /> 
     1666                    <div class="tablenav top"> 
     1667                        <div class="alignleft actions"> 
     1668                            <select name="action" size="1" height="1"> 
     1669                                <option value="delete"><?php _e( 'Delete', 'WPMove' ); ?></option> 
     1670                            </select> 
     1671                            <?php submit_button( __( 'Apply', 'WPMove' ), 'secondary', 'wpmove_converted_backups', FALSE ); ?> 
     1672                        </div> 
     1673                    </div> 
     1674                    <table class="wp-list-table widefat fixed" cellspacing="0"> 
     1675                        <thead> 
     1676                            <tr> 
     1677                                <th scope="col" id="cb" class="manage-column column-cb check-column" style> 
     1678                                    <input type="checkbox"> 
     1679                                </th> 
     1680                                <th scope="col" id="name" class="manage-column column-name" style> 
     1681                                    <a href="#"><?php _e( 'Name', 'WPMove' ); ?></a> 
     1682                                </th> 
     1683                                <th scope="col" id="type" class="manage-column column-type" style> 
     1684                                    <a href="#"><?php _e( 'Type', 'WPMove' ); ?></a> 
     1685                                </th> 
     1686                                <th scope="col" id="size" class="manage-column column-size" style> 
     1687                                    <a href="#"><?php _e( 'Size', 'WPMove' ); ?></a> 
     1688                                </th> 
     1689                                <th scope="col" id="date" class="manage-column column-date" style> 
     1690                                    <a href="#"><?php _e( 'Date Created', 'WPMove' ); ?></a> 
     1691                                </th> 
     1692                            </tr> 
     1693                        </thead> 
     1694                        <tfoot> 
     1695                            <tr> 
     1696                                <th scope="col" id="cb" class="manage-column column-cb check-column" style> 
     1697                                    <input type="checkbox"> 
     1698                                </th> 
     1699                                <th scope="col" id="name" class="manage-column column-name" style> 
     1700                                    <a href="#"><?php _e( 'Name', 'WPMove' ); ?></a> 
     1701                                </th> 
     1702                                <th scope="col" id="type" class="manage-column column-type" style> 
     1703                                    <a href="#"><?php _e( 'Type', 'WPMove' ); ?></a> 
     1704                                </th> 
     1705                                <th scope="col" id="size" class="manage-column column-size" style> 
     1706                                    <a href="#"><?php _e( 'Size', 'WPMove' ); ?></a> 
     1707                                </th> 
     1708                                <th scope="col" id="date" class="manage-column column-date" style> 
     1709                                    <a href="#"><?php _e( 'Date Created', 'WPMove' ); ?></a> 
     1710                                </th> 
     1711                            </tr> 
     1712                        </tfoot> 
     1713                        <tbody id="the-list"> 
     1714                            <?php 
     1715 
     1716                                // Display a message if no backup files found 
     1717                                if ( count( $converted_backups, COUNT_RECURSIVE ) > 2 ) { 
     1718 
     1719                                    // For zebra striping 
     1720                                    $i = 0; 
     1721 
     1722                                    // Display all current backups starting with database backups 
     1723                                    foreach ( $converted_backups as $backups ) { 
     1724 
     1725                                        foreach ( $backups as $file ) { 
     1726 
     1727                                            // Get the file extension 
     1728                                            $ext = substr( $file, -3, 3 ); 
     1729 
     1730                                            // Decide the type of the backup 
     1731                                            $type = __( 'Database Backup', 'WPMove' ); 
     1732 
     1733                                            // For zebra striping 
     1734                                            if ( $i % 2 !== 0 ) 
     1735                                                $class = ' class="alternate"'; 
     1736                                            else 
     1737                                                $class = ''; 
     1738 
     1739                                            // Display the row 
     1740                                            echo '  <tr id="file-' . $i . '" valign="middle"' . $class . '> 
     1741                                                        <th scope="row" class="check-column"> 
     1742                                                            <input id="file-' . $i . '" name="files[]" type="checkbox" value="' . $file . '"> 
     1743                                                        </th> 
     1744                                                        <td class="column-name"> 
     1745                                                            <strong> 
     1746                                                                <a href="#">' . esc_html( basename( $file ) ) . '</a> 
     1747                                                            </strong> 
     1748                                                        </td> 
     1749                                                        <td class="column-type"> 
     1750                                                            <a href="#">' . esc_html( $type ) . '</a> 
     1751                                                        </td> 
     1752                                                        <td class="column-size"> 
     1753                                                            ' . esc_html( round( filesize( $file ) / 1024, 2 ) ) . ' KB 
     1754                                                        </td> 
     1755                                                        <td class="column-date"> 
     1756                                                            ' . esc_html( date( 'd.m.Y H:i:s', substr( $timestamp['1'], 0, 10 )  ) ) . ' 
     1757                                                        </td> 
     1758                                                    </tr>'; 
     1759 
     1760                                            // Increase the counter for zebra striping 
     1761                                            $i++; 
     1762                                        } 
     1763                                    } 
     1764 
     1765                                } else { 
     1766 
     1767                                    echo '<tr class="no-items"> 
     1768                                            <td class="colspanchange" colspan="5"> 
     1769                                                ' . __( 'No converted database backup files found. You can convert a database backup file using the Convert option from the dropdown lists above.', 'WPMove' ) . ' 
     1770                                            </td> 
     1771                                          </tr>'; 
     1772                                } 
     1773                            ?> 
     1774                        </tbody> 
     1775                    </table> 
     1776                </form> 
    17851777            </div> 
    17861778            <?php 
     
    18121804 
    18131805        /** 
     1806         * Flushes the output buffer. 
     1807         * 
     1808         * @param void 
     1809         * @return void 
     1810         */ 
     1811        function flush_output() { 
     1812            wp_ob_end_flush_all(); 
     1813            flush(); 
     1814        } 
     1815 
     1816        /** 
    18141817         * Adds a menu to the ACP 
    18151818         * 
Note: See TracChangeset for help on using the changeset viewer.